-
Notifications
You must be signed in to change notification settings - Fork 12.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[CodeGen] Replace of PointerType::get(Type) with opaque version (NFC) #124771
base: main
Are you sure you want to change the base?
[CodeGen] Replace of PointerType::get(Type) with opaque version (NFC) #124771
Conversation
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 | ||
// }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I do feel a bit guilty about removing this comment. However, I'm not experienced enough to know if it's significant and something we'd like to keep?
Perhaps move it somewhere?
@llvm/pr-subscribers-clang-codegen @llvm/pr-subscribers-clang Author: Mats Jun Larsen (junlarsen) ChangesFollow-up to #123569 Full diff: https://github.com/llvm/llvm-project/pull/124771.diff 7 Files Affected:
diff --git a/clang/lib/CodeGen/Address.h b/clang/lib/CodeGen/Address.h
index a18c7169af1eb9..852aa0e686fe3c 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 a7584a95c8ca7b..033528dbceb3bd 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 ded905cdcc9f44..feb4ddbb52b2b7 100644
--- a/clang/lib/CodeGen/CGDecl.cpp
+++ b/clang/lib/CodeGen/CGDecl.cpp
@@ -2868,15 +2868,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 1c2fecea1a6ac2..5005f6b3cbd2d1 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 9676e61cf322d9..d3b1468f21b953 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 dd900f9b32fb78..6c929a6431c0f0 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 eb8d3ceeeba4c0..2c51de5bf7da16 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -4424,7 +4424,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);
}
@@ -4596,8 +4596,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);
|
31752fb
to
9a21d42
Compare
✅ With the latest revision this PR passed the C/C++ code formatter. |
@@ -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); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can the below cast be replaced with an AddrSpaceCast only? i.e CGBuilder::CreateAddrSpaceCast? I'm not too sure how the Clang codegen Address code behaves.
Follow-up to #123569