Skip to content

Commit 4666a7f

Browse files
fixup! respond to review
1 parent fe55f64 commit 4666a7f

File tree

2 files changed

+35
-10
lines changed

2 files changed

+35
-10
lines changed

llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class RISCVVLOptimizer : public MachineFunctionPass {
5050
StringRef getPassName() const override { return PASS_NAME; }
5151

5252
private:
53-
std::optional<MachineOperand> getVLForUser(MachineOperand &UserOp);
53+
std::optional<MachineOperand> getMinimumVLForUser(MachineOperand &UserOp);
5454
/// Returns the largest common VL MachineOperand that may be used to optimize
5555
/// MI. Returns std::nullopt if it failed to find a suitable VL.
5656
std::optional<MachineOperand> checkUsers(MachineInstr &MI);
@@ -1056,7 +1056,7 @@ bool RISCVVLOptimizer::isCandidate(const MachineInstr &MI) const {
10561056
}
10571057

10581058
std::optional<MachineOperand>
1059-
RISCVVLOptimizer::getVLForUser(MachineOperand &UserOp) {
1059+
RISCVVLOptimizer::getMinimumVLForUser(MachineOperand &UserOp) {
10601060
const MachineInstr &UserMI = *UserOp.getParent();
10611061
const MCInstrDesc &Desc = UserMI.getDesc();
10621062

@@ -1081,12 +1081,9 @@ RISCVVLOptimizer::getVLForUser(MachineOperand &UserOp) {
10811081

10821082
unsigned VLOpNum = RISCVII::getVLOpNum(Desc);
10831083
const MachineOperand &VLOp = UserMI.getOperand(VLOpNum);
1084-
if (VLOp.isReg() || (VLOp.isImm() && VLOp.getImm() != 0))
1085-
return MachineOperand::CreateImm(1);
1086-
LLVM_DEBUG(dbgs() << " Abort because could not determine VL of vector "
1087-
"operand used as scalar operand\n");
1088-
1089-
return std::nullopt;
1084+
return VLOp.isReg() || (VLOp.isImm() && VLOp.getImm() != 0)
1085+
? MachineOperand::CreateImm(1)
1086+
: VLOp;
10901087
}
10911088

10921089
unsigned VLOpNum = RISCVII::getVLOpNum(Desc);
@@ -1117,7 +1114,7 @@ std::optional<MachineOperand> RISCVVLOptimizer::checkUsers(MachineInstr &MI) {
11171114
return std::nullopt;
11181115
}
11191116

1120-
auto VLOp = getVLForUser(UserOp);
1117+
auto VLOp = getMinimumVLForUser(UserOp);
11211118
if (!VLOp)
11221119
return std::nullopt;
11231120

llvm/test/CodeGen/RISCV/rvv/vl-opt-op-info.mir

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1160,14 +1160,42 @@ name: vred_both_vl0
11601160
body: |
11611161
bb.0:
11621162
; CHECK-LABEL: name: vred_both_vl0
1163-
; CHECK: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */
1163+
; CHECK: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, 0, 3 /* e8 */, 0 /* tu, mu */
11641164
; CHECK-NEXT: %y:vr = PseudoVREDSUM_VS_M1_E8 $noreg, $noreg, %x, 0, 3 /* e8 */, 0 /* tu, mu */
11651165
; CHECK-NEXT: %z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 0, 3 /* e8 */, 0 /* tu, mu */
11661166
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0
11671167
%y:vr = PseudoVREDSUM_VS_M1_E8 $noreg, $noreg, %x, 0, 3 /* e8 */, 0
11681168
%z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 0, 3 /* e8 */, 0
11691169
...
11701170
---
1171+
name: vred_vl0_and_vlreg
1172+
body: |
1173+
bb.0:
1174+
; CHECK-LABEL: name: vred_vl0_and_vlreg
1175+
; CHECK: %vl:gprnox0 = COPY $x1
1176+
; CHECK-NEXT: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */
1177+
; CHECK-NEXT: %y:vr = PseudoVREDSUM_VS_M1_E8 $noreg, $noreg, %x, %vl, 3 /* e8 */, 0 /* tu, mu */
1178+
; CHECK-NEXT: %z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 0, 3 /* e8 */, 0 /* tu, mu */
1179+
%vl:gprnox0 = COPY $x1
1180+
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0
1181+
%y:vr = PseudoVREDSUM_VS_M1_E8 $noreg, $noreg, %x, %vl, 3 /* e8 */, 0
1182+
%z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 0, 3 /* e8 */, 0
1183+
...
1184+
---
1185+
name: vred_vlreg_and_vl0
1186+
body: |
1187+
bb.0:
1188+
; CHECK-LABEL: name: vred_vlreg_and_vl0
1189+
; CHECK: %vl:gprnox0 = COPY $x1
1190+
; CHECK-NEXT: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */
1191+
; CHECK-NEXT: %y:vr = PseudoVREDSUM_VS_M1_E8 $noreg, $noreg, %x, 0, 3 /* e8 */, 0 /* tu, mu */
1192+
; CHECK-NEXT: %z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl, 3 /* e8 */, 0 /* tu, mu */
1193+
%vl:gprnox0 = COPY $x1
1194+
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0
1195+
%y:vr = PseudoVREDSUM_VS_M1_E8 $noreg, $noreg, %x, 0, 3 /* e8 */, 0
1196+
%z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl, 3 /* e8 */, 0
1197+
...
1198+
---
11711199
name: vred_other_user_is_vl2
11721200
body: |
11731201
bb.0:

0 commit comments

Comments
 (0)