xref: /llvm-project/llvm/test/CodeGen/Mips/nacl-align.ll (revision e3cf80c5c1fe55efd8216575ccadea0ab087e79c)
1; RUN: llc -filetype=asm -mtriple=mipsel-none-nacl -relocation-model=static \
2; RUN:     -O3 < %s | FileCheck %s
3
4
5; This test tests that NaCl functions are bundle-aligned.
6
7define void @test0() {
8  ret void
9
10; CHECK:          .p2align  4
11; CHECK-NOT:      .p2align
12; 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
43; CHECK:             .p2align  4
44; CHECK-NEXT:    ${{BB[0-9]+_[0-9]+}}:
45; CHECK-NEXT:        jr      $ra
46; CHECK-NEXT:        addiu   $2, $zero, 111
47; CHECK-NEXT:        .p2align  4
48; CHECK-NEXT:    ${{BB[0-9]+_[0-9]+}}:
49; CHECK-NEXT:        jr      $ra
50; CHECK-NEXT:        addiu   $2, $zero, 333
51; CHECK-NEXT:        .p2align  4
52; CHECK-NEXT:    ${{BB[0-9]+_[0-9]+}}:
53; CHECK-NEXT:        jr      $ra
54; CHECK-NEXT:        addiu   $2, $zero, 444
55; CHECK-NEXT:        .p2align  4
56; CHECK-NEXT:    ${{BB[0-9]+_[0-9]+}}:
57; CHECK-NEXT:        jr      $ra
58; CHECK-NEXT:        addiu   $2, $zero, 222
59; CHECK-NEXT:    ${{BB[0-9]+_[0-9]+}}:
60; CHECK-NEXT:        jr      $ra
61; CHECK-NEXT:        addiu   $2, $zero, 555
62
63}
64
65
66; This test tests that a block whose address is taken is bundle-aligned in NaCl.
67
68@bb_array = constant [2 x ptr] [ptr blockaddress(@test2, %bb1),
69                                ptr blockaddress(@test2, %bb2)], align 4
70
71define i32 @test2(i32 %i) {
72entry:
73  %elementptr = getelementptr inbounds [2 x ptr], ptr @bb_array, i32 0, i32 %i
74  %0 = load ptr, ptr %elementptr, align 4
75  indirectbr ptr %0, [label %bb1, label %bb2]
76
77bb1:
78  ret i32 111
79bb2:
80  ret i32 222
81
82
83; CHECK-LABEL:       test2:
84
85; Note that there are two consecutive labels - one temporary and one for
86; basic block.
87
88; CHECK:             .p2align  4
89; CHECK-NEXT:    ${{[a-zA-Z0-9]+}}:
90; CHECK-NEXT:    ${{BB[0-9]+_[0-9]+}}:
91; CHECK-NEXT:        jr      $ra
92; CHECK-NEXT:        addiu   $2, $zero, 111
93; CHECK-NEXT:        .p2align  4
94; CHECK-NEXT:    ${{[a-zA-Z0-9]+}}:
95; CHECK-NEXT:    ${{BB[0-9]+_[0-9]+}}:
96; CHECK-NEXT:        jr      $ra
97; CHECK-NEXT:        addiu   $2, $zero, 222
98
99}
100