mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
[InstSimplify] Clarify use of FixedVectorType in SimplifySelectInst
Folding a select of vector constants that include undef elements only applies to fixed vectors, but there's no earlier check the type is not scalable so it crashes for scalable vectors. This adds a check so this optimization is only attempted for fixed vectors. Reviewed By: sdesmalen Differential Revision: https://reviews.llvm.org/D92046
This commit is contained in:
parent
4a8996e74d
commit
50fbdf20c1
@ -4136,7 +4136,8 @@ static Value *SimplifySelectInst(Value *Cond, Value *TrueVal, Value *FalseVal,
|
||||
|
||||
// Deal with partial undef vector constants: select ?, VecC, VecC' --> VecC''
|
||||
Constant *TrueC, *FalseC;
|
||||
if (TrueVal->getType()->isVectorTy() && match(TrueVal, m_Constant(TrueC)) &&
|
||||
if (isa<FixedVectorType>(TrueVal->getType()) &&
|
||||
match(TrueVal, m_Constant(TrueC)) &&
|
||||
match(FalseVal, m_Constant(FalseC))) {
|
||||
unsigned NumElts =
|
||||
cast<FixedVectorType>(TrueC->getType())->getNumElements();
|
||||
|
@ -957,3 +957,14 @@ define i32 @pr47322_more_poisonous_replacement(i32 %arg) {
|
||||
ret i32 %r1.sroa.0.1
|
||||
}
|
||||
declare i32 @llvm.cttz.i32(i32, i1 immarg)
|
||||
|
||||
; Partial undef scalable vectors should be ignored.
|
||||
define <vscale x 2 x i1> @ignore_scalable_undef(<vscale x 2 x i1> %cond) {
|
||||
; CHECK-LABEL: @ignore_scalable_undef(
|
||||
; CHECK-NEXT: [[S:%.*]] = select <vscale x 2 x i1> [[COND:%.*]], <vscale x 2 x i1> undef, <vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0)
|
||||
; CHECK-NEXT: ret <vscale x 2 x i1> [[S]]
|
||||
;
|
||||
%vec = insertelement <vscale x 2 x i1> undef, i1 true, i32 0
|
||||
%s = select <vscale x 2 x i1> %cond, <vscale x 2 x i1> undef, <vscale x 2 x i1> %vec
|
||||
ret <vscale x 2 x i1> %s
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user