[llvm] [AArch64][NFC] Refactor duplicate code into getCmpOrCmnOperandFoldingProfit (PR #198981)
Piotr Fusik via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 12 06:55:14 PDT 2026
https://github.com/pfusik updated https://github.com/llvm/llvm-project/pull/198981
>From 3cf44a7548451beb85235a542e88bd43c1e78463 Mon Sep 17 00:00:00 2001
From: Piotr Fusik <p.fusik at samsung.com>
Date: Thu, 21 May 2026 10:25:01 +0200
Subject: [PATCH] [AArch64][NFC] Refactor duplicate code into
getCmpOrCmnOperandFoldingProfit
---
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
index b5e82333e0801..a1572b6331173 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
@@ -4212,6 +4212,13 @@ static unsigned getCmpOperandFoldingProfit(SDValue Op, bool AllowExtend) {
return 0;
}
+static unsigned getCmpOrCmnOperandFoldingProfit(SDValue Op, ISD::CondCode CC,
+ SelectionDAG &DAG) {
+ if (isCMN(Op, CC, DAG))
+ return getCmpOperandFoldingProfit(Op.getOperand(1), true) + 1;
+ return getCmpOperandFoldingProfit(Op, true);
+}
+
// emitComparison() converts comparison with one or negative one to comparison
// with 0. Note that this only works for signed comparisons because of how ANDS
// works.
@@ -4317,13 +4324,8 @@ static SDValue getAArch64Cmp(SDValue LHS, SDValue RHS, ISD::CondCode CC,
// cmp w12, w11, lsl #1
if (!isa<ConstantSDNode>(RHS) ||
!AArch64_AM::isLegalCmpImmed(RHS->getAsAPIntVal())) {
- bool LHSIsCMN = isCMN(LHS, CC, DAG);
- bool RHSIsCMN = isCMN(RHS, CC, DAG);
- SDValue TheLHS = LHSIsCMN ? LHS.getOperand(1) : LHS;
- SDValue TheRHS = RHSIsCMN ? RHS.getOperand(1) : RHS;
-
- if (getCmpOperandFoldingProfit(TheLHS, true) + (LHSIsCMN ? 1 : 0) >
- getCmpOperandFoldingProfit(TheRHS, true) + (RHSIsCMN ? 1 : 0)) {
+ if (getCmpOrCmnOperandFoldingProfit(LHS, CC, DAG) >
+ getCmpOrCmnOperandFoldingProfit(RHS, CC, DAG)) {
std::swap(LHS, RHS);
CC = ISD::getSetCCSwappedOperands(CC);
}
More information about the llvm-commits
mailing list