forked from OSchip/llvm-project
[X86] Remove incomplete support for 'Y' has an inline assembly constraint by itself.
Y is the start of several 2 letter constraints, but we also had partial support to recognize it by itself. But it doesn't look like it can get through clang as a single letter so the backend support for this was effectively dead.
This commit is contained in:
parent
880115e65e
commit
9bb9ff0957
|
@ -1916,7 +1916,7 @@ bool X86TargetInfo::validateOperandSize(const llvm::StringMap<bool> &FeatureMap,
|
|||
return false;
|
||||
break;
|
||||
}
|
||||
LLVM_FALLTHROUGH;
|
||||
break;
|
||||
case 'v':
|
||||
case 'x':
|
||||
if (FeatureMap.lookup("avx512f"))
|
||||
|
|
|
@ -47980,7 +47980,6 @@ X86TargetLowering::getConstraintType(StringRef Constraint) const {
|
|||
case 'y':
|
||||
case 'x':
|
||||
case 'v':
|
||||
case 'Y':
|
||||
case 'l':
|
||||
case 'k': // AVX512 masking registers.
|
||||
return C_RegisterClass;
|
||||
|
@ -48073,13 +48072,10 @@ TargetLowering::ConstraintWeight
|
|||
if (type->isX86_MMXTy() && Subtarget.hasMMX())
|
||||
weight = CW_SpecificReg;
|
||||
break;
|
||||
case 'Y': {
|
||||
unsigned Size = StringRef(constraint).size();
|
||||
// Pick 'i' as the next char as 'Yi' and 'Y' are synonymous, when matching 'Y'
|
||||
char NextChar = Size == 2 ? constraint[1] : 'i';
|
||||
if (Size > 2)
|
||||
case 'Y':
|
||||
if (StringRef(constraint).size() != 2)
|
||||
break;
|
||||
switch (NextChar) {
|
||||
switch (constraint[1]) {
|
||||
default:
|
||||
return CW_Invalid;
|
||||
// XMM0
|
||||
|
@ -48100,7 +48096,7 @@ TargetLowering::ConstraintWeight
|
|||
if (type->isX86_MMXTy() && Subtarget.hasMMX())
|
||||
return weight;
|
||||
return CW_Invalid;
|
||||
// Any SSE reg when ISA >= SSE2, same as 'Y'
|
||||
// Any SSE reg when ISA >= SSE2, same as 'x'
|
||||
case 'i':
|
||||
case 't':
|
||||
case '2':
|
||||
|
@ -48108,9 +48104,7 @@ TargetLowering::ConstraintWeight
|
|||
return CW_Invalid;
|
||||
break;
|
||||
}
|
||||
// Fall through (handle "Y" constraint).
|
||||
LLVM_FALLTHROUGH;
|
||||
}
|
||||
break;
|
||||
case 'v':
|
||||
if ((type->getPrimitiveSizeInBits() == 512) && Subtarget.hasAVX512())
|
||||
weight = CW_Register;
|
||||
|
@ -48192,8 +48186,6 @@ LowerXConstraint(EVT ConstraintVT) const {
|
|||
// FP X constraints get lowered to SSE1/2 registers if available, otherwise
|
||||
// 'f' like normal targets.
|
||||
if (ConstraintVT.isFloatingPoint()) {
|
||||
if (Subtarget.hasSSE2())
|
||||
return "Y";
|
||||
if (Subtarget.hasSSE1())
|
||||
return "x";
|
||||
}
|
||||
|
@ -48492,9 +48484,6 @@ X86TargetLowering::getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
|
|||
case 'y': // MMX_REGS if MMX allowed.
|
||||
if (!Subtarget.hasMMX()) break;
|
||||
return std::make_pair(0U, &X86::VR64RegClass);
|
||||
case 'Y': // SSE_REGS if SSE2 allowed
|
||||
if (!Subtarget.hasSSE2()) break;
|
||||
LLVM_FALLTHROUGH;
|
||||
case 'v':
|
||||
case 'x': // SSE_REGS if SSE1 allowed or AVX_REGS if AVX allowed
|
||||
if (!Subtarget.hasSSE1()) break;
|
||||
|
@ -48557,7 +48546,7 @@ X86TargetLowering::getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
|
|||
case 'i':
|
||||
case 't':
|
||||
case '2':
|
||||
return getRegForInlineAsmConstraint(TRI, "Y", VT);
|
||||
return getRegForInlineAsmConstraint(TRI, "x", VT);
|
||||
case 'm':
|
||||
if (!Subtarget.hasMMX()) break;
|
||||
return std::make_pair(0U, &X86::VR64RegClass);
|
||||
|
|
Loading…
Reference in New Issue