[PATCH] D142803: [LogicCombine 1/?] Implement a general way to simplify logical operations.
Sanjay Patel via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 23 05:33:23 PST 2023
spatel added a comment.
> I need LeafValues to access value by index. It looks SmallSetVector can't do that.
SmallSetVector allows indexing. This is the patch I tried after applying this patch (I had to fix line endings first), and no tests fail:
diff --git a/llvm/include/llvm/Analysis/LogicCombine.h b/llvm/include/llvm/Analysis/LogicCombine.h
index 3fdcf7998321..56a3d8f36b16 100644
--- a/llvm/include/llvm/Analysis/LogicCombine.h
+++ b/llvm/include/llvm/Analysis/LogicCombine.h
@@ -8,8 +8,7 @@
#include "LogicalExpr.h"
#include "llvm/ADT/DenseMap.h"
-#include "llvm/ADT/SmallPtrSet.h"
-#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/IR/Instruction.h"
@@ -50,8 +49,7 @@ private:
friend class LogicalOpNode;
SmallDenseMap<Value *, LogicalOpNode *, 16> LogicalOpNodes;
- SmallPtrSet<Value *, 8> LeafSet;
- SmallVector<Value *, 8> LeafValues;
+ SmallSetVector<Value *, 8> LeafValues;
void clear();
diff --git a/llvm/lib/Analysis/LogicCombine.cpp b/llvm/lib/Analysis/LogicCombine.cpp
index 28d9488cab96..3b410cdacd32 100644
--- a/llvm/lib/Analysis/LogicCombine.cpp
+++ b/llvm/lib/Analysis/LogicCombine.cpp
@@ -101,17 +101,16 @@ void LogicCombiner::clear() {
for (auto node : LogicalOpNodes)
delete node.second;
LogicalOpNodes.clear();
- LeafSet.clear();
LeafValues.clear();
}
LogicalOpNode *LogicCombiner::visitLeafNode(Value *Val, unsigned Depth) {
// Depth is 0 means the root is not logical operation. We can't
// do anything for that.
- if (Depth == 0 || LeafSet.size() >= MaxLogicOpLeafsToScan)
+ if (Depth == 0 || LeafValues.size() >= MaxLogicOpLeafsToScan)
return nullptr;
- uint64_t ExprVal = 1ULL << LeafSet.size();
+ uint64_t ExprVal = 1ULL << LeafValues.size();
// Constant Zero,AllOne are special leaf nodes. They involve
// LogicalExpr's calculation so we must detect them at first.
if (auto ConstVal = dyn_cast<ConstantInt>(Val)) {
@@ -120,9 +119,8 @@ LogicalOpNode *LogicCombiner::visitLeafNode(Value *Val, unsigned Depth) {
else if (ConstVal->isAllOnesValue())
ExprVal = LogicalExpr::ExprAllOne;
}
- if (ExprVal != LogicalExpr::ExprAllOne && ExprVal != 0 &&
- LeafSet.insert(Val).second)
- LeafValues.push_back(Val);
+ if (ExprVal != LogicalExpr::ExprAllOne && ExprVal != 0)
+ LeafValues.insert(Val);
LogicalOpNode *Node = new LogicalOpNode(this, Val, LogicalExpr(ExprVal));
LogicalOpNodes[Val] = Node;
return Node;
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D142803/new/
https://reviews.llvm.org/D142803
More information about the llvm-commits
mailing list