[Flang] Temporary fix for conversion materialization
Simply add a source and target materialization handler that do nothing and that override the default handlers that would add illegal LLVM::DialectCastOp otherwise. This is the simplest workaround, but not an actual fix, something may be inconsistent after D82831 (most likely fir lowering to llvm happens in a way that mlir infrastructure is not expecting in D82831). Here is a minimal reproducer of what the issue was: ``` func @foop(%a : !fir.real<4>) -> () func @bar(%a : !fir.real<2>) { %1 = fir.convert %a : (!fir.real<2>) -> !fir.real<4> call @foop(%1) : (!fir.real<4>) -> () return } ``` tco -o - output was: ``` error: 'llvm.mlir.cast' op type must be non-index integer types, float types, or vector of mentioned types. llvm.func @foop(!llvm.float) llvm.func @bar(%arg0: !llvm.half) { %0 = llvm.fpext %arg0 : !llvm.half to !llvm.float %1 = llvm.mlir.cast %0 : !llvm.float to !fir.real<4> llvm.call @foop(%1) : (!fir.real<4>) -> () llvm.return } ``` This patch disable the introduction of the llvm.mlir.cast and preserve the previous behavior. Also fixes https://github.com/llvm/llvm-project/issues/55210. Note: This is part of upstreaming from the fir-dev branch of https://github.com/flang-compiler/f18-llvm-project. Reviewed By: awarzynski Differential Revision: https://reviews.llvm.org/D127212 Co-authored-by:Jean Perier <jperier@nvidia.com> Co-authored-by:
Eric Schweitz <eschweitz@nvidia.com>
Loading
Please sign in to comment