mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-05-17 15:38:40 +00:00
add assert in argpromotion, which cannot trigger
if Function::hasAddressTaken works as advertised also included some cosmetic cleanups git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@99276 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
050560e535
commit
0054c7a867
@ -623,6 +623,7 @@ CallGraphNode *ArgPromotion::DoPromotion(Function *F,
|
|||||||
SmallVector<Value*, 16> Args;
|
SmallVector<Value*, 16> Args;
|
||||||
while (!F->use_empty()) {
|
while (!F->use_empty()) {
|
||||||
CallSite CS = CallSite::get(F->use_back());
|
CallSite CS = CallSite::get(F->use_back());
|
||||||
|
assert(CS.getCalledFunction() == F);
|
||||||
Instruction *Call = CS.getInstruction();
|
Instruction *Call = CS.getInstruction();
|
||||||
const AttrListPtr &CallPAL = CS.getAttributes();
|
const AttrListPtr &CallPAL = CS.getAttributes();
|
||||||
|
|
||||||
@ -660,7 +661,7 @@ CallGraphNode *ArgPromotion::DoPromotion(Function *F,
|
|||||||
// Non-dead argument: insert GEPs and loads as appropriate.
|
// Non-dead argument: insert GEPs and loads as appropriate.
|
||||||
ScalarizeTable &ArgIndices = ScalarizedElements[I];
|
ScalarizeTable &ArgIndices = ScalarizedElements[I];
|
||||||
// Store the Value* version of the indices in here, but declare it now
|
// Store the Value* version of the indices in here, but declare it now
|
||||||
// for reuse
|
// for reuse.
|
||||||
std::vector<Value*> Ops;
|
std::vector<Value*> Ops;
|
||||||
for (ScalarizeTable::iterator SI = ArgIndices.begin(),
|
for (ScalarizeTable::iterator SI = ArgIndices.begin(),
|
||||||
E = ArgIndices.end(); SI != E; ++SI) {
|
E = ArgIndices.end(); SI != E; ++SI) {
|
||||||
@ -677,10 +678,10 @@ CallGraphNode *ArgPromotion::DoPromotion(Function *F,
|
|||||||
Type::getInt32Ty(F->getContext()) :
|
Type::getInt32Ty(F->getContext()) :
|
||||||
Type::getInt64Ty(F->getContext()));
|
Type::getInt64Ty(F->getContext()));
|
||||||
Ops.push_back(ConstantInt::get(IdxTy, *II));
|
Ops.push_back(ConstantInt::get(IdxTy, *II));
|
||||||
// Keep track of the type we're currently indexing
|
// Keep track of the type we're currently indexing.
|
||||||
ElTy = cast<CompositeType>(ElTy)->getTypeAtIndex(*II);
|
ElTy = cast<CompositeType>(ElTy)->getTypeAtIndex(*II);
|
||||||
}
|
}
|
||||||
// And create a GEP to extract those indices
|
// And create a GEP to extract those indices.
|
||||||
V = GetElementPtrInst::Create(V, Ops.begin(), Ops.end(),
|
V = GetElementPtrInst::Create(V, Ops.begin(), Ops.end(),
|
||||||
V->getName()+".idx", Call);
|
V->getName()+".idx", Call);
|
||||||
Ops.clear();
|
Ops.clear();
|
||||||
@ -694,7 +695,7 @@ CallGraphNode *ArgPromotion::DoPromotion(Function *F,
|
|||||||
if (ExtraArgHack)
|
if (ExtraArgHack)
|
||||||
Args.push_back(Constant::getNullValue(Type::getInt32Ty(F->getContext())));
|
Args.push_back(Constant::getNullValue(Type::getInt32Ty(F->getContext())));
|
||||||
|
|
||||||
// Push any varargs arguments on the list
|
// Push any varargs arguments on the list.
|
||||||
for (; AI != CS.arg_end(); ++AI, ++ArgIndex) {
|
for (; AI != CS.arg_end(); ++AI, ++ArgIndex) {
|
||||||
Args.push_back(*AI);
|
Args.push_back(*AI);
|
||||||
if (Attributes Attrs = CallPAL.getParamAttributes(ArgIndex))
|
if (Attributes Attrs = CallPAL.getParamAttributes(ArgIndex))
|
||||||
|
@ -400,8 +400,8 @@ Function *Intrinsic::getDeclaration(Module *M, ID id, const Type **Tys,
|
|||||||
#include "llvm/Intrinsics.gen"
|
#include "llvm/Intrinsics.gen"
|
||||||
#undef GET_LLVM_INTRINSIC_FOR_GCC_BUILTIN
|
#undef GET_LLVM_INTRINSIC_FOR_GCC_BUILTIN
|
||||||
|
|
||||||
/// hasAddressTaken - returns true if there are any uses of this function
|
/// hasAddressTaken - returns true if there are any uses of this function
|
||||||
/// other than direct calls or invokes to it.
|
/// other than direct calls or invokes to it.
|
||||||
bool Function::hasAddressTaken() const {
|
bool Function::hasAddressTaken() const {
|
||||||
for (Value::use_const_iterator I = use_begin(), E = use_end(); I != E; ++I) {
|
for (Value::use_const_iterator I = use_begin(), E = use_end(); I != E; ++I) {
|
||||||
if (I.getOperandNo() != 0 ||
|
if (I.getOperandNo() != 0 ||
|
||||||
|
Loading…
x
Reference in New Issue
Block a user