https://github.com/androm3da created https://github.com/llvm/llvm-project/pull/172704
Used by other targets, might make sense for hexagon? >From 0636d840d6162d192b817401ba1970943bbda477 Mon Sep 17 00:00:00 2001 From: Brian Cain <[email protected]> Date: Wed, 17 Dec 2025 10:37:22 -0600 Subject: [PATCH] draft: [hexagon] Switch to emitVoidPtrVAArg Used by other targets, might make sense for hexagon. --- clang/lib/CodeGen/Targets/Hexagon.cpp | 37 ++++----------------------- 1 file changed, 5 insertions(+), 32 deletions(-) diff --git a/clang/lib/CodeGen/Targets/Hexagon.cpp b/clang/lib/CodeGen/Targets/Hexagon.cpp index 97a9300a1b8cd..6fd4c84993c34 100644 --- a/clang/lib/CodeGen/Targets/Hexagon.cpp +++ b/clang/lib/CodeGen/Targets/Hexagon.cpp @@ -33,8 +33,6 @@ class HexagonABIInfo : public DefaultABIInfo { AggValueSlot Slot) const override; Address EmitVAArgFromMemory(CodeGenFunction &CFG, Address VAListAddr, QualType Ty) const; - Address EmitVAArgForHexagon(CodeGenFunction &CFG, Address VAListAddr, - QualType Ty) const; Address EmitVAArgForHexagonLinux(CodeGenFunction &CFG, Address VAListAddr, QualType Ty) const; }; @@ -234,34 +232,6 @@ Address HexagonABIInfo::EmitVAArgFromMemory(CodeGenFunction &CGF, return AddrTyped; } -Address HexagonABIInfo::EmitVAArgForHexagon(CodeGenFunction &CGF, - Address VAListAddr, - QualType Ty) const { - // FIXME: Need to handle alignment - llvm::Type *BP = CGF.Int8PtrTy; - CGBuilderTy &Builder = CGF.Builder; - Address VAListAddrAsBPP = VAListAddr.withElementType(BP); - llvm::Value *Addr = Builder.CreateLoad(VAListAddrAsBPP, "ap.cur"); - // Handle address alignment for type alignment > 32 bits - uint64_t TyAlign = CGF.getContext().getTypeAlign(Ty) / 8; - if (TyAlign > 4) { - assert((TyAlign & (TyAlign - 1)) == 0 && "Alignment is not power of 2!"); - llvm::Value *AddrAsInt = Builder.CreatePtrToInt(Addr, CGF.Int32Ty); - AddrAsInt = Builder.CreateAdd(AddrAsInt, Builder.getInt32(TyAlign - 1)); - AddrAsInt = Builder.CreateAnd(AddrAsInt, Builder.getInt32(~(TyAlign - 1))); - Addr = Builder.CreateIntToPtr(AddrAsInt, BP); - } - Address AddrTyped = - Address(Addr, CGF.ConvertType(Ty), CharUnits::fromQuantity(TyAlign)); - - uint64_t Offset = llvm::alignTo(CGF.getContext().getTypeSize(Ty) / 8, 4); - llvm::Value *NextAddr = Builder.CreateGEP( - CGF.Int8Ty, Addr, llvm::ConstantInt::get(CGF.Int32Ty, Offset), "ap.next"); - Builder.CreateStore(NextAddr, VAListAddrAsBPP); - - return AddrTyped; -} - Address HexagonABIInfo::EmitVAArgForHexagonLinux(CodeGenFunction &CGF, Address VAListAddr, QualType Ty) const { @@ -412,8 +382,11 @@ RValue HexagonABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr, CGF.MakeAddrLValue(EmitVAArgForHexagonLinux(CGF, VAListAddr, Ty), Ty), Slot); - return CGF.EmitLoadOfAnyValue( - CGF.MakeAddrLValue(EmitVAArgForHexagon(CGF, VAListAddr, Ty), Ty), Slot); + // Use emitVoidPtrVAArg for non-hexagon-linux-musl targets + bool IsIndirect = false; // Hexagon passes arguments directly + return emitVoidPtrVAArg( + CGF, VAListAddr, Ty, IsIndirect, getContext().getTypeInfoInChars(Ty), + CharUnits::fromQuantity(4), /*AllowHigherAlign=*/true, Slot); } std::unique_ptr<TargetCodeGenInfo> _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
