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