https://github.com/andykaylor updated https://github.com/llvm/llvm-project/pull/176029
>From 68dd618cd4814685c49aaea2ab4188c6d071bcbe Mon Sep 17 00:00:00 2001 From: Andy Kaylor <[email protected]> Date: Wed, 14 Jan 2026 12:21:40 -0800 Subject: [PATCH 1/3] [CIR] Upstream handling for member ptr function compare This adds handling for compare expressions involving member pointer to functions. --- .../CIR/Dialect/Transforms/CXXABILowering.cpp | 16 ++- .../Transforms/TargetLowering/CIRCXXABI.h | 4 + .../TargetLowering/LowerItaniumCXXABI.cpp | 51 ++++++++ .../CodeGen/pointer-to-member-func-cmp.cpp | 121 ++++++++++++++++++ 4 files changed, 186 insertions(+), 6 deletions(-) create mode 100644 clang/test/CIR/CodeGen/pointer-to-member-func-cmp.cpp diff --git a/clang/lib/CIR/Dialect/Transforms/CXXABILowering.cpp b/clang/lib/CIR/Dialect/Transforms/CXXABILowering.cpp index 145f8574893f4..dbe656ac011d8 100644 --- a/clang/lib/CIR/Dialect/Transforms/CXXABILowering.cpp +++ b/clang/lib/CIR/Dialect/Transforms/CXXABILowering.cpp @@ -159,12 +159,16 @@ mlir::LogicalResult CIRCmpOpABILowering::matchAndRewrite( cir::CmpOp op, OpAdaptor adaptor, mlir::ConversionPatternRewriter &rewriter) const { mlir::Type type = op.getLhs().getType(); - assert((mlir::isa<cir::DataMemberType>(type)) && - "input to cmp in ABI lowering must be a data member"); - - assert(!cir::MissingFeatures::methodType()); - mlir::Value loweredResult = lowerModule->getCXXABI().lowerDataMemberCmp( - op, adaptor.getLhs(), adaptor.getRhs(), rewriter); + assert((mlir::isa<cir::DataMemberType, cir::MethodType>(type)) && + "input to cmp in ABI lowering must be a data member or method"); + + mlir::Value loweredResult; + if (mlir::isa<cir::DataMemberType>(type)) + loweredResult = lowerModule->getCXXABI().lowerDataMemberCmp( + op, adaptor.getLhs(), adaptor.getRhs(), rewriter); + else + loweredResult = lowerModule->getCXXABI().lowerMethodCmp( + op, adaptor.getLhs(), adaptor.getRhs(), rewriter); rewriter.replaceOp(op, loweredResult); return mlir::success(); diff --git a/clang/lib/CIR/Dialect/Transforms/TargetLowering/CIRCXXABI.h b/clang/lib/CIR/Dialect/Transforms/TargetLowering/CIRCXXABI.h index 0dedfa7221f5f..f4d608cdbad03 100644 --- a/clang/lib/CIR/Dialect/Transforms/TargetLowering/CIRCXXABI.h +++ b/clang/lib/CIR/Dialect/Transforms/TargetLowering/CIRCXXABI.h @@ -81,6 +81,10 @@ class CIRCXXABI { virtual mlir::Value lowerDataMemberCmp(cir::CmpOp op, mlir::Value loweredLhs, mlir::Value loweredRhs, mlir::OpBuilder &builder) const = 0; + + virtual mlir::Value lowerMethodCmp(cir::CmpOp op, mlir::Value loweredLhs, + mlir::Value loweredRhs, + mlir::OpBuilder &builder) const = 0; }; /// Creates an Itanium-family ABI. diff --git a/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerItaniumCXXABI.cpp b/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerItaniumCXXABI.cpp index d944fa3294684..0850368d62718 100644 --- a/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerItaniumCXXABI.cpp +++ b/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerItaniumCXXABI.cpp @@ -67,6 +67,10 @@ class LowerItaniumCXXABI : public CIRCXXABI { mlir::Value lowerDataMemberCmp(cir::CmpOp op, mlir::Value loweredLhs, mlir::Value loweredRhs, mlir::OpBuilder &builder) const override; + + mlir::Value lowerMethodCmp(cir::CmpOp op, mlir::Value loweredLhs, + mlir::Value loweredRhs, + mlir::OpBuilder &builder) const override; }; } // namespace @@ -249,4 +253,51 @@ LowerItaniumCXXABI::lowerDataMemberCmp(cir::CmpOp op, mlir::Value loweredLhs, loweredRhs); } +mlir::Value LowerItaniumCXXABI::lowerMethodCmp(cir::CmpOp op, + mlir::Value loweredLhs, + mlir::Value loweredRhs, + mlir::OpBuilder &builder) const { + assert(op.getKind() == cir::CmpOpKind::eq || + op.getKind() == cir::CmpOpKind::ne); + + cir::IntType ptrdiffCIRTy = getPtrDiffCIRTy(lm); + mlir::Value ptrdiffZero = cir::ConstantOp::create( + builder, op.getLoc(), cir::IntAttr::get(ptrdiffCIRTy, 0)); + mlir::Location loc = op.getLoc(); + + mlir::Value lhsPtrField = + cir::ExtractMemberOp::create(builder, loc, ptrdiffCIRTy, loweredLhs, 0); + mlir::Value rhsPtrField = + cir::ExtractMemberOp::create(builder, loc, ptrdiffCIRTy, loweredRhs, 0); + mlir::Value ptrCmp = + cir::CmpOp::create(builder, loc, op.getKind(), lhsPtrField, rhsPtrField); + mlir::Value ptrCmpToNull = + cir::CmpOp::create(builder, loc, op.getKind(), lhsPtrField, ptrdiffZero); + + mlir::Value lhsAdjField = + cir::ExtractMemberOp::create(builder, loc, ptrdiffCIRTy, loweredLhs, 1); + mlir::Value rhsAdjField = + cir::ExtractMemberOp::create(builder, loc, ptrdiffCIRTy, loweredRhs, 1); + mlir::Value adjCmp = + cir::CmpOp::create(builder, loc, op.getKind(), lhsAdjField, rhsAdjField); + + auto create_and = [&](mlir::Value lhs, mlir::Value rhs) { + return cir::BinOp::create(builder, loc, cir::BinOpKind::And, lhs, rhs); + }; + auto create_or = [&](mlir::Value lhs, mlir::Value rhs) { + return cir::BinOp::create(builder, loc, cir::BinOpKind::Or, lhs, rhs); + }; + + mlir::Value result; + if (op.getKind() == cir::CmpOpKind::eq) { + // (lhs.ptr == null || lhs.adj == rhs.adj) && lhs.ptr == rhs.ptr + result = create_and(ptrCmp, create_or(ptrCmpToNull, adjCmp)); + } else { + // (lhs.ptr != null && lhs.adj != rhs.adj) || lhs.ptr != rhs.ptr + result = create_or(ptrCmp, create_and(ptrCmpToNull, adjCmp)); + } + + return result; +} + } // namespace cir diff --git a/clang/test/CIR/CodeGen/pointer-to-member-func-cmp.cpp b/clang/test/CIR/CodeGen/pointer-to-member-func-cmp.cpp new file mode 100644 index 0000000000000..f00d227e97fe7 --- /dev/null +++ b/clang/test/CIR/CodeGen/pointer-to-member-func-cmp.cpp @@ -0,0 +1,121 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -std=c++17 -fclangir -emit-cir -mmlir -mlir-print-ir-before=cir-cxxabi-lowering %s -o %t.cir 2> %t-before.cir +// RUN: FileCheck --check-prefix=CIR-BEFORE --input-file=%t-before.cir %s +// RUN: FileCheck --check-prefix=CIR-AFTER --input-file=%t.cir %s +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -std=c++17 -fclangir -emit-llvm %s -o %t-cir.ll +// RUN: FileCheck --input-file=%t-cir.ll --check-prefix=LLVM %s +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -std=c++17 -emit-llvm %s -o %t.ll +// RUN: FileCheck --check-prefix=OGCG --input-file=%t.ll %s + +struct Foo { + void m1(int); + virtual void m2(int); + virtual void m3(int); +}; + +bool cmp_eq(void (Foo::*lhs)(int), void (Foo::*rhs)(int)) { + return lhs == rhs; +} + +// CIR-BEFORE: cir.func {{.*}} @_Z6cmp_eqM3FooFviES1_ +// CIR-BEFORE: %[[LHS:.*]] = cir.load{{.*}} %0 : !cir.ptr<!cir.method<!cir.func<(!s32i)> in !rec_Foo>> +// CIR-BEFORE: %[[RHS:.*]] = cir.load{{.*}} %1 : !cir.ptr<!cir.method<!cir.func<(!s32i)> in !rec_Foo>> +// CIR-BEFORE: %[[CMP:.*]] = cir.cmp(eq, %[[LHS]], %[[RHS]]) : !cir.method<!cir.func<(!s32i)> in !rec_Foo>, !cir.bool +// CIR-BEFORE: cir.store %[[CMP]], %{{.*}} : !cir.bool, !cir.ptr<!cir.bool> + +// CIR-AFTER: @_Z6cmp_eqM3FooFviES1_ +// CIR-AFTER: %[[LHS:.*]] = cir.load{{.*}} %0 : !cir.ptr<!rec_anon_struct>, !rec_anon_struct +// CIR-AFTER: %[[RHS:.*]] = cir.load{{.*}} %1 : !cir.ptr<!rec_anon_struct>, !rec_anon_struct +// CIR-AFTER: %[[NULL:.*]] = cir.const #cir.int<0> : !s64i +// CIR-AFTER: %[[LHS_PTR:.*]] = cir.extract_member %[[LHS]][0] : !rec_anon_struct -> !s64i +// CIR-AFTER: %[[RHS_PTR:.*]] = cir.extract_member %[[RHS]][0] : !rec_anon_struct -> !s64i +// CIR-AFTER: %[[PTR_CMP:.*]] = cir.cmp(eq, %[[LHS_PTR]], %[[RHS_PTR]]) : !s64i, !cir.bool +// CIR-AFTER: %[[PTR_NULL:.*]] = cir.cmp(eq, %[[LHS_PTR]], %[[NULL]]) : !s64i, !cir.bool +// CIR-AFTER: %[[LHS_ADJ:.*]] = cir.extract_member %[[LHS]][1] : !rec_anon_struct -> !s64i +// CIR-AFTER: %[[RHS_ADJ:.*]] = cir.extract_member %[[RHS]][1] : !rec_anon_struct -> !s64i +// CIR-AFTER: %[[ADJ_CMP:.*]] = cir.cmp(eq, %[[LHS_ADJ]], %[[RHS_ADJ]]) : !s64i, !cir.bool +// CIR-AFTER: %[[TMP:.*]] = cir.binop(or, %[[PTR_NULL]], %[[ADJ_CMP]]) : !cir.bool +// CIR-AFTER: %[[RESULT:.*]] = cir.binop(and, %[[PTR_CMP]], %[[TMP]]) : !cir.bool + +// LLVM: define {{.*}} i1 @_Z6cmp_eqM3FooFviES1_ +// LLVM: %[[LHS:.*]] = load { i64, i64 }, ptr %{{.+}} +// LLVM: %[[RHS:.*]] = load { i64, i64 }, ptr %{{.+}} +// LLVM: %[[LHS_PTR:.*]] = extractvalue { i64, i64 } %[[LHS]], 0 +// LLVM: %[[RHS_PTR:.*]] = extractvalue { i64, i64 } %[[RHS]], 0 +// LLVM: %[[PTR_CMP:.*]] = icmp eq i64 %[[LHS_PTR]], %[[RHS_PTR]] +// LLVM: %[[PTR_NULL:.*]] = icmp eq i64 %[[LHS_PTR]], 0 +// LLVM: %[[LHS_ADJ:.*]] = extractvalue { i64, i64 } %[[LHS]], 1 +// LLVM: %[[RHS_ADJ:.*]] = extractvalue { i64, i64 } %[[RHS]], 1 +// LLVM: %[[ADJ_CMP:.*]] = icmp eq i64 %[[LHS_ADJ]], %[[RHS_ADJ]] +// LLVM: %[[TMP:.*]] = or i1 %[[PTR_NULL]], %[[ADJ_CMP]] +// LLVM: %[[RESULT:.*]] = and i1 %[[PTR_CMP]], %[[TMP]] + +// OGCG: define {{.*}} i1 @_Z6cmp_eqM3FooFviES1_ +// OGCG: %[[LHS_TMP:.*]] = alloca { i64, i64 } +// OGCG: %[[RHS_TMP:.*]] = alloca { i64, i64 } +// OGCG: %[[LHS_ADDR:.*]] = alloca { i64, i64 } +// OGCG: %[[RHS_ADDR:.*]] = alloca { i64, i64 } +// OGCG: %[[LHS:.*]] = load { i64, i64 }, ptr %[[LHS_ADDR]] +// OGCG: %[[RHS:.*]] = load { i64, i64 }, ptr %[[RHS_ADDR]] +// OGCG: %[[LHS_PTR:.*]] = extractvalue { i64, i64 } %[[LHS]], 0 +// OGCG: %[[RHS_PTR:.*]] = extractvalue { i64, i64 } %[[RHS]], 0 +// OGCG: %[[PTR_CMP:.*]] = icmp eq i64 %[[LHS_PTR]], %[[RHS_PTR]] +// OGCG: %[[PTR_NULL:.*]] = icmp eq i64 %[[LHS_PTR]], 0 +// OGCG: %[[LHS_ADJ:.*]] = extractvalue { i64, i64 } %[[LHS]], 1 +// OGCG: %[[RHS_ADJ:.*]] = extractvalue { i64, i64 } %[[RHS]], 1 +// OGCG: %[[ADJ_CMP:.*]] = icmp eq i64 %[[LHS_ADJ]], %[[RHS_ADJ]] +// OGCG: %[[TMP:.*]] = or i1 %[[PTR_NULL]], %[[ADJ_CMP]] +// OGCG: %[[RESULT:.*]] = and i1 %[[PTR_CMP]], %[[TMP]] + +bool cmp_ne(void (Foo::*lhs)(int), void (Foo::*rhs)(int)) { + return lhs != rhs; +} + +// CIR-BEFORE: cir.func {{.*}} @_Z6cmp_neM3FooFviES1_ +// CIR-BEFORE: %[[LHS:.*]] = cir.load{{.*}} %0 : !cir.ptr<!cir.method<!cir.func<(!s32i)> in !rec_Foo>> +// CIR-BEFORE: %[[RHS:.*]] = cir.load{{.*}} %1 : !cir.ptr<!cir.method<!cir.func<(!s32i)> in !rec_Foo>> +// CIR-BEFORE: %[[CMP:.*]] = cir.cmp(ne, %[[LHS]], %[[RHS]]) : !cir.method<!cir.func<(!s32i)> in !rec_Foo>, !cir.bool +// CIR-BEFORE: cir.store %[[CMP]], %{{.*}} : !cir.bool, !cir.ptr<!cir.bool> + +// CIR-AFTER: cir.func {{.*}} @_Z6cmp_neM3FooFviES1_ +// CIR-AFTER: %[[LHS:.*]] = cir.load{{.*}} %0 : !cir.ptr<!rec_anon_struct>, !rec_anon_struct +// CIR-AFTER: %[[RHS:.*]] = cir.load{{.*}} %1 : !cir.ptr<!rec_anon_struct>, !rec_anon_struct +// CIR-AFTER: %[[NULL:.*]] = cir.const #cir.int<0> : !s64i +// CIR-AFTER: %[[LHS_PTR:.*]] = cir.extract_member %[[LHS]][0] : !rec_anon_struct -> !s64i +// CIR-AFTER: %[[RHS_PTR:.*]] = cir.extract_member %[[RHS]][0] : !rec_anon_struct -> !s64i +// CIR-AFTER: %[[PTR_CMP:.*]] = cir.cmp(ne, %[[LHS_PTR]], %[[RHS_PTR]]) : !s64i, !cir.bool +// CIR-AFTER: %[[PTR_NULL:.*]] = cir.cmp(ne, %[[LHS_PTR]], %[[NULL]]) : !s64i, !cir.bool +// CIR-AFTER: %[[LHS_ADJ:.*]] = cir.extract_member %[[LHS]][1] : !rec_anon_struct -> !s64i +// CIR-AFTER: %[[RHS_ADJ:.*]] = cir.extract_member %[[RHS]][1] : !rec_anon_struct -> !s64i +// CIR-AFTER: %[[ADJ_CMP:.*]] = cir.cmp(ne, %[[LHS_ADJ]], %[[RHS_ADJ]]) : !s64i, !cir.bool +// CIR-AFTER: %[[TMP:.*]] = cir.binop(and, %[[PTR_NULL]], %[[ADJ_CMP]]) : !cir.bool +// CIR-AFTER: %[[RESULT:.*]] = cir.binop(or, %[[PTR_CMP]], %[[TMP]]) : !cir.bool + +// LLVM: define {{.*}} i1 @_Z6cmp_neM3FooFviES1_ +// LLVM: %[[LHS:.*]] = load { i64, i64 }, ptr %{{.*}} +// LLVM: %[[RHS:.*]] = load { i64, i64 }, ptr %{{.*}} +// LLVM: %[[LHS_PTR:.*]] = extractvalue { i64, i64 } %[[LHS]], 0 +// LLVM: %[[RHS_PTR:.*]] = extractvalue { i64, i64 } %[[RHS]], 0 +// LLVM: %[[PTR_CMP:.*]] = icmp ne i64 %[[LHS_PTR]], %[[RHS_PTR]] +// LLVM: %[[PTR_NULL:.*]] = icmp ne i64 %[[LHS_PTR]], 0 +// LLVM: %[[LHS_ADJ:.*]] = extractvalue { i64, i64 } %[[LHS]], 1 +// LLVM: %[[RHS_ADJ:.*]] = extractvalue { i64, i64 } %[[RHS]], 1 +// LLVM: %[[ADJ_CMP:.*]] = icmp ne i64 %[[LHS_ADJ]], %[[RHS_ADJ]] +// LLVM: %[[TMP:.*]] = and i1 %[[PTR_NULL]], %[[ADJ_CMP]] +// LLVM: %[[RESULT:.*]] = or i1 %[[PTR_CMP]], %[[TMP]] + +// OGCG: define {{.*}} i1 @_Z6cmp_neM3FooFviES1_ +// OGCG: %[[LHS_TMP:.*]] = alloca { i64, i64 } +// OGCG: %[[RHS_TMP:.*]] = alloca { i64, i64 } +// OGCG: %[[LHS_ADDR:.*]] = alloca { i64, i64 } +// OGCG: %[[RHS_ADDR:.*]] = alloca { i64, i64 } +// OGCG: %[[LHS:.*]] = load { i64, i64 }, ptr %[[LHS_ADDR]] +// OGCG: %[[RHS:.*]] = load { i64, i64 }, ptr %[[RHS_ADDR]] +// OGCG: %[[LHS_PTR:.*]] = extractvalue { i64, i64 } %[[LHS]], 0 +// OGCG: %[[RHS_PTR:.*]] = extractvalue { i64, i64 } %[[RHS]], 0 +// OGCG: %[[PTR_CMP:.*]] = icmp ne i64 %[[LHS_PTR]], %[[RHS_PTR]] +// OGCG: %[[PTR_NULL:.*]] = icmp ne i64 %[[LHS_PTR]], 0 +// OGCG: %[[LHS_ADJ:.*]] = extractvalue { i64, i64 } %[[LHS]], 1 +// OGCG: %[[RHS_ADJ:.*]] = extractvalue { i64, i64 } %[[RHS]], 1 +// OGCG: %[[ADJ_CMP:.*]] = icmp ne i64 %[[LHS_ADJ]], %[[RHS_ADJ]] +// OGCG: %[[TMP:.*]] = and i1 %[[PTR_NULL]], %[[ADJ_CMP]] +// OGCG: %[[RESULT:.*]] = or i1 %[[PTR_CMP]], %[[TMP]] >From b26d7037e565dbf5533c11309c2ed5ec6f8701dd Mon Sep 17 00:00:00 2001 From: Andy Kaylor <[email protected]> Date: Fri, 16 Jan 2026 13:35:13 -0800 Subject: [PATCH 2/3] Use ImplicitLocOpBuilder --- .../TargetLowering/LowerItaniumCXXABI.cpp | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerItaniumCXXABI.cpp b/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerItaniumCXXABI.cpp index 0850368d62718..a4ada38bcf646 100644 --- a/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerItaniumCXXABI.cpp +++ b/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerItaniumCXXABI.cpp @@ -23,6 +23,7 @@ #include "CIRCXXABI.h" #include "LowerModule.h" #include "mlir/Dialect/LLVMIR/LLVMDialect.h" +#include "mlir/IR/ImplicitLocOpBuilder.h" #include "llvm/Support/ErrorHandling.h" namespace cir { @@ -260,32 +261,32 @@ mlir::Value LowerItaniumCXXABI::lowerMethodCmp(cir::CmpOp op, assert(op.getKind() == cir::CmpOpKind::eq || op.getKind() == cir::CmpOpKind::ne); + mlir::ImplicitLocOpBuilder locBuilder(op.getLoc(), builder); cir::IntType ptrdiffCIRTy = getPtrDiffCIRTy(lm); mlir::Value ptrdiffZero = cir::ConstantOp::create( - builder, op.getLoc(), cir::IntAttr::get(ptrdiffCIRTy, 0)); - mlir::Location loc = op.getLoc(); + locBuilder, cir::IntAttr::get(ptrdiffCIRTy, 0)); mlir::Value lhsPtrField = - cir::ExtractMemberOp::create(builder, loc, ptrdiffCIRTy, loweredLhs, 0); + cir::ExtractMemberOp::create(locBuilder, ptrdiffCIRTy, loweredLhs, 0); mlir::Value rhsPtrField = - cir::ExtractMemberOp::create(builder, loc, ptrdiffCIRTy, loweredRhs, 0); + cir::ExtractMemberOp::create(locBuilder, ptrdiffCIRTy, loweredRhs, 0); mlir::Value ptrCmp = - cir::CmpOp::create(builder, loc, op.getKind(), lhsPtrField, rhsPtrField); + cir::CmpOp::create(locBuilder, op.getKind(), lhsPtrField, rhsPtrField); mlir::Value ptrCmpToNull = - cir::CmpOp::create(builder, loc, op.getKind(), lhsPtrField, ptrdiffZero); + cir::CmpOp::create(locBuilder, op.getKind(), lhsPtrField, ptrdiffZero); mlir::Value lhsAdjField = - cir::ExtractMemberOp::create(builder, loc, ptrdiffCIRTy, loweredLhs, 1); + cir::ExtractMemberOp::create(locBuilder, ptrdiffCIRTy, loweredLhs, 1); mlir::Value rhsAdjField = - cir::ExtractMemberOp::create(builder, loc, ptrdiffCIRTy, loweredRhs, 1); + cir::ExtractMemberOp::create(locBuilder, ptrdiffCIRTy, loweredRhs, 1); mlir::Value adjCmp = - cir::CmpOp::create(builder, loc, op.getKind(), lhsAdjField, rhsAdjField); + cir::CmpOp::create(locBuilder, op.getKind(), lhsAdjField, rhsAdjField); auto create_and = [&](mlir::Value lhs, mlir::Value rhs) { - return cir::BinOp::create(builder, loc, cir::BinOpKind::And, lhs, rhs); + return cir::BinOp::create(locBuilder, cir::BinOpKind::And, lhs, rhs); }; auto create_or = [&](mlir::Value lhs, mlir::Value rhs) { - return cir::BinOp::create(builder, loc, cir::BinOpKind::Or, lhs, rhs); + return cir::BinOp::create(locBuilder, cir::BinOpKind::Or, lhs, rhs); }; mlir::Value result; >From 9cd1dbe9822b537fe828e497e6ca50245a7406bc Mon Sep 17 00:00:00 2001 From: Andy Kaylor <[email protected]> Date: Fri, 16 Jan 2026 14:01:47 -0800 Subject: [PATCH 3/3] Fix formatting --- .../Dialect/Transforms/TargetLowering/LowerItaniumCXXABI.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerItaniumCXXABI.cpp b/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerItaniumCXXABI.cpp index a4ada38bcf646..39fcbcdf49f3e 100644 --- a/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerItaniumCXXABI.cpp +++ b/clang/lib/CIR/Dialect/Transforms/TargetLowering/LowerItaniumCXXABI.cpp @@ -263,8 +263,8 @@ mlir::Value LowerItaniumCXXABI::lowerMethodCmp(cir::CmpOp op, mlir::ImplicitLocOpBuilder locBuilder(op.getLoc(), builder); cir::IntType ptrdiffCIRTy = getPtrDiffCIRTy(lm); - mlir::Value ptrdiffZero = cir::ConstantOp::create( - locBuilder, cir::IntAttr::get(ptrdiffCIRTy, 0)); + mlir::Value ptrdiffZero = + cir::ConstantOp::create(locBuilder, cir::IntAttr::get(ptrdiffCIRTy, 0)); mlir::Value lhsPtrField = cir::ExtractMemberOp::create(locBuilder, ptrdiffCIRTy, loweredLhs, 0); _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
