[clang] [CIR] Upstream local initialization for VectorType (PR #138107)
Amr Hesham via cfe-commits
cfe-commits at lists.llvm.org
Thu May 1 13:52:00 PDT 2025
================
@@ -1584,6 +1586,47 @@ mlir::Value ScalarExprEmitter::VisitMemberExpr(MemberExpr *e) {
return emitLoadOfLValue(e);
}
+mlir::Value ScalarExprEmitter::VisitInitListExpr(InitListExpr *e) {
+ const unsigned numInitElements = e->getNumInits();
+
+ if (e->hadArrayRangeDesignator()) {
+ cgf.cgm.errorNYI(e->getSourceRange(), "ArrayRangeDesignator");
+ return {};
+ }
+
+ if (numInitElements == 0) {
+ cgf.cgm.errorNYI(e->getSourceRange(), "InitListExpr with 0 init elements");
+ return {};
+ }
+
+ if (e->getType()->isVectorType()) {
+ const auto vectorType =
+ mlir::cast<cir::VectorType>(cgf.convertType(e->getType()));
+
+ SmallVector<mlir::Value, 16> elements;
+ for (Expr *init : e->inits()) {
+ elements.push_back(Visit(init));
+ }
+
+ // Zero-initialize any remaining values.
+ if (numInitElements < vectorType.getSize()) {
+ mlir::TypedAttr zeroInitAttr =
+ cgf.getBuilder().getZeroInitAttr(vectorType.getElementType());
+ cir::ConstantOp zeroValue = cgf.getBuilder().getConstant(
+ cgf.getLoc(e->getSourceRange()), zeroInitAttr);
+
+ for (uint64_t i = numInitElements; i < vectorType.getSize(); ++i) {
----------------
AmrDeveloper wrote:
As far as i understood `elements.assign` will assign zeroValue to all elements not just the remaining un init onces?
https://github.com/llvm/llvm-project/pull/138107
More information about the cfe-commits
mailing list