Author: Chaitanya Date: 2026-09-21T09:41:47+05:30 New Revision: 328836b340124fc45e8529d64bbd11d1de03d228
URL: https://github.com/llvm/llvm-project/commit/328836b340124fc45e8529d64bbd11d1de03d228 DIFF: https://github.com/llvm/llvm-project/commit/328836b340124fc45e8529d64bbd11d1de03d228.diff LOG: [CIR][ABI] Honor abi::ArgInfo::CanBeFlattened in the call-conv lowering (#220579) **Summary:** - CanBeFlattened landed on abi::ArgInfo in main (llvm/llvm-project#220558). - Consume the abi::ArgInfo::CanBeFlattened flag in the CIR call-convention lowering bridge. Assisted by: Claude Opus 4.8 Added: Modified: clang/lib/CIR/Dialect/Transforms/CallConvLoweringPass.cpp Removed: ################################################################################ diff --git a/clang/lib/CIR/Dialect/Transforms/CallConvLoweringPass.cpp b/clang/lib/CIR/Dialect/Transforms/CallConvLoweringPass.cpp index 93abc53802d63..f7da35904dd63 100644 --- a/clang/lib/CIR/Dialect/Transforms/CallConvLoweringPass.cpp +++ b/clang/lib/CIR/Dialect/Transforms/CallConvLoweringPass.cpp @@ -549,9 +549,10 @@ static const llvm::abi::Type *mapCIRType(mlir::Type type, /// unpacked into the register(s) holding it, a scalar too wide for one register /// split into a tuple of them, a scalar the classifier widens to fill its /// eightbyte, and a value whose live bytes start partway into its storage -/// because a leading eightbyte holds no field (getDirectOffset). getDirect -/// keeps canFlatten set so the rewriter can split a multi-field coerced -/// struct into individual wire arguments. Any other scalar passes in its +/// because a leading eightbyte holds no field (getDirectOffset). canFlatten +/// follows the classifier's CanBeFlattened, so the rewriter splits a +/// multi-field coerced struct into individual wire arguments unless the +/// classifier asked to keep it intact. Any other scalar passes in its /// natural CIR type, which a null coercion denotes. A coercion this bridge /// cannot represent yields std::nullopt so the caller reports NYI rather than /// silently passing the value unchanged. @@ -612,7 +613,10 @@ convertABIArgInfo(const llvm::abi::ArgInfo &info, MLIRContext *ctx, // trip for nothing. if (comparesAgainstCoerce && coerced == origTy) return ArgClassification::getDirect(); - return ArgClassification::getDirect(coerced, offset); + ArgClassification classified = + ArgClassification::getDirect(coerced, offset); + classified.canFlatten = info.getCanBeFlattened(); + return classified; } // An extended value is always read from byte 0 of its own storage, so // there is no offset to honor here. _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
