diff options
| author | Eric Christopher <echristo@apple.com> | 2012-01-07 01:02:09 +0000 |
|---|---|---|
| committer | Eric Christopher <echristo@apple.com> | 2012-01-07 01:02:09 +0000 |
| commit | c206d467092fceb60c17957d00ee65ea202b5134 (patch) | |
| tree | a719336e56d0ffc78b9abdfb735a3744ba517f68 /llvm/lib | |
| parent | ff4e2b7d23decd98b42d27437c123bf181037084 (diff) | |
| download | bcm5719-llvm-c206d467092fceb60c17957d00ee65ea202b5134.tar.gz bcm5719-llvm-c206d467092fceb60c17957d00ee65ea202b5134.zip | |
Make the 'x' constraint work for AVX registers as well.
Fixes rdar://10614894
llvm-svn: 147704
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 58bdc77ccdb..4b1c411824f 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -15098,7 +15098,8 @@ TargetLowering::ConstraintWeight break; case 'x': case 'Y': - if ((type->getPrimitiveSizeInBits() == 128) && Subtarget->hasXMM()) + if (((type->getPrimitiveSizeInBits() == 128) && Subtarget->hasXMM()) || + ((type->getPrimitiveSizeInBits() == 256) && Subtarget->hasAVX())) weight = CW_Register; break; case 'I': @@ -15378,8 +15379,8 @@ X86TargetLowering::getRegForInlineAsmConstraint(const std::string &Constraint, case 'Y': // SSE_REGS if SSE2 allowed if (!Subtarget->hasXMMInt()) break; // FALL THROUGH. - case 'x': // SSE_REGS if SSE1 allowed - if (!Subtarget->hasXMM()) break; + case 'x': // SSE_REGS if SSE1 allowed or AVX_REGS if AVX allowed + if (!Subtarget->hasXMM() && !Subtarget->hasAVX()) break; switch (VT.getSimpleVT().SimpleTy) { default: break; @@ -15398,6 +15399,15 @@ X86TargetLowering::getRegForInlineAsmConstraint(const std::string &Constraint, case MVT::v4f32: case MVT::v2f64: return std::make_pair(0U, X86::VR128RegisterClass); + // AVX types. + case MVT::v32i8: + case MVT::v16i16: + case MVT::v8i32: + case MVT::v4i64: + case MVT::v8f32: + case MVT::v4f64: + return std::make_pair(0U, X86::VR256RegisterClass); + } break; } |

