xref: /aosp_15_r20/external/llvm/test/CodeGen/Mips/nacl-align.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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