[X86][FastIsel] Fix assertion failure when selecting int-to-double conversion (PR23273).
[oota-llvm.git] / lib / Target / X86 / X86FastISel.cpp
index cdf10a73cc6059194149bd128a7981287720b05a..4d0ea2166c73fd5ff0ac46c9bd535bfbc639b937 100644 (file)
@@ -2065,6 +2065,12 @@ bool X86FastISel::X86SelectSelect(const Instruction *I) {
 }
 
 bool X86FastISel::X86SelectSIToFP(const Instruction *I) {
+  // The target-independent selection algorithm in FastISel already knows how
+  // to select a SINT_TO_FP if the target is SSE but not AVX.
+  // Early exit if the subtarget doesn't have AVX.
+  if (!Subtarget->hasAVX())
+    return false;
+
   if (!I->getOperand(0)->getType()->isIntegerTy(32))
     return false;
 
@@ -2087,11 +2093,6 @@ bool X86FastISel::X86SelectSIToFP(const Instruction *I) {
   } else
     return false;
 
-  // The target-independent selection algorithm in FastISel already knows how
-  // to select a SINT_TO_FP if the target is SSE but not AVX. This code is only
-  // reachable if the subtarget has AVX.
-  assert(Subtarget->hasAVX() && "Expected a subtarget with AVX!");
-
   unsigned ImplicitDefReg = createResultReg(RC);
   BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc,
           TII.get(TargetOpcode::IMPLICIT_DEF), ImplicitDefReg);