aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrzysztof Parzyszek <kparzysz@quicinc.com>2022-08-06 14:29:19 -0500
committerKrzysztof Parzyszek <kparzysz@quicinc.com>2022-08-06 14:32:52 -0500
commit2bc390bdd66c9e0bc888f3bbe3eba473a54ff431 (patch)
tree2942937830978d8a73a9350496586fcdf137cf7d
parent0c9258612b67153e6760a330eb4cba1233e665b1 (diff)
[RDF] Use default TargetOperandInfo if not given in constructor
All current in-tree users use the default implementation.
-rw-r--r--llvm/include/llvm/CodeGen/RDFGraph.h7
-rw-r--r--llvm/lib/CodeGen/RDFGraph.cpp8
-rw-r--r--llvm/lib/Target/Hexagon/HexagonOptAddrMode.cpp3
-rw-r--r--llvm/lib/Target/Hexagon/HexagonRDFOpt.cpp3
-rw-r--r--llvm/lib/Target/X86/X86LoadValueInjectionLoadHardening.cpp3
5 files changed, 18 insertions, 6 deletions
diff --git a/llvm/include/llvm/CodeGen/RDFGraph.h b/llvm/include/llvm/CodeGen/RDFGraph.h
index a323ee9dc396..4a8428fce20a 100644
--- a/llvm/include/llvm/CodeGen/RDFGraph.h
+++ b/llvm/include/llvm/CodeGen/RDFGraph.h
@@ -233,6 +233,7 @@
#include <cstdint>
#include <cstring>
#include <map>
+#include <memory>
#include <set>
#include <unordered_map>
#include <utility>
@@ -644,6 +645,9 @@ namespace rdf {
struct DataFlowGraph {
DataFlowGraph(MachineFunction &mf, const TargetInstrInfo &tii,
const TargetRegisterInfo &tri, const MachineDominatorTree &mdt,
+ const MachineDominanceFrontier &mdf);
+ DataFlowGraph(MachineFunction &mf, const TargetInstrInfo &tii,
+ const TargetRegisterInfo &tri, const MachineDominatorTree &mdt,
const MachineDominanceFrontier &mdf, const TargetOperandInfo &toi);
NodeBase *ptr(NodeId N) const;
@@ -861,6 +865,9 @@ namespace rdf {
IA.Addr->removeMember(RA, *this);
}
+ // Default TOI object, if not given in the constructor.
+ std::unique_ptr<TargetOperandInfo> DefaultTOI;
+
MachineFunction &MF;
const TargetInstrInfo &TII;
const TargetRegisterInfo &TRI;
diff --git a/llvm/lib/CodeGen/RDFGraph.cpp b/llvm/lib/CodeGen/RDFGraph.cpp
index df5ec9c3ea3b..4f7457d9efa6 100644
--- a/llvm/lib/CodeGen/RDFGraph.cpp
+++ b/llvm/lib/CodeGen/RDFGraph.cpp
@@ -648,6 +648,14 @@ bool TargetOperandInfo::isFixedReg(const MachineInstr &In, unsigned OpNum)
DataFlowGraph::DataFlowGraph(MachineFunction &mf, const TargetInstrInfo &tii,
const TargetRegisterInfo &tri, const MachineDominatorTree &mdt,
+ const MachineDominanceFrontier &mdf)
+ : DefaultTOI(std::make_unique<TargetOperandInfo>(tii)), MF(mf), TII(tii),
+ TRI(tri), PRI(tri, mf), MDT(mdt), MDF(mdf), TOI(*DefaultTOI),
+ LiveIns(PRI) {
+}
+
+DataFlowGraph::DataFlowGraph(MachineFunction &mf, const TargetInstrInfo &tii,
+ const TargetRegisterInfo &tri, const MachineDominatorTree &mdt,
const MachineDominanceFrontier &mdf, const TargetOperandInfo &toi)
: MF(mf), TII(tii), TRI(tri), PRI(tri, mf), MDT(mdt), MDF(mdf), TOI(toi),
LiveIns(PRI) {
diff --git a/llvm/lib/Target/Hexagon/HexagonOptAddrMode.cpp b/llvm/lib/Target/Hexagon/HexagonOptAddrMode.cpp
index 311e43d77210..b816a7d8d495 100644
--- a/llvm/lib/Target/Hexagon/HexagonOptAddrMode.cpp
+++ b/llvm/lib/Target/Hexagon/HexagonOptAddrMode.cpp
@@ -863,9 +863,8 @@ bool HexagonOptAddrMode::runOnMachineFunction(MachineFunction &MF) {
HRI = HST.getRegisterInfo();
const auto &MDF = getAnalysis<MachineDominanceFrontier>();
MDT = &getAnalysis<MachineDominatorTree>();
- const TargetOperandInfo TOI(*HII);
- DataFlowGraph G(MF, *HII, *HRI, *MDT, MDF, TOI);
+ DataFlowGraph G(MF, *HII, *HRI, *MDT, MDF);
// Need to keep dead phis because we can propagate uses of registers into
// nodes dominated by those would-be phis.
G.build(BuildOptions::KeepDeadPhis);
diff --git a/llvm/lib/Target/Hexagon/HexagonRDFOpt.cpp b/llvm/lib/Target/Hexagon/HexagonRDFOpt.cpp
index fb6918949cce..78ab44379af1 100644
--- a/llvm/lib/Target/Hexagon/HexagonRDFOpt.cpp
+++ b/llvm/lib/Target/Hexagon/HexagonRDFOpt.cpp
@@ -299,8 +299,7 @@ bool HexagonRDFOpt::runOnMachineFunction(MachineFunction &MF) {
if (RDFDump)
MF.print(dbgs() << "Before " << getPassName() << "\n", nullptr);
- TargetOperandInfo TOI(HII);
- DataFlowGraph G(MF, HII, HRI, *MDT, MDF, TOI);
+ DataFlowGraph G(MF, HII, HRI, *MDT, MDF);
// Dead phi nodes are necessary for copy propagation: we can add a use
// of a register in a block where it would need a phi node, but which
// was dead (and removed) during the graph build time.
diff --git a/llvm/lib/Target/X86/X86LoadValueInjectionLoadHardening.cpp b/llvm/lib/Target/X86/X86LoadValueInjectionLoadHardening.cpp
index 23976fb1a142..5d9a9231fea9 100644
--- a/llvm/lib/Target/X86/X86LoadValueInjectionLoadHardening.cpp
+++ b/llvm/lib/Target/X86/X86LoadValueInjectionLoadHardening.cpp
@@ -331,8 +331,7 @@ X86LoadValueInjectionLoadHardeningPass::getGadgetGraph(
using namespace rdf;
// Build the Register Dataflow Graph using the RDF framework
- TargetOperandInfo TOI{*TII};
- DataFlowGraph DFG{MF, *TII, *TRI, MDT, MDF, TOI};
+ DataFlowGraph DFG{MF, *TII, *TRI, MDT, MDF};
DFG.build();
Liveness L{MF.getRegInfo(), DFG};
L.computePhiInfo();