Update equalsStoreHelper for the fact that only one branch can be true

llvm-svn: 290697
This commit is contained in:
Daniel Berlin 2016-12-29 00:49:32 +00:00
parent ddece375a1
commit 7ad1ea0984
1 changed files with 5 additions and 4 deletions

View File

@ -189,7 +189,7 @@ class NewGVN : public FunctionPass {
// We could use the congruence class machinery, but the MemoryAccess's are
// abstract memory states, so they can only ever be equivalent to each other,
// and not to constants, etc.
DenseMap<MemoryAccess *, MemoryAccess *> MemoryAccessEquiv;
DenseMap<const MemoryAccess *, MemoryAccess *> MemoryAccessEquiv;
// Expression to class mapping.
using ExpressionClassMap = DenseMap<const Expression *, CongruenceClass *>;
@ -351,14 +351,15 @@ FunctionPass *llvm::createNewGVNPass() { return new NewGVN(); }
template <typename T>
static bool equalsLoadStoreHelper(const T &LHS, const Expression &RHS) {
if ((!isa<LoadExpression>(RHS) && !isa<StoreExpression>(RHS)) ||
!LHS.BasicExpression::equals(RHS))
!LHS.BasicExpression::equals(RHS)) {
return false;
if (const auto *L = dyn_cast<LoadExpression>(&RHS))
} else if (const auto *L = dyn_cast<LoadExpression>(&RHS)) {
if (LHS.getDefiningAccess() != L->getDefiningAccess())
return false;
if (const auto *S = dyn_cast<StoreExpression>(&RHS))
} else if (const auto *S = dyn_cast<StoreExpression>(&RHS)) {
if (LHS.getDefiningAccess() != S->getDefiningAccess())
return false;
}
return true;
}