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