Do not unswitch loop on same value again and again.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34638 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Devang Patel 2007-02-26 19:31:58 +00:00
parent bffc1b3c4e
commit 5295692061

View File

@ -62,6 +62,8 @@ namespace {
// LoopProcessWorklist - List of loops we need to process.
std::vector<Loop*> LoopProcessWorklist;
std::set<Value *> UnswitchedVals;
public:
virtual bool runOnFunction(Function &F);
bool visitLoop(Loop *L);
@ -186,6 +188,11 @@ bool LoopUnswitch::visitLoop(Loop *L) {
// Find a value to unswitch on:
// FIXME: this should chose the most expensive case!
Constant *UnswitchVal = SI->getCaseValue(1);
// Do not process same value again and again.
if (UnswitchedVals.count(UnswitchVal) != 0)
continue;
UnswitchedVals.insert(UnswitchVal);
if (UnswitchIfProfitable(LoopCond, UnswitchVal, L)) {
++NumSwitches;
return true;