-
Notifications
You must be signed in to change notification settings - Fork 15.4k
[CIR] Use ZeroAttr as zeroinitializer for ComplexType #148033
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[CIR] Use ZeroAttr as zeroinitializer for ComplexType #148033
Conversation
|
@llvm/pr-subscribers-clang @llvm/pr-subscribers-clangir Author: Amr Hesham (AmrDeveloper) ChangesUse ZeroAttr as a zeroinitializer for ComplexType, similar to what we did in CXXScalarValueInitExpr Full diff: https://github.com/llvm/llvm-project/pull/148033.diff 2 Files Affected:
diff --git a/clang/lib/CIR/CodeGen/CIRGenExprComplex.cpp b/clang/lib/CIR/CodeGen/CIRGenExprComplex.cpp
index 24a9bf13e1880..9564069901f0a 100644
--- a/clang/lib/CIR/CodeGen/CIRGenExprComplex.cpp
+++ b/clang/lib/CIR/CodeGen/CIRGenExprComplex.cpp
@@ -291,12 +291,8 @@ mlir::Value ComplexExprEmitter::VisitInitListExpr(const InitListExpr *e) {
}
assert(e->getNumInits() == 0 && "Unexpected number of inits");
- QualType complexElemTy =
- e->getType()->castAs<clang::ComplexType>()->getElementType();
- mlir::Type complexElemLLVMTy = cgf.convertType(complexElemTy);
- mlir::TypedAttr defaultValue = builder.getZeroInitAttr(complexElemLLVMTy);
- auto complexAttr = cir::ConstComplexAttr::get(defaultValue, defaultValue);
- return builder.create<cir::ConstantOp>(loc, complexAttr);
+ mlir::Type compleTy = cgf.convertType(e->getType());
+ return builder.getNullValue(compleTy, loc);
}
mlir::Value
diff --git a/clang/test/CIR/CodeGen/complex.cpp b/clang/test/CIR/CodeGen/complex.cpp
index 6e7e889df146f..f33909150044e 100644
--- a/clang/test/CIR/CodeGen/complex.cpp
+++ b/clang/test/CIR/CodeGen/complex.cpp
@@ -31,7 +31,7 @@ float _Complex cf2 = { 1.0f, 2.0f };
void foo() { int _Complex c = {}; }
// CIR: %[[INIT:.*]] = cir.alloca !cir.complex<!s32i>, !cir.ptr<!cir.complex<!s32i>>, ["c", init]
-// CIR: %[[COMPLEX:.*]] = cir.const #cir.const_complex<#cir.int<0> : !s32i, #cir.int<0> : !s32i> : !cir.complex<!s32i>
+// CIR: %[[COMPLEX:.*]] = cir.const #cir.zero : !cir.complex<!s32i>
// CIR: cir.store{{.*}} %[[COMPLEX]], %[[INIT]] : !cir.complex<!s32i>, !cir.ptr<!cir.complex<!s32i>>
// LLVM: %[[INIT:.*]] = alloca { i32, i32 }, i64 1, align 4
@@ -741,7 +741,7 @@ void foo29() {
}
// CIR: %[[INIT:.*]] = cir.alloca !cir.complex<!s32i>, !cir.ptr<!cir.complex<!s32i>>, ["a", init]
-// CIR: %[[COMPLEX:.*]] = cir.const #cir.const_complex<#cir.int<0> : !s32i, #cir.int<0> : !s32i> : !cir.complex<!s32i>
+// CIR: %[[COMPLEX:.*]] = cir.const #cir.zero : !cir.complex<!s32i>
// CIR: cir.store{{.*}} %[[COMPLEX]], %[[INIT]] : !cir.complex<!s32i>, !cir.ptr<!cir.complex<!s32i>>
// LLVM: %[[INIT:.*]] = alloca { i32, i32 }, i64 1, align 4
|
andykaylor
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm with one nit
| mlir::TypedAttr defaultValue = builder.getZeroInitAttr(complexElemLLVMTy); | ||
| auto complexAttr = cir::ConstComplexAttr::get(defaultValue, defaultValue); | ||
| return builder.create<cir::ConstantOp>(loc, complexAttr); | ||
| mlir::Type compleTy = cgf.convertType(e->getType()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| mlir::Type compleTy = cgf.convertType(e->getType()); | |
| mlir::Type complexTy = cgf.convertType(e->getType()); |
Use ZeroAttr as a zeroinitializer for ComplexType, similar to what we did in CXXScalarValueInitExpr
#141365