Author: Amr Hesham Date: 2025-07-11T19:18:08+02:00 New Revision: df10df8b0caec9e649dd8c4415610038b7926060
URL: https://github.com/llvm/llvm-project/commit/df10df8b0caec9e649dd8c4415610038b7926060 DIFF: https://github.com/llvm/llvm-project/commit/df10df8b0caec9e649dd8c4415610038b7926060.diff LOG: [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 Added: Modified: clang/lib/CIR/Dialect/IR/CIRDialect.cpp clang/test/CIR/Transforms/complex-imag-fold.cir Removed: ################################################################################ diff --git a/clang/lib/CIR/Dialect/IR/CIRDialect.cpp b/clang/lib/CIR/Dialect/IR/CIRDialect.cpp index 8512b229c2663..9069c9b37a424 100644 --- a/clang/lib/CIR/Dialect/IR/CIRDialect.cpp +++ b/clang/lib/CIR/Dialect/IR/CIRDialect.cpp @@ -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; diff --git a/clang/test/CIR/Transforms/complex-imag-fold.cir b/clang/test/CIR/Transforms/complex-imag-fold.cir index 0d9a4e43142a3..56e062d5285a2 100644 --- a/clang/test/CIR/Transforms/complex-imag-fold.cir +++ b/clang/test/CIR/Transforms/complex-imag-fold.cir @@ -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: } +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits