summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Utils/CodeExtractor.cpp
diff options
context:
space:
mode:
authorJulien Lerouge <jlerouge@apple.com>2010-01-10 01:07:22 +0000
committerJulien Lerouge <jlerouge@apple.com>2010-01-10 01:07:22 +0000
commit321098ebec22e9b93da4b14490881c2cfc285092 (patch)
treefefc44d06320d1c8fba396724a0c902b25f916ab /llvm/lib/Transforms/Utils/CodeExtractor.cpp
parentc95a7a21b7237c52c01b02e80d0ea100d4d933cb (diff)
downloadbcm5719-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.cpp12
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:
OpenPOWER on IntegriCloud