Home | History | Annotate | Download | only in Mips
      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 
      7 define void @test0() {
      8   ret void
      9 
     10 ; CHECK:          .align  4
     11 ; CHECK-NOT:      .align
     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 
     20 define i32 @test1(i32 %i) {
     21 entry:
     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 
     29 bb1:
     30   ret i32 111
     31 bb2:
     32   ret i32 222
     33 bb3:
     34   ret i32 333
     35 bb4:
     36   ret i32 444
     37 default:
     38   ret i32 555
     39 
     40 
     41 ; CHECK-LABEL:       test1:
     42 
     43 ; CHECK:             .align  4
     44 ; CHECK-NEXT:    ${{BB[0-9]+_[0-9]+}}:
     45 ; CHECK-NEXT:        jr      $ra
     46 ; CHECK-NEXT:        addiu   $2, $zero, 111
     47 ; CHECK-NEXT:    ${{BB[0-9]+_[0-9]+}}:
     48 ; CHECK-NEXT:        jr      $ra
     49 ; CHECK-NEXT:        addiu   $2, $zero, 555
     50 ; CHECK-NEXT:        .align  4
     51 ; CHECK-NEXT:    ${{BB[0-9]+_[0-9]+}}:
     52 ; CHECK-NEXT:        jr      $ra
     53 ; CHECK-NEXT:        addiu   $2, $zero, 222
     54 ; CHECK-NEXT:        .align  4
     55 ; CHECK-NEXT:    ${{BB[0-9]+_[0-9]+}}:
     56 ; CHECK-NEXT:        jr      $ra
     57 ; CHECK-NEXT:        addiu   $2, $zero, 333
     58 
     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 
     67 define i32 @test2(i32 %i) {
     68 entry:
     69   %elementptr = getelementptr inbounds [2 x i8*], [2 x i8*]* @bb_array, i32 0, i32 %i
     70   %0 = load i8*, i8** %elementptr, align 4
     71   indirectbr i8* %0, [label %bb1, label %bb2]
     72 
     73 bb1:
     74   ret i32 111
     75 bb2:
     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 
     84 ; CHECK:             .align  4
     85 ; 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
     89 ; CHECK-NEXT:        .align  4
     90 ; 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 }
     96