Fix PR11948: the result type of an icmp may be a vector of boolean -
[oota-llvm.git] / lib / Analysis / InstructionSimplify.cpp
index bce7e793188148944b40a44a0bcdc21359508104..7656220ba1fb32748e082d4e267585672648d71e 100644 (file)
@@ -476,6 +476,11 @@ static Value *ThreadCmpOverSelect(CmpInst::Predicate Pred, Value *LHS,
   // the original comparison.
   if (TCmp == FCmp)
     return TCmp;
+
+  // The remaining cases only make sense if the select condition has the same
+  // type as the result of the comparison, so bail out if this is not so.
+  if (Cond->getType()->isVectorTy() != RHS->getType()->isVectorTy())
+    return 0;
   // If the false value simplified to false, then the result of the compare
   // is equal to "Cond && TCmp".  This also catches the case when the false
   // value simplified to false and the true value to true, returning "Cond".