|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
2 |
| -; RUN: llc -mtriple=riscv32 -mattr=+m -verify-machineinstrs < %s | FileCheck --check-prefixes=CHECK,CHECK32,RV32IM %s |
3 |
| -; RUN: llc -mtriple=riscv64 -mattr=+m -verify-machineinstrs < %s | FileCheck --check-prefixes=CHECK,CHECK64,RV64IM %s |
4 |
| -; RUN: llc -mtriple=riscv64 -mattr=+m,+xventanacondops -verify-machineinstrs < %s | FileCheck --check-prefixes=CHECK,CHECK64,RV64IMXVTCONDOPS %s |
5 |
| -; RUN: llc -mtriple=riscv32 -mattr=+m,+experimental-zicond -verify-machineinstrs < %s | FileCheck --check-prefixes=CHECK,CHECK32,CHECKZICOND,RV32IMZICOND %s |
6 |
| -; RUN: llc -mtriple=riscv64 -mattr=+m,+experimental-zicond -verify-machineinstrs < %s | FileCheck --check-prefixes=CHECK,CHECK64,CHECKZICOND,RV64IMZICOND %s |
| 2 | +; RUN: llc -mtriple=riscv32 -mattr=+m -verify-machineinstrs < %s | FileCheck --check-prefixes=CHECK,RV32IM %s |
| 3 | +; RUN: llc -mtriple=riscv64 -mattr=+m -verify-machineinstrs < %s | FileCheck --check-prefixes=CHECK,RV64IM %s |
| 4 | +; RUN: llc -mtriple=riscv64 -mattr=+m,+xventanacondops -verify-machineinstrs < %s | FileCheck --check-prefixes=CHECK,RV64IMXVTCONDOPS %s |
| 5 | +; RUN: llc -mtriple=riscv32 -mattr=+m,+experimental-zicond -verify-machineinstrs < %s | FileCheck --check-prefixes=CHECK,CHECKZICOND,RV32IMZICOND %s |
| 6 | +; RUN: llc -mtriple=riscv64 -mattr=+m,+experimental-zicond -verify-machineinstrs < %s | FileCheck --check-prefixes=CHECK,CHECKZICOND,RV64IMZICOND %s |
7 | 7 |
|
8 | 8 | define i16 @select_xor_1(i16 %A, i8 %cond) {
|
9 |
| -; CHECK32-LABEL: select_xor_1: |
10 |
| -; CHECK32: # %bb.0: # %entry |
11 |
| -; CHECK32-NEXT: slli a1, a1, 31 |
12 |
| -; CHECK32-NEXT: srai a1, a1, 31 |
13 |
| -; CHECK32-NEXT: andi a1, a1, 43 |
14 |
| -; CHECK32-NEXT: xor a0, a0, a1 |
15 |
| -; CHECK32-NEXT: ret |
16 |
| -; |
17 |
| -; CHECK64-LABEL: select_xor_1: |
18 |
| -; CHECK64: # %bb.0: # %entry |
19 |
| -; CHECK64-NEXT: slli a1, a1, 63 |
20 |
| -; CHECK64-NEXT: srai a1, a1, 63 |
21 |
| -; CHECK64-NEXT: andi a1, a1, 43 |
22 |
| -; CHECK64-NEXT: xor a0, a0, a1 |
23 |
| -; CHECK64-NEXT: ret |
| 9 | +; RV32IM-LABEL: select_xor_1: |
| 10 | +; RV32IM: # %bb.0: # %entry |
| 11 | +; RV32IM-NEXT: slli a1, a1, 31 |
| 12 | +; RV32IM-NEXT: srai a1, a1, 31 |
| 13 | +; RV32IM-NEXT: andi a1, a1, 43 |
| 14 | +; RV32IM-NEXT: xor a0, a0, a1 |
| 15 | +; RV32IM-NEXT: ret |
| 16 | +; |
| 17 | +; RV64IM-LABEL: select_xor_1: |
| 18 | +; RV64IM: # %bb.0: # %entry |
| 19 | +; RV64IM-NEXT: slli a1, a1, 63 |
| 20 | +; RV64IM-NEXT: srai a1, a1, 63 |
| 21 | +; RV64IM-NEXT: andi a1, a1, 43 |
| 22 | +; RV64IM-NEXT: xor a0, a0, a1 |
| 23 | +; RV64IM-NEXT: ret |
| 24 | +; |
| 25 | +; RV64IMXVTCONDOPS-LABEL: select_xor_1: |
| 26 | +; RV64IMXVTCONDOPS: # %bb.0: # %entry |
| 27 | +; RV64IMXVTCONDOPS-NEXT: andi a1, a1, 1 |
| 28 | +; RV64IMXVTCONDOPS-NEXT: li a2, 43 |
| 29 | +; RV64IMXVTCONDOPS-NEXT: vt.maskc a1, a2, a1 |
| 30 | +; RV64IMXVTCONDOPS-NEXT: xor a0, a0, a1 |
| 31 | +; RV64IMXVTCONDOPS-NEXT: ret |
| 32 | +; |
| 33 | +; CHECKZICOND-LABEL: select_xor_1: |
| 34 | +; CHECKZICOND: # %bb.0: # %entry |
| 35 | +; CHECKZICOND-NEXT: andi a1, a1, 1 |
| 36 | +; CHECKZICOND-NEXT: li a2, 43 |
| 37 | +; CHECKZICOND-NEXT: czero.eqz a1, a2, a1 |
| 38 | +; CHECKZICOND-NEXT: xor a0, a0, a1 |
| 39 | +; CHECKZICOND-NEXT: ret |
24 | 40 | entry:
|
25 | 41 | %and = and i8 %cond, 1
|
26 | 42 | %cmp10 = icmp eq i8 %and, 0
|
@@ -72,21 +88,35 @@ entry:
|
72 | 88 | }
|
73 | 89 |
|
74 | 90 | define i32 @select_xor_2(i32 %A, i32 %B, i8 %cond) {
|
75 |
| -; CHECK32-LABEL: select_xor_2: |
76 |
| -; CHECK32: # %bb.0: # %entry |
77 |
| -; CHECK32-NEXT: slli a2, a2, 31 |
78 |
| -; CHECK32-NEXT: srai a2, a2, 31 |
79 |
| -; CHECK32-NEXT: and a1, a2, a1 |
80 |
| -; CHECK32-NEXT: xor a0, a0, a1 |
81 |
| -; CHECK32-NEXT: ret |
82 |
| -; |
83 |
| -; CHECK64-LABEL: select_xor_2: |
84 |
| -; CHECK64: # %bb.0: # %entry |
85 |
| -; CHECK64-NEXT: slli a2, a2, 63 |
86 |
| -; CHECK64-NEXT: srai a2, a2, 63 |
87 |
| -; CHECK64-NEXT: and a1, a2, a1 |
88 |
| -; CHECK64-NEXT: xor a0, a0, a1 |
89 |
| -; CHECK64-NEXT: ret |
| 91 | +; RV32IM-LABEL: select_xor_2: |
| 92 | +; RV32IM: # %bb.0: # %entry |
| 93 | +; RV32IM-NEXT: slli a2, a2, 31 |
| 94 | +; RV32IM-NEXT: srai a2, a2, 31 |
| 95 | +; RV32IM-NEXT: and a1, a2, a1 |
| 96 | +; RV32IM-NEXT: xor a0, a0, a1 |
| 97 | +; RV32IM-NEXT: ret |
| 98 | +; |
| 99 | +; RV64IM-LABEL: select_xor_2: |
| 100 | +; RV64IM: # %bb.0: # %entry |
| 101 | +; RV64IM-NEXT: slli a2, a2, 63 |
| 102 | +; RV64IM-NEXT: srai a2, a2, 63 |
| 103 | +; RV64IM-NEXT: and a1, a2, a1 |
| 104 | +; RV64IM-NEXT: xor a0, a0, a1 |
| 105 | +; RV64IM-NEXT: ret |
| 106 | +; |
| 107 | +; RV64IMXVTCONDOPS-LABEL: select_xor_2: |
| 108 | +; RV64IMXVTCONDOPS: # %bb.0: # %entry |
| 109 | +; RV64IMXVTCONDOPS-NEXT: andi a2, a2, 1 |
| 110 | +; RV64IMXVTCONDOPS-NEXT: vt.maskc a1, a1, a2 |
| 111 | +; RV64IMXVTCONDOPS-NEXT: xor a0, a0, a1 |
| 112 | +; RV64IMXVTCONDOPS-NEXT: ret |
| 113 | +; |
| 114 | +; CHECKZICOND-LABEL: select_xor_2: |
| 115 | +; CHECKZICOND: # %bb.0: # %entry |
| 116 | +; CHECKZICOND-NEXT: andi a2, a2, 1 |
| 117 | +; CHECKZICOND-NEXT: czero.eqz a1, a1, a2 |
| 118 | +; CHECKZICOND-NEXT: xor a0, a0, a1 |
| 119 | +; CHECKZICOND-NEXT: ret |
90 | 120 | entry:
|
91 | 121 | %and = and i8 %cond, 1
|
92 | 122 | %cmp10 = icmp eq i8 %and, 0
|
@@ -296,21 +326,35 @@ entry:
|
296 | 326 | }
|
297 | 327 |
|
298 | 328 | define i32 @select_or(i32 %A, i32 %B, i8 %cond) {
|
299 |
| -; CHECK32-LABEL: select_or: |
300 |
| -; CHECK32: # %bb.0: # %entry |
301 |
| -; CHECK32-NEXT: slli a2, a2, 31 |
302 |
| -; CHECK32-NEXT: srai a2, a2, 31 |
303 |
| -; CHECK32-NEXT: and a1, a2, a1 |
304 |
| -; CHECK32-NEXT: or a0, a0, a1 |
305 |
| -; CHECK32-NEXT: ret |
306 |
| -; |
307 |
| -; CHECK64-LABEL: select_or: |
308 |
| -; CHECK64: # %bb.0: # %entry |
309 |
| -; CHECK64-NEXT: slli a2, a2, 63 |
310 |
| -; CHECK64-NEXT: srai a2, a2, 63 |
311 |
| -; CHECK64-NEXT: and a1, a2, a1 |
312 |
| -; CHECK64-NEXT: or a0, a0, a1 |
313 |
| -; CHECK64-NEXT: ret |
| 329 | +; RV32IM-LABEL: select_or: |
| 330 | +; RV32IM: # %bb.0: # %entry |
| 331 | +; RV32IM-NEXT: slli a2, a2, 31 |
| 332 | +; RV32IM-NEXT: srai a2, a2, 31 |
| 333 | +; RV32IM-NEXT: and a1, a2, a1 |
| 334 | +; RV32IM-NEXT: or a0, a0, a1 |
| 335 | +; RV32IM-NEXT: ret |
| 336 | +; |
| 337 | +; RV64IM-LABEL: select_or: |
| 338 | +; RV64IM: # %bb.0: # %entry |
| 339 | +; RV64IM-NEXT: slli a2, a2, 63 |
| 340 | +; RV64IM-NEXT: srai a2, a2, 63 |
| 341 | +; RV64IM-NEXT: and a1, a2, a1 |
| 342 | +; RV64IM-NEXT: or a0, a0, a1 |
| 343 | +; RV64IM-NEXT: ret |
| 344 | +; |
| 345 | +; RV64IMXVTCONDOPS-LABEL: select_or: |
| 346 | +; RV64IMXVTCONDOPS: # %bb.0: # %entry |
| 347 | +; RV64IMXVTCONDOPS-NEXT: andi a2, a2, 1 |
| 348 | +; RV64IMXVTCONDOPS-NEXT: vt.maskc a1, a1, a2 |
| 349 | +; RV64IMXVTCONDOPS-NEXT: or a0, a0, a1 |
| 350 | +; RV64IMXVTCONDOPS-NEXT: ret |
| 351 | +; |
| 352 | +; CHECKZICOND-LABEL: select_or: |
| 353 | +; CHECKZICOND: # %bb.0: # %entry |
| 354 | +; CHECKZICOND-NEXT: andi a2, a2, 1 |
| 355 | +; CHECKZICOND-NEXT: czero.eqz a1, a1, a2 |
| 356 | +; CHECKZICOND-NEXT: or a0, a0, a1 |
| 357 | +; CHECKZICOND-NEXT: ret |
314 | 358 | entry:
|
315 | 359 | %and = and i8 %cond, 1
|
316 | 360 | %cmp10 = icmp eq i8 %and, 0
|
@@ -360,21 +404,35 @@ entry:
|
360 | 404 | }
|
361 | 405 |
|
362 | 406 | define i32 @select_or_1(i32 %A, i32 %B, i32 %cond) {
|
363 |
| -; CHECK32-LABEL: select_or_1: |
364 |
| -; CHECK32: # %bb.0: # %entry |
365 |
| -; CHECK32-NEXT: slli a2, a2, 31 |
366 |
| -; CHECK32-NEXT: srai a2, a2, 31 |
367 |
| -; CHECK32-NEXT: and a1, a2, a1 |
368 |
| -; CHECK32-NEXT: or a0, a0, a1 |
369 |
| -; CHECK32-NEXT: ret |
370 |
| -; |
371 |
| -; CHECK64-LABEL: select_or_1: |
372 |
| -; CHECK64: # %bb.0: # %entry |
373 |
| -; CHECK64-NEXT: slli a2, a2, 63 |
374 |
| -; CHECK64-NEXT: srai a2, a2, 63 |
375 |
| -; CHECK64-NEXT: and a1, a2, a1 |
376 |
| -; CHECK64-NEXT: or a0, a0, a1 |
377 |
| -; CHECK64-NEXT: ret |
| 407 | +; RV32IM-LABEL: select_or_1: |
| 408 | +; RV32IM: # %bb.0: # %entry |
| 409 | +; RV32IM-NEXT: slli a2, a2, 31 |
| 410 | +; RV32IM-NEXT: srai a2, a2, 31 |
| 411 | +; RV32IM-NEXT: and a1, a2, a1 |
| 412 | +; RV32IM-NEXT: or a0, a0, a1 |
| 413 | +; RV32IM-NEXT: ret |
| 414 | +; |
| 415 | +; RV64IM-LABEL: select_or_1: |
| 416 | +; RV64IM: # %bb.0: # %entry |
| 417 | +; RV64IM-NEXT: slli a2, a2, 63 |
| 418 | +; RV64IM-NEXT: srai a2, a2, 63 |
| 419 | +; RV64IM-NEXT: and a1, a2, a1 |
| 420 | +; RV64IM-NEXT: or a0, a0, a1 |
| 421 | +; RV64IM-NEXT: ret |
| 422 | +; |
| 423 | +; RV64IMXVTCONDOPS-LABEL: select_or_1: |
| 424 | +; RV64IMXVTCONDOPS: # %bb.0: # %entry |
| 425 | +; RV64IMXVTCONDOPS-NEXT: andi a2, a2, 1 |
| 426 | +; RV64IMXVTCONDOPS-NEXT: vt.maskc a1, a1, a2 |
| 427 | +; RV64IMXVTCONDOPS-NEXT: or a0, a0, a1 |
| 428 | +; RV64IMXVTCONDOPS-NEXT: ret |
| 429 | +; |
| 430 | +; CHECKZICOND-LABEL: select_or_1: |
| 431 | +; CHECKZICOND: # %bb.0: # %entry |
| 432 | +; CHECKZICOND-NEXT: andi a2, a2, 1 |
| 433 | +; CHECKZICOND-NEXT: czero.eqz a1, a1, a2 |
| 434 | +; CHECKZICOND-NEXT: or a0, a0, a1 |
| 435 | +; CHECKZICOND-NEXT: ret |
378 | 436 | entry:
|
379 | 437 | %and = and i32 %cond, 1
|
380 | 438 | %cmp10 = icmp eq i32 %and, 0
|
|
0 commit comments