[llvm] [RISCV] Move TargetOverlapConstraintType from RISCVVPseudo to TSFlags. NFC (PR #75877)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 18 16:10:10 PST 2023
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-risc-v
Author: Craig Topper (topperc)
<details>
<summary>Changes</summary>
It can be more efficiently accessed from TSFlags and won't require extra storage.
NFC because it wasn't exported to the cpp PseudoTable and isn't used in tree yet.
---
Full diff: https://github.com/llvm/llvm-project/pull/75877.diff
3 Files Affected:
- (modified) llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h (+9)
- (modified) llvm/lib/Target/RISCV/RISCVInstrFormats.td (+9)
- (modified) llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td (-8)
``````````diff
diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h
index 00b4751905f6ae..30ed36525e29f2 100644
--- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h
+++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h
@@ -113,6 +113,15 @@ enum {
UsesVXRMShift = HasRoundModeOpShift + 1,
UsesVXRMMask = 1 << UsesVXRMShift,
+
+ // Indicates whether these instructions can partially overlap between source
+ // registers and destination registers according to the vector spec.
+ // 0 -> not a vector pseudo
+ // 1 -> default value for vector pseudos. not widening or narrowing.
+ // 2 -> narrowing case
+ // 3 -> widening case
+ TargetOverlapConstraintTypeShift = UsesVXRMShift + 1,
+ TargetOverlapConstraintTypeMask = 3ULL << TargetOverlapConstraintTypeShift,
};
enum VLMUL : uint8_t {
diff --git a/llvm/lib/Target/RISCV/RISCVInstrFormats.td b/llvm/lib/Target/RISCV/RISCVInstrFormats.td
index e80ba26800a131..f56f49ae24571e 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrFormats.td
+++ b/llvm/lib/Target/RISCV/RISCVInstrFormats.td
@@ -212,6 +212,15 @@ class RVInstCommon<dag outs, dag ins, string opcodestr, string argstr,
// to the correct CSR.
bit UsesVXRM = 0;
let TSFlags{20} = UsesVXRM;
+
+ // Indicates whther these instructions can partially overlap between source
+ // registers and destination registers according to the vector spec.
+ // 0 -> not a vector pseudo
+ // 1 -> default value for vector pseudos. not widening or narrowing.
+ // 2 -> narrowing case
+ // 3 -> widening case
+ bits<2> TargetOverlapConstraintType = 0;
+ let TSFlags{22-21} = TargetOverlapConstraintType;
}
class RVInst<dag outs, dag ins, string opcodestr, string argstr,
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td
index 5e06422cf9ada7..488ffa73f4e484 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td
@@ -529,14 +529,6 @@ class RISCVVPseudo {
// SEW = 0 is used to denote that the Pseudo is not SEW specific (or unknown).
bits<8> SEW = 0;
bit NeedBeInPseudoTable = 1;
- // TargetOverlapConstraintType indicates that these instructions can
- // overlap between source operands and destination operands.
- // 1 -> default value, remain current constraint
- // 2 -> narrow case
- // 3 -> widen case
- // TODO: Add TargetOverlapConstraintType into PseudosTable for further
- // query.
- bits<2> TargetOverlapConstraintType = 1;
}
// The actual table.
``````````
</details>
https://github.com/llvm/llvm-project/pull/75877
More information about the llvm-commits
mailing list