[PATCH] D124775: [IRSim] Removing check that caused early matching of commutative instructions
Andrew Litteken via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon May 9 20:59:30 PDT 2022
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG96345f773cfe: [IRSim] Remove early check from similarity matching such that commutative… (authored by AndrewLitteken).
Changed prior to commit:
https://reviews.llvm.org/D124775?vs=426428&id=428283#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D124775/new/
https://reviews.llvm.org/D124775
Files:
llvm/lib/Analysis/IRSimilarityIdentifier.cpp
llvm/unittests/Analysis/IRSimilarityIdentifierTest.cpp
Index: llvm/unittests/Analysis/IRSimilarityIdentifierTest.cpp
===================================================================
--- llvm/unittests/Analysis/IRSimilarityIdentifierTest.cpp
+++ llvm/unittests/Analysis/IRSimilarityIdentifierTest.cpp
@@ -2619,6 +2619,29 @@
}
}
+// This test ensures that when the first instruction in a sequence is
+// a commutative instruction with the same value (mcomm_inst_same_val), but the
+// corresponding instruction (comm_inst_diff_val) is not, we mark the regions
+// and not similar.
+TEST(IRSimilarityIdentifier, CommutativeSameValueFirstMisMatch) {
+ StringRef ModuleString = R"(
+ define void @v_1_0(i64 %v_33) {
+ entry:
+ %comm_inst_same_val = mul i64 undef, undef
+ %add = add i64 %comm_inst_same_val, %v_33
+ %comm_inst_diff_val = mul i64 0, undef
+ %mul.i = add i64 %comm_inst_diff_val, %comm_inst_diff_val
+ unreachable
+ })";
+ LLVMContext Context;
+ std::unique_ptr<Module> M = makeLLVMModule(Context, ModuleString);
+
+ std::vector<std::vector<IRSimilarityCandidate>> SimilarityCandidates;
+ getSimilarities(*M, SimilarityCandidates);
+
+ ASSERT_TRUE(SimilarityCandidates.size() == 0);
+}
+
// This test makes sure that intrinsic functions that are marked commutative
// are still treated as non-commutative since they are function calls.
TEST(IRSimilarityIdentifier, IntrinsicCommutative) {
Index: llvm/lib/Analysis/IRSimilarityIdentifier.cpp
===================================================================
--- llvm/lib/Analysis/IRSimilarityIdentifier.cpp
+++ llvm/lib/Analysis/IRSimilarityIdentifier.cpp
@@ -526,19 +526,13 @@
for (Value *V : SourceOperands) {
ArgVal = SourceValueToNumberMapping.find(V)->second;
+ // Instead of finding a current mapping, we attempt to insert a set.
std::tie(ValueMappingIt, WasInserted) = CurrentSrcTgtNumberMapping.insert(
std::make_pair(ArgVal, TargetValueNumbers));
- // Instead of finding a current mapping, we inserted a set. This means a
- // mapping did not exist for the source Instruction operand, it has no
- // current constraints we need to check.
- if (WasInserted)
- continue;
-
- // If a mapping already exists for the source operand to the values in the
- // other IRSimilarityCandidate we need to iterate over the items in other
- // IRSimilarityCandidate's Instruction to determine whether there is a valid
- // mapping of Value to Value.
+ // We need to iterate over the items in other IRSimilarityCandidate's
+ // Instruction to determine whether there is a valid mapping of
+ // Value to Value.
DenseSet<unsigned> NewSet;
for (unsigned &Curr : ValueMappingIt->second)
// If we can find the value in the mapping, we add it to the new set.
@@ -558,7 +552,6 @@
if (ValueMappingIt->second.size() != 1)
continue;
-
unsigned ValToRemove = *ValueMappingIt->second.begin();
// When there is only one item left in the mapping for and operand, remove
// the value from the other operands. If it results in there being no
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D124775.428283.patch
Type: text/x-patch
Size: 3282 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220510/a3ab290f/attachment.bin>
More information about the llvm-commits
mailing list