mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-21 03:32:21 +00:00
Make inlining costs more accurate.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30231 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8e49e08f4b
commit
7b166d9969
@ -138,9 +138,32 @@ void FunctionInfo::analyzeFunction(Function *F) {
|
||||
// each instruction counts as 10.
|
||||
for (Function::const_iterator BB = F->begin(), E = F->end(); BB != E; ++BB) {
|
||||
for (BasicBlock::const_iterator II = BB->begin(), E = BB->end();
|
||||
II != E; ++II)
|
||||
if (!isa<DbgInfoIntrinsic>(II))
|
||||
++NumInsts;
|
||||
II != E; ++II) {
|
||||
if (isa<DbgInfoIntrinsic>(II)) continue; // Debug intrinsics don't count.
|
||||
|
||||
// Noop casts don't count.
|
||||
if (const CastInst *CI = dyn_cast<CastInst>(II)) {
|
||||
const Type *OpTy = CI->getOperand(0)->getType();
|
||||
if (CI->getType()->isLosslesslyConvertibleTo(OpTy))
|
||||
continue;
|
||||
if ((isa<PointerType>(CI->getType()) && OpTy->isInteger()) ||
|
||||
(isa<PointerType>(OpTy) && CI->getType()->isInteger()))
|
||||
continue; // ptr <-> int is *probably* noop cast.
|
||||
} else if (const GetElementPtrInst *GEPI =
|
||||
dyn_cast<GetElementPtrInst>(II)) {
|
||||
// If a GEP has all constant indices, it will probably be folded with
|
||||
// a load/store.
|
||||
bool AllConstant = true;
|
||||
for (unsigned i = 1, e = GEPI->getNumOperands(); i != e; ++i)
|
||||
if (!isa<ConstantInt>(GEPI->getOperand(i))) {
|
||||
AllConstant = false;
|
||||
break;
|
||||
}
|
||||
if (AllConstant) continue;
|
||||
}
|
||||
|
||||
++NumInsts;
|
||||
}
|
||||
|
||||
++NumBlocks;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user