| Andrew Top | 61a8495 | 2019-04-30 15:07:33 -0700 | [diff] [blame] | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
| 2 | ; RUN: llc -mtriple=mips-unknown-linux-gnu -mcpu=mips32 < %s | FileCheck %s -check-prefixes=MIPS32 |
| 3 | ; RUN: llc -mtriple=mips-unknown-linux-gnu -mcpu=mips32r2 < %s | FileCheck %s -check-prefixes=MIPS32R2 |
| 4 | ; RUN: llc -mtriple=mips-unknown-linux-gnu -mcpu=mips32r6 < %s | FileCheck %s -check-prefixes=MIPS32r6 |
| 5 | ; RUN: llc -mtriple=mips64-unknown-linux-gnu -mcpu=mips4 < %s | FileCheck %s -check-prefixes=MIPS4 |
| 6 | ; RUN: llc -mtriple=mips64-unknown-linux-gnu -mcpu=mips64 < %s | FileCheck %s -check-prefixes=MIPS64 |
| 7 | ; RUN: llc -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r2 < %s | FileCheck %s -check-prefixes=MIPS64R2 |
| 8 | ; RUN: llc -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r6 < %s | FileCheck %s -check-prefixes=MIPS64R6 |
| 9 | |
| 10 | define double @foo(double %a, double %b) nounwind readnone { |
| 11 | ; MIPS32-LABEL: foo: |
| 12 | ; MIPS32: # %bb.0: # %entry |
| 13 | ; MIPS32-NEXT: mtc1 $zero, $f2 |
| 14 | ; MIPS32-NEXT: mtc1 $zero, $f3 |
| 15 | ; MIPS32-NEXT: c.ule.d $f12, $f2 |
| 16 | ; MIPS32-NEXT: bc1f $BB0_2 |
| 17 | ; MIPS32-NEXT: mov.d $f0, $f12 |
| 18 | ; MIPS32-NEXT: # %bb.1: # %if.else |
| 19 | ; MIPS32-NEXT: mtc1 $zero, $f0 |
| 20 | ; MIPS32-NEXT: mtc1 $zero, $f1 |
| 21 | ; MIPS32-NEXT: c.ule.d $f14, $f0 |
| 22 | ; MIPS32-NEXT: bc1t $BB0_3 |
| 23 | ; MIPS32-NEXT: nop |
| 24 | ; MIPS32-NEXT: $BB0_2: # %if.end6 |
| 25 | ; MIPS32-NEXT: sub.d $f0, $f14, $f0 |
| 26 | ; MIPS32-NEXT: add.d $f0, $f0, $f0 |
| 27 | ; MIPS32-NEXT: $BB0_3: # %return |
| 28 | ; MIPS32-NEXT: jr $ra |
| 29 | ; MIPS32-NEXT: nop |
| 30 | ; |
| 31 | ; MIPS32R2-LABEL: foo: |
| 32 | ; MIPS32R2: # %bb.0: # %entry |
| 33 | ; MIPS32R2-NEXT: mov.d $f0, $f12 |
| 34 | ; MIPS32R2-NEXT: mtc1 $zero, $f2 |
| 35 | ; MIPS32R2-NEXT: mthc1 $zero, $f2 |
| 36 | ; MIPS32R2-NEXT: c.ule.d $f12, $f2 |
| 37 | ; MIPS32R2-NEXT: bc1f $BB0_2 |
| 38 | ; MIPS32R2-NEXT: nop |
| 39 | ; MIPS32R2-NEXT: # %bb.1: # %if.else |
| 40 | ; MIPS32R2-NEXT: mtc1 $zero, $f0 |
| 41 | ; MIPS32R2-NEXT: mthc1 $zero, $f0 |
| 42 | ; MIPS32R2-NEXT: c.ule.d $f14, $f0 |
| 43 | ; MIPS32R2-NEXT: bc1t $BB0_3 |
| 44 | ; MIPS32R2-NEXT: nop |
| 45 | ; MIPS32R2-NEXT: $BB0_2: # %if.end6 |
| 46 | ; MIPS32R2-NEXT: sub.d $f0, $f14, $f0 |
| 47 | ; MIPS32R2-NEXT: add.d $f0, $f0, $f0 |
| 48 | ; MIPS32R2-NEXT: $BB0_3: # %return |
| 49 | ; MIPS32R2-NEXT: jr $ra |
| 50 | ; MIPS32R2-NEXT: nop |
| 51 | ; |
| 52 | ; MIPS32r6-LABEL: foo: |
| 53 | ; MIPS32r6: # %bb.0: # %entry |
| 54 | ; MIPS32r6-NEXT: mov.d $f0, $f12 |
| 55 | ; MIPS32r6-NEXT: mtc1 $zero, $f1 |
| 56 | ; MIPS32r6-NEXT: mthc1 $zero, $f1 |
| 57 | ; MIPS32r6-NEXT: cmp.lt.d $f1, $f1, $f12 |
| 58 | ; MIPS32r6-NEXT: mfc1 $1, $f1 |
| 59 | ; MIPS32r6-NEXT: andi $1, $1, 1 |
| 60 | ; MIPS32r6-NEXT: bnezc $1, $BB0_2 |
| 61 | ; MIPS32r6-NEXT: # %bb.1: # %if.else |
| 62 | ; MIPS32r6-NEXT: mtc1 $zero, $f0 |
| 63 | ; MIPS32r6-NEXT: mthc1 $zero, $f0 |
| 64 | ; MIPS32r6-NEXT: cmp.ule.d $f1, $f14, $f0 |
| 65 | ; MIPS32r6-NEXT: mfc1 $1, $f1 |
| 66 | ; MIPS32r6-NEXT: andi $1, $1, 1 |
| 67 | ; MIPS32r6-NEXT: bnezc $1, $BB0_3 |
| 68 | ; MIPS32r6-NEXT: $BB0_2: # %if.end6 |
| 69 | ; MIPS32r6-NEXT: sub.d $f0, $f14, $f0 |
| 70 | ; MIPS32r6-NEXT: add.d $f0, $f0, $f0 |
| 71 | ; MIPS32r6-NEXT: $BB0_3: # %return |
| 72 | ; MIPS32r6-NEXT: jrc $ra |
| 73 | ; |
| 74 | ; MIPS4-LABEL: foo: |
| 75 | ; MIPS4: # %bb.0: # %entry |
| 76 | ; MIPS4-NEXT: dmtc1 $zero, $f1 |
| 77 | ; MIPS4-NEXT: c.ule.d $f12, $f1 |
| 78 | ; MIPS4-NEXT: bc1f .LBB0_2 |
| 79 | ; MIPS4-NEXT: mov.d $f0, $f12 |
| 80 | ; MIPS4-NEXT: # %bb.1: # %if.else |
| 81 | ; MIPS4-NEXT: dmtc1 $zero, $f0 |
| 82 | ; MIPS4-NEXT: c.ule.d $f13, $f0 |
| 83 | ; MIPS4-NEXT: bc1t .LBB0_3 |
| 84 | ; MIPS4-NEXT: nop |
| 85 | ; MIPS4-NEXT: .LBB0_2: # %if.end6 |
| 86 | ; MIPS4-NEXT: sub.d $f0, $f13, $f0 |
| 87 | ; MIPS4-NEXT: add.d $f0, $f0, $f0 |
| 88 | ; MIPS4-NEXT: .LBB0_3: # %return |
| 89 | ; MIPS4-NEXT: jr $ra |
| 90 | ; MIPS4-NEXT: nop |
| 91 | ; |
| 92 | ; MIPS64-LABEL: foo: |
| 93 | ; MIPS64: # %bb.0: # %entry |
| 94 | ; MIPS64-NEXT: dmtc1 $zero, $f1 |
| 95 | ; MIPS64-NEXT: c.ule.d $f12, $f1 |
| 96 | ; MIPS64-NEXT: bc1f .LBB0_2 |
| 97 | ; MIPS64-NEXT: mov.d $f0, $f12 |
| 98 | ; MIPS64-NEXT: # %bb.1: # %if.else |
| 99 | ; MIPS64-NEXT: dmtc1 $zero, $f0 |
| 100 | ; MIPS64-NEXT: c.ule.d $f13, $f0 |
| 101 | ; MIPS64-NEXT: bc1t .LBB0_3 |
| 102 | ; MIPS64-NEXT: nop |
| 103 | ; MIPS64-NEXT: .LBB0_2: # %if.end6 |
| 104 | ; MIPS64-NEXT: sub.d $f0, $f13, $f0 |
| 105 | ; MIPS64-NEXT: add.d $f0, $f0, $f0 |
| 106 | ; MIPS64-NEXT: .LBB0_3: # %return |
| 107 | ; MIPS64-NEXT: jr $ra |
| 108 | ; MIPS64-NEXT: nop |
| 109 | ; |
| 110 | ; MIPS64R2-LABEL: foo: |
| 111 | ; MIPS64R2: # %bb.0: # %entry |
| 112 | ; MIPS64R2-NEXT: dmtc1 $zero, $f1 |
| 113 | ; MIPS64R2-NEXT: c.ule.d $f12, $f1 |
| 114 | ; MIPS64R2-NEXT: bc1f .LBB0_2 |
| 115 | ; MIPS64R2-NEXT: mov.d $f0, $f12 |
| 116 | ; MIPS64R2-NEXT: # %bb.1: # %if.else |
| 117 | ; MIPS64R2-NEXT: dmtc1 $zero, $f0 |
| 118 | ; MIPS64R2-NEXT: c.ule.d $f13, $f0 |
| 119 | ; MIPS64R2-NEXT: bc1t .LBB0_3 |
| 120 | ; MIPS64R2-NEXT: nop |
| 121 | ; MIPS64R2-NEXT: .LBB0_2: # %if.end6 |
| 122 | ; MIPS64R2-NEXT: sub.d $f0, $f13, $f0 |
| 123 | ; MIPS64R2-NEXT: add.d $f0, $f0, $f0 |
| 124 | ; MIPS64R2-NEXT: .LBB0_3: # %return |
| 125 | ; MIPS64R2-NEXT: jr $ra |
| 126 | ; MIPS64R2-NEXT: nop |
| 127 | ; |
| 128 | ; MIPS64R6-LABEL: foo: |
| 129 | ; MIPS64R6: # %bb.0: # %entry |
| 130 | ; MIPS64R6-NEXT: dmtc1 $zero, $f1 |
| 131 | ; MIPS64R6-NEXT: cmp.lt.d $f1, $f1, $f12 |
| 132 | ; MIPS64R6-NEXT: mfc1 $1, $f1 |
| 133 | ; MIPS64R6-NEXT: andi $1, $1, 1 |
| 134 | ; MIPS64R6-NEXT: bnez $1, .LBB0_2 |
| 135 | ; MIPS64R6-NEXT: mov.d $f0, $f12 |
| 136 | ; MIPS64R6-NEXT: # %bb.1: # %if.else |
| 137 | ; MIPS64R6-NEXT: dmtc1 $zero, $f0 |
| 138 | ; MIPS64R6-NEXT: cmp.ule.d $f1, $f13, $f0 |
| 139 | ; MIPS64R6-NEXT: mfc1 $1, $f1 |
| 140 | ; MIPS64R6-NEXT: andi $1, $1, 1 |
| 141 | ; MIPS64R6-NEXT: bnezc $1, .LBB0_3 |
| 142 | ; MIPS64R6-NEXT: .LBB0_2: # %if.end6 |
| 143 | ; MIPS64R6-NEXT: sub.d $f0, $f13, $f0 |
| 144 | ; MIPS64R6-NEXT: add.d $f0, $f0, $f0 |
| 145 | ; MIPS64R6-NEXT: .LBB0_3: # %return |
| 146 | ; MIPS64R6-NEXT: jrc $ra |
| 147 | entry: |
| 148 | %cmp = fcmp ogt double %a, 0.000000e+00 |
| 149 | br i1 %cmp, label %if.end6, label %if.else |
| 150 | |
| 151 | if.else: ; preds = %entry |
| 152 | %cmp3 = fcmp ogt double %b, 0.000000e+00 |
| 153 | br i1 %cmp3, label %if.end6, label %return |
| 154 | |
| 155 | if.end6: ; preds = %if.else, %entry |
| 156 | %c.0 = phi double [ %a, %entry ], [ 0.000000e+00, %if.else ] |
| 157 | %sub = fsub double %b, %c.0 |
| 158 | %mul = fmul double %sub, 2.000000e+00 |
| 159 | br label %return |
| 160 | |
| 161 | return: ; preds = %if.else, %if.end6 |
| 162 | %retval.0 = phi double [ %mul, %if.end6 ], [ 0.000000e+00, %if.else ] |
| 163 | ret double %retval.0 |
| 164 | } |
| 165 | |
| 166 | define void @f1(float %f) nounwind { |
| 167 | ; MIPS32-LABEL: f1: |
| 168 | ; MIPS32: # %bb.0: # %entry |
| 169 | ; MIPS32-NEXT: addiu $sp, $sp, -24 |
| 170 | ; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill |
| 171 | ; MIPS32-NEXT: mtc1 $zero, $f0 |
| 172 | ; MIPS32-NEXT: c.eq.s $f12, $f0 |
| 173 | ; MIPS32-NEXT: bc1f $BB1_2 |
| 174 | ; MIPS32-NEXT: nop |
| 175 | ; MIPS32-NEXT: # %bb.1: # %if.end |
| 176 | ; MIPS32-NEXT: jal f2 |
| 177 | ; MIPS32-NEXT: nop |
| 178 | ; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload |
| 179 | ; MIPS32-NEXT: jr $ra |
| 180 | ; MIPS32-NEXT: addiu $sp, $sp, 24 |
| 181 | ; MIPS32-NEXT: $BB1_2: # %if.then |
| 182 | ; MIPS32-NEXT: jal abort |
| 183 | ; MIPS32-NEXT: nop |
| 184 | ; |
| 185 | ; MIPS32R2-LABEL: f1: |
| 186 | ; MIPS32R2: # %bb.0: # %entry |
| 187 | ; MIPS32R2-NEXT: addiu $sp, $sp, -24 |
| 188 | ; MIPS32R2-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill |
| 189 | ; MIPS32R2-NEXT: mtc1 $zero, $f0 |
| 190 | ; MIPS32R2-NEXT: c.eq.s $f12, $f0 |
| 191 | ; MIPS32R2-NEXT: bc1f $BB1_2 |
| 192 | ; MIPS32R2-NEXT: nop |
| 193 | ; MIPS32R2-NEXT: # %bb.1: # %if.end |
| 194 | ; MIPS32R2-NEXT: jal f2 |
| 195 | ; MIPS32R2-NEXT: nop |
| 196 | ; MIPS32R2-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload |
| 197 | ; MIPS32R2-NEXT: jr $ra |
| 198 | ; MIPS32R2-NEXT: addiu $sp, $sp, 24 |
| 199 | ; MIPS32R2-NEXT: $BB1_2: # %if.then |
| 200 | ; MIPS32R2-NEXT: jal abort |
| 201 | ; MIPS32R2-NEXT: nop |
| 202 | ; |
| 203 | ; MIPS32r6-LABEL: f1: |
| 204 | ; MIPS32r6: # %bb.0: # %entry |
| 205 | ; MIPS32r6-NEXT: addiu $sp, $sp, -24 |
| 206 | ; MIPS32r6-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill |
| 207 | ; MIPS32r6-NEXT: mtc1 $zero, $f0 |
| 208 | ; MIPS32r6-NEXT: cmp.eq.s $f0, $f12, $f0 |
| 209 | ; MIPS32r6-NEXT: mfc1 $1, $f0 |
| 210 | ; MIPS32r6-NEXT: andi $1, $1, 1 |
| 211 | ; MIPS32r6-NEXT: beqzc $1, $BB1_2 |
| 212 | ; MIPS32r6-NEXT: nop |
| 213 | ; MIPS32r6-NEXT: # %bb.1: # %if.end |
| 214 | ; MIPS32r6-NEXT: jal f2 |
| 215 | ; MIPS32r6-NEXT: nop |
| 216 | ; MIPS32r6-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload |
| 217 | ; MIPS32r6-NEXT: jr $ra |
| 218 | ; MIPS32r6-NEXT: addiu $sp, $sp, 24 |
| 219 | ; MIPS32r6-NEXT: $BB1_2: # %if.then |
| 220 | ; MIPS32r6-NEXT: jal abort |
| 221 | ; MIPS32r6-NEXT: nop |
| 222 | ; |
| 223 | ; MIPS4-LABEL: f1: |
| 224 | ; MIPS4: # %bb.0: # %entry |
| 225 | ; MIPS4-NEXT: daddiu $sp, $sp, -16 |
| 226 | ; MIPS4-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill |
| 227 | ; MIPS4-NEXT: mtc1 $zero, $f0 |
| 228 | ; MIPS4-NEXT: c.eq.s $f12, $f0 |
| 229 | ; MIPS4-NEXT: bc1f .LBB1_2 |
| 230 | ; MIPS4-NEXT: nop |
| 231 | ; MIPS4-NEXT: # %bb.1: # %if.end |
| 232 | ; MIPS4-NEXT: jal f2 |
| 233 | ; MIPS4-NEXT: nop |
| 234 | ; MIPS4-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload |
| 235 | ; MIPS4-NEXT: jr $ra |
| 236 | ; MIPS4-NEXT: daddiu $sp, $sp, 16 |
| 237 | ; MIPS4-NEXT: .LBB1_2: # %if.then |
| 238 | ; MIPS4-NEXT: jal abort |
| 239 | ; MIPS4-NEXT: nop |
| 240 | ; |
| 241 | ; MIPS64-LABEL: f1: |
| 242 | ; MIPS64: # %bb.0: # %entry |
| 243 | ; MIPS64-NEXT: daddiu $sp, $sp, -16 |
| 244 | ; MIPS64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill |
| 245 | ; MIPS64-NEXT: mtc1 $zero, $f0 |
| 246 | ; MIPS64-NEXT: c.eq.s $f12, $f0 |
| 247 | ; MIPS64-NEXT: bc1f .LBB1_2 |
| 248 | ; MIPS64-NEXT: nop |
| 249 | ; MIPS64-NEXT: # %bb.1: # %if.end |
| 250 | ; MIPS64-NEXT: jal f2 |
| 251 | ; MIPS64-NEXT: nop |
| 252 | ; MIPS64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload |
| 253 | ; MIPS64-NEXT: jr $ra |
| 254 | ; MIPS64-NEXT: daddiu $sp, $sp, 16 |
| 255 | ; MIPS64-NEXT: .LBB1_2: # %if.then |
| 256 | ; MIPS64-NEXT: jal abort |
| 257 | ; MIPS64-NEXT: nop |
| 258 | ; |
| 259 | ; MIPS64R2-LABEL: f1: |
| 260 | ; MIPS64R2: # %bb.0: # %entry |
| 261 | ; MIPS64R2-NEXT: daddiu $sp, $sp, -16 |
| 262 | ; MIPS64R2-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill |
| 263 | ; MIPS64R2-NEXT: mtc1 $zero, $f0 |
| 264 | ; MIPS64R2-NEXT: c.eq.s $f12, $f0 |
| 265 | ; MIPS64R2-NEXT: bc1f .LBB1_2 |
| 266 | ; MIPS64R2-NEXT: nop |
| 267 | ; MIPS64R2-NEXT: # %bb.1: # %if.end |
| 268 | ; MIPS64R2-NEXT: jal f2 |
| 269 | ; MIPS64R2-NEXT: nop |
| 270 | ; MIPS64R2-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload |
| 271 | ; MIPS64R2-NEXT: jr $ra |
| 272 | ; MIPS64R2-NEXT: daddiu $sp, $sp, 16 |
| 273 | ; MIPS64R2-NEXT: .LBB1_2: # %if.then |
| 274 | ; MIPS64R2-NEXT: jal abort |
| 275 | ; MIPS64R2-NEXT: nop |
| 276 | ; |
| 277 | ; MIPS64R6-LABEL: f1: |
| 278 | ; MIPS64R6: # %bb.0: # %entry |
| 279 | ; MIPS64R6-NEXT: daddiu $sp, $sp, -16 |
| 280 | ; MIPS64R6-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill |
| 281 | ; MIPS64R6-NEXT: mtc1 $zero, $f0 |
| 282 | ; MIPS64R6-NEXT: cmp.eq.s $f0, $f12, $f0 |
| 283 | ; MIPS64R6-NEXT: mfc1 $1, $f0 |
| 284 | ; MIPS64R6-NEXT: andi $1, $1, 1 |
| 285 | ; MIPS64R6-NEXT: beqzc $1, .LBB1_2 |
| 286 | ; MIPS64R6-NEXT: nop |
| 287 | ; MIPS64R6-NEXT: # %bb.1: # %if.end |
| 288 | ; MIPS64R6-NEXT: jal f2 |
| 289 | ; MIPS64R6-NEXT: nop |
| 290 | ; MIPS64R6-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload |
| 291 | ; MIPS64R6-NEXT: jr $ra |
| 292 | ; MIPS64R6-NEXT: daddiu $sp, $sp, 16 |
| 293 | ; MIPS64R6-NEXT: .LBB1_2: # %if.then |
| 294 | ; MIPS64R6-NEXT: jal abort |
| 295 | ; MIPS64R6-NEXT: nop |
| 296 | entry: |
| 297 | %cmp = fcmp une float %f, 0.000000e+00 |
| 298 | br i1 %cmp, label %if.then, label %if.end |
| 299 | |
| 300 | if.then: ; preds = %entry |
| 301 | tail call void @abort() noreturn |
| 302 | unreachable |
| 303 | |
| 304 | if.end: ; preds = %entry |
| 305 | tail call void (...) @f2() nounwind |
| 306 | ret void |
| 307 | } |
| 308 | |
| 309 | declare void @abort() noreturn nounwind |
| 310 | |
| 311 | declare void @f2(...) |