[llvm] 87bf2bf - [NFC][DAG] Simplify a giant expression in visitMul.

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Thu May 18 12:12:16 PDT 2023


Would getShiftAmountConstant be better?

~Craig


On Thu, May 18, 2023 at 11:58 AM Amaury Séchet via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

>
> Author: Amaury Séchet
> Date: 2023-05-18T18:58:07Z
> New Revision: 87bf2bff0561c1cfb6e3864f194088242d06030f
>
> URL:
> https://github.com/llvm/llvm-project/commit/87bf2bff0561c1cfb6e3864f194088242d06030f
> DIFF:
> https://github.com/llvm/llvm-project/commit/87bf2bff0561c1cfb6e3864f194088242d06030f.diff
>
> LOG: [NFC][DAG] Simplify a giant expression in visitMul.
>
> Added:
>
>
> Modified:
>     llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
>     llvm/lib/Target/RISCV/RISCVISelLowering.cpp
>
> Removed:
>
>
>
>
> ################################################################################
> diff  --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
> b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
> index 75b6d8630f365..7173f52b72846 100644
> --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
> +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
> @@ -4288,13 +4288,14 @@ SDValue DAGCombiner::visitMUL(SDNode *N) {
>    // fold (mul x, -(1 << c)) -> -(x << c) or (-x) << c
>    if (N1IsConst && !N1IsOpaqueConst && ConstValue1.isNegatedPowerOf2()) {
>      unsigned Log2Val = (-ConstValue1).logBase2();
> +    EVT ShiftVT = getShiftAmountTy(N0.getValueType());
> +
>      // FIXME: If the input is something that is easily negated (e.g. a
>      // single-use add), we should put the negate there.
>      return DAG.getNode(ISD::SUB, DL, VT,
>                         DAG.getConstant(0, DL, VT),
>                         DAG.getNode(ISD::SHL, DL, VT, N0,
> -                            DAG.getConstant(Log2Val, DL,
> -
> getShiftAmountTy(N0.getValueType()))));
> +                            DAG.getConstant(Log2Val, DL, ShiftVT)));
>    }
>
>    // Attempt to reuse an existing umul_lohi/smul_lohi node, but only if
> the
>
> diff  --git a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
> b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
> index c823792b611e1..97119e8be62d5 100644
> --- a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
> +++ b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
> @@ -15893,7 +15893,7 @@ bool
> RISCVTargetLowering::decomposeMulByConstant(LLVMContext &Context, EVT VT,
>        Subtarget.hasStdExtM() || Subtarget.hasStdExtZmmul();
>    if (!VT.isScalarInteger())
>      return false;
> -
> +
>    // Omit the optimization if the sub target has the M extension and the
> data
>    // size exceeds XLen.
>    if (HasExtMOrZmmul && VT.getSizeInBits() > Subtarget.getXLen())
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230518/cbf36efa/attachment.html>


More information about the llvm-commits mailing list