[PATCH] D75982: [DAGCombine] Respect the uses when combine FMA for a*b+/-c*d and add target hook if there uses are the same

qshanz via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 11 20:21:39 PDT 2020


steven.zhang added a comment.

In D75982#1916940 <https://reviews.llvm.org/D75982#1916940>, @spatel wrote:

> I don't think this is the right way to solve the problem. From what I can tell, there is no guarantee that this target hook will always work the way you want. What if the source code got reassociated in IR, so that the operands you're expecting as A/B/C/D are swapped?
>
> If the math libs require that some FMA operation is performed to maintain precision, then they should be written using fma() or equivalent in whatever source language the library is written in:
>  https://en.cppreference.com/w/cpp/numeric/math/fma
>
> Once we are in LLVM IR, that calculation should be maintained using:
>  http://llvm.org/docs/LangRef.html#int-fma
>
> See also:
>  http://llvm.org/docs/LangRef.html#llvm-fmuladd-intrinsic
>
> That said, I'm still not sure if this is all going to work as expected yet. Given the 'fast' flag, the compiler has the ability to do just about anything with FP calculations. But my guess is that we'll be ok in IR and codegen by using the fma intrinsic.


Make sense. Thank you for the information. I will remove the hook and only do it when there is more uses.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D75982/new/

https://reviews.llvm.org/D75982





More information about the llvm-commits mailing list