Home | History | Annotate | Download | only in compactbranches
      1 ; RUN: llc -march=mipsel -mcpu=mips32r6 -relocation-model=static -disable-mips-delay-filler < %s | FileCheck %s -check-prefix=STATIC32
      2 ; RUN: llc -march=mipsel -mcpu=mips64r6 -target-abi n64 -disable-mips-delay-filler < %s | FileCheck %s -check-prefix=PIC
      3 
      4 ; Function Attrs: nounwind
      5 define void @l()  {
      6 entry:
      7 ; PIC: jalrc $25
      8   %call = tail call i32 @k()
      9 ; PIC: jalrc $25
     10   %call1 = tail call i32 @j()
     11   %cmp = icmp eq i32 %call, %call1
     12 ; CHECK: bnec
     13   br i1 %cmp, label %if.then, label %if.end
     14 
     15 if.then:                                          ; preds = %entry:
     16 ; STATIC: nop
     17 ; STATIC: jal
     18 ; PIC: jalrc $25
     19   tail call void @f(i32 signext -2)
     20   br label %if.end
     21 
     22 if.end:                                           ; preds = %if.then, %entry
     23 ; CHECK: jrc  $ra
     24   ret void
     25 }
     26 
     27 declare i32 @k()
     28 
     29 declare i32 @j()
     30 
     31 declare void @f(i32 signext) 
     32 
     33 ; Function Attrs: define void @l2()  {
     34 define void @l2()  {
     35 entry:
     36 ; PIC: jalrc $25
     37   %call = tail call i32 @k()
     38 ; PIC: jalrc $25
     39   %call1 = tail call i32 @i()
     40   %cmp = icmp eq i32 %call, %call1
     41 ; CHECK beqc
     42   br i1 %cmp, label %if.end, label %if.then
     43 
     44 if.then:                                          ; preds = %entry:
     45 ; STATIC: nop
     46 ; STATIC: jal
     47 ; PIC: jalrc $25
     48   tail call void @f(i32 signext -1)
     49   br label %if.end
     50 
     51 if.end:                                           ; preds = %entry, %if.then
     52 ; CHECK: jrc  $ra
     53   ret void
     54 }
     55 
     56 declare i32 @i()
     57 
     58 ; Function Attrs: nounwind
     59 define void @l3()  {
     60 entry:
     61 ; PIC: jalrc $25
     62   %call = tail call i32 @k()
     63   %cmp = icmp slt i32 %call, 0
     64 ; CHECK : bgez
     65   br i1 %cmp, label %if.then, label %if.end
     66 
     67 if.then:                                          ; preds = %entry:
     68 ; STATIC: nop
     69 ; STATIC: jal
     70 ; PIC: jalrc $25
     71   tail call void @f(i32 signext 0)
     72   br label %if.end
     73 
     74 if.end:                                           ; preds = %if.then, %entry
     75 ; CHECK: jrc $ra
     76   ret void
     77 }
     78 
     79 ; Function Attrs: nounwind
     80 define void @l4()  {
     81 entry:
     82   %call = tail call i32 @k()
     83   %cmp = icmp slt i32 %call, 1
     84 ; CHECK: bgtzc
     85   br i1 %cmp, label %if.then, label %if.end
     86 
     87 if.then:                                          ; preds = %entry:
     88 ; STATIC: nop
     89 ; STATIC: jal
     90   tail call void @f(i32 signext 1)
     91   br label %if.end
     92 
     93 if.end:                                           ; preds = %if.then, %entry
     94 ; CHECK: jrc $ra
     95   ret void
     96 }
     97 
     98 ; Function Attrs: nounwind
     99 define void @l5()  {
    100 entry:
    101 ; PIC: jalrc $25
    102   %call = tail call i32 @k()
    103 ; PIC: jalrc $25
    104   %cmp = icmp sgt i32 %call, 0
    105 ; CHECK: blezc
    106   br i1 %cmp, label %if.then, label %if.end
    107 
    108 if.then:                                          ; preds = %entry:
    109 ; STATIC: nop
    110 ; STATIC: jal
    111 ; PIC: jalrc $25
    112   tail call void @f(i32 signext 2) 
    113   br label %if.end
    114 
    115 if.end:                                           ; preds = %if.then, %entry
    116 ; CHECK: jrc  $ra
    117   ret void
    118 }
    119 
    120 ; Function Attrs: nounwind
    121 define void @l6()  {
    122 entry:
    123 ; PIC: jalrc $25
    124   %call = tail call i32 @k()
    125 ; PIC: jalrc $25
    126   %cmp = icmp sgt i32 %call, -1
    127 ; CHECK: bltzc
    128   br i1 %cmp, label %if.then, label %if.end
    129 
    130 if.then:                                          ; preds = %entry:
    131 ; STATIC: nop
    132 ; STATIC: jal
    133 ; PIC: jalrc $25
    134   tail call void @f(i32 signext 3)
    135   br label %if.end
    136 
    137 if.end:                                           ; preds = %if.then, %entry
    138 ; CHECK: jrc $ra
    139   ret void
    140 }
    141 
    142 ; Function Attrs: nounwind
    143 define void @l7()  {
    144 entry:
    145 ; PIC: jalrc $25
    146   %call = tail call i32 @k()
    147   %cmp = icmp eq i32 %call, 0
    148 ; CHECK: bnezc
    149   br i1 %cmp, label %if.then, label %if.end
    150 
    151 if.then:                                          ; preds = %entry:
    152 ; STATIC: nop
    153 ; STATIC: jal
    154 ; PIC: jalrc $25
    155   tail call void @f(i32 signext 4)
    156   br label %if.end
    157 
    158 if.end:                                           ; preds = %if.then, %entry
    159 ; CHECK: jrc  $ra
    160   ret void
    161 }
    162 
    163 ; Function Attrs: nounwind
    164 define void @l8()  {
    165 entry:
    166 ; PIC: jalrc $25
    167   %call = tail call i32 @k()
    168   %cmp = icmp eq i32 %call, 0
    169 ; CHECK: beqzc
    170   br i1 %cmp, label %if.end, label %if.then
    171 
    172 if.then:                                          ; preds = %entry:
    173 ; STATIC: nop
    174 ; STATIC: jal
    175 ; PIC: jalrc $25
    176   tail call void @f(i32 signext 5)
    177   br label %if.end
    178 
    179 if.end:                                           ; preds = %entry, %if.then
    180 ; CHECK: jrc  $ra
    181   ret void
    182 }
    183 
    184 define i32 @l9(i8* ()* %i) #0 {
    185 entry:
    186   %i.addr = alloca i8* ()*, align 4
    187   store i8* ()* %i, i8* ()** %i.addr, align 4
    188 ; STATIC32: jal
    189 ; STATIC32: nop
    190 ; PIC: jalrc $25
    191   %call = call i32 @k()
    192 ; PIC: jalrc $25
    193   %cmp = icmp ne i32 %call, 0
    194 ; CHECK: beqzc
    195   br i1 %cmp, label %if.then, label %if.end
    196 
    197 if.then:                                          ; preds = %entry
    198   %0 = load i8* ()*, i8* ()** %i.addr, align 4
    199 ; CHECK: jalrc $25
    200   %call1 = call i8* %0()
    201   br label %if.end
    202 
    203 if.end:                                           ; preds = %if.then, %entry
    204 ; CHECK: jrc $ra
    205   ret i32 -1
    206 }
    207