mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-17 21:29:20 +00:00
Fix indentation (intentionally left out of the previous commit).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53592 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a3ec5d6ecc
commit
0d1730a14c
@ -423,64 +423,64 @@ void DAE::SurveyFunction(Function &F) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
DOUT << "DAE - Inspecting callers for fn: " << F.getName() << "\n";
|
DOUT << "DAE - Inspecting callers for fn: " << F.getName() << "\n";
|
||||||
// Keep track of the number of live retvals, so we can skip checks once all
|
// Keep track of the number of live retvals, so we can skip checks once all
|
||||||
// of them turn out to be live.
|
// of them turn out to be live.
|
||||||
unsigned NumLiveRetVals = 0;
|
unsigned NumLiveRetVals = 0;
|
||||||
const Type *STy = dyn_cast<StructType>(F.getReturnType());
|
const Type *STy = dyn_cast<StructType>(F.getReturnType());
|
||||||
// Loop all uses of the function.
|
// Loop all uses of the function.
|
||||||
for (Value::use_iterator I = F.use_begin(), E = F.use_end(); I != E; ++I) {
|
for (Value::use_iterator I = F.use_begin(), E = F.use_end(); I != E; ++I) {
|
||||||
// If the function is PASSED IN as an argument, its address has been
|
// If the function is PASSED IN as an argument, its address has been
|
||||||
// taken.
|
// taken.
|
||||||
if (I.getOperandNo() != 0) {
|
if (I.getOperandNo() != 0) {
|
||||||
MarkLive(F);
|
MarkLive(F);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If this use is anything other than a call site, the function is alive.
|
// If this use is anything other than a call site, the function is alive.
|
||||||
CallSite CS = CallSite::get(*I);
|
CallSite CS = CallSite::get(*I);
|
||||||
Instruction *TheCall = CS.getInstruction();
|
Instruction *TheCall = CS.getInstruction();
|
||||||
if (!TheCall) { // Not a direct call site?
|
if (!TheCall) { // Not a direct call site?
|
||||||
MarkLive(F);
|
MarkLive(F);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we end up here, we are looking at a direct call to our function.
|
// If we end up here, we are looking at a direct call to our function.
|
||||||
|
|
||||||
// Now, check how our return value(s) is/are used in this caller. Don't
|
// Now, check how our return value(s) is/are used in this caller. Don't
|
||||||
// bother checking return values if all of them are live already.
|
// bother checking return values if all of them are live already.
|
||||||
if (NumLiveRetVals != RetCount) {
|
if (NumLiveRetVals != RetCount) {
|
||||||
if (STy) {
|
if (STy) {
|
||||||
// Check all uses of the return value.
|
// Check all uses of the return value.
|
||||||
for (Value::use_iterator I = TheCall->use_begin(),
|
for (Value::use_iterator I = TheCall->use_begin(),
|
||||||
E = TheCall->use_end(); I != E; ++I) {
|
E = TheCall->use_end(); I != E; ++I) {
|
||||||
ExtractValueInst *Ext = dyn_cast<ExtractValueInst>(*I);
|
ExtractValueInst *Ext = dyn_cast<ExtractValueInst>(*I);
|
||||||
if (Ext && Ext->hasIndices()) {
|
if (Ext && Ext->hasIndices()) {
|
||||||
// This use uses a part of our return value, survey the uses of
|
// This use uses a part of our return value, survey the uses of
|
||||||
// that part and store the results for this index only.
|
// that part and store the results for this index only.
|
||||||
unsigned Idx = *Ext->idx_begin();
|
unsigned Idx = *Ext->idx_begin();
|
||||||
if (RetValLiveness[Idx] != Live) {
|
if (RetValLiveness[Idx] != Live) {
|
||||||
RetValLiveness[Idx] = SurveyUses(Ext, MaybeLiveRetUses[Idx]);
|
RetValLiveness[Idx] = SurveyUses(Ext, MaybeLiveRetUses[Idx]);
|
||||||
if (RetValLiveness[Idx] == Live)
|
if (RetValLiveness[Idx] == Live)
|
||||||
NumLiveRetVals++;
|
NumLiveRetVals++;
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Used by something else than extractvalue. Mark all return
|
|
||||||
// values as live.
|
|
||||||
for (unsigned i = 0; i != RetCount; ++i )
|
|
||||||
RetValLiveness[i] = Live;
|
|
||||||
NumLiveRetVals = RetCount;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
} else {
|
// Used by something else than extractvalue. Mark all return
|
||||||
// Single return value
|
// values as live.
|
||||||
RetValLiveness[0] = SurveyUses(TheCall, MaybeLiveRetUses[0]);
|
for (unsigned i = 0; i != RetCount; ++i )
|
||||||
if (RetValLiveness[0] == Live)
|
RetValLiveness[i] = Live;
|
||||||
NumLiveRetVals = RetCount;
|
NumLiveRetVals = RetCount;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
// Single return value
|
||||||
|
RetValLiveness[0] = SurveyUses(TheCall, MaybeLiveRetUses[0]);
|
||||||
|
if (RetValLiveness[0] == Live)
|
||||||
|
NumLiveRetVals = RetCount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Now we've inspected all callers, record the liveness of our return values.
|
// Now we've inspected all callers, record the liveness of our return values.
|
||||||
for (unsigned i = 0; i != RetCount; ++i)
|
for (unsigned i = 0; i != RetCount; ++i)
|
||||||
|
Loading…
Reference in New Issue
Block a user