From 9bb9ff09573cf9178341f76a97e2a85b99cc7ae1 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Wed, 6 May 2020 14:20:45 -0700 Subject: [PATCH] [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. --- clang/lib/Basic/Targets/X86.cpp | 2 +- llvm/lib/Target/X86/X86ISelLowering.cpp | 23 ++++++----------------- 2 files changed, 7 insertions(+), 18 deletions(-) diff --git a/clang/lib/Basic/Targets/X86.cpp b/clang/lib/Basic/Targets/X86.cpp index b0fecd6..bd0777d 100644 --- a/clang/lib/Basic/Targets/X86.cpp +++ b/clang/lib/Basic/Targets/X86.cpp @@ -1916,7 +1916,7 @@ bool X86TargetInfo::validateOperandSize(const llvm::StringMap &FeatureMap, return false; break; } - LLVM_FALLTHROUGH; + break; case 'v': case 'x': if (FeatureMap.lookup("avx512f")) diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 0a2376a..5105ea2 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -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); -- 2.7.4