mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-28 06:32:09 +00:00
Remove getRegClassForInlineAsmConstraint and all dependencies.
Fixes rdar://9643582 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134123 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0a1509e779
commit
5244c4cc2f
@ -1421,13 +1421,6 @@ public:
|
||||
/// is for this target.
|
||||
virtual ConstraintType getConstraintType(const std::string &Constraint) const;
|
||||
|
||||
/// getRegClassForInlineAsmConstraint - Given a constraint letter (e.g. "r"),
|
||||
/// return a list of registers that can be used to satisfy the constraint.
|
||||
/// This should only be used for C_RegisterClass constraints.
|
||||
virtual std::vector<unsigned>
|
||||
getRegClassForInlineAsmConstraint(const std::string &Constraint,
|
||||
EVT VT) const;
|
||||
|
||||
/// getRegForInlineAsmConstraint - Given a physical register constraint (e.g.
|
||||
/// {edx}), return the register number and the register class for the
|
||||
/// register.
|
||||
|
@ -5428,55 +5428,6 @@ typedef SmallVector<SDISelAsmOperandInfo,16> SDISelAsmOperandInfoVector;
|
||||
|
||||
} // end anonymous namespace
|
||||
|
||||
/// isAllocatableRegister - If the specified register is safe to allocate,
|
||||
/// i.e. it isn't a stack pointer or some other special register, return the
|
||||
/// register class for the register. Otherwise, return null.
|
||||
static const TargetRegisterClass *
|
||||
isAllocatableRegister(unsigned Reg, MachineFunction &MF,
|
||||
const TargetLowering &TLI,
|
||||
const TargetRegisterInfo *TRI) {
|
||||
EVT FoundVT = MVT::Other;
|
||||
const TargetRegisterClass *FoundRC = 0;
|
||||
for (TargetRegisterInfo::regclass_iterator RCI = TRI->regclass_begin(),
|
||||
E = TRI->regclass_end(); RCI != E; ++RCI) {
|
||||
EVT ThisVT = MVT::Other;
|
||||
|
||||
const TargetRegisterClass *RC = *RCI;
|
||||
if (!RC->isAllocatable())
|
||||
continue;
|
||||
// If none of the value types for this register class are valid, we
|
||||
// can't use it. For example, 64-bit reg classes on 32-bit targets.
|
||||
for (TargetRegisterClass::vt_iterator I = RC->vt_begin(), E = RC->vt_end();
|
||||
I != E; ++I) {
|
||||
if (TLI.isTypeLegal(*I)) {
|
||||
// If we have already found this register in a different register class,
|
||||
// choose the one with the largest VT specified. For example, on
|
||||
// PowerPC, we favor f64 register classes over f32.
|
||||
if (FoundVT == MVT::Other || FoundVT.bitsLT(*I)) {
|
||||
ThisVT = *I;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ThisVT == MVT::Other) continue;
|
||||
|
||||
// NOTE: This isn't ideal. In particular, this might allocate the
|
||||
// frame pointer in functions that need it (due to them not being taken
|
||||
// out of allocation, because a variable sized allocation hasn't been seen
|
||||
// yet). This is a slight code pessimization, but should still work.
|
||||
ArrayRef<unsigned> RawOrder = RC->getRawAllocationOrder(MF);
|
||||
if (std::find(RawOrder.begin(), RawOrder.end(), Reg) != RawOrder.end()) {
|
||||
// We found a matching register class. Keep looking at others in case
|
||||
// we find one with larger registers that this physreg is also in.
|
||||
FoundRC = RC;
|
||||
FoundVT = ThisVT;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return FoundRC;
|
||||
}
|
||||
|
||||
/// GetRegistersForValue - Assign registers (virtual or physical) for the
|
||||
/// specified operand. We prefer to assign virtual registers, to allow the
|
||||
/// register allocator to handle the assignment process. However, if the asm
|
||||
@ -5611,58 +5562,6 @@ static void GetRegistersForValue(SelectionDAG &DAG,
|
||||
return;
|
||||
}
|
||||
|
||||
// This is a reference to a register class that doesn't directly correspond
|
||||
// to an LLVM register class. Allocate NumRegs consecutive, available,
|
||||
// registers from the class.
|
||||
std::vector<unsigned> RegClassRegs
|
||||
= TLI.getRegClassForInlineAsmConstraint(OpInfo.ConstraintCode,
|
||||
OpInfo.ConstraintVT);
|
||||
|
||||
const TargetRegisterInfo *TRI = DAG.getTarget().getRegisterInfo();
|
||||
BitVector Reserved = TRI->getReservedRegs(MF);
|
||||
unsigned NumAllocated = 0;
|
||||
for (unsigned i = 0, e = RegClassRegs.size(); i != e; ++i) {
|
||||
unsigned Reg = RegClassRegs[i];
|
||||
// Filter out the reserved registers, but note that reserved registers are
|
||||
// not fully determined at this point. We may still decide we need a frame
|
||||
// pointer.
|
||||
if (Reserved.test(Reg))
|
||||
continue;
|
||||
// See if this register is available.
|
||||
if ((isOutReg && OutputRegs.count(Reg)) || // Already used.
|
||||
(isInReg && InputRegs.count(Reg))) { // Already used.
|
||||
// Make sure we find consecutive registers.
|
||||
NumAllocated = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Check to see if this register is allocatable (i.e. don't give out the
|
||||
// stack pointer).
|
||||
const TargetRegisterClass *RC = isAllocatableRegister(Reg, MF, TLI, TRI);
|
||||
if (!RC) { // Couldn't allocate this register.
|
||||
// Reset NumAllocated to make sure we return consecutive registers.
|
||||
NumAllocated = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Okay, this register is good, we can use it.
|
||||
++NumAllocated;
|
||||
|
||||
// If we allocated enough consecutive registers, succeed.
|
||||
if (NumAllocated == NumRegs) {
|
||||
unsigned RegStart = (i-NumAllocated)+1;
|
||||
unsigned RegEnd = i+1;
|
||||
// Mark all of the allocated registers used.
|
||||
for (unsigned i = RegStart; i != RegEnd; ++i)
|
||||
Regs.push_back(RegClassRegs[i]);
|
||||
|
||||
OpInfo.AssignedRegs = RegsForValue(Regs, *RC->vt_begin(),
|
||||
OpInfo.ConstraintVT);
|
||||
OpInfo.MarkAllocatedRegs(isOutReg, isInReg, OutputRegs, InputRegs, *TRI);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Otherwise, we couldn't allocate enough registers for this.
|
||||
}
|
||||
|
||||
|
@ -2737,13 +2737,6 @@ void TargetLowering::LowerAsmOperandForConstraint(SDValue Op,
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<unsigned> TargetLowering::
|
||||
getRegClassForInlineAsmConstraint(const std::string &Constraint,
|
||||
EVT VT) const {
|
||||
return std::vector<unsigned>();
|
||||
}
|
||||
|
||||
|
||||
std::pair<unsigned, const TargetRegisterClass*> TargetLowering::
|
||||
getRegForInlineAsmConstraint(const std::string &Constraint,
|
||||
EVT VT) const {
|
||||
|
Loading…
x
Reference in New Issue
Block a user