blob: 74b6286648ddf30e575b56816266915796064153 [file] [log] [blame]
Sasa Stankovic8c5736b2014-02-28 10:00:38 +00001; RUN: llc -filetype=asm -mtriple=mipsel-none-nacl -relocation-model=static \
Sasa Stankovic075e3392014-03-01 16:14:29 +00002; RUN: -O3 < %s | FileCheck %s
Sasa Stankovic8c5736b2014-02-28 10:00:38 +00003
4
5; This test tests that NaCl functions are bundle-aligned.
6
7define void @test0() {
8 ret void
9
Dan Gohman61d15ae2016-01-26 00:03:25 +000010; CHECK: .p2align 4
11; CHECK-NOT: .p2align
Sasa Stankovic8c5736b2014-02-28 10:00:38 +000012; CHECK-LABEL: test0:
13
14}
15
16
17; This test tests that blocks that are jumped to through jump table are
18; bundle-aligned.
19
20define i32 @test1(i32 %i) {
21entry:
22 switch i32 %i, label %default [
23 i32 0, label %bb1
24 i32 1, label %bb2
25 i32 2, label %bb3
26 i32 3, label %bb4
27 ]
28
29bb1:
30 ret i32 111
31bb2:
32 ret i32 222
33bb3:
34 ret i32 333
35bb4:
36 ret i32 444
37default:
38 ret i32 555
39
40
41; CHECK-LABEL: test1:
42
Dan Gohman61d15ae2016-01-26 00:03:25 +000043; CHECK: .p2align 4
Sasa Stankovic8c5736b2014-02-28 10:00:38 +000044; CHECK-NEXT: ${{BB[0-9]+_[0-9]+}}:
45; CHECK-NEXT: jr $ra
46; CHECK-NEXT: addiu $2, $zero, 111
Cong Hou03127702015-08-26 23:15:32 +000047; CHECK-NEXT: ${{BB[0-9]+_[0-9]+}}:
48; CHECK-NEXT: jr $ra
49; CHECK-NEXT: addiu $2, $zero, 555
Dan Gohman61d15ae2016-01-26 00:03:25 +000050; CHECK-NEXT: .p2align 4
Sasa Stankovic8c5736b2014-02-28 10:00:38 +000051; CHECK-NEXT: ${{BB[0-9]+_[0-9]+}}:
52; CHECK-NEXT: jr $ra
53; CHECK-NEXT: addiu $2, $zero, 222
Dan Gohman61d15ae2016-01-26 00:03:25 +000054; CHECK-NEXT: .p2align 4
Sasa Stankovic8c5736b2014-02-28 10:00:38 +000055; CHECK-NEXT: ${{BB[0-9]+_[0-9]+}}:
56; CHECK-NEXT: jr $ra
57; CHECK-NEXT: addiu $2, $zero, 333
Sasa Stankovic8c5736b2014-02-28 10:00:38 +000058
59}
60
61
62; This test tests that a block whose address is taken is bundle-aligned in NaCl.
63
64@bb_array = constant [2 x i8*] [i8* blockaddress(@test2, %bb1),
65 i8* blockaddress(@test2, %bb2)], align 4
66
67define i32 @test2(i32 %i) {
68entry:
David Blaikie79e6c742015-02-27 19:29:02 +000069 %elementptr = getelementptr inbounds [2 x i8*], [2 x i8*]* @bb_array, i32 0, i32 %i
David Blaikiea79ac142015-02-27 21:17:42 +000070 %0 = load i8*, i8** %elementptr, align 4
Sasa Stankovic8c5736b2014-02-28 10:00:38 +000071 indirectbr i8* %0, [label %bb1, label %bb2]
72
73bb1:
74 ret i32 111
75bb2:
76 ret i32 222
77
78
79; CHECK-LABEL: test2:
80
81; Note that there are two consecutive labels - one temporary and one for
82; basic block.
83
Dan Gohman61d15ae2016-01-26 00:03:25 +000084; CHECK: .p2align 4
Sasa Stankovic8c5736b2014-02-28 10:00:38 +000085; CHECK-NEXT: ${{[a-zA-Z0-9]+}}:
86; CHECK-NEXT: ${{BB[0-9]+_[0-9]+}}:
87; CHECK-NEXT: jr $ra
88; CHECK-NEXT: addiu $2, $zero, 111
Dan Gohman61d15ae2016-01-26 00:03:25 +000089; CHECK-NEXT: .p2align 4
Sasa Stankovic8c5736b2014-02-28 10:00:38 +000090; CHECK-NEXT: ${{[a-zA-Z0-9]+}}:
91; CHECK-NEXT: ${{BB[0-9]+_[0-9]+}}:
92; CHECK-NEXT: jr $ra
93; CHECK-NEXT: addiu $2, $zero, 222
94
95}