[clang] b9492ec - [CodeGen] Avoid some pointer element type accesses
Nikita Popov via cfe-commits
cfe-commits at lists.llvm.org
Wed Dec 15 05:46:22 PST 2021
Author: Nikita Popov
Date: 2021-12-15T14:46:10+01:00
New Revision: b9492ec649144976ec4748bdeebab9d5b92b67f4
URL: https://github.com/llvm/llvm-project/commit/b9492ec649144976ec4748bdeebab9d5b92b67f4
DIFF: https://github.com/llvm/llvm-project/commit/b9492ec649144976ec4748bdeebab9d5b92b67f4.diff
LOG: [CodeGen] Avoid some pointer element type accesses
Added:
Modified:
clang/lib/CodeGen/CGCall.cpp
clang/lib/CodeGen/CGCall.h
clang/lib/CodeGen/CGDecl.cpp
clang/lib/CodeGen/CGExpr.cpp
Removed:
################################################################################
diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp
index 76d3cffbe659..79442d7f51c4 100644
--- a/clang/lib/CodeGen/CGCall.cpp
+++ b/clang/lib/CodeGen/CGCall.cpp
@@ -4648,13 +4648,13 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
//
// In other cases, we assert that the types match up (until pointers stop
// having pointee types).
- llvm::Type *TypeFromVal;
if (Callee.isVirtual())
- TypeFromVal = Callee.getVirtualFunctionType();
- else
- TypeFromVal =
- Callee.getFunctionPointer()->getType()->getPointerElementType();
- assert(IRFuncTy == TypeFromVal);
+ assert(IRFuncTy == Callee.getVirtualFunctionType());
+ else {
+ llvm::PointerType *PtrTy =
+ llvm::cast<llvm::PointerType>(Callee.getFunctionPointer()->getType());
+ assert(PtrTy->isOpaqueOrPointeeTypeMatches(IRFuncTy));
+ }
}
#endif
diff --git a/clang/lib/CodeGen/CGCall.h b/clang/lib/CodeGen/CGCall.h
index e3d9fec6d363..c8594068c3fc 100644
--- a/clang/lib/CodeGen/CGCall.h
+++ b/clang/lib/CodeGen/CGCall.h
@@ -115,7 +115,8 @@ class CGCallee {
AbstractInfo = abstractInfo;
assert(functionPtr && "configuring callee without function pointer");
assert(functionPtr->getType()->isPointerTy());
- assert(functionPtr->getType()->getPointerElementType()->isFunctionTy());
+ assert(functionPtr->getType()->isOpaquePointerTy() ||
+ functionPtr->getType()->getPointerElementType()->isFunctionTy());
}
static CGCallee forBuiltin(unsigned builtinID,
diff --git a/clang/lib/CodeGen/CGDecl.cpp b/clang/lib/CodeGen/CGDecl.cpp
index 941671c61482..97ca3a1e1db1 100644
--- a/clang/lib/CodeGen/CGDecl.cpp
+++ b/clang/lib/CodeGen/CGDecl.cpp
@@ -1146,7 +1146,7 @@ Address CodeGenModule::createUnnamedGlobalFrom(const VarDecl &D,
CacheEntry->setAlignment(Align.getAsAlign());
}
- return Address(CacheEntry, Align);
+ return Address(CacheEntry, CacheEntry->getValueType(), Align);
}
static Address createUnnamedGlobalForMemcpyFrom(CodeGenModule &CGM,
diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp
index b9317856715d..f22c09a09e3e 100644
--- a/clang/lib/CodeGen/CGExpr.cpp
+++ b/clang/lib/CodeGen/CGExpr.cpp
@@ -3697,7 +3697,7 @@ static Address emitArraySubscriptGEP(CodeGenFunction &CGF, Address addr,
idx, DbgInfo);
}
- return Address(eltPtr, eltAlign);
+ return Address(eltPtr, CGF.ConvertTypeForMem(eltType), eltAlign);
}
LValue CodeGenFunction::EmitArraySubscriptExpr(const ArraySubscriptExpr *E,
More information about the cfe-commits
mailing list