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:
Matthijs Kooijman 2008-07-15 08:47:32 +00:00
parent a3ec5d6ecc
commit 0d1730a14c

View File

@ -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)