mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
Refactor the LiveOutInfo interface into a few methods on FunctionLoweringInfo
and make the actual map private. llvm-svn: 126376
This commit is contained in:
parent
e49bf60392
commit
3d2f99227a
@ -106,9 +106,6 @@ public:
|
||||
LiveOutInfo() : NumSignBits(0), KnownOne(1, 0), KnownZero(1, 0) {}
|
||||
};
|
||||
|
||||
/// LiveOutRegInfo - Information about live out vregs.
|
||||
IndexedMap<LiveOutInfo, VirtReg2IndexFunctor> LiveOutRegInfo;
|
||||
|
||||
/// PHINodesToUpdate - A list of phi instructions whose operand list will
|
||||
/// be updated after processing the current basic block.
|
||||
/// TODO: This isn't per-function state, it's per-basic-block state. But
|
||||
@ -143,12 +140,38 @@ public:
|
||||
return R = CreateRegs(V->getType());
|
||||
}
|
||||
|
||||
/// GetLiveOutRegInfo - Gets LiveOutInfo for a register, returning NULL if the
|
||||
/// register is a PHI destination and the PHI's LiveOutInfo is not valid.
|
||||
const LiveOutInfo *GetLiveOutRegInfo(unsigned Reg) {
|
||||
if (!LiveOutRegInfo.inBounds(Reg))
|
||||
return NULL;
|
||||
return &LiveOutRegInfo[Reg];
|
||||
}
|
||||
|
||||
/// AddLiveOutRegInfo - Adds LiveOutInfo for a register.
|
||||
void AddLiveOutRegInfo(unsigned Reg, unsigned NumSignBits,
|
||||
const APInt &KnownZero, const APInt &KnownOne) {
|
||||
// Only install this information if it tells us something.
|
||||
if (NumSignBits == 1 && KnownZero == 0 && KnownOne == 0)
|
||||
return;
|
||||
|
||||
LiveOutRegInfo.grow(Reg);
|
||||
LiveOutInfo &LOI = LiveOutRegInfo[Reg];
|
||||
LOI.NumSignBits = NumSignBits;
|
||||
LOI.KnownOne = KnownOne;
|
||||
LOI.KnownZero = KnownZero;
|
||||
}
|
||||
|
||||
/// setByValArgumentFrameIndex - Record frame index for the byval
|
||||
/// argument.
|
||||
void setByValArgumentFrameIndex(const Argument *A, int FI);
|
||||
|
||||
/// getByValArgumentFrameIndex - Get frame index for the byval argument.
|
||||
int getByValArgumentFrameIndex(const Argument *A);
|
||||
|
||||
private:
|
||||
/// LiveOutRegInfo - Information about live out vregs.
|
||||
IndexedMap<LiveOutInfo, VirtReg2IndexFunctor> LiveOutRegInfo;
|
||||
};
|
||||
|
||||
/// AddCatchInfo - Extract the personality and type infos from an eh.selector
|
||||
|
@ -641,16 +641,17 @@ SDValue RegsForValue::getCopyFromRegs(SelectionDAG &DAG,
|
||||
// If the source register was virtual and if we know something about it,
|
||||
// add an assert node.
|
||||
if (!TargetRegisterInfo::isVirtualRegister(Regs[Part+i]) ||
|
||||
!RegisterVT.isInteger() || RegisterVT.isVector() ||
|
||||
!FuncInfo.LiveOutRegInfo.inBounds(Regs[Part+i]))
|
||||
!RegisterVT.isInteger() || RegisterVT.isVector())
|
||||
continue;
|
||||
|
||||
const FunctionLoweringInfo::LiveOutInfo &LOI =
|
||||
FuncInfo.LiveOutRegInfo[Regs[Part+i]];
|
||||
const FunctionLoweringInfo::LiveOutInfo *LOI =
|
||||
FuncInfo.GetLiveOutRegInfo(Regs[Part+i]);
|
||||
if (!LOI)
|
||||
continue;
|
||||
|
||||
unsigned RegSize = RegisterVT.getSizeInBits();
|
||||
unsigned NumSignBits = LOI.NumSignBits;
|
||||
unsigned NumZeroBits = LOI.KnownZero.countLeadingOnes();
|
||||
unsigned NumSignBits = LOI->NumSignBits;
|
||||
unsigned NumZeroBits = LOI->KnownZero.countLeadingOnes();
|
||||
|
||||
// FIXME: We capture more information than the dag can represent. For
|
||||
// now, just use the tightest assertzext/assertsext possible.
|
||||
|
@ -480,16 +480,7 @@ void SelectionDAGISel::ComputeLiveOutVRegInfo() {
|
||||
unsigned NumSignBits = CurDAG->ComputeNumSignBits(Src);
|
||||
Mask = APInt::getAllOnesValue(SrcVT.getSizeInBits());
|
||||
CurDAG->ComputeMaskedBits(Src, Mask, KnownZero, KnownOne);
|
||||
|
||||
// Only install this information if it tells us something.
|
||||
if (NumSignBits != 1 || KnownZero != 0 || KnownOne != 0) {
|
||||
FuncInfo->LiveOutRegInfo.grow(DestReg);
|
||||
FunctionLoweringInfo::LiveOutInfo &LOI =
|
||||
FuncInfo->LiveOutRegInfo[DestReg];
|
||||
LOI.NumSignBits = NumSignBits;
|
||||
LOI.KnownOne = KnownOne;
|
||||
LOI.KnownZero = KnownZero;
|
||||
}
|
||||
FuncInfo->AddLiveOutRegInfo(DestReg, NumSignBits, KnownZero, KnownOne);
|
||||
} while (!Worklist.empty());
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user