[llvm] 6716195 - [RISCV] Merge TIED_TU and TIED instructions for VWADD_W/VWSUB_W by using policy operand.
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 16 10:06:37 PDT 2022
Author: Craig Topper
Date: 2022-06-16T10:06:11-07:00
New Revision: 6716195cd71bb2e083b23f247f2c36bac2171a58
URL: https://github.com/llvm/llvm-project/commit/6716195cd71bb2e083b23f247f2c36bac2171a58
DIFF: https://github.com/llvm/llvm-project/commit/6716195cd71bb2e083b23f247f2c36bac2171a58.diff
LOG: [RISCV] Merge TIED_TU and TIED instructions for VWADD_W/VWSUB_W by using policy operand.
This removes one of the uses of ForceTailUndisturbed.
Added:
Modified:
llvm/lib/Target/RISCV/RISCVInstrInfo.cpp
llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td
Removed:
################################################################################
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp b/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp
index a5cf2b0c4eed..edfab04adde3 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp
@@ -1713,6 +1713,12 @@ MachineInstr *RISCVInstrInfo::convertToThreeAddress(MachineInstr &MI,
case CASE_WIDEOP_OPCODE_LMULS(WADDU_WV):
case CASE_WIDEOP_OPCODE_LMULS(WSUB_WV):
case CASE_WIDEOP_OPCODE_LMULS(WSUBU_WV): {
+ // If the tail policy is undisturbed we can't convert.
+ assert(RISCVII::hasVecPolicyOp(MI.getDesc().TSFlags) &&
+ MI.getNumExplicitOperands() == 6);
+ if ((MI.getOperand(5).getImm() & 1) == 0)
+ return nullptr;
+
// clang-format off
unsigned NewOpc;
switch (MI.getOpcode()) {
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td
index 72f2f595e79d..c1e6dd045198 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td
@@ -1097,7 +1097,8 @@ class VPseudoTiedBinaryNoMask<VReg RetClass,
DAGOperand Op2Class,
string Constraint> :
Pseudo<(outs RetClass:$rd),
- (ins RetClass:$rs2, Op2Class:$rs1, AVL:$vl, ixlenimm:$sew), []>,
+ (ins RetClass:$rs2, Op2Class:$rs1, AVL:$vl, ixlenimm:$sew,
+ ixlenimm:$policy), []>,
RISCVVPseudo {
let mayLoad = 0;
let mayStore = 0;
@@ -1106,28 +1107,10 @@ class VPseudoTiedBinaryNoMask<VReg RetClass,
let HasVLOp = 1;
let HasSEWOp = 1;
let HasDummyMask = 1;
- let ForceTailAgnostic = 1;
+ let HasVecPolicyOp = 1;
let isConvertibleToThreeAddress = 1;
}
-class VPseudoTiedBinaryNoMaskTU<VReg RetClass,
- DAGOperand Op2Class,
- string Constraint> :
- Pseudo<(outs RetClass:$rd),
- (ins RetClass:$merge,
- Op2Class:$rs1,
- AVL:$vl, ixlenimm:$sew), []>,
- RISCVVPseudo {
- let mayLoad = 0;
- let mayStore = 0;
- let hasSideEffects = 0;
- let Constraints = Join<[Constraint, "$rd = $merge"], ",">.ret;
- let HasVLOp = 1;
- let HasSEWOp = 1;
- let HasMergeOp = 0; // Merge is also rs2.
- let HasDummyMask = 1;
-}
-
class VPseudoIStoreNoMask<VReg StClass, VReg IdxClass, int EEW, bits<3> LMUL,
bit Ordered>:
Pseudo<(outs),
@@ -1891,8 +1874,6 @@ multiclass VPseudoTiedBinary<VReg RetClass,
let VLMul = MInfo.value in {
def "_" # MInfo.MX # "_TIED": VPseudoTiedBinaryNoMask<RetClass, Op2Class,
Constraint>;
- def "_" # MInfo.MX # "_TIED_TU": VPseudoTiedBinaryNoMaskTU<RetClass, Op2Class,
- Constraint>;
def "_" # MInfo.MX # "_MASK_TIED" : VPseudoTiedBinaryMask<RetClass, Op2Class,
Constraint>;
}
@@ -3256,7 +3237,7 @@ class VPatTiedBinaryNoMask<string intrinsic_name,
(!cast<Instruction>(inst#"_TIED")
(result_type result_reg_class:$rs1),
(op2_type op2_kind:$rs2),
- GPR:$vl, sew)>;
+ GPR:$vl, sew, TAIL_AGNOSTIC)>;
class VPatTiedBinaryNoMaskTU<string intrinsic_name,
string inst,
@@ -3270,10 +3251,10 @@ class VPatTiedBinaryNoMaskTU<string intrinsic_name,
(result_type result_reg_class:$merge),
(op2_type op2_kind:$rs2),
VLOpFrag)),
- (!cast<Instruction>(inst#"_TIED_TU")
+ (!cast<Instruction>(inst#"_TIED")
(result_type result_reg_class:$merge),
(op2_type op2_kind:$rs2),
- GPR:$vl, sew)>;
+ GPR:$vl, sew, TAIL_UNDISTURBED_MASK_UNDISTURBED)>;
class VPatTiedBinaryMask<string intrinsic_name,
string inst,
More information about the llvm-commits
mailing list