forked from OSchip/llvm-project
[TargetLowering] StringRefize asm constraint getters.
There is some functional change here because it changes target code from atoi(3) to StringRef::getAsInteger which has error checking. For valid constraints there should be no difference. llvm-svn: 241411
This commit is contained in:
parent
08049fedc7
commit
9bfb627a0e
|
@ -2679,7 +2679,7 @@ public:
|
|||
SelectionDAG *DAG = nullptr) const;
|
||||
|
||||
/// Given a constraint, return the type of constraint it is for this target.
|
||||
virtual ConstraintType getConstraintType(const std::string &Constraint) const;
|
||||
virtual ConstraintType getConstraintType(StringRef Constraint) const;
|
||||
|
||||
/// Given a physical register constraint (e.g. {edx}), return the register
|
||||
/// number and the register class for the register.
|
||||
|
@ -2692,10 +2692,9 @@ public:
|
|||
/// returns a register number of 0 and a null register class pointer.
|
||||
virtual std::pair<unsigned, const TargetRegisterClass *>
|
||||
getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
|
||||
const std::string &Constraint, MVT VT) const;
|
||||
StringRef Constraint, MVT VT) const;
|
||||
|
||||
virtual unsigned
|
||||
getInlineAsmMemConstraint(const std::string &ConstraintCode) const {
|
||||
virtual unsigned getInlineAsmMemConstraint(StringRef ConstraintCode) const {
|
||||
if (ConstraintCode == "i")
|
||||
return InlineAsm::Constraint_i;
|
||||
else if (ConstraintCode == "m")
|
||||
|
|
|
@ -2105,9 +2105,8 @@ PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const {
|
|||
// Inline Assembler Implementation Methods
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
|
||||
TargetLowering::ConstraintType
|
||||
TargetLowering::getConstraintType(const std::string &Constraint) const {
|
||||
TargetLowering::getConstraintType(StringRef Constraint) const {
|
||||
unsigned S = Constraint.size();
|
||||
|
||||
if (S == 1) {
|
||||
|
@ -2140,7 +2139,7 @@ TargetLowering::getConstraintType(const std::string &Constraint) const {
|
|||
}
|
||||
|
||||
if (S > 1 && Constraint[0] == '{' && Constraint[S-1] == '}') {
|
||||
if (S == 8 && !Constraint.compare(1, 6, "memory", 6)) // "{memory}"
|
||||
if (S == 8 && Constraint.substr(1, 6) == "memory") // "{memory}"
|
||||
return C_Memory;
|
||||
return C_Register;
|
||||
}
|
||||
|
@ -2227,7 +2226,7 @@ void TargetLowering::LowerAsmOperandForConstraint(SDValue Op,
|
|||
|
||||
std::pair<unsigned, const TargetRegisterClass *>
|
||||
TargetLowering::getRegForInlineAsmConstraint(const TargetRegisterInfo *RI,
|
||||
const std::string &Constraint,
|
||||
StringRef Constraint,
|
||||
MVT VT) const {
|
||||
if (Constraint.empty() || Constraint[0] != '{')
|
||||
return std::make_pair(0u, static_cast<TargetRegisterClass*>(nullptr));
|
||||
|
|
|
@ -4232,7 +4232,7 @@ bool AArch64TargetLowering::isFPImmLegal(const APFloat &Imm, EVT VT) const {
|
|||
/// getConstraintType - Given a constraint letter, return the type of
|
||||
/// constraint it is for this target.
|
||||
AArch64TargetLowering::ConstraintType
|
||||
AArch64TargetLowering::getConstraintType(const std::string &Constraint) const {
|
||||
AArch64TargetLowering::getConstraintType(StringRef Constraint) const {
|
||||
if (Constraint.size() == 1) {
|
||||
switch (Constraint[0]) {
|
||||
default:
|
||||
|
@ -4283,8 +4283,7 @@ AArch64TargetLowering::getSingleConstraintMatchWeight(
|
|||
|
||||
std::pair<unsigned, const TargetRegisterClass *>
|
||||
AArch64TargetLowering::getRegForInlineAsmConstraint(
|
||||
const TargetRegisterInfo *TRI, const std::string &Constraint,
|
||||
MVT VT) const {
|
||||
const TargetRegisterInfo *TRI, StringRef Constraint, MVT VT) const {
|
||||
if (Constraint.size() == 1) {
|
||||
switch (Constraint[0]) {
|
||||
case 'r':
|
||||
|
@ -4320,10 +4319,9 @@ AArch64TargetLowering::getRegForInlineAsmConstraint(
|
|||
unsigned Size = Constraint.size();
|
||||
if ((Size == 4 || Size == 5) && Constraint[0] == '{' &&
|
||||
tolower(Constraint[1]) == 'v' && Constraint[Size - 1] == '}') {
|
||||
const std::string Reg =
|
||||
std::string(&Constraint[2], &Constraint[Size - 1]);
|
||||
int RegNo = atoi(Reg.c_str());
|
||||
if (RegNo >= 0 && RegNo <= 31) {
|
||||
int RegNo;
|
||||
bool Failed = Constraint.slice(2, Size - 1).getAsInteger(10, RegNo);
|
||||
if (!Failed && RegNo >= 0 && RegNo <= 31) {
|
||||
// v0 - v31 are aliases of q0 - q31.
|
||||
// By default we'll emit v0-v31 for this unless there's a modifier where
|
||||
// we'll emit the correct register as well.
|
||||
|
|
|
@ -471,8 +471,7 @@ private:
|
|||
std::vector<SDNode *> *Created) const override;
|
||||
bool combineRepeatedFPDivisors(unsigned NumUsers) const override;
|
||||
|
||||
ConstraintType
|
||||
getConstraintType(const std::string &Constraint) const override;
|
||||
ConstraintType getConstraintType(StringRef Constraint) const override;
|
||||
unsigned getRegisterByName(const char* RegName, EVT VT) const override;
|
||||
|
||||
/// Examine constraint string and operand type and determine a weight value.
|
||||
|
@ -483,14 +482,12 @@ private:
|
|||
|
||||
std::pair<unsigned, const TargetRegisterClass *>
|
||||
getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
|
||||
const std::string &Constraint,
|
||||
MVT VT) const override;
|
||||
StringRef Constraint, MVT VT) const override;
|
||||
void LowerAsmOperandForConstraint(SDValue Op, std::string &Constraint,
|
||||
std::vector<SDValue> &Ops,
|
||||
SelectionDAG &DAG) const override;
|
||||
|
||||
unsigned getInlineAsmMemConstraint(
|
||||
const std::string &ConstraintCode) const override {
|
||||
unsigned getInlineAsmMemConstraint(StringRef ConstraintCode) const override {
|
||||
if (ConstraintCode == "Q")
|
||||
return InlineAsm::Constraint_Q;
|
||||
// FIXME: clang has code for 'Ump', 'Utf', 'Usa', and 'Ush' but these are
|
||||
|
|
|
@ -2212,9 +2212,8 @@ SDValue SITargetLowering::CreateLiveInRegister(SelectionDAG &DAG,
|
|||
|
||||
std::pair<unsigned, const TargetRegisterClass *>
|
||||
SITargetLowering::getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
|
||||
const std::string &Constraint_,
|
||||
StringRef Constraint,
|
||||
MVT VT) const {
|
||||
StringRef Constraint(Constraint_);
|
||||
if (Constraint == "r") {
|
||||
switch(VT.SimpleTy) {
|
||||
default: llvm_unreachable("Unhandled type for 'r' inline asm constraint");
|
||||
|
|
|
@ -114,9 +114,9 @@ public:
|
|||
SDLoc DL,
|
||||
SDValue Ptr) const;
|
||||
|
||||
std::pair<unsigned, const TargetRegisterClass *> getRegForInlineAsmConstraint(
|
||||
const TargetRegisterInfo *TRI,
|
||||
const std::string &Constraint, MVT VT) const override;
|
||||
std::pair<unsigned, const TargetRegisterClass *>
|
||||
getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
|
||||
StringRef Constraint, MVT VT) const override;
|
||||
SDValue copyToM0(SelectionDAG &DAG, SDValue Chain, SDLoc DL, SDValue V) const;
|
||||
};
|
||||
|
||||
|
|
|
@ -10664,7 +10664,7 @@ bool ARMTargetLowering::ExpandInlineAsm(CallInst *CI) const {
|
|||
/// getConstraintType - Given a constraint letter, return the type of
|
||||
/// constraint it is for this target.
|
||||
ARMTargetLowering::ConstraintType
|
||||
ARMTargetLowering::getConstraintType(const std::string &Constraint) const {
|
||||
ARMTargetLowering::getConstraintType(StringRef Constraint) const {
|
||||
if (Constraint.size() == 1) {
|
||||
switch (Constraint[0]) {
|
||||
default: break;
|
||||
|
@ -10723,10 +10723,8 @@ ARMTargetLowering::getSingleConstraintMatchWeight(
|
|||
}
|
||||
|
||||
typedef std::pair<unsigned, const TargetRegisterClass*> RCPair;
|
||||
RCPair
|
||||
ARMTargetLowering::getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
|
||||
const std::string &Constraint,
|
||||
MVT VT) const {
|
||||
RCPair ARMTargetLowering::getRegForInlineAsmConstraint(
|
||||
const TargetRegisterInfo *TRI, StringRef Constraint, MVT VT) const {
|
||||
if (Constraint.size() == 1) {
|
||||
// GCC ARM Constraint Letters
|
||||
switch (Constraint[0]) {
|
||||
|
|
|
@ -324,8 +324,7 @@ namespace llvm {
|
|||
|
||||
bool ExpandInlineAsm(CallInst *CI) const override;
|
||||
|
||||
ConstraintType
|
||||
getConstraintType(const std::string &Constraint) const override;
|
||||
ConstraintType getConstraintType(StringRef Constraint) const override;
|
||||
|
||||
/// Examine constraint string and operand type and determine a weight value.
|
||||
/// The operand object must already have been set up with the operand type.
|
||||
|
@ -334,8 +333,7 @@ namespace llvm {
|
|||
|
||||
std::pair<unsigned, const TargetRegisterClass *>
|
||||
getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
|
||||
const std::string &Constraint,
|
||||
MVT VT) const override;
|
||||
StringRef Constraint, MVT VT) const override;
|
||||
|
||||
/// LowerAsmOperandForConstraint - Lower the specified operand into the Ops
|
||||
/// vector. If it is invalid, don't add anything to Ops. If hasMemory is
|
||||
|
@ -345,8 +343,8 @@ namespace llvm {
|
|||
std::vector<SDValue> &Ops,
|
||||
SelectionDAG &DAG) const override;
|
||||
|
||||
unsigned getInlineAsmMemConstraint(
|
||||
const std::string &ConstraintCode) const override {
|
||||
unsigned
|
||||
getInlineAsmMemConstraint(StringRef ConstraintCode) const override {
|
||||
if (ConstraintCode == "Q")
|
||||
return InlineAsm::Constraint_Q;
|
||||
else if (ConstraintCode.size() == 2) {
|
||||
|
|
|
@ -2338,8 +2338,7 @@ HexagonTargetLowering::EmitInstrWithCustomInserter(MachineInstr *MI,
|
|||
|
||||
std::pair<unsigned, const TargetRegisterClass *>
|
||||
HexagonTargetLowering::getRegForInlineAsmConstraint(
|
||||
const TargetRegisterInfo *TRI, const std::string &Constraint,
|
||||
MVT VT) const {
|
||||
const TargetRegisterInfo *TRI, StringRef Constraint, MVT VT) const {
|
||||
if (Constraint.size() == 1) {
|
||||
switch (Constraint[0]) {
|
||||
case 'r': // R0-R31
|
||||
|
|
|
@ -179,11 +179,10 @@ bool isPositiveHalfWord(SDNode *N);
|
|||
|
||||
std::pair<unsigned, const TargetRegisterClass *>
|
||||
getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
|
||||
const std::string &Constraint,
|
||||
MVT VT) const override;
|
||||
StringRef Constraint, MVT VT) const override;
|
||||
|
||||
unsigned getInlineAsmMemConstraint(
|
||||
const std::string &ConstraintCode) const override {
|
||||
unsigned
|
||||
getInlineAsmMemConstraint(StringRef ConstraintCode) const override {
|
||||
if (ConstraintCode == "o")
|
||||
return InlineAsm::Constraint_o;
|
||||
else if (ConstraintCode == "v")
|
||||
|
|
|
@ -213,7 +213,7 @@ SDValue MSP430TargetLowering::LowerOperation(SDValue Op,
|
|||
/// getConstraintType - Given a constraint letter, return the type of
|
||||
/// constraint it is for this target.
|
||||
TargetLowering::ConstraintType
|
||||
MSP430TargetLowering::getConstraintType(const std::string &Constraint) const {
|
||||
MSP430TargetLowering::getConstraintType(StringRef Constraint) const {
|
||||
if (Constraint.size() == 1) {
|
||||
switch (Constraint[0]) {
|
||||
case 'r':
|
||||
|
@ -227,8 +227,7 @@ MSP430TargetLowering::getConstraintType(const std::string &Constraint) const {
|
|||
|
||||
std::pair<unsigned, const TargetRegisterClass *>
|
||||
MSP430TargetLowering::getRegForInlineAsmConstraint(
|
||||
const TargetRegisterInfo *TRI, const std::string &Constraint,
|
||||
MVT VT) const {
|
||||
const TargetRegisterInfo *TRI, StringRef Constraint, MVT VT) const {
|
||||
if (Constraint.size() == 1) {
|
||||
// GCC Constraint Letters
|
||||
switch (Constraint[0]) {
|
||||
|
|
|
@ -96,11 +96,10 @@ namespace llvm {
|
|||
SDValue getReturnAddressFrameIndex(SelectionDAG &DAG) const;
|
||||
|
||||
TargetLowering::ConstraintType
|
||||
getConstraintType(const std::string &Constraint) const override;
|
||||
getConstraintType(StringRef Constraint) const override;
|
||||
std::pair<unsigned, const TargetRegisterClass *>
|
||||
getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
|
||||
const std::string &Constraint,
|
||||
MVT VT) const override;
|
||||
StringRef Constraint, MVT VT) const override;
|
||||
|
||||
/// isTruncateFree - Return true if it's free to truncate a value of type
|
||||
/// Ty1 to type Ty2. e.g. On msp430 it's free to truncate a i16 value in
|
||||
|
|
|
@ -3198,9 +3198,8 @@ MipsTargetLowering::LowerReturn(SDValue Chain,
|
|||
|
||||
/// getConstraintType - Given a constraint letter, return the type of
|
||||
/// constraint it is for this target.
|
||||
MipsTargetLowering::ConstraintType MipsTargetLowering::
|
||||
getConstraintType(const std::string &Constraint) const
|
||||
{
|
||||
MipsTargetLowering::ConstraintType
|
||||
MipsTargetLowering::getConstraintType(StringRef Constraint) const {
|
||||
// Mips specific constraints
|
||||
// GCC config/mips/constraints.md
|
||||
//
|
||||
|
@ -3290,9 +3289,8 @@ MipsTargetLowering::getSingleConstraintMatchWeight(
|
|||
/// into non-numeric and numeric parts (Prefix and Reg). The first boolean flag
|
||||
/// that is returned indicates whether parsing was successful. The second flag
|
||||
/// is true if the numeric part exists.
|
||||
static std::pair<bool, bool>
|
||||
parsePhysicalReg(StringRef C, std::string &Prefix,
|
||||
unsigned long long &Reg) {
|
||||
static std::pair<bool, bool> parsePhysicalReg(StringRef C, StringRef &Prefix,
|
||||
unsigned long long &Reg) {
|
||||
if (C.front() != '{' || C.back() != '}')
|
||||
return std::make_pair(false, false);
|
||||
|
||||
|
@ -3300,7 +3298,7 @@ parsePhysicalReg(StringRef C, std::string &Prefix,
|
|||
StringRef::const_iterator I, B = C.begin() + 1, E = C.end() - 1;
|
||||
I = std::find_if(B, E, std::ptr_fun(isdigit));
|
||||
|
||||
Prefix.assign(B, I - B);
|
||||
Prefix = StringRef(B, I - B);
|
||||
|
||||
// The second flag is set to false if no numeric characters were found.
|
||||
if (I == E)
|
||||
|
@ -3316,7 +3314,7 @@ parseRegForInlineAsmConstraint(StringRef C, MVT VT) const {
|
|||
const TargetRegisterInfo *TRI =
|
||||
Subtarget.getRegisterInfo();
|
||||
const TargetRegisterClass *RC;
|
||||
std::string Prefix;
|
||||
StringRef Prefix;
|
||||
unsigned long long Reg;
|
||||
|
||||
std::pair<bool, bool> R = parsePhysicalReg(C, Prefix, Reg);
|
||||
|
@ -3332,7 +3330,7 @@ parseRegForInlineAsmConstraint(StringRef C, MVT VT) const {
|
|||
RC = TRI->getRegClass(Prefix == "hi" ?
|
||||
Mips::HI32RegClassID : Mips::LO32RegClassID);
|
||||
return std::make_pair(*(RC->begin()), RC);
|
||||
} else if (Prefix.compare(0, 4, "$msa") == 0) {
|
||||
} else if (Prefix.startswith("$msa")) {
|
||||
// Parse $msa(ir|csr|access|save|modify|request|map|unmap)
|
||||
|
||||
// No numeric characters follow the name.
|
||||
|
@ -3390,7 +3388,7 @@ parseRegForInlineAsmConstraint(StringRef C, MVT VT) const {
|
|||
/// pointer.
|
||||
std::pair<unsigned, const TargetRegisterClass *>
|
||||
MipsTargetLowering::getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
|
||||
const std::string &Constraint,
|
||||
StringRef Constraint,
|
||||
MVT VT) const {
|
||||
if (Constraint.size() == 1) {
|
||||
switch (Constraint[0]) {
|
||||
|
|
|
@ -478,8 +478,7 @@ namespace llvm {
|
|||
bool shouldSignExtendTypeInLibCall(EVT Type, bool IsSigned) const override;
|
||||
|
||||
// Inline asm support
|
||||
ConstraintType
|
||||
getConstraintType(const std::string &Constraint) const override;
|
||||
ConstraintType getConstraintType(StringRef Constraint) const override;
|
||||
|
||||
/// Examine constraint string and operand type and determine a weight value.
|
||||
/// The operand object must already have been set up with the operand type.
|
||||
|
@ -493,8 +492,7 @@ namespace llvm {
|
|||
|
||||
std::pair<unsigned, const TargetRegisterClass *>
|
||||
getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
|
||||
const std::string &Constraint,
|
||||
MVT VT) const override;
|
||||
StringRef Constraint, MVT VT) const override;
|
||||
|
||||
/// LowerAsmOperandForConstraint - Lower the specified operand into the Ops
|
||||
/// vector. If it is invalid, don't add anything to Ops. If hasMemory is
|
||||
|
@ -505,8 +503,8 @@ namespace llvm {
|
|||
std::vector<SDValue> &Ops,
|
||||
SelectionDAG &DAG) const override;
|
||||
|
||||
unsigned getInlineAsmMemConstraint(
|
||||
const std::string &ConstraintCode) const override {
|
||||
unsigned
|
||||
getInlineAsmMemConstraint(StringRef ConstraintCode) const override {
|
||||
if (ConstraintCode == "R")
|
||||
return InlineAsm::Constraint_R;
|
||||
else if (ConstraintCode == "ZC")
|
||||
|
|
|
@ -3772,7 +3772,7 @@ bool NVPTXTargetLowering::isLegalAddressingMode(const AddrMode &AM,
|
|||
/// getConstraintType - Given a constraint letter, return the type of
|
||||
/// constraint it is for this target.
|
||||
NVPTXTargetLowering::ConstraintType
|
||||
NVPTXTargetLowering::getConstraintType(const std::string &Constraint) const {
|
||||
NVPTXTargetLowering::getConstraintType(StringRef Constraint) const {
|
||||
if (Constraint.size() == 1) {
|
||||
switch (Constraint[0]) {
|
||||
default:
|
||||
|
@ -3794,7 +3794,7 @@ NVPTXTargetLowering::getConstraintType(const std::string &Constraint) const {
|
|||
|
||||
std::pair<unsigned, const TargetRegisterClass *>
|
||||
NVPTXTargetLowering::getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
|
||||
const std::string &Constraint,
|
||||
StringRef Constraint,
|
||||
MVT VT) const {
|
||||
if (Constraint.size() == 1) {
|
||||
switch (Constraint[0]) {
|
||||
|
|
|
@ -468,12 +468,10 @@ public:
|
|||
return MVT::i1;
|
||||
}
|
||||
|
||||
ConstraintType
|
||||
getConstraintType(const std::string &Constraint) const override;
|
||||
ConstraintType getConstraintType(StringRef Constraint) const override;
|
||||
std::pair<unsigned, const TargetRegisterClass *>
|
||||
getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
|
||||
const std::string &Constraint,
|
||||
MVT VT) const override;
|
||||
StringRef Constraint, MVT VT) const override;
|
||||
|
||||
SDValue LowerFormalArguments(
|
||||
SDValue Chain, CallingConv::ID CallConv, bool isVarArg,
|
||||
|
|
|
@ -10691,7 +10691,7 @@ unsigned PPCTargetLowering::getPrefLoopAlignment(MachineLoop *ML) const {
|
|||
/// getConstraintType - Given a constraint, return the type of
|
||||
/// constraint it is for this target.
|
||||
PPCTargetLowering::ConstraintType
|
||||
PPCTargetLowering::getConstraintType(const std::string &Constraint) const {
|
||||
PPCTargetLowering::getConstraintType(StringRef Constraint) const {
|
||||
if (Constraint.size() == 1) {
|
||||
switch (Constraint[0]) {
|
||||
default: break;
|
||||
|
@ -10776,7 +10776,7 @@ PPCTargetLowering::getSingleConstraintMatchWeight(
|
|||
|
||||
std::pair<unsigned, const TargetRegisterClass *>
|
||||
PPCTargetLowering::getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
|
||||
const std::string &Constraint,
|
||||
StringRef Constraint,
|
||||
MVT VT) const {
|
||||
if (Constraint.size() == 1) {
|
||||
// GCC RS6000 Constraint Letters
|
||||
|
|
|
@ -519,8 +519,7 @@ namespace llvm {
|
|||
MachineBasicBlock *emitEHSjLjLongJmp(MachineInstr *MI,
|
||||
MachineBasicBlock *MBB) const;
|
||||
|
||||
ConstraintType
|
||||
getConstraintType(const std::string &Constraint) const override;
|
||||
ConstraintType getConstraintType(StringRef Constraint) const override;
|
||||
|
||||
/// Examine constraint string and operand type and determine a weight value.
|
||||
/// The operand object must already have been set up with the operand type.
|
||||
|
@ -529,8 +528,7 @@ namespace llvm {
|
|||
|
||||
std::pair<unsigned, const TargetRegisterClass *>
|
||||
getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
|
||||
const std::string &Constraint,
|
||||
MVT VT) const override;
|
||||
StringRef Constraint, MVT VT) const override;
|
||||
|
||||
/// getByValTypeAlignment - Return the desired alignment for ByVal aggregate
|
||||
/// function arguments in the caller parameter area. This is the actual
|
||||
|
@ -544,8 +542,8 @@ namespace llvm {
|
|||
std::vector<SDValue> &Ops,
|
||||
SelectionDAG &DAG) const override;
|
||||
|
||||
unsigned getInlineAsmMemConstraint(
|
||||
const std::string &ConstraintCode) const override {
|
||||
unsigned
|
||||
getInlineAsmMemConstraint(StringRef ConstraintCode) const override {
|
||||
if (ConstraintCode == "es")
|
||||
return InlineAsm::Constraint_es;
|
||||
else if (ConstraintCode == "o")
|
||||
|
|
|
@ -3065,7 +3065,7 @@ SparcTargetLowering::expandAtomicRMW(MachineInstr *MI,
|
|||
/// getConstraintType - Given a constraint letter, return the type of
|
||||
/// constraint it is for this target.
|
||||
SparcTargetLowering::ConstraintType
|
||||
SparcTargetLowering::getConstraintType(const std::string &Constraint) const {
|
||||
SparcTargetLowering::getConstraintType(StringRef Constraint) const {
|
||||
if (Constraint.size() == 1) {
|
||||
switch (Constraint[0]) {
|
||||
default: break;
|
||||
|
@ -3139,7 +3139,7 @@ LowerAsmOperandForConstraint(SDValue Op,
|
|||
|
||||
std::pair<unsigned, const TargetRegisterClass *>
|
||||
SparcTargetLowering::getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
|
||||
const std::string &Constraint,
|
||||
StringRef Constraint,
|
||||
MVT VT) const {
|
||||
if (Constraint.size() == 1) {
|
||||
switch (Constraint[0]) {
|
||||
|
|
|
@ -72,7 +72,7 @@ namespace llvm {
|
|||
|
||||
const char *getTargetNodeName(unsigned Opcode) const override;
|
||||
|
||||
ConstraintType getConstraintType(const std::string &Constraint) const override;
|
||||
ConstraintType getConstraintType(StringRef Constraint) const override;
|
||||
ConstraintWeight
|
||||
getSingleConstraintMatchWeight(AsmOperandInfo &info,
|
||||
const char *constraint) const override;
|
||||
|
@ -82,8 +82,7 @@ namespace llvm {
|
|||
SelectionDAG &DAG) const override;
|
||||
std::pair<unsigned, const TargetRegisterClass *>
|
||||
getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
|
||||
const std::string &Constraint,
|
||||
MVT VT) const override;
|
||||
StringRef Constraint, MVT VT) const override;
|
||||
|
||||
bool isOffsetFoldingLegal(const GlobalAddressSDNode *GA) const override;
|
||||
MVT getScalarShiftAmountTy(EVT LHSTy) const override { return MVT::i32; }
|
||||
|
|
|
@ -544,7 +544,7 @@ bool SystemZTargetLowering::isTruncateFree(EVT FromVT, EVT ToVT) const {
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
TargetLowering::ConstraintType
|
||||
SystemZTargetLowering::getConstraintType(const std::string &Constraint) const {
|
||||
SystemZTargetLowering::getConstraintType(StringRef Constraint) const {
|
||||
if (Constraint.size() == 1) {
|
||||
switch (Constraint[0]) {
|
||||
case 'a': // Address register
|
||||
|
@ -641,13 +641,14 @@ getSingleConstraintMatchWeight(AsmOperandInfo &info,
|
|||
// has already been verified. MC is the class associated with "t" and
|
||||
// Map maps 0-based register numbers to LLVM register numbers.
|
||||
static std::pair<unsigned, const TargetRegisterClass *>
|
||||
parseRegisterNumber(const std::string &Constraint,
|
||||
const TargetRegisterClass *RC, const unsigned *Map) {
|
||||
parseRegisterNumber(StringRef Constraint, const TargetRegisterClass *RC,
|
||||
const unsigned *Map) {
|
||||
assert(*(Constraint.end()-1) == '}' && "Missing '}'");
|
||||
if (isdigit(Constraint[2])) {
|
||||
std::string Suffix(Constraint.data() + 2, Constraint.size() - 2);
|
||||
unsigned Index = atoi(Suffix.c_str());
|
||||
if (Index < 16 && Map[Index])
|
||||
unsigned Index;
|
||||
bool Failed =
|
||||
Constraint.slice(2, Constraint.size() - 1).getAsInteger(10, Index);
|
||||
if (!Failed && Index < 16 && Map[Index])
|
||||
return std::make_pair(Map[Index], RC);
|
||||
}
|
||||
return std::make_pair(0U, nullptr);
|
||||
|
@ -655,8 +656,7 @@ parseRegisterNumber(const std::string &Constraint,
|
|||
|
||||
std::pair<unsigned, const TargetRegisterClass *>
|
||||
SystemZTargetLowering::getRegForInlineAsmConstraint(
|
||||
const TargetRegisterInfo *TRI, const std::string &Constraint,
|
||||
MVT VT) const {
|
||||
const TargetRegisterInfo *TRI, StringRef Constraint, MVT VT) const {
|
||||
if (Constraint.size() == 1) {
|
||||
// GCC Constraint Letters
|
||||
switch (Constraint[0]) {
|
||||
|
@ -687,7 +687,7 @@ SystemZTargetLowering::getRegForInlineAsmConstraint(
|
|||
return std::make_pair(0U, &SystemZ::FP32BitRegClass);
|
||||
}
|
||||
}
|
||||
if (Constraint[0] == '{') {
|
||||
if (Constraint.size() > 0 && Constraint[0] == '{') {
|
||||
// We need to override the default register parsing for GPRs and FPRs
|
||||
// because the interpretation depends on VT. The internal names of
|
||||
// the registers are also different from the external names
|
||||
|
|
|
@ -379,10 +379,9 @@ public:
|
|||
const char *getTargetNodeName(unsigned Opcode) const override;
|
||||
std::pair<unsigned, const TargetRegisterClass *>
|
||||
getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
|
||||
const std::string &Constraint,
|
||||
MVT VT) const override;
|
||||
StringRef Constraint, MVT VT) const override;
|
||||
TargetLowering::ConstraintType
|
||||
getConstraintType(const std::string &Constraint) const override;
|
||||
getConstraintType(StringRef Constraint) const override;
|
||||
TargetLowering::ConstraintWeight
|
||||
getSingleConstraintMatchWeight(AsmOperandInfo &info,
|
||||
const char *constraint) const override;
|
||||
|
@ -391,8 +390,7 @@ public:
|
|||
std::vector<SDValue> &Ops,
|
||||
SelectionDAG &DAG) const override;
|
||||
|
||||
unsigned getInlineAsmMemConstraint(
|
||||
const std::string &ConstraintCode) const override {
|
||||
unsigned getInlineAsmMemConstraint(StringRef ConstraintCode) const override {
|
||||
if (ConstraintCode.size() == 1) {
|
||||
switch(ConstraintCode[0]) {
|
||||
default:
|
||||
|
|
|
@ -25164,7 +25164,7 @@ bool X86TargetLowering::ExpandInlineAsm(CallInst *CI) const {
|
|||
(matchAsm(AsmPieces[0], {"rorw", "$$8,", "${0:w}"}) ||
|
||||
matchAsm(AsmPieces[0], {"rolw", "$$8,", "${0:w}"}))) {
|
||||
AsmPieces.clear();
|
||||
const std::string &ConstraintsStr = IA->getConstraintString();
|
||||
StringRef ConstraintsStr = IA->getConstraintString();
|
||||
SplitString(StringRef(ConstraintsStr).substr(5), AsmPieces, ",");
|
||||
array_pod_sort(AsmPieces.begin(), AsmPieces.end());
|
||||
if (clobbersFlagRegisters(AsmPieces))
|
||||
|
@ -25178,7 +25178,7 @@ bool X86TargetLowering::ExpandInlineAsm(CallInst *CI) const {
|
|||
matchAsm(AsmPieces[1], {"rorl", "$$16,", "$0"}) &&
|
||||
matchAsm(AsmPieces[2], {"rorw", "$$8,", "${0:w}"})) {
|
||||
AsmPieces.clear();
|
||||
const std::string &ConstraintsStr = IA->getConstraintString();
|
||||
StringRef ConstraintsStr = IA->getConstraintString();
|
||||
SplitString(StringRef(ConstraintsStr).substr(5), AsmPieces, ",");
|
||||
array_pod_sort(AsmPieces.begin(), AsmPieces.end());
|
||||
if (clobbersFlagRegisters(AsmPieces))
|
||||
|
@ -25205,7 +25205,7 @@ bool X86TargetLowering::ExpandInlineAsm(CallInst *CI) const {
|
|||
/// getConstraintType - Given a constraint letter, return the type of
|
||||
/// constraint it is for this target.
|
||||
X86TargetLowering::ConstraintType
|
||||
X86TargetLowering::getConstraintType(const std::string &Constraint) const {
|
||||
X86TargetLowering::getConstraintType(StringRef Constraint) const {
|
||||
if (Constraint.size() == 1) {
|
||||
switch (Constraint[0]) {
|
||||
case 'R':
|
||||
|
@ -25537,7 +25537,7 @@ void X86TargetLowering::LowerAsmOperandForConstraint(SDValue Op,
|
|||
|
||||
std::pair<unsigned, const TargetRegisterClass *>
|
||||
X86TargetLowering::getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
|
||||
const std::string &Constraint,
|
||||
StringRef Constraint,
|
||||
MVT VT) const {
|
||||
// First, see if this is a constraint that directly corresponds to an LLVM
|
||||
// register class.
|
||||
|
|
|
@ -707,8 +707,7 @@ namespace llvm {
|
|||
|
||||
bool ExpandInlineAsm(CallInst *CI) const override;
|
||||
|
||||
ConstraintType
|
||||
getConstraintType(const std::string &Constraint) const override;
|
||||
ConstraintType getConstraintType(StringRef Constraint) const override;
|
||||
|
||||
/// Examine constraint string and operand type and determine a weight value.
|
||||
/// The operand object must already have been set up with the operand type.
|
||||
|
@ -726,8 +725,8 @@ namespace llvm {
|
|||
std::vector<SDValue> &Ops,
|
||||
SelectionDAG &DAG) const override;
|
||||
|
||||
unsigned getInlineAsmMemConstraint(
|
||||
const std::string &ConstraintCode) const override {
|
||||
unsigned
|
||||
getInlineAsmMemConstraint(StringRef ConstraintCode) const override {
|
||||
if (ConstraintCode == "i")
|
||||
return InlineAsm::Constraint_i;
|
||||
else if (ConstraintCode == "o")
|
||||
|
@ -745,8 +744,7 @@ namespace llvm {
|
|||
/// error, this returns a register number of 0.
|
||||
std::pair<unsigned, const TargetRegisterClass *>
|
||||
getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
|
||||
const std::string &Constraint,
|
||||
MVT VT) const override;
|
||||
StringRef Constraint, MVT VT) const override;
|
||||
|
||||
/// Return true if the addressing mode represented
|
||||
/// by AM is legal for this target, for a load/store of the specified type.
|
||||
|
|
|
@ -1970,7 +1970,7 @@ XCoreTargetLowering::isLegalAddressingMode(const AddrMode &AM,
|
|||
|
||||
std::pair<unsigned, const TargetRegisterClass *>
|
||||
XCoreTargetLowering::getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
|
||||
const std::string &Constraint,
|
||||
StringRef Constraint,
|
||||
MVT VT) const {
|
||||
if (Constraint.size() == 1) {
|
||||
switch (Constraint[0]) {
|
||||
|
|
|
@ -175,8 +175,7 @@ namespace llvm {
|
|||
// Inline asm support
|
||||
std::pair<unsigned, const TargetRegisterClass *>
|
||||
getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
|
||||
const std::string &Constraint,
|
||||
MVT VT) const override;
|
||||
StringRef Constraint, MVT VT) const override;
|
||||
|
||||
// Expand specifics
|
||||
SDValue TryExpandADDWithMul(SDNode *Op, SelectionDAG &DAG) const;
|
||||
|
|
Loading…
Reference in New Issue