This is an archive of the discontinued LLVM Phabricator instance.

[InstSimplify] fold 'fcmp nnan oge X, 0.0' when X is not negative
ClosedPublic

Authored by spatel on Oct 30 2018, 10:22 AM.

Details

Summary

This re-raises some of the open questions about how to apply and use fast-math-flags in IR from PR38086:
https://bugs.llvm.org/show_bug.cgi?id=38086
...but given the current implementation, I think this is the correct way to predicate the transform.

This is part of solving PR39475:
https://bugs.llvm.org/show_bug.cgi?id=39475

Diff Detail

Event Timeline

spatel created this revision.Oct 30 2018, 10:22 AM
mcberg2017 added inline comments.Oct 30 2018, 11:21 AM
lib/Analysis/InstructionSimplify.cpp
3573

Sure NaNs are compared as unordered so excluding them is ok. Discussion point: If X has value below -0.0, CannotBeOrderedLessThanZero will return false if it can prove it, however so will the comparison of X > 0 as an ordered compare. Now we no longer have to prove X is a NaN in CannotBeOrderedLessThanZero as we specify/assert it is not. Do we need CannotBeOrderedLessThanZero for this comparison?

spatel added inline comments.Oct 30 2018, 1:08 PM
lib/Analysis/InstructionSimplify.cpp
3573

I'm not seeing the alternative to using CannotBeOrderedLessThanZero for this case. Did you have something in mind?
I agree that we're probably missing an additional fold for 'OLT' and/or 'ULT' here, but I wanted to make sure we're ok with this example first.

mcberg2017 added inline comments.Oct 30 2018, 1:17 PM
lib/Analysis/InstructionSimplify.cpp
3573

Not per say other than usage, having it is harmless at a small cost.

mcberg2017 accepted this revision.Oct 30 2018, 1:17 PM
This revision is now accepted and ready to land.Oct 30 2018, 1:17 PM
This revision was automatically updated to reflect the committed changes.