[PATCH] D55286: VirtRegMap: Add pass option to not clear virt regs
Matt Arsenault via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 4 10:04:05 PST 2018
arsenm created this revision.
arsenm added a reviewer: MatzeB.
Herald added a subscriber: wdng.
In a future change it will be possible to run register
allocation with a specific set of register classes,
so some of the remaining virtual registers will still
be meaningful.
https://reviews.llvm.org/D55286
Files:
include/llvm/CodeGen/Passes.h
lib/CodeGen/VirtRegMap.cpp
Index: lib/CodeGen/VirtRegMap.cpp
===================================================================
--- lib/CodeGen/VirtRegMap.cpp
+++ lib/CodeGen/VirtRegMap.cpp
@@ -182,6 +182,7 @@
SlotIndexes *Indexes;
LiveIntervals *LIS;
VirtRegMap *VRM;
+ bool ClearVirtRegs;
void rewrite();
void addMBBLiveIns();
@@ -193,16 +194,21 @@
public:
static char ID;
-
- VirtRegRewriter() : MachineFunctionPass(ID) {}
+ VirtRegRewriter(bool ClearVirtRegs_ = true) :
+ MachineFunctionPass(ID),
+ ClearVirtRegs(ClearVirtRegs_) {}
void getAnalysisUsage(AnalysisUsage &AU) const override;
bool runOnMachineFunction(MachineFunction&) override;
MachineFunctionProperties getSetProperties() const override {
- return MachineFunctionProperties().set(
+ if (ClearVirtRegs) {
+ return MachineFunctionProperties().set(
MachineFunctionProperties::Property::NoVRegs);
+ }
+
+ return MachineFunctionProperties();
}
};
@@ -258,10 +264,13 @@
// Write out new DBG_VALUE instructions.
getAnalysis<LiveDebugVariables>().emitDebugValues(VRM);
- // All machine operands and other references to virtual registers have been
- // replaced. Remove the virtual registers and release all the transient data.
- VRM->clearAllVirt();
- MRI->clearVirtRegs();
+ if (ClearVirtRegs) {
+ // All machine operands and other references to virtual registers have been
+ // replaced. Remove the virtual registers and release all the transient data.
+ VRM->clearAllVirt();
+ MRI->clearVirtRegs();
+ }
+
return true;
}
@@ -592,3 +601,7 @@
}
}
}
+
+FunctionPass *llvm::createVirtRegRewriter(bool ClearVirtRegs) {
+ return new VirtRegRewriter(ClearVirtRegs);
+}
Index: include/llvm/CodeGen/Passes.h
===================================================================
--- include/llvm/CodeGen/Passes.h
+++ include/llvm/CodeGen/Passes.h
@@ -143,6 +143,7 @@
/// VirtRegRewriter pass. Rewrite virtual registers to physical registers as
/// assigned in VirtRegMap.
extern char &VirtRegRewriterID;
+ FunctionPass *createVirtRegRewriter(bool ClearVirtRegs = true);
/// UnreachableMachineBlockElimination - This pass removes unreachable
/// machine basic blocks.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D55286.176667.patch
Type: text/x-patch
Size: 2232 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181204/0c96e24b/attachment.bin>
More information about the llvm-commits
mailing list