[clang] [CIR] Upstream global initialization for ArrayType (PR #131657)
Andy Kaylor via cfe-commits
cfe-commits at lists.llvm.org
Wed Mar 19 13:05:13 PDT 2025
================
@@ -228,6 +257,42 @@ mlir::Value CIRAttrToValue::visitCirAttr(cir::FPAttr fltAttr) {
loc, converter->convertType(fltAttr.getType()), fltAttr.getValue());
}
+// ConstArrayAttr visitor
+mlir::Value CIRAttrToValue::visitCirAttr(cir::ConstArrayAttr attr) {
+ mlir::Type llvmTy = converter->convertType(attr.getType());
+ mlir::Location loc = parentOp->getLoc();
+ mlir::Value result;
+
+ if (auto zeros = attr.getTrailingZerosNum()) {
+ mlir::Type arrayTy = attr.getType();
+ result = rewriter.create<mlir::LLVM::ZeroOp>(
+ loc, converter->convertType(arrayTy));
+ } else {
+ result = rewriter.create<mlir::LLVM::UndefOp>(loc, llvmTy);
+ }
+
+ // Iteratively lower each constant element of the array.
+ if (auto arrayAttr = mlir::dyn_cast<mlir::ArrayAttr>(attr.getElts())) {
+ for (auto [idx, elt] : llvm::enumerate(arrayAttr)) {
+ mlir::DataLayout dataLayout(parentOp->getParentOfType<mlir::ModuleOp>());
+ mlir::Value init = visit(elt);
+ result =
+ rewriter.create<mlir::LLVM::InsertValueOp>(loc, result, init, idx);
+ }
+ } else {
+ llvm_unreachable("unexpected ConstArrayAttr elements");
+ }
+
+ return result;
+}
+
+/// ZeroAttr visitor.
+mlir::Value CIRAttrToValue::visitCirAttr(cir::ZeroAttr attr) {
+ auto loc = parentOp->getLoc();
----------------
andykaylor wrote:
You missed one `auto` here. Feel free to merge this now and submit a follow-up to fix this. I'm waiting for this PR to be merged so I can rebase my type alias change without breaking tests for PRs that are ready to be merged.
https://github.com/llvm/llvm-project/pull/131657
More information about the cfe-commits
mailing list