[clang] [llvm] [clang][SPARC] Pass 16-aligned 16-byte structs as i128 in CC (PR #155829)

Eli Friedman via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 28 13:18:26 PDT 2025


================
@@ -275,10 +276,14 @@ SparcV9ABIInfo::classifyType(QualType Ty, unsigned SizeLimit) const {
   // Try to use the original type for coercion.
   llvm::Type *CoerceTy = CB.isUsableType(StrTy) ? StrTy : CB.getType();
 
+  // We use a pair of i64 for 9-16 byte aggregate with 8 byte alignment.
+  // For 9-16 byte aggregates with 16 byte alignment, we use i128.
+  llvm::Type *WideTy = llvm::Type::getIntNTy(getVMContext(), 128);
+  bool UseI128 = (Size > 64) && (Size <= 128) && (Alignment == 128);
----------------
efriedma-quic wrote:

What happens if the size is bigger than 16?  Not sure how much it matters, since SizeLimit is 128 for arguments, but we should have some test coverage for return types.

https://github.com/llvm/llvm-project/pull/155829


More information about the llvm-commits mailing list