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 | 87147949822968776b658c96a60b58b83e935d76 (patch) | |
| tree | d12e6722f4ea74a28b7d2a0b91a96d7d55f02174 /lib/Transforms | |
| parent | 7a377abeec1e6e4c48121b45637742f9b58f8fe6 (diff) | |
| download | external_llvm-87147949822968776b658c96a60b58b83e935d76.zip external_llvm-87147949822968776b658c96a60b58b83e935d76.tar.gz external_llvm-87147949822968776b658c96a60b58b83e935d76.tar.bz2 | |
Fix nondeterministic behavior.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93093 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
| -rw-r--r-- | lib/Transforms/Utils/CodeExtractor.cpp | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/lib/Transforms/Utils/CodeExtractor.cpp b/lib/Transforms/Utils/CodeExtractor.cpp index cc3b9a1..b208494 100644 --- a/lib/Transforms/Utils/CodeExtractor.cpp +++ b/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: |
