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