[llvm] r361268 - [DAGCombiner] prevent unsafe reassociation of FP ops

Roman Lebedev via llvm-commits llvm-commits at lists.llvm.org
Tue May 21 08:16:52 PDT 2019


Thank you.

On Tue, May 21, 2019 at 5:44 PM Sanjay Patel via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
>
> Author: spatel
> Date: Tue May 21 07:47:38 2019
> New Revision: 361268
>
> URL: http://llvm.org/viewvc/llvm-project?rev=361268&view=rev
> Log:
> [DAGCombiner] prevent unsafe reassociation of FP ops
>
> There are no FP callers of DAGCombiner::reassociateOps() currently,
> but we can add a fast-math check to make sure this API is not being
> misused.
>
> This was noted as a potential risk (and that risk might increase) with:
> D62191
>
> Modified:
>     llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=361268&r1=361267&r2=361268&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Tue May 21 07:47:38 2019
> @@ -1042,6 +1042,13 @@ SDValue DAGCombiner::reassociateOps(unsi
>    // Don't reassociate reductions.
>    if (Flags.hasVectorReduction())
>      return SDValue();
> +
> +  // Floating-point reassociation is not allowed without loose FP math.
> +  if (N0.getValueType().isFloatingPoint() ||
> +      N1.getValueType().isFloatingPoint())
> +    if (!Flags.hasAllowReassociation() || !Flags.hasNoSignedZeros())
> +      return SDValue();
> +
>    if (SDValue Combined = reassociateOpsCommutative(Opc, DL, N0, N1))
>      return Combined;
>    if (SDValue Combined = reassociateOpsCommutative(Opc, DL, N1, N0))
> @@ -1728,7 +1735,7 @@ SDValue DAGCombiner::combine(SDNode *N)
>      }
>    }
>
> -  // If N is a commutative binary node, try eliminate it if the commuted
> +  // If N is a commutative binary node, try to eliminate it if the commuted
>    // version is already present in the DAG.
>    if (!RV.getNode() && TLI.isCommutativeBinOp(N->getOpcode()) &&
>        N->getNumValues() == 1) {
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list