Skip to content

Commit 2e2d9ce

Browse files
committed
llvm-reduce: Fix operand reduction asserting on target ext types
Not all TargetExtTypes support zeroinit, so use poison as a substitute if unavailable.
1 parent eeb4132 commit 2e2d9ce

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
; RUN: llvm-reduce --abort-on-invalid-reduction --delta-passes=operands-zero --test FileCheck --test-arg %s --test-arg --input-file %s -o %t
2+
; RUN: FileCheck --check-prefixes=CHECK,ZERO %s < %t
3+
4+
; RUN: llvm-reduce --abort-on-invalid-reduction --delta-passes=operands-one --test FileCheck --test-arg %s --test-arg --input-file %s -o %t
5+
; RUN: FileCheck --check-prefixes=CHECK,ONE %s < %t
6+
7+
declare void @uses_ext_ty(target("sometarget.sometype"))
8+
9+
; CHECK-LABEL: @foo(
10+
; ZERO: call void @uses_ext_ty(target("sometarget.sometype") poison)
11+
; ONE: call void @uses_ext_ty(target("sometarget.sometype") %arg)
12+
define void @foo(target("sometarget.sometype") %arg) {
13+
call void @uses_ext_ty(target("sometarget.sometype") %arg)
14+
ret void
15+
}
16+
17+
declare void @uses_zeroinit_ext_ty(target("sometarget.sometype"))
18+
19+
; CHECK-LABEL: @bar(
20+
; ZERO: call void @uses_zeroinit_ext_ty(target("spirv.sometype") zeroinitializer)
21+
; ONE: call void @uses_zeroinit_ext_ty(target("spirv.sometype") %arg)
22+
define void @bar(target("spirv.sometype") %arg) {
23+
call void @uses_zeroinit_ext_ty(target("spirv.sometype") %arg)
24+
ret void
25+
}

llvm/tools/llvm-reduce/deltas/ReduceOperands.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,13 @@ void llvm::reduceOperandsZeroDeltaPass(TestRunner &Test) {
135135
if (switchCaseExists(Op, ConstantInt::get(IntTy, 0)))
136136
return nullptr;
137137
// Don't replace existing zeroes.
138+
139+
if (auto *TET = dyn_cast<TargetExtType>(Op->getType())) {
140+
if (TET->hasProperty(TargetExtType::HasZeroInit))
141+
return ConstantTargetNone::get(TET);
142+
return PoisonValue::get(TET);
143+
}
144+
138145
return isZero(Op) ? nullptr : Constant::getNullValue(Op->getType());
139146
};
140147
runDeltaPass(

0 commit comments

Comments
 (0)