[CIR] Fold ComplexImagOp from ComplexCreateOp (#148010)
Folding ComplexImagOp if the operand is ComplexCreateOp, inspired by MLIR Complex dialect https://github.com/llvm/llvm-project/issues/141365
This commit is contained in:
parent
b9d8d1e416
commit
df10df8b0c
@ -2084,6 +2084,10 @@ LogicalResult cir::ComplexImagOp::verify() {
|
||||
}
|
||||
|
||||
OpFoldResult cir::ComplexImagOp::fold(FoldAdaptor adaptor) {
|
||||
if (auto complexCreateOp =
|
||||
dyn_cast_or_null<cir::ComplexCreateOp>(getOperand().getDefiningOp()))
|
||||
return complexCreateOp.getOperand(1);
|
||||
|
||||
auto complex =
|
||||
mlir::cast_if_present<cir::ConstComplexAttr>(adaptor.getOperand());
|
||||
return complex ? complex.getImag() : nullptr;
|
||||
|
@ -1,4 +1,4 @@
|
||||
// RUN: cir-opt %s -cir-canonicalize -o - | FileCheck %s
|
||||
// RUN: cir-opt %s -cir-canonicalize -split-input-file -o - | FileCheck %s
|
||||
|
||||
!s32i = !cir.int<s, 32>
|
||||
|
||||
@ -21,3 +21,19 @@ module {
|
||||
// CHECK: }
|
||||
|
||||
}
|
||||
|
||||
// -----
|
||||
|
||||
!s32i = !cir.int<s, 32>
|
||||
|
||||
module {
|
||||
cir.func dso_local @fold_complex_imag_from_create_test(%arg0: !s32i, %arg1: !s32i) -> !s32i {
|
||||
%0 = cir.complex.create %arg0, %arg1 : !s32i -> !cir.complex<!s32i>
|
||||
%1 = cir.complex.imag %0 : !cir.complex<!s32i> -> !s32i
|
||||
cir.return %1 : !s32i
|
||||
}
|
||||
|
||||
// CHECK: cir.func dso_local @fold_complex_imag_from_create_test(%[[ARG_0:.*]]: !s32i, %[[ARG_1:.*]]: !s32i) -> !s32i {
|
||||
// CHECK: cir.return %[[ARG_1]] : !s32i
|
||||
// CHECK: }
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user