[llvm] [TableGen] Enhance testability of TableGen-based macro fusion (PR #73075)
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 21 20:21:19 PST 2023
================
@@ -14,16 +14,62 @@
using namespace llvm;
+static cl::list<std::string> MFusions("mfusion", cl::CommaSeparated,
+ cl::desc("Target specific macro fusions"),
+ cl::value_desc("a1,+a2,-a3,..."));
+
TargetSubtargetInfo::TargetSubtargetInfo(
const Triple &TT, StringRef CPU, StringRef TuneCPU, StringRef FS,
ArrayRef<SubtargetFeatureKV> PF, ArrayRef<SubtargetSubTypeKV> PD,
const MCWriteProcResEntry *WPR, const MCWriteLatencyEntry *WL,
const MCReadAdvanceEntry *RA, const InstrStage *IS, const unsigned *OC,
- const unsigned *FP)
- : MCSubtargetInfo(TT, CPU, TuneCPU, FS, PF, PD, WPR, WL, RA, IS, OC, FP) {}
+ const unsigned *FP, ArrayRef<MacroFusionEntry> MF)
+ : MCSubtargetInfo(TT, CPU, TuneCPU, FS, PF, PD, WPR, WL, RA, IS, OC, FP),
+ MacroFusionTable(MF) {
+ // assert if MacroFusionTable is not sorted.
+ assert(llvm::is_sorted(MacroFusionTable));
+ overrideFusionBits();
+}
TargetSubtargetInfo::~TargetSubtargetInfo() = default;
+void TargetSubtargetInfo::overrideFusionBits() {
+ if (MFusions.getNumOccurrences() != 0) {
+ for (std::string &MFusion : MFusions) {
+ char Prefix = MFusion[0];
+ bool Disable = Prefix == '-';
+ if (Prefix == '+' || Prefix == '-')
+ MFusion = MFusion.substr(1);
+
+ // MacroFusionTable is sorted.
+ const auto *Pos = std::lower_bound(
+ MacroFusionTable.begin(), MacroFusionTable.end(), MFusion,
+ [](const MacroFusionEntry &LHS, const std::string &RHS) {
+ int CmpName = StringRef(LHS.Name).compare(RHS);
----------------
topperc wrote:
Isn't this just `return String(LHS.Name).compare(RHS) < 0`
https://github.com/llvm/llvm-project/pull/73075
More information about the llvm-commits
mailing list