Skip to content

Commit 41ebb77

Browse files
committed
Update LLVM to llvm/llvm-project@ac8bb735. C++ changes are related to change in behavior of TypeConverter. It used to generate UnrealizedConversionCastOp, during applySignatureConversion in GenericOpTypePropagation of TypePropagationPass.cpp, however now it's not. This causes unrealized_conversion_cast to be generated later and hence survive the pass. To repro above behavior, try undo the C++ change in this PR and then: ``` wget https://gist.githubusercontent.com/raikonenfnu/dfb3b274007df8c4be87daf9ee67a5f4/raw/e48cc07e5fa558cd2c450b0e3ae46568136e1be6/type_propagate_repro.mlir iree-opt --pass-pipeline='builtin.module(func.func(iree-codegen-type-propagation))' propagate_test.mlir -o /dev/null error: failed to legalize unresolved materialization from ('i8') to ('i1') that remained live after conversion ^bb0(%in: i1, %in_0: f32, %in_1: f32, %out: f32): ^ propagate_test.mlir:5:8: note: see current operation: %10 = "builtin.unrealized_conversion_cast"(%arg0) : (i8) -> i1 propagate_test.mlir:6:11: note: see existing live user here: %10 = arith.select %9, %in_0, %in_1 : f32 ``` This PR also carries the following reverts: llvm/llvm-project#120999 llvm/llvm-project#120115 llvm/llvm-project#119461 The main issue with this PR(12099 and 120115) is it breaks matvec codegen generating scf.if instead of scf.for(s). An issue will be pushed up for repro. The main issue with PR 119461 is it breaks e2e riscv test by making it get stuck on infinite loop. ``` /path/to/iree-build/tools/iree-compile --output-format=vm-bytecode --mlir-print-op-on-diagnostic=false --iree-hal-target-backends=llvm-cpu --iree-input-type=stablehlo --iree-input-demote-f64-to-f32 --iree-llvmcpu-target-cpu=generic /path/to/iree/tests/e2e/stablehlo_ops/three_fry.mlir -o three_fly_exec_target.mlir --iree-llvmcpu-target-triple=riscv64 --iree-llvmcpu-target-abi=lp64d --iree-llvmcpu-target-cpu-features=+m,+a,+d,+zvl512b,+v --mlir-disable-threading > infinite loop ``` Signed-off-by: Stanley Winata <[email protected]>
1 parent f1e1866 commit 41ebb77

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

compiler/src/iree/compiler/Codegen/Common/TypePropagationPass.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,13 @@ static std::optional<Type> getLegalizedType(Type t) {
7979

8080
namespace {
8181

82+
/// Materialize
83+
Value materializeAsConvertElementType(OpBuilder &builder, Type type,
84+
ValueRange inputs, Location loc) {
85+
assert(inputs.size() == 1 && "expected exactly one input");
86+
return convertElementType(builder, loc, type, inputs[0]);
87+
}
88+
8289
/// Type converter to use for type propagation.
8390
struct TypePropagationTypeConverter : public TypeConverter {
8491
TypePropagationTypeConverter() {
@@ -526,11 +533,9 @@ struct TypePropagationPass final
526533
RewritePatternSet patterns(context);
527534

528535
TypePropagationTypeConverter typeConverter;
529-
typeConverter.addArgumentMaterialization(
530-
[&](OpBuilder &builder, Type type, ValueRange inputs, Location loc) {
531-
assert(inputs.size() == 1 && "expected exactly one input");
532-
return convertElementType(builder, loc, type, inputs[0]);
533-
});
536+
typeConverter.addArgumentMaterialization(materializeAsConvertElementType);
537+
typeConverter.addSourceMaterialization(materializeAsConvertElementType);
538+
typeConverter.addTargetMaterialization(materializeAsConvertElementType);
534539

535540
patterns.insert<
536541
ConstantOpTypeConversion, ForwardSourceType<arith::ExtUIOp>,

third_party/llvm-project

0 commit comments

Comments
 (0)