Skip to content

Commit 71c9327

Browse files
committed
Delete the merge operand instead of the false operand, and add tests for it
1 parent 8564f79 commit 71c9327

File tree

2 files changed

+74
-2
lines changed

2 files changed

+74
-2
lines changed

llvm/lib/Target/RISCV/RISCVFoldMasks.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,9 @@ bool RISCVFoldMasks::convertVMergeToVMv(MachineInstr &MI, MachineInstr *V0Def) {
130130
return false;
131131

132132
MI.setDesc(TII->get(NewOpc));
133-
MI.removeOperand(2); // False operand
134-
MI.removeOperand(3); // Mask operand
133+
MI.removeOperand(1); // Merge operand
134+
MI.tieOperands(0, 1); // Tie false to dest
135+
MI.removeOperand(3); // Mask operand
135136
MI.addOperand(
136137
MachineOperand::CreateImm(RISCVII::TAIL_UNDISTURBED_MASK_UNDISTURBED));
137138

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 3
2+
# RUN: llc %s -o - -mtriple=riscv64 -mattr=+v -run-pass=riscv-fold-masks \
3+
# RUN: -verify-machineinstrs | FileCheck %s
4+
5+
---
6+
name: undef_passthru
7+
body: |
8+
bb.0:
9+
liveins: $x1, $v8, $v9
10+
; CHECK-LABEL: name: undef_passthru
11+
; CHECK: liveins: $x1, $v8, $v9
12+
; CHECK-NEXT: {{ $}}
13+
; CHECK-NEXT: %false:vr = COPY $v8
14+
; CHECK-NEXT: %true:vr = COPY $v9
15+
; CHECK-NEXT: %avl:gprnox0 = COPY $x1
16+
; CHECK-NEXT: %mask:vmv0 = PseudoVMSET_M_B8 %avl, 5 /* e32 */
17+
; CHECK-NEXT: $v0 = COPY %mask
18+
; CHECK-NEXT: %x:vr = PseudoVMV_V_V_M1 %false, %true, %avl, 5 /* e32 */, 0 /* tu, mu */
19+
%false:vr = COPY $v8
20+
%true:vr = COPY $v9
21+
%avl:gprnox0 = COPY $x1
22+
%mask:vmv0 = PseudoVMSET_M_B8 %avl, 5
23+
$v0 = COPY %mask
24+
%x:vrnov0 = PseudoVMERGE_VVM_M1 $noreg, %false, %true, $v0, %avl, 5
25+
...
26+
---
27+
name: undef_false
28+
body: |
29+
bb.0:
30+
liveins: $x1, $v8, $v9
31+
; CHECK-LABEL: name: undef_false
32+
; CHECK: liveins: $x1, $v8, $v9
33+
; CHECK-NEXT: {{ $}}
34+
; CHECK-NEXT: %pt:vrnov0 = COPY $v8
35+
; CHECK-NEXT: %false:vr = COPY $noreg
36+
; CHECK-NEXT: %true:vr = COPY $v9
37+
; CHECK-NEXT: %avl:gprnox0 = COPY $x1
38+
; CHECK-NEXT: %mask:vmv0 = PseudoVMSET_M_B8 %avl, 5 /* e32 */
39+
; CHECK-NEXT: $v0 = COPY %mask
40+
; CHECK-NEXT: %x:vrnov0 = PseudoVMERGE_VVM_M1 %pt, %false, %true, $v0, %avl, 5 /* e32 */
41+
%pt:vrnov0 = COPY $v8
42+
%false:vr = COPY $noreg
43+
%true:vr = COPY $v9
44+
%avl:gprnox0 = COPY $x1
45+
%mask:vmv0 = PseudoVMSET_M_B8 %avl, 5
46+
$v0 = COPY %mask
47+
%x:vrnov0 = PseudoVMERGE_VVM_M1 %pt, %false, %true, $v0, %avl, 5
48+
...
49+
---
50+
name: equal_passthru_false
51+
body: |
52+
bb.0:
53+
liveins: $x1, $v8, $v9
54+
; CHECK-LABEL: name: equal_passthru_false
55+
; CHECK: liveins: $x1, $v8, $v9
56+
; CHECK-NEXT: {{ $}}
57+
; CHECK-NEXT: %false:vr = COPY $v8
58+
; CHECK-NEXT: %pt:vrnov0 = COPY $v8
59+
; CHECK-NEXT: %true:vr = COPY $v9
60+
; CHECK-NEXT: %avl:gprnox0 = COPY $x1
61+
; CHECK-NEXT: %mask:vmv0 = PseudoVMSET_M_B8 %avl, 5 /* e32 */
62+
; CHECK-NEXT: $v0 = COPY %mask
63+
; CHECK-NEXT: %x:vr = PseudoVMV_V_V_M1 %false, %true, %avl, 5 /* e32 */, 0 /* tu, mu */
64+
%false:vr = COPY $v8
65+
%pt:vrnov0 = COPY $v8
66+
%true:vr = COPY $v9
67+
%avl:gprnox0 = COPY $x1
68+
%mask:vmv0 = PseudoVMSET_M_B8 %avl, 5
69+
$v0 = COPY %mask
70+
%x:vrnov0 = PseudoVMERGE_VVM_M1 %pt, %false, %true, $v0, %avl, 5
71+
...

0 commit comments

Comments
 (0)