[llvm] [GlobalISel] Combine into abd[su] and legalize abd[su] (PR #179437)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 3 03:28:01 PST 2026
github-actions[bot] wrote:
<!--LLVM CODE FORMAT COMMENT: {clang-format}-->
:warning: C/C++ code formatter, clang-format found issues in your code. :warning:
<details>
<summary>
You can test this locally with the following command:
</summary>
``````````bash
git-clang-format --diff origin/main HEAD --extensions h,cpp -- llvm/lib/CodeGen/GlobalISel/CombinerHelperSelect.cpp llvm/include/llvm/CodeGen/GlobalISel/CombinerHelper.h llvm/include/llvm/CodeGen/GlobalISel/GenericMachineInstrs.h llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp llvm/lib/CodeGen/GlobalISel/CombinerHelperCasts.cpp llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp --diff_from_common_commit
``````````
:warning:
The reproduction instructions above might return results for more than one PR
in a stack if you are using a stacked PR workflow. You can limit the results by
changing `origin/main` to the base branch/commit you want to compare against.
:warning:
</details>
<details>
<summary>
View the diff from clang-format here.
</summary>
``````````diff
diff --git a/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp
index a2bd03972..44d8d4ec1 100644
--- a/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp
@@ -8591,34 +8591,34 @@ bool CombinerHelper::matchCtls(MachineInstr &CtlzMI,
};
return true;
-// sub(smax(lhs,rhs), smin(lhs,rhs)) -> abds(lhs, rhs)
-bool CombinerHelper::matchSubAbds(const MachineInstr &MI) {
- const GSub *Sub = cast<GSub>(&MI);
- const GMaxMinOp *LHS = cast<GMaxMinOp>(MRI.getVRegDef(Sub->getLHSReg()));
- const GMaxMinOp *RHS = cast<GMaxMinOp>(MRI.getVRegDef(Sub->getRHSReg()));
+ // sub(smax(lhs,rhs), smin(lhs,rhs)) -> abds(lhs, rhs)
+ bool CombinerHelper::matchSubAbds(const MachineInstr &MI) {
+ const GSub *Sub = cast<GSub>(&MI);
+ const GMaxMinOp *LHS = cast<GMaxMinOp>(MRI.getVRegDef(Sub->getLHSReg()));
+ const GMaxMinOp *RHS = cast<GMaxMinOp>(MRI.getVRegDef(Sub->getRHSReg()));
+
+ if (!MRI.hasOneNonDBGUse(LHS->getReg(0)) ||
+ !MRI.hasOneNonDBGUse(RHS->getReg(0)))
+ return false;
- if (!MRI.hasOneNonDBGUse(LHS->getReg(0)) ||
- !MRI.hasOneNonDBGUse(RHS->getReg(0)))
- return false;
+ Register Dst = Sub->getReg(0);
+ LLT DstTy = MRI.getType(Dst);
- Register Dst = Sub->getReg(0);
- LLT DstTy = MRI.getType(Dst);
+ return isLegalOrBeforeLegalizer({TargetOpcode::G_ABDS, {DstTy}});
+ }
- return isLegalOrBeforeLegalizer({TargetOpcode::G_ABDS, {DstTy}});
-}
+ // sub(umax(lhs,rhs), umin(lhs,rhs)) -> abdu(lhs, rhs)
+ bool CombinerHelper::matchSubAbdu(const MachineInstr &MI) {
+ const GSub *Sub = cast<GSub>(&MI);
+ const GMaxMinOp *LHS = cast<GMaxMinOp>(MRI.getVRegDef(Sub->getLHSReg()));
+ const GMaxMinOp *RHS = cast<GMaxMinOp>(MRI.getVRegDef(Sub->getRHSReg()));
-// sub(umax(lhs,rhs), umin(lhs,rhs)) -> abdu(lhs, rhs)
-bool CombinerHelper::matchSubAbdu(const MachineInstr &MI) {
- const GSub *Sub = cast<GSub>(&MI);
- const GMaxMinOp *LHS = cast<GMaxMinOp>(MRI.getVRegDef(Sub->getLHSReg()));
- const GMaxMinOp *RHS = cast<GMaxMinOp>(MRI.getVRegDef(Sub->getRHSReg()));
-
- if (!MRI.hasOneNonDBGUse(LHS->getReg(0)) ||
- !MRI.hasOneNonDBGUse(RHS->getReg(0)))
- return false;
+ if (!MRI.hasOneNonDBGUse(LHS->getReg(0)) ||
+ !MRI.hasOneNonDBGUse(RHS->getReg(0)))
+ return false;
- Register Dst = Sub->getReg(0);
- LLT DstTy = MRI.getType(Dst);
+ Register Dst = Sub->getReg(0);
+ LLT DstTy = MRI.getType(Dst);
- return isLegalOrBeforeLegalizer({TargetOpcode::G_ABDU, {DstTy}});
-}
+ return isLegalOrBeforeLegalizer({TargetOpcode::G_ABDU, {DstTy}});
+ }
diff --git a/llvm/lib/CodeGen/GlobalISel/CombinerHelperCasts.cpp b/llvm/lib/CodeGen/GlobalISel/CombinerHelperCasts.cpp
index e0b6d826c..ad62690ab 100644
--- a/llvm/lib/CodeGen/GlobalISel/CombinerHelperCasts.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/CombinerHelperCasts.cpp
@@ -412,58 +412,58 @@ bool CombinerHelper::matchRedundantSextInReg(MachineInstr &Root,
}
return true;
-// trunc(abs(sext(x) - sext(y))) -> abds(x, y)
-bool CombinerHelper::matchTruncAbds(const MachineInstr &MI) {
- const GTrunc *Trunc = cast<GTrunc>(&MI);
- const GAbs *Abs = cast<GAbs>(MRI.getVRegDef(Trunc->getSrcReg()));
- const GSub *Sub = cast<GSub>(MRI.getVRegDef(Abs->getSourceReg()));
+ // trunc(abs(sext(x) - sext(y))) -> abds(x, y)
+ bool CombinerHelper::matchTruncAbds(const MachineInstr &MI) {
+ const GTrunc *Trunc = cast<GTrunc>(&MI);
+ const GAbs *Abs = cast<GAbs>(MRI.getVRegDef(Trunc->getSrcReg()));
+ const GSub *Sub = cast<GSub>(MRI.getVRegDef(Abs->getSourceReg()));
- Register Dst = Trunc->getReg(0);
- LLT DstTy = MRI.getType(Dst);
+ Register Dst = Trunc->getReg(0);
+ LLT DstTy = MRI.getType(Dst);
- GSext *SextLHS = cast<GSext>(MRI.getVRegDef(Sub->getLHSReg()));
- GSext *SextRHS = cast<GSext>(MRI.getVRegDef(Sub->getRHSReg()));
+ GSext *SextLHS = cast<GSext>(MRI.getVRegDef(Sub->getLHSReg()));
+ GSext *SextRHS = cast<GSext>(MRI.getVRegDef(Sub->getRHSReg()));
- LLT SextLHSTy = MRI.getType(SextLHS->getSrcReg());
- LLT SextRHSTy = MRI.getType(SextRHS->getSrcReg());
+ LLT SextLHSTy = MRI.getType(SextLHS->getSrcReg());
+ LLT SextRHSTy = MRI.getType(SextRHS->getSrcReg());
- if (SextLHSTy != SextRHSTy || DstTy != SextLHSTy)
- return false;
+ if (SextLHSTy != SextRHSTy || DstTy != SextLHSTy)
+ return false;
- // one-use
- if (!MRI.hasOneNonDBGUse(Abs->getReg(0)) ||
- !MRI.hasOneNonDBGUse(Sub->getReg(0)) ||
- !MRI.hasOneNonDBGUse(Sub->getLHSReg()) ||
- !MRI.hasOneNonDBGUse(Sub->getRHSReg()))
- return false;
+ // one-use
+ if (!MRI.hasOneNonDBGUse(Abs->getReg(0)) ||
+ !MRI.hasOneNonDBGUse(Sub->getReg(0)) ||
+ !MRI.hasOneNonDBGUse(Sub->getLHSReg()) ||
+ !MRI.hasOneNonDBGUse(Sub->getRHSReg()))
+ return false;
- return isLegalOrBeforeLegalizer({TargetOpcode::G_ABDS, {DstTy}});
-}
+ return isLegalOrBeforeLegalizer({TargetOpcode::G_ABDS, {DstTy}});
+ }
-// trunc(abs(zext(x) - zext(y))) -> abdu(x, y)
-bool CombinerHelper::matchTruncAbdu(const MachineInstr &MI) {
- const GTrunc *Trunc = cast<GTrunc>(&MI);
- const GAbs *Abs = cast<GAbs>(MRI.getVRegDef(Trunc->getSrcReg()));
- const GSub *Sub = cast<GSub>(MRI.getVRegDef(Abs->getSourceReg()));
+ // trunc(abs(zext(x) - zext(y))) -> abdu(x, y)
+ bool CombinerHelper::matchTruncAbdu(const MachineInstr &MI) {
+ const GTrunc *Trunc = cast<GTrunc>(&MI);
+ const GAbs *Abs = cast<GAbs>(MRI.getVRegDef(Trunc->getSrcReg()));
+ const GSub *Sub = cast<GSub>(MRI.getVRegDef(Abs->getSourceReg()));
- Register Dst = Trunc->getReg(0);
- LLT DstTy = MRI.getType(Dst);
+ Register Dst = Trunc->getReg(0);
+ LLT DstTy = MRI.getType(Dst);
- GZext *ZextLHS = cast<GZext>(MRI.getVRegDef(Sub->getLHSReg()));
- GZext *ZextRHS = cast<GZext>(MRI.getVRegDef(Sub->getRHSReg()));
+ GZext *ZextLHS = cast<GZext>(MRI.getVRegDef(Sub->getLHSReg()));
+ GZext *ZextRHS = cast<GZext>(MRI.getVRegDef(Sub->getRHSReg()));
- LLT ZextLHSTy = MRI.getType(ZextLHS->getSrcReg());
- LLT ZextRHSTy = MRI.getType(ZextRHS->getSrcReg());
+ LLT ZextLHSTy = MRI.getType(ZextLHS->getSrcReg());
+ LLT ZextRHSTy = MRI.getType(ZextRHS->getSrcReg());
- if (ZextLHSTy != ZextRHSTy || DstTy != ZextLHSTy)
- return false;
+ if (ZextLHSTy != ZextRHSTy || DstTy != ZextLHSTy)
+ return false;
- // one-use
- if (!MRI.hasOneNonDBGUse(Abs->getReg(0)) ||
- !MRI.hasOneNonDBGUse(Sub->getReg(0)) ||
- !MRI.hasOneNonDBGUse(Sub->getLHSReg()) ||
- !MRI.hasOneNonDBGUse(Sub->getRHSReg()))
- return false;
+ // one-use
+ if (!MRI.hasOneNonDBGUse(Abs->getReg(0)) ||
+ !MRI.hasOneNonDBGUse(Sub->getReg(0)) ||
+ !MRI.hasOneNonDBGUse(Sub->getLHSReg()) ||
+ !MRI.hasOneNonDBGUse(Sub->getRHSReg()))
+ return false;
- return isLegalOrBeforeLegalizer({TargetOpcode::G_ABDU, {DstTy}});
-}
+ return isLegalOrBeforeLegalizer({TargetOpcode::G_ABDU, {DstTy}});
+ }
``````````
</details>
https://github.com/llvm/llvm-project/pull/179437
More information about the llvm-commits
mailing list