1*9880d681SAndroid Build Coastguard Worker; RUN: llc -filetype=asm -mtriple=mipsel-none-nacl -relocation-model=static \ 2*9880d681SAndroid Build Coastguard Worker; RUN: -O3 < %s | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; This test tests that NaCl functions are bundle-aligned. 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workerdefine void @test0() { 8*9880d681SAndroid Build Coastguard Worker ret void 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker; CHECK: .p2align 4 11*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .p2align 12*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test0: 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Worker; This test tests that blocks that are jumped to through jump table are 18*9880d681SAndroid Build Coastguard Worker; bundle-aligned. 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerdefine i32 @test1(i32 %i) { 21*9880d681SAndroid Build Coastguard Workerentry: 22*9880d681SAndroid Build Coastguard Worker switch i32 %i, label %default [ 23*9880d681SAndroid Build Coastguard Worker i32 0, label %bb1 24*9880d681SAndroid Build Coastguard Worker i32 1, label %bb2 25*9880d681SAndroid Build Coastguard Worker i32 2, label %bb3 26*9880d681SAndroid Build Coastguard Worker i32 3, label %bb4 27*9880d681SAndroid Build Coastguard Worker ] 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerbb1: 30*9880d681SAndroid Build Coastguard Worker ret i32 111 31*9880d681SAndroid Build Coastguard Workerbb2: 32*9880d681SAndroid Build Coastguard Worker ret i32 222 33*9880d681SAndroid Build Coastguard Workerbb3: 34*9880d681SAndroid Build Coastguard Worker ret i32 333 35*9880d681SAndroid Build Coastguard Workerbb4: 36*9880d681SAndroid Build Coastguard Worker ret i32 444 37*9880d681SAndroid Build Coastguard Workerdefault: 38*9880d681SAndroid Build Coastguard Worker ret i32 555 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test1: 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Worker; CHECK: .p2align 4 44*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ${{BB[0-9]+_[0-9]+}}: 45*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jr $ra 46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: addiu $2, $zero, 111 47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ${{BB[0-9]+_[0-9]+}}: 48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jr $ra 49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: addiu $2, $zero, 555 50*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .p2align 4 51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ${{BB[0-9]+_[0-9]+}}: 52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jr $ra 53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: addiu $2, $zero, 222 54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .p2align 4 55*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ${{BB[0-9]+_[0-9]+}}: 56*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jr $ra 57*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: addiu $2, $zero, 333 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Worker} 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Worker; This test tests that a block whose address is taken is bundle-aligned in NaCl. 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Worker@bb_array = constant [2 x i8*] [i8* blockaddress(@test2, %bb1), 65*9880d681SAndroid Build Coastguard Worker i8* blockaddress(@test2, %bb2)], align 4 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Workerdefine i32 @test2(i32 %i) { 68*9880d681SAndroid Build Coastguard Workerentry: 69*9880d681SAndroid Build Coastguard Worker %elementptr = getelementptr inbounds [2 x i8*], [2 x i8*]* @bb_array, i32 0, i32 %i 70*9880d681SAndroid Build Coastguard Worker %0 = load i8*, i8** %elementptr, align 4 71*9880d681SAndroid Build Coastguard Worker indirectbr i8* %0, [label %bb1, label %bb2] 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Workerbb1: 74*9880d681SAndroid Build Coastguard Worker ret i32 111 75*9880d681SAndroid Build Coastguard Workerbb2: 76*9880d681SAndroid Build Coastguard Worker ret i32 222 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2: 80*9880d681SAndroid Build Coastguard Worker 81*9880d681SAndroid Build Coastguard Worker; Note that there are two consecutive labels - one temporary and one for 82*9880d681SAndroid Build Coastguard Worker; basic block. 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Worker; CHECK: .p2align 4 85*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ${{[a-zA-Z0-9]+}}: 86*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ${{BB[0-9]+_[0-9]+}}: 87*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jr $ra 88*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: addiu $2, $zero, 111 89*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .p2align 4 90*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ${{[a-zA-Z0-9]+}}: 91*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ${{BB[0-9]+_[0-9]+}}: 92*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: jr $ra 93*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: addiu $2, $zero, 222 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Worker} 96