Chromium Code Reviews| Index: tests_lit/llvm2ice_tests/mips-legalization.ll |
| diff --git a/tests_lit/llvm2ice_tests/mips-legalization.ll b/tests_lit/llvm2ice_tests/mips-legalization.ll |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..ba8f4e3583ea0ce902d64dba19af5ca327cd7d0e |
| --- /dev/null |
| +++ b/tests_lit/llvm2ice_tests/mips-legalization.ll |
| @@ -0,0 +1,76 @@ |
| +; This file checks support for legalization in MIPS. |
| + |
| +; RUN: %if --need=target_MIPS32 --need=allow_dump \ |
|
Jim Stichnoth
2016/10/13 17:15:29
Better to remove both instances of --need=allow_du
jaydeep.patil
2016/10/14 04:40:43
Done.
|
| +; RUN: --command %p2i --filetype=asm --assemble --disassemble \ |
| +; RUN: --target mips32 -i %s --args -O2 --skip-unimplemented \ |
|
Jim Stichnoth
2016/10/13 17:15:30
If possible, remove --skip-unimplemented and -allo
jaydeep.patil
2016/10/14 04:40:43
Done.
We are also planning to remove --skip-unimpl
|
| +; RUN: -allow-externally-defined-symbols \ |
| +; RUN: | %if --need=target_MIPS32 --need=allow_dump \ |
| +; RUN: --command FileCheck --check-prefix MIPS32 %s |
| + |
| +define internal i32 @legalization(i32 %a, i32 %b, i32 %c, i32 %d, |
| + i32 %e, i32 %f) { |
| +entry: |
| + %a.addr.i8 = alloca i8, i32 4, align 4 |
| + %b.addr.i8 = alloca i8, i32 4, align 4 |
| + %c.addr.i8 = alloca i8, i32 4, align 4 |
| + %d.addr.i8 = alloca i8, i32 4, align 4 |
| + %e.addr.i8 = alloca i8, i32 4, align 4 |
| + %f.addr.i8 = alloca i8, i32 4, align 4 |
| + %r1.i8 = alloca i8, i32 4, align 4 |
| + %r2.i8 = alloca i8, i32 4, align 4 |
| + %r3.i8 = alloca i8, i32 4, align 4 |
| + %a.addr = bitcast i8* %a.addr.i8 to i32* |
| + %b.addr = bitcast i8* %b.addr.i8 to i32* |
| + %c.addr = bitcast i8* %c.addr.i8 to i32* |
| + %d.addr = bitcast i8* %d.addr.i8 to i32* |
| + %e.addr = bitcast i8* %e.addr.i8 to i32* |
| + %f.addr = bitcast i8* %f.addr.i8 to i32* |
| + %r1 = bitcast i8* %r1.i8 to i32* |
| + %r2 = bitcast i8* %r2.i8 to i32* |
| + %r3 = bitcast i8* %r3.i8 to i32* |
| + store i32 %a, i32* %a.addr, align 1 |
| + store i32 %b, i32* %b.addr, align 1 |
| + store i32 %c, i32* %c.addr, align 1 |
| + store i32 %d, i32* %d.addr, align 1 |
| + store i32 %e, i32* %e.addr, align 1 |
| + store i32 %f, i32* %f.addr, align 1 |
| + %0 = load i32, i32* %a.addr, align 1 |
| + %1 = load i32, i32* %f.addr, align 1 |
| + %add1 = add nsw i32 %0, %1 |
|
Jim Stichnoth
2016/10/13 17:15:29
"nsw" is not part of the PNaCl bitcode ABI, so tha
jaydeep.patil
2016/10/14 04:40:43
Done.
Used pydir/build-pnacl-ir.py script to gener
|
| + store i32 %add1, i32* %r1, align 1 |
| + %2 = load i32, i32* %b.addr, align 1 |
| + %3 = load i32, i32* %e.addr, align 1 |
| + %add2 = add nsw i32 %2, %3 |
| + store i32 %add2, i32* %r2, align 1 |
| + %4 = load i32, i32* %r1, align 1 |
| + %5 = load i32, i32* %r2, align 1 |
| + %add3 = add nsw i32 %4, %5 |
| + store i32 %add3, i32* %r3, align 1 |
| + %6 = load i32, i32* %r3, align 1 |
| + ret i32 %6 |
| +} |
| +; MIPS32-LABEL: legalization |
| +; MIPS32: addiu sp,sp,-48 |
|
Jim Stichnoth
2016/10/13 17:15:29
I would be a bit cautious about assuming specific
jaydeep.patil
2016/10/14 04:40:43
Acknowledged.
The pre-colored registers (a0-a3 and
|
| +; MIPS32: lw [[ARG_E:.*]],64(sp) |
| +; MIPS32: lw [[ARG_F:.*]],68(sp) |
| +; MIPS32: sw a0,0(sp) |
| +; MIPS32: sw a1,4(sp) |
| +; MIPS32: sw a2,8(sp) |
| +; MIPS32: sw a3,12(sp) |
| +; MIPS32: sw [[ARG_E]],16(sp) |
| +; MIPS32: sw [[ARG_F]],20(sp) |
| +; MIPS32: lw [[TMP_A:.*]],0(sp) |
| +; MIPS32: lw [[TMP_F:.*]],20(sp) |
| +; MIPS32: addu [[ADD1:.*]],[[TMP_A]],[[TMP_F]] |
| +; MIPS32: sw [[ADD1]],24(sp) |
| +; MIPS32: lw [[TMP_B:.*]],4(sp) |
| +; MIPS32: lw [[TMP_E:.*]],16(sp) |
| +; MIPS32: addu [[ADD2:.*]],[[TMP_B]],[[TMP_E]] |
| +; MIPS32: sw [[ADD2]],28(sp) |
| +; MIPS32: lw [[TMP_ADD1:.*]],24(sp) |
| +; MIPS32: lw [[TMP_ADD2:.*]],28(sp) |
| +; MIPS32: addu [[ADD3:.*]],[[TMP_ADD1]],[[TMP_ADD2]] |
| +; MIPS32: sw [[ADD3]],32(sp) |
| +; MIPS32: lw v0,32(sp) |
| +; MIPS32: addiu sp,sp,48 |
| +; MIPS32: jr ra |