diff options
| -rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp | 3 | ||||
| -rw-r--r-- | llvm/test/Transforms/InstCombine/vector-casts.ll | 11 | 
2 files changed, 13 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp index ee21c81fa26..15e0889b51b 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp @@ -93,7 +93,8 @@ static Value *getFCmpValue(bool isordered, unsigned code,    case 5: Pred = isordered ? FCmpInst::FCMP_ONE : FCmpInst::FCMP_UNE; break;    case 6: Pred = isordered ? FCmpInst::FCMP_OLE : FCmpInst::FCMP_ULE; break;    case 7: -    if (!isordered) return ConstantInt::getTrue(LHS->getContext()); +    if (!isordered) +      return ConstantInt::get(CmpInst::makeCmpResultType(LHS->getType()), 1);      Pred = FCmpInst::FCMP_ORD; break;    }    return Builder->CreateFCmp(Pred, LHS, RHS); diff --git a/llvm/test/Transforms/InstCombine/vector-casts.ll b/llvm/test/Transforms/InstCombine/vector-casts.ll index 727eb4ebb4c..af18b4cfbdd 100644 --- a/llvm/test/Transforms/InstCombine/vector-casts.ll +++ b/llvm/test/Transforms/InstCombine/vector-casts.ll @@ -150,3 +150,14 @@ entry:    ret <4 x float> undef  } +define <8 x i32> @pr24458(<8 x float> %n) { +; CHECK-LABEL: @pr24458 +  %notequal_b_load_.i = fcmp une <8 x float> %n, zeroinitializer +  %equal_a_load72_.i = fcmp ueq <8 x float> %n, zeroinitializer +  %notequal_b_load__to_boolvec.i = sext <8 x i1> %notequal_b_load_.i to <8 x i32> +  %equal_a_load72__to_boolvec.i = sext <8 x i1> %equal_a_load72_.i to <8 x i32> +  %wrong = or <8 x i32> %notequal_b_load__to_boolvec.i, %equal_a_load72__to_boolvec.i +  ret <8 x i32> %wrong +; CHECK-NEXT: ret <8 x i32> <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1> +} +  | 

