forked from OSchip/llvm-project
parent
1475987634
commit
7c8e6047d6
|
@ -29,8 +29,8 @@
|
||||||
#include "llvm/ADT/SmallVector.h"
|
#include "llvm/ADT/SmallVector.h"
|
||||||
#include "llvm/ADT/SmallPtrSet.h"
|
#include "llvm/ADT/SmallPtrSet.h"
|
||||||
#include "llvm/ADT/Statistic.h"
|
#include "llvm/ADT/Statistic.h"
|
||||||
|
#include "llvm/ADT/STLExtras.h"
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <functional>
|
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <map>
|
#include <map>
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
@ -610,6 +610,12 @@ namespace {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ConstantIntSortPredicate(const void *P1, const void *P2) {
|
||||||
|
const ConstantInt *LHS = *(const ConstantInt**)P1;
|
||||||
|
const ConstantInt *RHS = *(const ConstantInt**)P2;
|
||||||
|
return LHS->getValue().ult(RHS->getValue());
|
||||||
|
}
|
||||||
|
|
||||||
/// FoldValueComparisonIntoPredecessors - The specified terminator is a value
|
/// FoldValueComparisonIntoPredecessors - The specified terminator is a value
|
||||||
/// equality comparison instruction (either a switch or a branch on "X == c").
|
/// equality comparison instruction (either a switch or a branch on "X == c").
|
||||||
/// See if any of the predecessors of the terminator block are value comparisons
|
/// See if any of the predecessors of the terminator block are value comparisons
|
||||||
|
@ -1985,7 +1991,7 @@ bool SimplifyCFGOpt::run(BasicBlock *BB) {
|
||||||
if (CompVal) {
|
if (CompVal) {
|
||||||
// There might be duplicate constants in the list, which the switch
|
// There might be duplicate constants in the list, which the switch
|
||||||
// instruction can't handle, remove them now.
|
// instruction can't handle, remove them now.
|
||||||
std::sort(Values.begin(), Values.end(), ConstantIntOrdering());
|
array_pod_sort(Values.begin(), Values.end(), ConstantIntSortPredicate);
|
||||||
Values.erase(std::unique(Values.begin(), Values.end()), Values.end());
|
Values.erase(std::unique(Values.begin(), Values.end()), Values.end());
|
||||||
|
|
||||||
// Figure out which block is which destination.
|
// Figure out which block is which destination.
|
||||||
|
|
Loading…
Reference in New Issue