mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
[NFC] Add the getSizeInBytes() interface for MachineConstantPoolValue
Current implementation assumes that, each MachineConstantPoolValue takes up sizeof(MachineConstantPoolValue::Ty) bytes. For PowerPC, we want to lump all the constants with the same type as one MachineConstantPoolValue to save the cost that calculate the TOC entry for each const. So, we need to extend the MachineConstantPoolValue that break this assumption. Reviewed By: RKSimon Differential Revision: https://reviews.llvm.org/D89108
This commit is contained in:
parent
e3900b1e57
commit
92dda50db6
@ -41,10 +41,10 @@ public:
|
||||
explicit MachineConstantPoolValue(Type *ty) : Ty(ty) {}
|
||||
virtual ~MachineConstantPoolValue() = default;
|
||||
|
||||
/// getType - get type of this MachineConstantPoolValue.
|
||||
///
|
||||
Type *getType() const { return Ty; }
|
||||
|
||||
virtual unsigned getSizeInBytes(const DataLayout &DL) const;
|
||||
|
||||
virtual int getExistingMachineCPValue(MachineConstantPool *CP,
|
||||
Align Alignment) = 0;
|
||||
|
||||
@ -94,7 +94,7 @@ public:
|
||||
|
||||
Align getAlign() const { return Alignment; }
|
||||
|
||||
Type *getType() const;
|
||||
unsigned getSizeInBytes(const DataLayout &DL) const;
|
||||
|
||||
/// This method classifies the entry according to whether or not it may
|
||||
/// generate a relocation entry. This must be conservative, so if it might
|
||||
|
@ -1970,8 +1970,7 @@ void AsmPrinter::emitConstantPool() {
|
||||
unsigned NewOffset = alignTo(Offset, CPE.getAlign());
|
||||
OutStreamer->emitZeros(NewOffset - Offset);
|
||||
|
||||
Type *Ty = CPE.getType();
|
||||
Offset = NewOffset + getDataLayout().getTypeAllocSize(Ty);
|
||||
Offset = NewOffset + CPE.getSizeInBytes(getDataLayout());
|
||||
|
||||
OutStreamer->emitLabel(Sym);
|
||||
if (CPE.isMachineConstantPoolEntry())
|
||||
|
@ -1107,10 +1107,14 @@ Printable llvm::printJumpTableEntryReference(unsigned Idx) {
|
||||
|
||||
void MachineConstantPoolValue::anchor() {}
|
||||
|
||||
Type *MachineConstantPoolEntry::getType() const {
|
||||
unsigned MachineConstantPoolValue::getSizeInBytes(const DataLayout &DL) const {
|
||||
return DL.getTypeAllocSize(Ty);
|
||||
}
|
||||
|
||||
unsigned MachineConstantPoolEntry::getSizeInBytes(const DataLayout &DL) const {
|
||||
if (isMachineConstantPoolEntry())
|
||||
return Val.MachineCPVal->getType();
|
||||
return Val.ConstVal->getType();
|
||||
return Val.MachineCPVal->getSizeInBytes(DL);
|
||||
return DL.getTypeAllocSize(Val.ConstVal->getType());
|
||||
}
|
||||
|
||||
bool MachineConstantPoolEntry::needsRelocation() const {
|
||||
@ -1123,7 +1127,7 @@ SectionKind
|
||||
MachineConstantPoolEntry::getSectionKind(const DataLayout *DL) const {
|
||||
if (needsRelocation())
|
||||
return SectionKind::getReadOnlyWithRel();
|
||||
switch (DL->getTypeAllocSize(getType())) {
|
||||
switch (getSizeInBytes(*DL)) {
|
||||
case 4:
|
||||
return SectionKind::getMergeableConst4();
|
||||
case 8:
|
||||
|
@ -514,7 +514,7 @@ ARMConstantIslands::doInitialConstPlacement(std::vector<MachineInstr*> &CPEMIs)
|
||||
|
||||
const DataLayout &TD = MF->getDataLayout();
|
||||
for (unsigned i = 0, e = CPs.size(); i != e; ++i) {
|
||||
unsigned Size = TD.getTypeAllocSize(CPs[i].getType());
|
||||
unsigned Size = CPs[i].getSizeInBytes(TD);
|
||||
Align Alignment = CPs[i].getAlign();
|
||||
// Verify that all constant pool entries are a multiple of their alignment.
|
||||
// If not, we would have to pad them out so that instructions stay aligned.
|
||||
|
@ -552,7 +552,7 @@ MipsConstantIslands::doInitialPlacement(std::vector<MachineInstr*> &CPEMIs) {
|
||||
|
||||
const DataLayout &TD = MF->getDataLayout();
|
||||
for (unsigned i = 0, e = CPs.size(); i != e; ++i) {
|
||||
unsigned Size = TD.getTypeAllocSize(CPs[i].getType());
|
||||
unsigned Size = CPs[i].getSizeInBytes(TD);
|
||||
assert(Size >= 4 && "Too small constant pool entry");
|
||||
Align Alignment = CPs[i].getAlign();
|
||||
// Verify that all constant pool entries are a multiple of their alignment.
|
||||
|
@ -1784,10 +1784,7 @@ static const Constant *getConstantFromPool(const MachineInstr &MI,
|
||||
if (ConstantEntry.isMachineConstantPoolEntry())
|
||||
return nullptr;
|
||||
|
||||
const Constant *C = ConstantEntry.Val.ConstVal;
|
||||
assert((!C || ConstantEntry.getType() == C->getType()) &&
|
||||
"Expected a constant of the same type!");
|
||||
return C;
|
||||
return ConstantEntry.Val.ConstVal;
|
||||
}
|
||||
|
||||
static std::string getShuffleComment(const MachineInstr *MI, unsigned SrcOp1Idx,
|
||||
|
Loading…
Reference in New Issue
Block a user