[llvm] 00edad1 - [SLP][NFC]Check for equal opcode preliminary to meet weak strict order
Alexey Bataev via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 18 14:16:17 PST 2023
Author: Alexey Bataev
Date: 2023-12-18T14:12:33-08:00
New Revision: 00edad17c29d9fb24132def1414e73384e6ba4c3
URL: https://github.com/llvm/llvm-project/commit/00edad17c29d9fb24132def1414e73384e6ba4c3
DIFF: https://github.com/llvm/llvm-project/commit/00edad17c29d9fb24132def1414e73384e6ba4c3.diff
LOG: [SLP][NFC]Check for equal opcode preliminary to meet weak strict order
requirement, NFC.
This change does not affect functionality, just fixes the assertions in
some standard c++ library implementations.
Added:
Modified:
llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
index 9d799124074ca1..80bdc67a49fe56 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -15730,6 +15730,8 @@ static bool compareCmp(Value *V, Value *V2, TargetLibraryInfo &TLI,
assert(isValidElementType(V->getType()) &&
isValidElementType(V2->getType()) &&
"Expected valid element types only.");
+ if (V == V2)
+ return IsCompatibility;
auto *CI1 = cast<CmpInst>(V);
auto *CI2 = cast<CmpInst>(V2);
if (CI1->getOperand(0)->getType()->getTypeID() <
@@ -15754,6 +15756,8 @@ static bool compareCmp(Value *V, Value *V2, TargetLibraryInfo &TLI,
for (int I = 0, E = CI1->getNumOperands(); I < E; ++I) {
auto *Op1 = CI1->getOperand(CI1Preds ? I : E - I - 1);
auto *Op2 = CI2->getOperand(CI2Preds ? I : E - I - 1);
+ if (Op1 == Op2)
+ continue;
if (Op1->getValueID() < Op2->getValueID())
return !IsCompatibility;
if (Op1->getValueID() > Op2->getValueID())
@@ -15780,7 +15784,10 @@ static bool compareCmp(Value *V, Value *V2, TargetLibraryInfo &TLI,
InstructionsState S = getSameOpcode({I1, I2}, TLI);
if (S.getOpcode() && (IsCompatibility || !S.isAltShuffle()))
continue;
- return !IsCompatibility && I1->getOpcode() < I2->getOpcode();
+ if (IsCompatibility)
+ return false;
+ if (I1->getOpcode() != I2->getOpcode())
+ return I1->getOpcode() < I2->getOpcode();
}
}
return IsCompatibility;
More information about the llvm-commits
mailing list