[llvm] [SLP] NFC. Refactor getSameOpcode and reduce for loop iterations. (PR #122241)
Han-Kuan Chen via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 9 07:56:52 PST 2025
================
@@ -915,24 +915,22 @@ static InstructionsState getSameOpcode(ArrayRef<Value *> VL,
if (It == VL.end())
return InstructionsState::invalid();
- Value *V = *It;
+ Instruction *MainOp = cast<Instruction>(*It);
unsigned InstCnt = std::count_if(It, VL.end(), IsaPred<Instruction>);
- if ((VL.size() > 2 && !isa<PHINode>(V) && InstCnt < VL.size() / 2) ||
+ if ((VL.size() > 2 && !isa<PHINode>(MainOp) && InstCnt < VL.size() / 2) ||
(VL.size() == 2 && InstCnt < 2))
return InstructionsState::invalid();
- bool IsCastOp = isa<CastInst>(V);
- bool IsBinOp = isa<BinaryOperator>(V);
- bool IsCmpOp = isa<CmpInst>(V);
- CmpInst::Predicate BasePred =
- IsCmpOp ? cast<CmpInst>(V)->getPredicate() : CmpInst::BAD_ICMP_PREDICATE;
- unsigned Opcode = cast<Instruction>(V)->getOpcode();
+ bool IsCastOp = isa<CastInst>(MainOp);
+ bool IsBinOp = isa<BinaryOperator>(MainOp);
+ bool IsCmpOp = isa<CmpInst>(MainOp);
+ CmpInst::Predicate BasePred = IsCmpOp ? cast<CmpInst>(MainOp)->getPredicate()
+ : CmpInst::BAD_ICMP_PREDICATE;
+ Instruction *AltOp = MainOp;
+ unsigned Opcode = MainOp->getOpcode();
unsigned AltOpcode = Opcode;
- unsigned AltIndex = std::distance(VL.begin(), It);
- bool SwappedPredsCompatible = [&]() {
- if (!IsCmpOp)
- return false;
----------------
HanKuanChen wrote:
Why not use `bool SwappedPredsCompatible = IsCmpOp && [&]() {`? The `&&` performs short-circuit evaluation, which can make the code clearer.
https://github.com/llvm/llvm-project/pull/122241
More information about the llvm-commits
mailing list