1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple aarch64 -run-pass=aarch64-postlegalizer-lowering -mattr=+fullfp16 -verify-machineinstrs %s -o - | FileCheck %s 3... 4--- 5name: oeq 6alignment: 4 7legalized: true 8body: | 9 bb.0: 10 liveins: $q0, $q1 11 ; CHECK-LABEL: name: oeq 12 ; CHECK: liveins: $q0, $q1 13 ; CHECK-NEXT: {{ $}} 14 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 15 ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1 16 ; CHECK-NEXT: [[FCMEQ:%[0-9]+]]:_(<2 x s64>) = G_FCMEQ %lhs, %rhs(<2 x s64>) 17 ; CHECK-NEXT: $q0 = COPY [[FCMEQ]](<2 x s64>) 18 ; CHECK-NEXT: RET_ReallyLR implicit $q0 19 %lhs:_(<2 x s64>) = COPY $q0 20 %rhs:_(<2 x s64>) = COPY $q1 21 %fcmp:_(<2 x s64>) = G_FCMP floatpred(oeq), %lhs(<2 x s64>), %rhs 22 $q0 = COPY %fcmp(<2 x s64>) 23 RET_ReallyLR implicit $q0 24 25... 26--- 27name: oeq_zero 28alignment: 4 29legalized: true 30body: | 31 bb.0: 32 liveins: $q0, $q1 33 34 ; Should be inverted. Needs two compares. 35 36 ; CHECK-LABEL: name: oeq_zero 37 ; CHECK: liveins: $q0, $q1 38 ; CHECK-NEXT: {{ $}} 39 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 40 ; CHECK-NEXT: [[FCMEQZ:%[0-9]+]]:_(<2 x s64>) = G_FCMEQZ %lhs 41 ; CHECK-NEXT: $q0 = COPY [[FCMEQZ]](<2 x s64>) 42 ; CHECK-NEXT: RET_ReallyLR implicit $q0 43 %lhs:_(<2 x s64>) = COPY $q0 44 %zero:_(s64) = G_CONSTANT i64 0 45 %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero 46 %fcmp:_(<2 x s64>) = G_FCMP floatpred(oeq), %lhs(<2 x s64>), %zero_vec 47 $q0 = COPY %fcmp(<2 x s64>) 48 RET_ReallyLR implicit $q0 49 50 51... 52--- 53name: ogt 54alignment: 4 55legalized: true 56body: | 57 bb.0: 58 liveins: $q0, $q1 59 ; CHECK-LABEL: name: ogt 60 ; CHECK: liveins: $q0, $q1 61 ; CHECK-NEXT: {{ $}} 62 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 63 ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1 64 ; CHECK-NEXT: [[FCMGT:%[0-9]+]]:_(<2 x s64>) = G_FCMGT %lhs, %rhs(<2 x s64>) 65 ; CHECK-NEXT: $q0 = COPY [[FCMGT]](<2 x s64>) 66 ; CHECK-NEXT: RET_ReallyLR implicit $q0 67 %lhs:_(<2 x s64>) = COPY $q0 68 %rhs:_(<2 x s64>) = COPY $q1 69 %fcmp:_(<2 x s64>) = G_FCMP floatpred(ogt), %lhs(<2 x s64>), %rhs 70 $q0 = COPY %fcmp(<2 x s64>) 71 RET_ReallyLR implicit $q0 72 73... 74--- 75name: ogt_zero 76alignment: 4 77legalized: true 78body: | 79 bb.0: 80 liveins: $q0, $q1 81 ; CHECK-LABEL: name: ogt_zero 82 ; CHECK: liveins: $q0, $q1 83 ; CHECK-NEXT: {{ $}} 84 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 85 ; CHECK-NEXT: [[FCMGTZ:%[0-9]+]]:_(<2 x s64>) = G_FCMGTZ %lhs 86 ; CHECK-NEXT: $q0 = COPY [[FCMGTZ]](<2 x s64>) 87 ; CHECK-NEXT: RET_ReallyLR implicit $q0 88 %lhs:_(<2 x s64>) = COPY $q0 89 %zero:_(s64) = G_CONSTANT i64 0 90 %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero 91 %fcmp:_(<2 x s64>) = G_FCMP floatpred(ogt), %lhs(<2 x s64>), %zero_vec 92 $q0 = COPY %fcmp(<2 x s64>) 93 RET_ReallyLR implicit $q0 94 95... 96--- 97name: oge 98alignment: 4 99legalized: true 100body: | 101 bb.0: 102 liveins: $q0, $q1 103 ; CHECK-LABEL: name: oge 104 ; CHECK: liveins: $q0, $q1 105 ; CHECK-NEXT: {{ $}} 106 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 107 ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1 108 ; CHECK-NEXT: [[FCMGE:%[0-9]+]]:_(<2 x s64>) = G_FCMGE %lhs, %rhs(<2 x s64>) 109 ; CHECK-NEXT: $q0 = COPY [[FCMGE]](<2 x s64>) 110 ; CHECK-NEXT: RET_ReallyLR implicit $q0 111 %lhs:_(<2 x s64>) = COPY $q0 112 %rhs:_(<2 x s64>) = COPY $q1 113 %fcmp:_(<2 x s64>) = G_FCMP floatpred(oge), %lhs(<2 x s64>), %rhs 114 $q0 = COPY %fcmp(<2 x s64>) 115 RET_ReallyLR implicit $q0 116 117... 118--- 119name: oge_zero 120alignment: 4 121legalized: true 122body: | 123 bb.0: 124 liveins: $q0, $q1 125 126 ; Should be inverted. Needs two compares. 127 128 ; CHECK-LABEL: name: oge_zero 129 ; CHECK: liveins: $q0, $q1 130 ; CHECK-NEXT: {{ $}} 131 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 132 ; CHECK-NEXT: [[FCMGEZ:%[0-9]+]]:_(<2 x s64>) = G_FCMGEZ %lhs 133 ; CHECK-NEXT: $q0 = COPY [[FCMGEZ]](<2 x s64>) 134 ; CHECK-NEXT: RET_ReallyLR implicit $q0 135 %lhs:_(<2 x s64>) = COPY $q0 136 %zero:_(s64) = G_CONSTANT i64 0 137 %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero 138 %fcmp:_(<2 x s64>) = G_FCMP floatpred(oge), %lhs(<2 x s64>), %zero_vec 139 $q0 = COPY %fcmp(<2 x s64>) 140 RET_ReallyLR implicit $q0 141 142 143... 144--- 145name: olt 146alignment: 4 147legalized: true 148body: | 149 bb.0: 150 liveins: $q0, $q1 151 ; CHECK-LABEL: name: olt 152 ; CHECK: liveins: $q0, $q1 153 ; CHECK-NEXT: {{ $}} 154 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 155 ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1 156 ; CHECK-NEXT: [[FCMGT:%[0-9]+]]:_(<2 x s64>) = G_FCMGT %rhs, %lhs(<2 x s64>) 157 ; CHECK-NEXT: $q0 = COPY [[FCMGT]](<2 x s64>) 158 ; CHECK-NEXT: RET_ReallyLR implicit $q0 159 %lhs:_(<2 x s64>) = COPY $q0 160 %rhs:_(<2 x s64>) = COPY $q1 161 %fcmp:_(<2 x s64>) = G_FCMP floatpred(olt), %lhs(<2 x s64>), %rhs 162 $q0 = COPY %fcmp(<2 x s64>) 163 RET_ReallyLR implicit $q0 164 165... 166--- 167name: olt_zero 168alignment: 4 169legalized: true 170body: | 171 bb.0: 172 liveins: $q0, $q1 173 ; CHECK-LABEL: name: olt_zero 174 ; CHECK: liveins: $q0, $q1 175 ; CHECK-NEXT: {{ $}} 176 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 177 ; CHECK-NEXT: [[FCMLTZ:%[0-9]+]]:_(<2 x s64>) = G_FCMLTZ %lhs 178 ; CHECK-NEXT: $q0 = COPY [[FCMLTZ]](<2 x s64>) 179 ; CHECK-NEXT: RET_ReallyLR implicit $q0 180 %lhs:_(<2 x s64>) = COPY $q0 181 %zero:_(s64) = G_CONSTANT i64 0 182 %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero 183 %fcmp:_(<2 x s64>) = G_FCMP floatpred(olt), %lhs(<2 x s64>), %zero_vec 184 $q0 = COPY %fcmp(<2 x s64>) 185 RET_ReallyLR implicit $q0 186 187... 188--- 189name: ole 190alignment: 4 191legalized: true 192body: | 193 bb.0: 194 liveins: $q0, $q1 195 ; CHECK-LABEL: name: ole 196 ; CHECK: liveins: $q0, $q1 197 ; CHECK-NEXT: {{ $}} 198 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 199 ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1 200 ; CHECK-NEXT: [[FCMGE:%[0-9]+]]:_(<2 x s64>) = G_FCMGE %rhs, %lhs(<2 x s64>) 201 ; CHECK-NEXT: $q0 = COPY [[FCMGE]](<2 x s64>) 202 ; CHECK-NEXT: RET_ReallyLR implicit $q0 203 %lhs:_(<2 x s64>) = COPY $q0 204 %rhs:_(<2 x s64>) = COPY $q1 205 %fcmp:_(<2 x s64>) = G_FCMP floatpred(ole), %lhs(<2 x s64>), %rhs 206 $q0 = COPY %fcmp(<2 x s64>) 207 RET_ReallyLR implicit $q0 208 209... 210--- 211name: ole_zero 212alignment: 4 213legalized: true 214body: | 215 bb.0: 216 liveins: $q0, $q1 217 ; CHECK-LABEL: name: ole_zero 218 ; CHECK: liveins: $q0, $q1 219 ; CHECK-NEXT: {{ $}} 220 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 221 ; CHECK-NEXT: [[FCMLEZ:%[0-9]+]]:_(<2 x s64>) = G_FCMLEZ %lhs 222 ; CHECK-NEXT: $q0 = COPY [[FCMLEZ]](<2 x s64>) 223 ; CHECK-NEXT: RET_ReallyLR implicit $q0 224 %lhs:_(<2 x s64>) = COPY $q0 225 %zero:_(s64) = G_CONSTANT i64 0 226 %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero 227 %fcmp:_(<2 x s64>) = G_FCMP floatpred(ole), %lhs(<2 x s64>), %zero_vec 228 $q0 = COPY %fcmp(<2 x s64>) 229 RET_ReallyLR implicit $q0 230 231... 232--- 233name: one 234alignment: 4 235legalized: true 236body: | 237 bb.0: 238 liveins: $q0, $q1 239 240 ; Two compares. 241 242 ; CHECK-LABEL: name: one 243 ; CHECK: liveins: $q0, $q1 244 ; CHECK-NEXT: {{ $}} 245 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 246 ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1 247 ; CHECK-NEXT: [[FCMGT:%[0-9]+]]:_(<2 x s64>) = G_FCMGT %lhs, %rhs(<2 x s64>) 248 ; CHECK-NEXT: [[FCMGT1:%[0-9]+]]:_(<2 x s64>) = G_FCMGT %rhs, %lhs(<2 x s64>) 249 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(<2 x s64>) = G_OR [[FCMGT1]], [[FCMGT]] 250 ; CHECK-NEXT: $q0 = COPY [[OR]](<2 x s64>) 251 ; CHECK-NEXT: RET_ReallyLR implicit $q0 252 %lhs:_(<2 x s64>) = COPY $q0 253 %rhs:_(<2 x s64>) = COPY $q1 254 %fcmp:_(<2 x s64>) = G_FCMP floatpred(one), %lhs(<2 x s64>), %rhs 255 $q0 = COPY %fcmp(<2 x s64>) 256 RET_ReallyLR implicit $q0 257 258... 259--- 260name: one_zero 261alignment: 4 262legalized: true 263body: | 264 bb.0: 265 liveins: $q0, $q1 266 267 ; Two compares. 268 269 ; CHECK-LABEL: name: one_zero 270 ; CHECK: liveins: $q0, $q1 271 ; CHECK-NEXT: {{ $}} 272 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 273 ; CHECK-NEXT: [[FCMGTZ:%[0-9]+]]:_(<2 x s64>) = G_FCMGTZ %lhs 274 ; CHECK-NEXT: [[FCMLTZ:%[0-9]+]]:_(<2 x s64>) = G_FCMLTZ %lhs 275 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(<2 x s64>) = G_OR [[FCMLTZ]], [[FCMGTZ]] 276 ; CHECK-NEXT: $q0 = COPY [[OR]](<2 x s64>) 277 ; CHECK-NEXT: RET_ReallyLR implicit $q0 278 %lhs:_(<2 x s64>) = COPY $q0 279 %zero:_(s64) = G_CONSTANT i64 0 280 %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero 281 %fcmp:_(<2 x s64>) = G_FCMP floatpred(one), %lhs(<2 x s64>), %zero_vec 282 $q0 = COPY %fcmp(<2 x s64>) 283 RET_ReallyLR implicit $q0 284 285... 286--- 287name: uno 288alignment: 4 289legalized: true 290body: | 291 bb.0: 292 liveins: $q0, $q1 293 294 ; Should be inverted. Needs two compares. 295 296 ; CHECK-LABEL: name: uno 297 ; CHECK: liveins: $q0, $q1 298 ; CHECK-NEXT: {{ $}} 299 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 300 ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1 301 ; CHECK-NEXT: [[FCMGE:%[0-9]+]]:_(<2 x s64>) = G_FCMGE %lhs, %rhs(<2 x s64>) 302 ; CHECK-NEXT: [[FCMGT:%[0-9]+]]:_(<2 x s64>) = G_FCMGT %rhs, %lhs(<2 x s64>) 303 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(<2 x s64>) = G_OR [[FCMGT]], [[FCMGE]] 304 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1 305 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64) 306 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[OR]], [[BUILD_VECTOR]] 307 ; CHECK-NEXT: $q0 = COPY [[XOR]](<2 x s64>) 308 ; CHECK-NEXT: RET_ReallyLR implicit $q0 309 %lhs:_(<2 x s64>) = COPY $q0 310 %rhs:_(<2 x s64>) = COPY $q1 311 %fcmp:_(<2 x s64>) = G_FCMP floatpred(uno), %lhs(<2 x s64>), %rhs 312 $q0 = COPY %fcmp(<2 x s64>) 313 RET_ReallyLR implicit $q0 314 315... 316--- 317name: uno_zero 318alignment: 4 319legalized: true 320body: | 321 bb.0: 322 liveins: $q0, $q1 323 324 325 ; CHECK-LABEL: name: uno_zero 326 ; CHECK: liveins: $q0, $q1 327 ; CHECK-NEXT: {{ $}} 328 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 329 ; CHECK-NEXT: [[FCMEQ:%[0-9]+]]:_(<2 x s64>) = G_FCMEQ %lhs, %lhs(<2 x s64>) 330 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1 331 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64) 332 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[FCMEQ]], [[BUILD_VECTOR]] 333 ; CHECK-NEXT: $q0 = COPY [[XOR]](<2 x s64>) 334 ; CHECK-NEXT: RET_ReallyLR implicit $q0 335 %lhs:_(<2 x s64>) = COPY $q0 336 %zero:_(s64) = G_CONSTANT i64 0 337 %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero 338 %fcmp:_(<2 x s64>) = G_FCMP floatpred(uno), %lhs(<2 x s64>), %zero_vec 339 $q0 = COPY %fcmp(<2 x s64>) 340 RET_ReallyLR implicit $q0 341 342... 343--- 344name: ord 345alignment: 4 346legalized: true 347body: | 348 bb.0: 349 liveins: $q0, $q1 350 351 ; Needs two compares. No invert. 352 353 ; CHECK-LABEL: name: ord 354 ; CHECK: liveins: $q0, $q1 355 ; CHECK-NEXT: {{ $}} 356 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 357 ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1 358 ; CHECK-NEXT: [[FCMGE:%[0-9]+]]:_(<2 x s64>) = G_FCMGE %lhs, %rhs(<2 x s64>) 359 ; CHECK-NEXT: [[FCMGT:%[0-9]+]]:_(<2 x s64>) = G_FCMGT %rhs, %lhs(<2 x s64>) 360 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(<2 x s64>) = G_OR [[FCMGT]], [[FCMGE]] 361 ; CHECK-NEXT: $q0 = COPY [[OR]](<2 x s64>) 362 ; CHECK-NEXT: RET_ReallyLR implicit $q0 363 %lhs:_(<2 x s64>) = COPY $q0 364 %rhs:_(<2 x s64>) = COPY $q1 365 %fcmp:_(<2 x s64>) = G_FCMP floatpred(ord), %lhs(<2 x s64>), %rhs 366 $q0 = COPY %fcmp(<2 x s64>) 367 RET_ReallyLR implicit $q0 368 369... 370--- 371name: ord_zero 372alignment: 4 373legalized: true 374body: | 375 bb.0: 376 liveins: $q0, $q1 377 378 ; Needs two compares. No invert. 379 380 ; CHECK-LABEL: name: ord_zero 381 ; CHECK: liveins: $q0, $q1 382 ; CHECK-NEXT: {{ $}} 383 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 384 ; CHECK-NEXT: [[FCMEQ:%[0-9]+]]:_(<2 x s64>) = G_FCMEQ %lhs, %lhs(<2 x s64>) 385 ; CHECK-NEXT: $q0 = COPY [[FCMEQ]](<2 x s64>) 386 ; CHECK-NEXT: RET_ReallyLR implicit $q0 387 %lhs:_(<2 x s64>) = COPY $q0 388 %zero:_(s64) = G_CONSTANT i64 0 389 %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero 390 %fcmp:_(<2 x s64>) = G_FCMP floatpred(ord), %lhs(<2 x s64>), %zero_vec 391 $q0 = COPY %fcmp(<2 x s64>) 392 RET_ReallyLR implicit $q0 393 394... 395--- 396name: ult 397alignment: 4 398legalized: true 399body: | 400 bb.0: 401 liveins: $q0, $q1 402 403 ; Should be inverted. Needs two compares. 404 405 ; CHECK-LABEL: name: ult 406 ; CHECK: liveins: $q0, $q1 407 ; CHECK-NEXT: {{ $}} 408 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 409 ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1 410 ; CHECK-NEXT: [[FCMGE:%[0-9]+]]:_(<2 x s64>) = G_FCMGE %lhs, %rhs(<2 x s64>) 411 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1 412 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64) 413 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[FCMGE]], [[BUILD_VECTOR]] 414 ; CHECK-NEXT: $q0 = COPY [[XOR]](<2 x s64>) 415 ; CHECK-NEXT: RET_ReallyLR implicit $q0 416 %lhs:_(<2 x s64>) = COPY $q0 417 %rhs:_(<2 x s64>) = COPY $q1 418 %fcmp:_(<2 x s64>) = G_FCMP floatpred(ult), %lhs(<2 x s64>), %rhs 419 $q0 = COPY %fcmp(<2 x s64>) 420 RET_ReallyLR implicit $q0 421 422... 423--- 424name: ueq_zero 425alignment: 4 426legalized: true 427body: | 428 bb.0: 429 liveins: $q0, $q1 430 431 ; Should be inverted. Needs two compares. 432 433 ; CHECK-LABEL: name: ueq_zero 434 ; CHECK: liveins: $q0, $q1 435 ; CHECK-NEXT: {{ $}} 436 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 437 ; CHECK-NEXT: [[FCMGEZ:%[0-9]+]]:_(<2 x s64>) = G_FCMGEZ %lhs 438 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1 439 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64) 440 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[FCMGEZ]], [[BUILD_VECTOR]] 441 ; CHECK-NEXT: $q0 = COPY [[XOR]](<2 x s64>) 442 ; CHECK-NEXT: RET_ReallyLR implicit $q0 443 %lhs:_(<2 x s64>) = COPY $q0 444 %zero:_(s64) = G_CONSTANT i64 0 445 %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero 446 %fcmp:_(<2 x s64>) = G_FCMP floatpred(ult), %lhs(<2 x s64>), %zero_vec 447 $q0 = COPY %fcmp(<2 x s64>) 448 RET_ReallyLR implicit $q0 449 450... 451--- 452name: ule 453alignment: 4 454legalized: true 455body: | 456 bb.0: 457 liveins: $q0, $q1 458 459 ; Should be inverted. Needs two compares. 460 461 ; CHECK-LABEL: name: ule 462 ; CHECK: liveins: $q0, $q1 463 ; CHECK-NEXT: {{ $}} 464 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 465 ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1 466 ; CHECK-NEXT: [[FCMGT:%[0-9]+]]:_(<2 x s64>) = G_FCMGT %lhs, %rhs(<2 x s64>) 467 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1 468 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64) 469 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[FCMGT]], [[BUILD_VECTOR]] 470 ; CHECK-NEXT: $q0 = COPY [[XOR]](<2 x s64>) 471 ; CHECK-NEXT: RET_ReallyLR implicit $q0 472 %lhs:_(<2 x s64>) = COPY $q0 473 %rhs:_(<2 x s64>) = COPY $q1 474 %fcmp:_(<2 x s64>) = G_FCMP floatpred(ule), %lhs(<2 x s64>), %rhs 475 $q0 = COPY %fcmp(<2 x s64>) 476 RET_ReallyLR implicit $q0 477 478... 479--- 480name: ule_zero 481alignment: 4 482legalized: true 483body: | 484 bb.0: 485 liveins: $q0, $q1 486 487 ; Should be inverted. Needs two compares. 488 489 ; CHECK-LABEL: name: ule_zero 490 ; CHECK: liveins: $q0, $q1 491 ; CHECK-NEXT: {{ $}} 492 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 493 ; CHECK-NEXT: [[FCMGTZ:%[0-9]+]]:_(<2 x s64>) = G_FCMGTZ %lhs 494 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1 495 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64) 496 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[FCMGTZ]], [[BUILD_VECTOR]] 497 ; CHECK-NEXT: $q0 = COPY [[XOR]](<2 x s64>) 498 ; CHECK-NEXT: RET_ReallyLR implicit $q0 499 %lhs:_(<2 x s64>) = COPY $q0 500 %zero:_(s64) = G_CONSTANT i64 0 501 %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero 502 %fcmp:_(<2 x s64>) = G_FCMP floatpred(ule), %lhs(<2 x s64>), %zero_vec 503 $q0 = COPY %fcmp(<2 x s64>) 504 RET_ReallyLR implicit $q0 505 506... 507--- 508name: ugt 509alignment: 4 510legalized: true 511body: | 512 bb.0: 513 liveins: $q0, $q1 514 515 ; Should be inverted. Needs two compares. 516 517 ; CHECK-LABEL: name: ugt 518 ; CHECK: liveins: $q0, $q1 519 ; CHECK-NEXT: {{ $}} 520 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 521 ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1 522 ; CHECK-NEXT: [[FCMGE:%[0-9]+]]:_(<2 x s64>) = G_FCMGE %rhs, %lhs(<2 x s64>) 523 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1 524 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64) 525 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[FCMGE]], [[BUILD_VECTOR]] 526 ; CHECK-NEXT: $q0 = COPY [[XOR]](<2 x s64>) 527 ; CHECK-NEXT: RET_ReallyLR implicit $q0 528 %lhs:_(<2 x s64>) = COPY $q0 529 %rhs:_(<2 x s64>) = COPY $q1 530 %fcmp:_(<2 x s64>) = G_FCMP floatpred(ugt), %lhs(<2 x s64>), %rhs 531 $q0 = COPY %fcmp(<2 x s64>) 532 RET_ReallyLR implicit $q0 533 534... 535--- 536name: ugt_zero 537alignment: 4 538legalized: true 539body: | 540 bb.0: 541 liveins: $q0, $q1 542 543 ; Should be inverted. Needs two compares. 544 545 ; CHECK-LABEL: name: ugt_zero 546 ; CHECK: liveins: $q0, $q1 547 ; CHECK-NEXT: {{ $}} 548 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 549 ; CHECK-NEXT: [[FCMLEZ:%[0-9]+]]:_(<2 x s64>) = G_FCMLEZ %lhs 550 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1 551 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64) 552 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[FCMLEZ]], [[BUILD_VECTOR]] 553 ; CHECK-NEXT: $q0 = COPY [[XOR]](<2 x s64>) 554 ; CHECK-NEXT: RET_ReallyLR implicit $q0 555 %lhs:_(<2 x s64>) = COPY $q0 556 %zero:_(s64) = G_CONSTANT i64 0 557 %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero 558 %fcmp:_(<2 x s64>) = G_FCMP floatpred(ugt), %lhs(<2 x s64>), %zero_vec 559 $q0 = COPY %fcmp(<2 x s64>) 560 RET_ReallyLR implicit $q0 561 562... 563--- 564name: uge 565alignment: 4 566legalized: true 567body: | 568 bb.0: 569 liveins: $q0, $q1 570 571 ; Should be inverted. Needs two compares. 572 573 ; CHECK-LABEL: name: uge 574 ; CHECK: liveins: $q0, $q1 575 ; CHECK-NEXT: {{ $}} 576 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 577 ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1 578 ; CHECK-NEXT: [[FCMGT:%[0-9]+]]:_(<2 x s64>) = G_FCMGT %rhs, %lhs(<2 x s64>) 579 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1 580 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64) 581 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[FCMGT]], [[BUILD_VECTOR]] 582 ; CHECK-NEXT: $q0 = COPY [[XOR]](<2 x s64>) 583 ; CHECK-NEXT: RET_ReallyLR implicit $q0 584 %lhs:_(<2 x s64>) = COPY $q0 585 %rhs:_(<2 x s64>) = COPY $q1 586 %fcmp:_(<2 x s64>) = G_FCMP floatpred(uge), %lhs(<2 x s64>), %rhs 587 $q0 = COPY %fcmp(<2 x s64>) 588 RET_ReallyLR implicit $q0 589 590... 591--- 592name: uge_zero 593alignment: 4 594legalized: true 595body: | 596 bb.0: 597 liveins: $q0, $q1 598 599 ; Should be inverted. Needs two compares. 600 601 ; CHECK-LABEL: name: uge_zero 602 ; CHECK: liveins: $q0, $q1 603 ; CHECK-NEXT: {{ $}} 604 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 605 ; CHECK-NEXT: [[FCMLTZ:%[0-9]+]]:_(<2 x s64>) = G_FCMLTZ %lhs 606 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1 607 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64) 608 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[FCMLTZ]], [[BUILD_VECTOR]] 609 ; CHECK-NEXT: $q0 = COPY [[XOR]](<2 x s64>) 610 ; CHECK-NEXT: RET_ReallyLR implicit $q0 611 %lhs:_(<2 x s64>) = COPY $q0 612 %zero:_(s64) = G_CONSTANT i64 0 613 %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero 614 %fcmp:_(<2 x s64>) = G_FCMP floatpred(uge), %lhs(<2 x s64>), %zero_vec 615 $q0 = COPY %fcmp(<2 x s64>) 616 RET_ReallyLR implicit $q0 617 618... 619--- 620name: une 621alignment: 4 622legalized: true 623body: | 624 bb.0: 625 liveins: $q0, $q1 626 627 ; Negated EQ. 628 629 ; CHECK-LABEL: name: une 630 ; CHECK: liveins: $q0, $q1 631 ; CHECK-NEXT: {{ $}} 632 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 633 ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1 634 ; CHECK-NEXT: [[FCMEQ:%[0-9]+]]:_(<2 x s64>) = G_FCMEQ %lhs, %rhs(<2 x s64>) 635 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1 636 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64) 637 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[FCMEQ]], [[BUILD_VECTOR]] 638 ; CHECK-NEXT: $q0 = COPY [[XOR]](<2 x s64>) 639 ; CHECK-NEXT: RET_ReallyLR implicit $q0 640 %lhs:_(<2 x s64>) = COPY $q0 641 %rhs:_(<2 x s64>) = COPY $q1 642 %fcmp:_(<2 x s64>) = G_FCMP floatpred(une), %lhs(<2 x s64>), %rhs 643 $q0 = COPY %fcmp(<2 x s64>) 644 RET_ReallyLR implicit $q0 645 646... 647--- 648name: une_zero 649alignment: 4 650legalized: true 651body: | 652 bb.0: 653 liveins: $q0, $q1 654 655 ; Negated EQ. 656 657 ; CHECK-LABEL: name: une_zero 658 ; CHECK: liveins: $q0, $q1 659 ; CHECK-NEXT: {{ $}} 660 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0 661 ; CHECK-NEXT: [[FCMEQZ:%[0-9]+]]:_(<2 x s64>) = G_FCMEQZ %lhs 662 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1 663 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64) 664 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[FCMEQZ]], [[BUILD_VECTOR]] 665 ; CHECK-NEXT: $q0 = COPY [[XOR]](<2 x s64>) 666 ; CHECK-NEXT: RET_ReallyLR implicit $q0 667 %lhs:_(<2 x s64>) = COPY $q0 668 %zero:_(s64) = G_CONSTANT i64 0 669 %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero 670 %fcmp:_(<2 x s64>) = G_FCMP floatpred(une), %lhs(<2 x s64>), %zero_vec 671 $q0 = COPY %fcmp(<2 x s64>) 672 RET_ReallyLR implicit $q0 673 674... 675--- 676name: lower_v8s16 677alignment: 4 678legalized: true 679body: | 680 bb.0: 681 liveins: $q0, $q1 682 683 ; CHECK-LABEL: name: lower_v8s16 684 ; CHECK: liveins: $q0, $q1 685 ; CHECK-NEXT: {{ $}} 686 ; CHECK-NEXT: %lhs:_(<8 x s16>) = COPY $q0 687 ; CHECK-NEXT: %rhs:_(<8 x s16>) = COPY $q1 688 ; CHECK-NEXT: [[FCMEQ:%[0-9]+]]:_(<8 x s16>) = G_FCMEQ %lhs, %rhs(<8 x s16>) 689 ; CHECK-NEXT: $q0 = COPY [[FCMEQ]](<8 x s16>) 690 ; CHECK-NEXT: RET_ReallyLR implicit $q0 691 %lhs:_(<8 x s16>) = COPY $q0 692 %rhs:_(<8 x s16>) = COPY $q1 693 %fcmp:_(<8 x s16>) = G_FCMP floatpred(oeq), %lhs(<8 x s16>), %rhs 694 $q0 = COPY %fcmp(<8 x s16>) 695 RET_ReallyLR implicit $q0 696 697... 698--- 699name: lower_v4s16 700alignment: 4 701legalized: true 702body: | 703 bb.0: 704 liveins: $d0, $d1 705 706 ; CHECK-LABEL: name: lower_v4s16 707 ; CHECK: liveins: $d0, $d1 708 ; CHECK-NEXT: {{ $}} 709 ; CHECK-NEXT: %lhs:_(<4 x s16>) = COPY $d0 710 ; CHECK-NEXT: %rhs:_(<4 x s16>) = COPY $d1 711 ; CHECK-NEXT: [[FCMEQ:%[0-9]+]]:_(<4 x s16>) = G_FCMEQ %lhs, %rhs(<4 x s16>) 712 ; CHECK-NEXT: $d0 = COPY [[FCMEQ]](<4 x s16>) 713 ; CHECK-NEXT: RET_ReallyLR implicit $d0 714 %lhs:_(<4 x s16>) = COPY $d0 715 %rhs:_(<4 x s16>) = COPY $d1 716 %fcmp:_(<4 x s16>) = G_FCMP floatpred(oeq), %lhs(<4 x s16>), %rhs 717 $d0 = COPY %fcmp(<4 x s16>) 718 RET_ReallyLR implicit $d0 719 720... 721--- 722name: is_not_nan 723alignment: 4 724legalized: true 725body: | 726 bb.0: 727 liveins: $q0, $q1 728 729 ; CHECK-LABEL: name: is_not_nan 730 ; CHECK: liveins: $q0, $q1 731 ; CHECK-NEXT: {{ $}} 732 ; CHECK-NEXT: %lhs:_(<4 x s32>) = COPY $q0 733 ; CHECK-NEXT: [[FCMEQ:%[0-9]+]]:_(<4 x s32>) = G_FCMEQ %lhs, %lhs(<4 x s32>) 734 ; CHECK-NEXT: $q0 = COPY [[FCMEQ]](<4 x s32>) 735 ; CHECK-NEXT: RET_ReallyLR implicit $q0 736 %lhs:_(<4 x s32>) = COPY $q0 737 %zero:_(s32) = G_FCONSTANT float 0.000000e+00 738 %veczero:_(<4 x s32>) = G_BUILD_VECTOR %zero, %zero, %zero, %zero 739 %fcmp:_(<4 x s32>) = G_FCMP floatpred(ord), %lhs(<4 x s32>), %veczero 740 $q0 = COPY %fcmp(<4 x s32>) 741 RET_ReallyLR implicit $q0 742