[llvm-dev] [RFC] Integer Intrinsics for abs, in unsigned/signed min/max

Nikita Popov via llvm-dev llvm-dev at lists.llvm.org
Mon Jun 15 13:58:38 PDT 2020


On Mon, Jun 15, 2020 at 10:44 AM Roman Lebedev via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> Hello all.
>
> This is a proposal to introduce 5 new integer intrinsics:
> * absolute value
> * signed min
> * signed max
> * unsigned min
> * unsigned max
>
> This is motivated by the fact that we keep working around
> not having these intrinsics, and that constantly leads us into
> having more workarounds, and causes infinite combine loops.
>
> Here's a (likely incomplete!) list of motivational bugs:
>
> infinite loops:
> https://bugs.llvm.org/show_bug.cgi?id=46271 /
> https://reviews.llvm.org/D81698
> https://bugs.llvm.org/show_bug.cgi?id=45539 /
> https://reviews.llvm.org/rG01bcc3e93714
> https://bugs.llvm.org/show_bug.cgi?id=44835 /
> https://reviews.llvm.org/D74278
> https://reviews.llvm.org/D68408#1976760
> https://reviews.llvm.org/D59378
> https://bugs.llvm.org/show_bug.cgi?id=38915 /
> https://reviews.llvm.org/D51964
> https://bugs.llvm.org/show_bug.cgi?id=37526 /
> https://reviews.llvm.org/rL332855
>
> misc:
> https://bugs.llvm.org/show_bug.cgi?id=44025
> https://bugs.llvm.org/show_bug.cgi?id=43310 /
> https://reviews.llvm.org/rL372510
> https://bugs.llvm.org/show_bug.cgi?id=35607
> https://bugs.llvm.org/show_bug.cgi?id=35642 /
> https://reviews.llvm.org/D41136
> https://bugs.llvm.org/show_bug.cgi?id=41083 /
> https://reviews.llvm.org/D74285
> https://reviews.llvm.org/D70148
> https://bugs.llvm.org/show_bug.cgi?id=31751 /
> https://reviews.llvm.org/D26096 / https://reviews.llvm.org/rL293345
>
> I believe we can do better than that if we stop just treating some IR
> patterns
> as being canonical and desperately trying not to break/loose track of them,
> but instead do a sensible thing and actually make them first class
> citizens,
> by introducing intrinsics and use then throughout.
>
> This has been previously discussed in:
> https://lists.llvm.org/pipermail/llvm-dev/2016-November/106868.html
>
> Proposed LangRef semantics: https://reviews.llvm.org/D81829
> Proposed alive2 implementation:
> https://github.com/AliveToolkit/alive2/pull/353
>

I'm also strongly in favor of this proposal.

Next to the issues already mentioned, this also fixes issues related to
undef handling. For example, umax(%x, C) is not actually guaranteed to be
>= C. That's because the current umax representation has two uses of %x,
which may take on independent values if %x is undef. This makes a number of
"common sense" folds invalid. Having dedicated min/max intrinsics avoids
that problem.

Regards,
Nikita
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200615/3e4d827c/attachment.html>


More information about the llvm-dev mailing list