[PATCH] D116952: [ConstantFolding] Respect denormal handling mode attributes when folding instructions

Nuno Lopes via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 23 02:12:46 PDT 2022


nlopes added a comment.

In D116952#3603700 <https://reviews.llvm.org/D116952#3603700>, @shchenz wrote:

> Hi @nlopes, thanks for providing the useful info. However I am still not very clear about how to deal with our internal failure after this patch.
>
>   define i1 @foo() denormal-fp-math=positive-zero,positive-zero {
>     %_add = fadd double 0.000000, 0.000000, exceptions=ignore
>     %_res = fcmp une double %_add, 0.000000
>     ret i1 %_res
>   }
>   =>
>   define i1 @foo() noread nowrite nofree willreturn denormal-fp-math=positive-zero,positive-zero {
>     ret i1 1
>   }
>
> The alive result is very confusing. I don't understand why `0.000000 + 0.000000` != `0x000000` when  `denormal-fp-math=positive-zero`, could you help to explain?

True, the output isn't great (floats are truncated, hence the 0.000000, which is not what's underneath). But what matters is the final result.

> I know you said online Alive2 is outdated, but seems the online Alive2 gets opposite result for the above 0.000000 case, it verifies `ret i1 0` as the valid transformation. https://alive2.llvm.org/ce/z/PjhR3U

The online version if Alive2 doesn't implement the denormal-fp-math attribute.

> There is a C case too:
>
>   int main(void)
>   {
>     double a = 1.264810e-321;
>     double b = 3.789480e-321;
>   
>     return (a + b != 5.054290e-321);
>   }
>
> `clang 1.c -Ofast -fdenormal-fp-math=positive-zero` without this patch, it gets 0 and with this patch, it gets 1. Our internal test expects 0 here.

Look at the generated assembly with -O0 without and without -fdenormal-fp-math. There's no difference. So it seems that this flag doesn't guarantee anything (it's best effort) or it's not fully implemented yet.
Nevertheless, your internal test is wrong. Check the math here: https://en.wikipedia.org/wiki/Double-precision_floating-point_format#Exponent_encoding


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D116952



More information about the llvm-commits mailing list