mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-12 13:38:21 +00:00
RegAlloc superpass: includes phi elimination, coalescing, and scheduling.
Creates a configurable regalloc pipeline. Ensure specific llc options do what they say and nothing more: -reglloc=... has no effect other than selecting the allocator pass itself. This patch introduces a new umbrella flag, "-optimize-regalloc", to enable/disable the optimizing regalloc "superpass". This allows for example testing coalscing and scheduling under -O0 or vice-versa. When a CodeGen pass requires the MachineFunction to have a particular property, we need to explicitly define that property so it can be directly queried rather than naming a specific Pass. For example, to check for SSA, use MRI->isSSA, not addRequired<PHIElimination>. CodeGen transformation passes are never "required" as an analysis ProcessImplicitDefs does not require LiveVariables. We have a plan to massively simplify some of the early passes within the regalloc superpass. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150226 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -33,6 +33,7 @@
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Target/TargetInstrInfo.h"
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/ADT/DepthFirstIterator.h"
|
||||
#include "llvm/ADT/SmallPtrSet.h"
|
||||
#include "llvm/ADT/SmallSet.h"
|
||||
@ -41,6 +42,7 @@
|
||||
using namespace llvm;
|
||||
|
||||
char LiveVariables::ID = 0;
|
||||
char &llvm::LiveVariablesID = LiveVariables::ID;
|
||||
INITIALIZE_PASS_BEGIN(LiveVariables, "livevars",
|
||||
"Live Variable Analysis", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(UnreachableMachineBlockElim)
|
||||
@ -511,6 +513,12 @@ bool LiveVariables::runOnMachineFunction(MachineFunction &mf) {
|
||||
std::fill(PhysRegUse, PhysRegUse + NumRegs, (MachineInstr*)0);
|
||||
PHIJoins.clear();
|
||||
|
||||
// FIXME: LiveIntervals will be updated to remove its dependence on
|
||||
// LiveVariables to improve compilation time and eliminate bizarre pass
|
||||
// dependencies. Until then, we can't change much in -O0.
|
||||
if (!MRI->isSSA())
|
||||
report_fatal_error("regalloc=... not currently supported with -O0");
|
||||
|
||||
analyzePHINodes(mf);
|
||||
|
||||
// Calculate live variable information in depth first order on the CFG of the
|
||||
|
Reference in New Issue
Block a user