Fix nondeterministic behavior.

llvm-svn: 93093
This commit is contained in:
Julien Lerouge 2010-01-10 01:07:22 +00:00
parent c95a7a21b7
commit 321098ebec
1 changed files with 3 additions and 9 deletions

View File

@ -45,7 +45,7 @@ AggregateArgsOpt("aggregate-extracted-args", cl::Hidden,
namespace { namespace {
class CodeExtractor { class CodeExtractor {
typedef std::vector<Value*> Values; typedef SetVector<Value*> Values;
SetVector<BasicBlock*> BlocksToExtract; SetVector<BasicBlock*> BlocksToExtract;
DominatorTree* DT; DominatorTree* DT;
bool AggregateArgs; bool AggregateArgs;
@ -216,13 +216,13 @@ void CodeExtractor::findInputsOutputs(Values &inputs, Values &outputs) {
// instruction is used outside the region, it's an output. // instruction is used outside the region, it's an output.
for (User::op_iterator O = I->op_begin(), E = I->op_end(); O != E; ++O) for (User::op_iterator O = I->op_begin(), E = I->op_end(); O != E; ++O)
if (definedInCaller(*O)) if (definedInCaller(*O))
inputs.push_back(*O); inputs.insert(*O);
// Consider uses of this instruction (outputs). // Consider uses of this instruction (outputs).
for (Value::use_iterator UI = I->use_begin(), E = I->use_end(); for (Value::use_iterator UI = I->use_begin(), E = I->use_end();
UI != E; ++UI) UI != E; ++UI)
if (!definedInRegion(*UI)) { if (!definedInRegion(*UI)) {
outputs.push_back(I); outputs.insert(I);
break; break;
} }
} // for: insts } // for: insts
@ -235,12 +235,6 @@ void CodeExtractor::findInputsOutputs(Values &inputs, Values &outputs) {
} // for: basic blocks } // for: basic blocks
NumExitBlocks = ExitBlocks.size(); NumExitBlocks = ExitBlocks.size();
// Eliminate duplicates.
std::sort(inputs.begin(), inputs.end());
inputs.erase(std::unique(inputs.begin(), inputs.end()), inputs.end());
std::sort(outputs.begin(), outputs.end());
outputs.erase(std::unique(outputs.begin(), outputs.end()), outputs.end());
} }
/// constructFunction - make a function based on inputs and outputs, as follows: /// constructFunction - make a function based on inputs and outputs, as follows: