1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 19:52:54 +01:00

[IR] Handle constant expressions in containsUndefinedElement()

If the constant is a constant expression, then getAggregateElement()
will return null. Guard against this before calling HasFn().

(cherry picked from commit af382b93831ae6a58bce8bc075458cfd056e3976)
This commit is contained in:
Nikita Popov 2021-09-09 21:55:28 +02:00 committed by Tom Stellard
parent bedf13b1a7
commit 7d56483207
2 changed files with 14 additions and 3 deletions

View File

@ -315,9 +315,11 @@ containsUndefinedElement(const Constant *C,
return false;
for (unsigned i = 0, e = cast<FixedVectorType>(VTy)->getNumElements();
i != e; ++i)
if (HasFn(C->getAggregateElement(i)))
return true;
i != e; ++i) {
if (Constant *Elem = C->getAggregateElement(i))
if (HasFn(Elem))
return true;
}
}
return false;

View File

@ -87,6 +87,15 @@ define i32 @add_poison1() {
ret i32 %x
}
define i32 @add_constexpr() {
; CHECK-LABEL: @add_constexpr(
; CHECK-NEXT: [[X:%.*]] = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> bitcast (<4 x i64> <i64 0, i64 1, i64 2, i64 3> to <8 x i32>))
; CHECK-NEXT: ret i32 [[X]]
;
%x = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> bitcast (<4 x i64> <i64 0, i64 1, i64 2, i64 3> to <8 x i32>))
ret i32 %x
}
define i32 @mul_0() {
; CHECK-LABEL: @mul_0(
; CHECK-NEXT: ret i32 0