mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-27 14:45:50 +00:00
Allow targets to inject passes before the virtual register rewriter.
Such passes can be used to tweak the register assignments in a target-dependent way, for example to avoid write-after-write dependencies. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159209 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0e20eb496e
commit
34f5a2b596
@ -175,6 +175,18 @@ protected:
|
||||
/// LLVMTargetMachine provides standard regalloc passes for most targets.
|
||||
virtual void addOptimizedRegAlloc(FunctionPass *RegAllocPass);
|
||||
|
||||
/// addPreRewrite - Add passes to the optimized register allocation pipeline
|
||||
/// after register allocation is complete, but before virtual registers are
|
||||
/// rewritten to physical registers.
|
||||
///
|
||||
/// These passes must preserve VirtRegMap and LiveIntervals, and when running
|
||||
/// after RABasic or RAGreedy, they should take advantage of LiveRegMatrix.
|
||||
/// When these passes run, VirtRegMap contains legal physreg assignments for
|
||||
/// all virtual registers.
|
||||
virtual bool addPreRewrite() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/// addFinalizeRegAlloc - This method may be implemented by targets that want
|
||||
/// to run passes within the regalloc pipeline, immediately after the register
|
||||
/// allocation pass itself. These passes run as soon as virtual regisiters
|
||||
|
@ -603,7 +603,11 @@ void TargetPassConfig::addOptimizedRegAlloc(FunctionPass *RegAllocPass) {
|
||||
|
||||
// Add the selected register allocation pass.
|
||||
PM->add(RegAllocPass);
|
||||
printAndVerify("After Register Allocation");
|
||||
printAndVerify("After Register Allocation, before rewriter");
|
||||
|
||||
// Allow targets to change the register assignments before rewriting.
|
||||
if (addPreRewrite())
|
||||
printAndVerify("After pre-rewrite passes");
|
||||
|
||||
// Finally rewrite virtual registers.
|
||||
addPass(VirtRegRewriterID);
|
||||
|
Loading…
Reference in New Issue
Block a user