mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-16 08:08:01 +00:00
Fix PR11948: the result type of an icmp may be a vector of boolean -
don't assume it is a boolean. llvm-svn: 150247
This commit is contained in:
parent
205d9394e8
commit
931ce8ee15
@ -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".
|
||||
|
@ -415,3 +415,10 @@ define <2 x i1> @vectorselect1(<2 x i1> %cond) {
|
||||
ret <2 x i1> %c
|
||||
; CHECK: ret <2 x i1> %cond
|
||||
}
|
||||
|
||||
define <2 x i1> @vectorselectcrash(i32 %arg1) { ; PR11948
|
||||
%tobool40 = icmp ne i32 %arg1, 0
|
||||
%cond43 = select i1 %tobool40, <2 x i16> <i16 -5, i16 66>, <2 x i16> <i16 46, i16 1>
|
||||
%cmp45 = icmp ugt <2 x i16> %cond43, <i16 73, i16 21>
|
||||
ret <2 x i1> %cmp45
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user