diff options
Diffstat (limited to 'test/CodeGen/Mips/nacl-align.ll')
-rw-r--r-- | test/CodeGen/Mips/nacl-align.ll | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/test/CodeGen/Mips/nacl-align.ll b/test/CodeGen/Mips/nacl-align.ll new file mode 100644 index 0000000..e61b834 --- /dev/null +++ b/test/CodeGen/Mips/nacl-align.ll @@ -0,0 +1,96 @@ +; RUN: llc -filetype=asm -mtriple=mipsel-none-nacl -relocation-model=static \ +; RUN: -O3 < %s | FileCheck %s + + +; This test tests that NaCl functions are bundle-aligned. + +define void @test0() { + ret void + +; CHECK: .align 4 +; CHECK-NOT: .align +; CHECK-LABEL: test0: + +} + + +; This test tests that blocks that are jumped to through jump table are +; bundle-aligned. + +define i32 @test1(i32 %i) { +entry: + switch i32 %i, label %default [ + i32 0, label %bb1 + i32 1, label %bb2 + i32 2, label %bb3 + i32 3, label %bb4 + ] + +bb1: + ret i32 111 +bb2: + ret i32 222 +bb3: + ret i32 333 +bb4: + ret i32 444 +default: + ret i32 555 + + +; CHECK-LABEL: test1: + +; CHECK: .align 4 +; CHECK-NEXT: ${{BB[0-9]+_[0-9]+}}: +; CHECK-NEXT: jr $ra +; CHECK-NEXT: addiu $2, $zero, 111 +; CHECK-NEXT: .align 4 +; CHECK-NEXT: ${{BB[0-9]+_[0-9]+}}: +; CHECK-NEXT: jr $ra +; CHECK-NEXT: addiu $2, $zero, 222 +; CHECK-NEXT: .align 4 +; CHECK-NEXT: ${{BB[0-9]+_[0-9]+}}: +; CHECK-NEXT: jr $ra +; CHECK-NEXT: addiu $2, $zero, 333 +; CHECK-NEXT: .align 4 +; CHECK-NEXT: ${{BB[0-9]+_[0-9]+}}: +; CHECK-NEXT: jr $ra +; CHECK-NEXT: addiu $2, $zero, 444 + +} + + +; This test tests that a block whose address is taken is bundle-aligned in NaCl. + +@bb_array = constant [2 x i8*] [i8* blockaddress(@test2, %bb1), + i8* blockaddress(@test2, %bb2)], align 4 + +define i32 @test2(i32 %i) { +entry: + %elementptr = getelementptr inbounds [2 x i8*]* @bb_array, i32 0, i32 %i + %0 = load i8** %elementptr, align 4 + indirectbr i8* %0, [label %bb1, label %bb2] + +bb1: + ret i32 111 +bb2: + ret i32 222 + + +; CHECK-LABEL: test2: + +; Note that there are two consecutive labels - one temporary and one for +; basic block. + +; CHECK: .align 4 +; CHECK-NEXT: ${{[a-zA-Z0-9]+}}: +; CHECK-NEXT: ${{BB[0-9]+_[0-9]+}}: +; CHECK-NEXT: jr $ra +; CHECK-NEXT: addiu $2, $zero, 111 +; CHECK-NEXT: .align 4 +; CHECK-NEXT: ${{[a-zA-Z0-9]+}}: +; CHECK-NEXT: ${{BB[0-9]+_[0-9]+}}: +; CHECK-NEXT: jr $ra +; CHECK-NEXT: addiu $2, $zero, 222 + +} |