https://github.com/AmrDeveloper updated https://github.com/llvm/llvm-project/pull/147592
>From 316b23e92cf55a407fdaa7d9aa5fd92a24754fee Mon Sep 17 00:00:00 2001 From: AmrDeveloper <am...@programmer.net> Date: Tue, 8 Jul 2025 22:07:09 +0200 Subject: [PATCH 1/2] [CIR] Fold ComplexRealOp from ComplexCreateOp --- clang/lib/CIR/Dialect/IR/CIRDialect.cpp | 5 +++++ .../test/CIR/Transforms/complex-real-fold.cir | 18 +++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/clang/lib/CIR/Dialect/IR/CIRDialect.cpp b/clang/lib/CIR/Dialect/IR/CIRDialect.cpp index 8512b229c2663..ed70e52aaefe6 100644 --- a/clang/lib/CIR/Dialect/IR/CIRDialect.cpp +++ b/clang/lib/CIR/Dialect/IR/CIRDialect.cpp @@ -2066,6 +2066,11 @@ LogicalResult cir::ComplexRealOp::verify() { } OpFoldResult cir::ComplexRealOp::fold(FoldAdaptor adaptor) { + if (auto complexCreateOp = dyn_cast_or_null<cir::ComplexCreateOp>( + getOperand().getDefiningOp())) { + return complexCreateOp.getOperand(0); + } + auto complex = mlir::cast_if_present<cir::ConstComplexAttr>(adaptor.getOperand()); return complex ? complex.getReal() : nullptr; diff --git a/clang/test/CIR/Transforms/complex-real-fold.cir b/clang/test/CIR/Transforms/complex-real-fold.cir index 1cab9be616af0..630dd679f67af 100644 --- a/clang/test/CIR/Transforms/complex-real-fold.cir +++ b/clang/test/CIR/Transforms/complex-real-fold.cir @@ -1,4 +1,4 @@ -// RUN: cir-opt %s -cir-canonicalize -o - | FileCheck %s +// RUN: cir-opt %s -cir-canonicalize -o - -split-input-file | 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_real_from_create_test(%arg0: !s32i, %arg1: !s32i) -> !s32i { + %0 = cir.complex.create %arg0, %arg1 : !s32i -> !cir.complex<!s32i> + %1 = cir.complex.real %0 : !cir.complex<!s32i> -> !s32i + cir.return %1 : !s32i + } + + // CHECK: cir.func dso_local @fold_complex_real_from_create_test(%[[ARG_0:.*]]: !s32i, %[[ARG_1:.*]]: !s32i) -> !s32i { + // CHECK: cir.return %[[ARG_0]] : !s32i + // CHECK: } +} >From 957cbb66206e8d90812b48bdbc7fdc099e45ef02 Mon Sep 17 00:00:00 2001 From: AmrDeveloper <am...@programmer.net> Date: Wed, 9 Jul 2025 18:07:30 +0200 Subject: [PATCH 2/2] Address code review comments --- clang/lib/CIR/Dialect/IR/CIRDialect.cpp | 5 ++--- clang/test/CIR/Transforms/complex-real-fold.cir | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/clang/lib/CIR/Dialect/IR/CIRDialect.cpp b/clang/lib/CIR/Dialect/IR/CIRDialect.cpp index ed70e52aaefe6..4ffe2a8d1cbb1 100644 --- a/clang/lib/CIR/Dialect/IR/CIRDialect.cpp +++ b/clang/lib/CIR/Dialect/IR/CIRDialect.cpp @@ -2066,10 +2066,9 @@ LogicalResult cir::ComplexRealOp::verify() { } OpFoldResult cir::ComplexRealOp::fold(FoldAdaptor adaptor) { - if (auto complexCreateOp = dyn_cast_or_null<cir::ComplexCreateOp>( - getOperand().getDefiningOp())) { + if (auto complexCreateOp = + dyn_cast_or_null<cir::ComplexCreateOp>(getOperand().getDefiningOp())) return complexCreateOp.getOperand(0); - } auto complex = mlir::cast_if_present<cir::ConstComplexAttr>(adaptor.getOperand()); diff --git a/clang/test/CIR/Transforms/complex-real-fold.cir b/clang/test/CIR/Transforms/complex-real-fold.cir index 630dd679f67af..ad32c677c36b6 100644 --- a/clang/test/CIR/Transforms/complex-real-fold.cir +++ b/clang/test/CIR/Transforms/complex-real-fold.cir @@ -1,4 +1,4 @@ -// RUN: cir-opt %s -cir-canonicalize -o - -split-input-file | FileCheck %s +// RUN: cir-opt %s -cir-canonicalize -o - -split-input-file | FileCheck %s !s32i = !cir.int<s, 32> _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits