[PATCH] D151358: [LegalizeTypes] Improve expansion of wide SMIN/SMAX/UMIN/UMAX
Craig Topper via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed May 24 12:00:48 PDT 2023
craig.topper added inline comments.
================
Comment at: llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp:2935
- // We need to know whether to select Lo part that corresponds to 'winning'
- // Hi part or if Hi parts are equal.
- SDValue IsHiLeft = DAG.getSetCC(DL, CCT, LHSH, RHSH, CondC);
- SDValue IsHiEq = DAG.getSetCC(DL, CCT, LHSH, RHSH, ISD::SETEQ);
-
- // Lo part corresponding to the 'winning' Hi part
- SDValue LoCmp = DAG.getSelect(DL, NVT, IsHiLeft, LHSL, RHSL);
-
- // Recursed Lo part if Hi parts are equal, this uses unsigned version
- SDValue LoMinMax = DAG.getNode(LoOpc, DL, NVT, {LHSL, RHSL});
-
- Lo = DAG.getSelect(DL, NVT, IsHiEq, LoMinMax, LoCmp);
+ // Expand to "a < b ? a : b". (An alternative expansion exists that avoids
+ // the 64-bit compare, but it's less efficient on most targets.)
----------------
I think this should be (a <= b ? a : b) for some constants. Like @llvm.smin.i64(i64 %conv, i64 2147483647)
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D151358/new/
https://reviews.llvm.org/D151358
More information about the llvm-commits
mailing list