mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-31 10:34:17 +00:00
Fix another minor bug, exposed by perlbmk
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12198 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c76d80342e
commit
7db5a6df78
@ -136,10 +136,18 @@ bool ArgPromotion::PromoteArguments(Function *F) {
|
||||
// Second check: make sure that all callers are direct callers. We can't
|
||||
// transform functions that have indirect callers.
|
||||
for (Value::use_iterator UI = F->use_begin(), E = F->use_end();
|
||||
UI != E; ++UI)
|
||||
// What about CPRs?
|
||||
if (!CallSite::get(*UI).getInstruction())
|
||||
UI != E; ++UI) {
|
||||
CallSite CS = CallSite::get(*UI);
|
||||
if (Instruction *I = CS.getInstruction()) {
|
||||
// Ensure that this call site is CALLING the function, not passing it as
|
||||
// an argument.
|
||||
for (CallSite::arg_iterator AI = CS.arg_begin(), E = CS.arg_end();
|
||||
AI != E; ++AI)
|
||||
if (*AI == F) return false; // Passing the function address in!
|
||||
} else {
|
||||
return false; // Cannot promote an indirect call!
|
||||
}
|
||||
}
|
||||
|
||||
// Check to see which arguments are promotable. If an argument is not
|
||||
// promotable, remove it from the PointerArgs vector.
|
||||
|
Loading…
x
Reference in New Issue
Block a user