mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:40:38 +00:00
Remove uses of the TargetMachine from FunctionLoweringInfo
via caching TargetLowering and using the MachineFunction. llvm-svn: 219375
This commit is contained in:
parent
4e189e100b
commit
065fdace2e
@ -51,10 +51,10 @@ class Value;
|
||||
/// function that is used when lowering a region of the function.
|
||||
///
|
||||
class FunctionLoweringInfo {
|
||||
const TargetMachine &TM;
|
||||
public:
|
||||
const Function *Fn;
|
||||
MachineFunction *MF;
|
||||
const TargetLowering *TLI;
|
||||
MachineRegisterInfo *RegInfo;
|
||||
BranchProbabilityInfo *BPI;
|
||||
/// CanLowerReturn - true iff the function's return value can be lowered to
|
||||
@ -127,8 +127,6 @@ public:
|
||||
/// SelectionDAGISel::PrepareEHLandingPad().
|
||||
unsigned ExceptionPointerVirtReg, ExceptionSelectorVirtReg;
|
||||
|
||||
explicit FunctionLoweringInfo(const TargetMachine &TM) : TM(TM) {}
|
||||
|
||||
/// set - Initialize this FunctionLoweringInfo with the given Function
|
||||
/// and its associated MachineFunction.
|
||||
///
|
||||
|
@ -80,18 +80,16 @@ static ISD::NodeType getPreferredExtendForValue(const Value *V) {
|
||||
|
||||
void FunctionLoweringInfo::set(const Function &fn, MachineFunction &mf,
|
||||
SelectionDAG *DAG) {
|
||||
const TargetLowering *TLI = TM.getSubtargetImpl()->getTargetLowering();
|
||||
|
||||
Fn = &fn;
|
||||
MF = &mf;
|
||||
TLI = MF->getSubtarget().getTargetLowering();
|
||||
RegInfo = &MF->getRegInfo();
|
||||
|
||||
// Check whether the function can return without sret-demotion.
|
||||
SmallVector<ISD::OutputArg, 4> Outs;
|
||||
GetReturnInfo(Fn->getReturnType(), Fn->getAttributes(), Outs, *TLI);
|
||||
CanLowerReturn = TLI->CanLowerReturn(Fn->getCallingConv(), *MF,
|
||||
Fn->isVarArg(),
|
||||
Outs, Fn->getContext());
|
||||
Fn->isVarArg(), Outs, Fn->getContext());
|
||||
|
||||
// Initialize the mapping of values to registers. This is only set up for
|
||||
// instruction values that are used outside of the block that defines
|
||||
@ -107,8 +105,8 @@ void FunctionLoweringInfo::set(const Function &fn, MachineFunction &mf,
|
||||
Type *Ty = AI->getAllocatedType();
|
||||
uint64_t TySize = TLI->getDataLayout()->getTypeAllocSize(Ty);
|
||||
unsigned Align =
|
||||
std::max((unsigned)TLI->getDataLayout()->getPrefTypeAlignment(Ty),
|
||||
AI->getAlignment());
|
||||
std::max((unsigned)TLI->getDataLayout()->getPrefTypeAlignment(Ty),
|
||||
AI->getAlignment());
|
||||
|
||||
TySize *= CUI->getZExtValue(); // Get total allocated size.
|
||||
if (TySize == 0) TySize = 1; // Don't create zero-sized stack objects.
|
||||
@ -122,7 +120,7 @@ void FunctionLoweringInfo::set(const Function &fn, MachineFunction &mf,
|
||||
AI->getAllocatedType()),
|
||||
AI->getAlignment());
|
||||
unsigned StackAlign =
|
||||
TM.getSubtargetImpl()->getFrameLowering()->getStackAlignment();
|
||||
MF->getSubtarget().getFrameLowering()->getStackAlignment();
|
||||
if (Align <= StackAlign)
|
||||
Align = 0;
|
||||
// Inform the Frame Information that we have variable-sized objects.
|
||||
@ -142,9 +140,9 @@ void FunctionLoweringInfo::set(const Function &fn, MachineFunction &mf,
|
||||
if (Op.Type == InlineAsm::isClobber) {
|
||||
// Clobbers don't have SDValue operands, hence SDValue().
|
||||
TLI->ComputeConstraintToUse(Op, SDValue(), DAG);
|
||||
std::pair<unsigned, const TargetRegisterClass*> PhysReg =
|
||||
TLI->getRegForInlineAsmConstraint(Op.ConstraintCode,
|
||||
Op.ConstraintVT);
|
||||
std::pair<unsigned, const TargetRegisterClass *> PhysReg =
|
||||
TLI->getRegForInlineAsmConstraint(Op.ConstraintCode,
|
||||
Op.ConstraintVT);
|
||||
if (PhysReg.first == SP)
|
||||
MF->getFrameInfo()->setHasInlineAsmWithSPAdjust(true);
|
||||
}
|
||||
@ -281,7 +279,7 @@ void FunctionLoweringInfo::clear() {
|
||||
/// CreateReg - Allocate a single virtual register for the given type.
|
||||
unsigned FunctionLoweringInfo::CreateReg(MVT VT) {
|
||||
return RegInfo->createVirtualRegister(
|
||||
TM.getSubtargetImpl()->getTargetLowering()->getRegClassFor(VT));
|
||||
MF->getSubtarget().getTargetLowering()->getRegClassFor(VT));
|
||||
}
|
||||
|
||||
/// CreateRegs - Allocate the appropriate number of virtual registers of
|
||||
@ -292,7 +290,7 @@ unsigned FunctionLoweringInfo::CreateReg(MVT VT) {
|
||||
/// will assign registers for each member or element.
|
||||
///
|
||||
unsigned FunctionLoweringInfo::CreateRegs(Type *Ty) {
|
||||
const TargetLowering *TLI = TM.getSubtargetImpl()->getTargetLowering();
|
||||
const TargetLowering *TLI = MF->getSubtarget().getTargetLowering();
|
||||
|
||||
SmallVector<EVT, 4> ValueVTs;
|
||||
ComputeValueVTs(*TLI, Ty, ValueVTs);
|
||||
@ -341,8 +339,6 @@ void FunctionLoweringInfo::ComputePHILiveOutRegInfo(const PHINode *PN) {
|
||||
if (!Ty->isIntegerTy() || Ty->isVectorTy())
|
||||
return;
|
||||
|
||||
const TargetLowering *TLI = TM.getSubtargetImpl()->getTargetLowering();
|
||||
|
||||
SmallVector<EVT, 1> ValueVTs;
|
||||
ComputeValueVTs(*TLI, Ty, ValueVTs);
|
||||
assert(ValueVTs.size() == 1 &&
|
||||
|
@ -336,7 +336,7 @@ void TargetLowering::AdjustInstrPostInstrSelection(MachineInstr *MI,
|
||||
SelectionDAGISel::SelectionDAGISel(TargetMachine &tm,
|
||||
CodeGenOpt::Level OL) :
|
||||
MachineFunctionPass(ID), TM(tm),
|
||||
FuncInfo(new FunctionLoweringInfo(TM)),
|
||||
FuncInfo(new FunctionLoweringInfo()),
|
||||
CurDAG(new SelectionDAG(tm, OL)),
|
||||
SDB(new SelectionDAGBuilder(*CurDAG, *FuncInfo, OL)),
|
||||
GFI(),
|
||||
|
Loading…
Reference in New Issue
Block a user