diff options
author | Julien Lerouge <jlerouge@apple.com> | 2010-01-10 01:07:22 +0000 |
---|---|---|
committer | Julien Lerouge <jlerouge@apple.com> | 2010-01-10 01:07:22 +0000 |
commit | 321098ebec22e9b93da4b14490881c2cfc285092 (patch) | |
tree | fefc44d06320d1c8fba396724a0c902b25f916ab /llvm/lib/Transforms/Utils/CodeExtractor.cpp | |
parent | c95a7a21b7237c52c01b02e80d0ea100d4d933cb (diff) | |
download | bcm5719-llvm-321098ebec22e9b93da4b14490881c2cfc285092.tar.gz bcm5719-llvm-321098ebec22e9b93da4b14490881c2cfc285092.zip |
Fix nondeterministic behavior.
llvm-svn: 93093
Diffstat (limited to 'llvm/lib/Transforms/Utils/CodeExtractor.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/CodeExtractor.cpp | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/llvm/lib/Transforms/Utils/CodeExtractor.cpp b/llvm/lib/Transforms/Utils/CodeExtractor.cpp index cc3b9a1052a..b2084948530 100644 --- a/llvm/lib/Transforms/Utils/CodeExtractor.cpp +++ b/llvm/lib/Transforms/Utils/CodeExtractor.cpp @@ -45,7 +45,7 @@ AggregateArgsOpt("aggregate-extracted-args", cl::Hidden, namespace { class CodeExtractor { - typedef std::vector<Value*> Values; + typedef SetVector<Value*> Values; SetVector<BasicBlock*> BlocksToExtract; DominatorTree* DT; bool AggregateArgs; @@ -216,13 +216,13 @@ void CodeExtractor::findInputsOutputs(Values &inputs, Values &outputs) { // 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) if (definedInCaller(*O)) - inputs.push_back(*O); + inputs.insert(*O); // Consider uses of this instruction (outputs). for (Value::use_iterator UI = I->use_begin(), E = I->use_end(); UI != E; ++UI) if (!definedInRegion(*UI)) { - outputs.push_back(I); + outputs.insert(I); break; } } // for: insts @@ -235,12 +235,6 @@ void CodeExtractor::findInputsOutputs(Values &inputs, Values &outputs) { } // for: basic blocks 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: |