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

Roman Lebedev via llvm-dev llvm-dev at lists.llvm.org
Mon Jun 15 01:43:35 PDT 2020


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

Roman.


More information about the llvm-dev mailing list