Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
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 <stanley.winata@amd.com>
  • Loading branch information
raikonenfnu committed Dec 27, 2024
1 parent f1e1866 commit 41ebb77
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 6 deletions.
15 changes: 10 additions & 5 deletions compiler/src/iree/compiler/Codegen/Common/TypePropagationPass.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,13 @@ static std::optional<Type> getLegalizedType(Type t) {

namespace {

/// Materialize
Value materializeAsConvertElementType(OpBuilder &builder, Type type,
ValueRange inputs, Location loc) {
assert(inputs.size() == 1 && "expected exactly one input");
return convertElementType(builder, loc, type, inputs[0]);
}

/// Type converter to use for type propagation.
struct TypePropagationTypeConverter : public TypeConverter {
TypePropagationTypeConverter() {
Expand Down Expand Up @@ -526,11 +533,9 @@ struct TypePropagationPass final
RewritePatternSet patterns(context);

TypePropagationTypeConverter typeConverter;
typeConverter.addArgumentMaterialization(
[&](OpBuilder &builder, Type type, ValueRange inputs, Location loc) {
assert(inputs.size() == 1 && "expected exactly one input");
return convertElementType(builder, loc, type, inputs[0]);
});
typeConverter.addArgumentMaterialization(materializeAsConvertElementType);
typeConverter.addSourceMaterialization(materializeAsConvertElementType);
typeConverter.addTargetMaterialization(materializeAsConvertElementType);

patterns.insert<
ConstantOpTypeConversion, ForwardSourceType<arith::ExtUIOp>,
Expand Down
2 changes: 1 addition & 1 deletion third_party/llvm-project
Submodule llvm-project updated 1892 files

0 comments on commit 41ebb77

Please sign in to comment.