[clang] [CodeGen] Replace of PointerType::get(Type) with opaque version (NFC) (PR #124771)
Mats Jun Larsen via cfe-commits
cfe-commits at lists.llvm.org
Sat Feb 8 06:55:21 PST 2025
https://github.com/junlarsen updated https://github.com/llvm/llvm-project/pull/124771
>From 13d65a0cc95fe53f959db343e5be07773ee53f28 Mon Sep 17 00:00:00 2001
From: Mats Jun Larsen <mats at jun.codes>
Date: Wed, 29 Jan 2025 00:31:32 +0900
Subject: [PATCH 1/5] [CodeGen] Replace of PointerType::get(Type) with opaque
version (NFC)
Follow-up to https://github.com/llvm/llvm-project/issues/123569
---
clang/lib/CodeGen/Address.h | 8 ++++----
clang/lib/CodeGen/CGBlocks.cpp | 23 +----------------------
clang/lib/CodeGen/CGDecl.cpp | 5 +----
clang/lib/CodeGen/CGDeclCXX.cpp | 4 ++--
clang/lib/CodeGen/CGExpr.cpp | 4 ++--
clang/lib/CodeGen/CGObjCMac.cpp | 2 +-
clang/lib/CodeGen/CodeGenModule.cpp | 6 +++---
7 files changed, 14 insertions(+), 38 deletions(-)
diff --git a/clang/lib/CodeGen/Address.h b/clang/lib/CodeGen/Address.h
index a18c7169af1eb96..852aa0e686fe3c6 100644
--- a/clang/lib/CodeGen/Address.h
+++ b/clang/lib/CodeGen/Address.h
@@ -19,6 +19,7 @@
#include "clang/AST/Type.h"
#include "llvm/ADT/PointerIntPair.h"
#include "llvm/IR/Constants.h"
+#include "llvm/IR/DerivedTypes.h"
#include "llvm/Support/MathExtras.h"
namespace clang {
@@ -197,10 +198,9 @@ class Address {
/// Return the type of the pointer value.
llvm::PointerType *getType() const {
- return llvm::PointerType::get(
- ElementType,
- llvm::cast<llvm::PointerType>(Pointer.getPointer()->getType())
- ->getAddressSpace());
+ auto AS = llvm::cast<llvm::PointerType>(Pointer.getPointer()->getType())
+ ->getAddressSpace();
+ return llvm::PointerType::get(ElementType->getContext(), AS);
}
/// Return the type of the values stored in this address.
diff --git a/clang/lib/CodeGen/CGBlocks.cpp b/clang/lib/CodeGen/CGBlocks.cpp
index aaba354c08547d4..faef6a5fbe1f5b6 100644
--- a/clang/lib/CodeGen/CGBlocks.cpp
+++ b/clang/lib/CodeGen/CGBlocks.cpp
@@ -1097,31 +1097,10 @@ llvm::Type *CodeGenModule::getBlockDescriptorType() {
if (BlockDescriptorType)
return BlockDescriptorType;
- llvm::Type *UnsignedLongTy =
- getTypes().ConvertType(getContext().UnsignedLongTy);
-
- // struct __block_descriptor {
- // unsigned long reserved;
- // unsigned long block_size;
- //
- // // later, the following will be added
- //
- // struct {
- // void (*copyHelper)();
- // void (*copyHelper)();
- // } helpers; // !!! optional
- //
- // const char *signature; // the block signature
- // const char *layout; // reserved
- // };
- BlockDescriptorType = llvm::StructType::create(
- "struct.__block_descriptor", UnsignedLongTy, UnsignedLongTy);
-
- // Now form a pointer to that.
unsigned AddrSpace = 0;
if (getLangOpts().OpenCL)
AddrSpace = getContext().getTargetAddressSpace(LangAS::opencl_constant);
- BlockDescriptorType = llvm::PointerType::get(BlockDescriptorType, AddrSpace);
+ BlockDescriptorType = llvm::PointerType::get(getLLVMContext(), AddrSpace);
return BlockDescriptorType;
}
diff --git a/clang/lib/CodeGen/CGDecl.cpp b/clang/lib/CodeGen/CGDecl.cpp
index cc6815db4d20f62..572175d9969a097 100644
--- a/clang/lib/CodeGen/CGDecl.cpp
+++ b/clang/lib/CodeGen/CGDecl.cpp
@@ -2870,15 +2870,12 @@ void CodeGenModule::EmitOMPAllocateDecl(const OMPAllocateDecl *D) {
// We can also keep the existing global if the address space is what we
// expect it to be, if not, it is replaced.
- QualType ASTTy = VD->getType();
clang::LangAS GVAS = GetGlobalVarAddressSpace(VD);
auto TargetAS = getContext().getTargetAddressSpace(GVAS);
if (Entry->getType()->getAddressSpace() == TargetAS)
continue;
- // Make a new global with the correct type / address space.
- llvm::Type *Ty = getTypes().ConvertTypeForMem(ASTTy);
- llvm::PointerType *PTy = llvm::PointerType::get(Ty, TargetAS);
+ llvm::PointerType *PTy = llvm::PointerType::get(getLLVMContext(), TargetAS);
// Replace all uses of the old global with a cast. Since we mutate the type
// in place we neeed an intermediate that takes the spot of the old entry
diff --git a/clang/lib/CodeGen/CGDeclCXX.cpp b/clang/lib/CodeGen/CGDeclCXX.cpp
index 1c2fecea1a6ac25..5005f6b3cbd2d1a 100644
--- a/clang/lib/CodeGen/CGDeclCXX.cpp
+++ b/clang/lib/CodeGen/CGDeclCXX.cpp
@@ -347,7 +347,7 @@ void CodeGenFunction::registerGlobalDtorWithAtExit(llvm::Constant *dtorStub) {
// extern "C" int atexit(void (*f)(void));
assert(dtorStub->getType() ==
llvm::PointerType::get(
- llvm::FunctionType::get(CGM.VoidTy, false),
+ CGM.getLLVMContext(),
dtorStub->getType()->getPointerAddressSpace()) &&
"Argument to atexit has a wrong type.");
@@ -374,7 +374,7 @@ CodeGenFunction::unregisterGlobalDtorWithUnAtExit(llvm::Constant *dtorStub) {
// extern "C" int unatexit(void (*f)(void));
assert(dtorStub->getType() ==
llvm::PointerType::get(
- llvm::FunctionType::get(CGM.VoidTy, false),
+ CGM.getLLVMContext(),
dtorStub->getType()->getPointerAddressSpace()) &&
"Argument to unatexit has a wrong type.");
diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp
index bf8df2789f58dba..d95f09791457a05 100644
--- a/clang/lib/CodeGen/CGExpr.cpp
+++ b/clang/lib/CodeGen/CGExpr.cpp
@@ -872,7 +872,7 @@ void CodeGenFunction::EmitTypeCheck(TypeCheckKind TCK, SourceLocation Loc,
llvm::Value *TypeHash =
llvm::ConstantInt::get(Int64Ty, xxh3_64bits(Out.str()));
- llvm::Type *VPtrTy = llvm::PointerType::get(IntPtrTy, 0);
+ llvm::Type *VPtrTy = llvm::PointerType::get(getLLVMContext(), 0);
Address VPtrAddr(Ptr, IntPtrTy, getPointerAlign());
llvm::Value *VPtrVal = GetVTablePtr(VPtrAddr, VPtrTy,
Ty->getAsCXXRecordDecl(),
@@ -3054,7 +3054,7 @@ LValue CodeGenFunction::EmitDeclRefLValue(const DeclRefExpr *E) {
getContext().getDeclAlign(VD));
llvm::Type *VarTy = getTypes().ConvertTypeForMem(VD->getType());
auto *PTy = llvm::PointerType::get(
- VarTy, getTypes().getTargetAddressSpace(VD->getType()));
+ getLLVMContext(), getTypes().getTargetAddressSpace(VD->getType()));
Addr = Builder.CreatePointerBitCastOrAddrSpaceCast(Addr, PTy, VarTy);
} else {
// Should we be using the alignment of the constant pointer we emitted?
diff --git a/clang/lib/CodeGen/CGObjCMac.cpp b/clang/lib/CodeGen/CGObjCMac.cpp
index dd900f9b32fb78e..6c929a6431c0f06 100644
--- a/clang/lib/CodeGen/CGObjCMac.cpp
+++ b/clang/lib/CodeGen/CGObjCMac.cpp
@@ -5717,7 +5717,7 @@ ObjCCommonTypesHelper::ObjCCommonTypesHelper(CodeGen::CodeGenModule &cgm)
IntTy = CGM.IntTy;
LongTy = cast<llvm::IntegerType>(Types.ConvertType(Ctx.LongTy));
Int8PtrTy = CGM.Int8PtrTy;
- Int8PtrProgramASTy = llvm::PointerType::get(CGM.Int8Ty, ProgramAS);
+ Int8PtrProgramASTy = llvm::PointerType::get(CGM.getLLVMContext(), ProgramAS);
Int8PtrPtrTy = CGM.Int8PtrPtrTy;
// arm64 targets use "int" ivar offset variables. All others,
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index 47c03ea5e72cba7..c056d103a7fe4f3 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -4432,7 +4432,7 @@ void CodeGenModule::emitCPUDispatchDefinition(GlobalDecl GD) {
GlobalDecl ResolverGD;
if (getTarget().supportsIFunc()) {
ResolverType = llvm::FunctionType::get(
- llvm::PointerType::get(DeclTy,
+ llvm::PointerType::get(getLLVMContext(),
getTypes().getTargetAddressSpace(FD->getType())),
false);
}
@@ -4604,8 +4604,8 @@ llvm::Constant *CodeGenModule::GetOrCreateMultiVersionResolver(GlobalDecl GD) {
// cpu_dispatch will be emitted in this translation unit.
if (ShouldReturnIFunc) {
unsigned AS = getTypes().getTargetAddressSpace(FD->getType());
- llvm::Type *ResolverType =
- llvm::FunctionType::get(llvm::PointerType::get(DeclTy, AS), false);
+ llvm::Type *ResolverType = llvm::FunctionType::get(
+ llvm::PointerType::get(getLLVMContext(), AS), false);
llvm::Constant *Resolver = GetOrCreateLLVMFunction(
MangledName + ".resolver", ResolverType, GlobalDecl{},
/*ForVTable=*/false);
>From 9a21d425bf6888e530f5054bc980e41757791cde Mon Sep 17 00:00:00 2001
From: Mats Jun Larsen <mats at jun.codes>
Date: Sat, 8 Feb 2025 01:45:00 +0900
Subject: [PATCH 2/5] Remove unnecessary pointer bitcast
---
clang/lib/CodeGen/CGDecl.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/clang/lib/CodeGen/CGDecl.cpp b/clang/lib/CodeGen/CGDecl.cpp
index 572175d9969a097..80a849fd5298282 100644
--- a/clang/lib/CodeGen/CGDecl.cpp
+++ b/clang/lib/CodeGen/CGDecl.cpp
@@ -2888,7 +2888,7 @@ void CodeGenModule::EmitOMPAllocateDecl(const OMPAllocateDecl *D) {
Entry->mutateType(PTy);
llvm::Constant *NewPtrForOldDecl =
- llvm::ConstantExpr::getPointerBitCastOrAddrSpaceCast(
+ llvm::ConstantExpr::getAddrSpaceCast(
Entry, DummyGV->getType());
// Now we have a casted version of the changed global, the dummy can be
>From ff0399f25b53453ebcc9a15f14ef98c733d87756 Mon Sep 17 00:00:00 2001
From: Mats Jun Larsen <mats at jun.codes>
Date: Sat, 8 Feb 2025 01:54:43 +0900
Subject: [PATCH 3/5] Run clang format
---
clang/lib/CodeGen/CGDecl.cpp | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/clang/lib/CodeGen/CGDecl.cpp b/clang/lib/CodeGen/CGDecl.cpp
index 80a849fd5298282..668282a6ab1a88f 100644
--- a/clang/lib/CodeGen/CGDecl.cpp
+++ b/clang/lib/CodeGen/CGDecl.cpp
@@ -2888,8 +2888,7 @@ void CodeGenModule::EmitOMPAllocateDecl(const OMPAllocateDecl *D) {
Entry->mutateType(PTy);
llvm::Constant *NewPtrForOldDecl =
- llvm::ConstantExpr::getAddrSpaceCast(
- Entry, DummyGV->getType());
+ llvm::ConstantExpr::getAddrSpaceCast(Entry, DummyGV->getType());
// Now we have a casted version of the changed global, the dummy can be
// replaced and deleted.
>From 3dbdefb0caffe32360493224892a7e3e0ca0afb0 Mon Sep 17 00:00:00 2001
From: Mats Jun Larsen <mats at jun.codes>
Date: Sat, 8 Feb 2025 22:37:41 +0900
Subject: [PATCH 4/5] Cast directly and simplify assertions
---
clang/lib/CodeGen/Address.h | 5 ++---
clang/lib/CodeGen/CGDeclCXX.cpp | 10 ++--------
2 files changed, 4 insertions(+), 11 deletions(-)
diff --git a/clang/lib/CodeGen/Address.h b/clang/lib/CodeGen/Address.h
index 852aa0e686fe3c6..93965fcfa33f359 100644
--- a/clang/lib/CodeGen/Address.h
+++ b/clang/lib/CodeGen/Address.h
@@ -20,6 +20,7 @@
#include "llvm/ADT/PointerIntPair.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DerivedTypes.h"
+#include "llvm/Support/Casting.h"
#include "llvm/Support/MathExtras.h"
namespace clang {
@@ -198,9 +199,7 @@ class Address {
/// Return the type of the pointer value.
llvm::PointerType *getType() const {
- auto AS = llvm::cast<llvm::PointerType>(Pointer.getPointer()->getType())
- ->getAddressSpace();
- return llvm::PointerType::get(ElementType->getContext(), AS);
+ return llvm::cast<llvm::PointerType>(Pointer.getPointer()->getType());
}
/// Return the type of the values stored in this address.
diff --git a/clang/lib/CodeGen/CGDeclCXX.cpp b/clang/lib/CodeGen/CGDeclCXX.cpp
index 5005f6b3cbd2d1a..f5950f03673a12b 100644
--- a/clang/lib/CodeGen/CGDeclCXX.cpp
+++ b/clang/lib/CodeGen/CGDeclCXX.cpp
@@ -345,10 +345,7 @@ void CodeGenFunction::registerGlobalDtorWithLLVM(const VarDecl &VD,
void CodeGenFunction::registerGlobalDtorWithAtExit(llvm::Constant *dtorStub) {
// extern "C" int atexit(void (*f)(void));
- assert(dtorStub->getType() ==
- llvm::PointerType::get(
- CGM.getLLVMContext(),
- dtorStub->getType()->getPointerAddressSpace()) &&
+ assert(dtorStub->getType()->isPointerTy() &&
"Argument to atexit has a wrong type.");
llvm::FunctionType *atexitTy =
@@ -372,10 +369,7 @@ CodeGenFunction::unregisterGlobalDtorWithUnAtExit(llvm::Constant *dtorStub) {
// value is returned.
//
// extern "C" int unatexit(void (*f)(void));
- assert(dtorStub->getType() ==
- llvm::PointerType::get(
- CGM.getLLVMContext(),
- dtorStub->getType()->getPointerAddressSpace()) &&
+ assert(dtorStub->getType()->isPointerTy() &&
"Argument to unatexit has a wrong type.");
llvm::FunctionType *unatexitTy =
>From 1934f7c5c8ed0b6aec4aeb3f03a79d5c580d2a29 Mon Sep 17 00:00:00 2001
From: Mats Jun Larsen <mats at jun.codes>
Date: Sat, 8 Feb 2025 23:52:01 +0900
Subject: [PATCH 5/5] Remove inserted includes
---
clang/lib/CodeGen/Address.h | 2 --
1 file changed, 2 deletions(-)
diff --git a/clang/lib/CodeGen/Address.h b/clang/lib/CodeGen/Address.h
index 93965fcfa33f359..a748ddaa110a5bd 100644
--- a/clang/lib/CodeGen/Address.h
+++ b/clang/lib/CodeGen/Address.h
@@ -19,8 +19,6 @@
#include "clang/AST/Type.h"
#include "llvm/ADT/PointerIntPair.h"
#include "llvm/IR/Constants.h"
-#include "llvm/IR/DerivedTypes.h"
-#include "llvm/Support/Casting.h"
#include "llvm/Support/MathExtras.h"
namespace clang {
More information about the cfe-commits
mailing list