[llvm-dev] llvm.assume after CodeGenPrepare

Philip Reames via llvm-dev llvm-dev at lists.llvm.org
Tue May 25 08:41:55 PDT 2021


I think there's two interacting pieces here:

  * I don't believe we have a way to represent an assume at the MI
    layer.  If we let them flow through codegen, we'd need to add such a
    thing.
  * The tradeoffs between information preservation and lowering may be
    different at different points in the pipeline.  Johannes frames this
    as a canonicalization problem.  That sounds reasonable, but it's
    also reasonable that we may need to give up on preserving assumes at
    some point.  (As a silly example, we probably don't want them at
    MC.)  Where exactly that point is unclear, and is mostly a matter of
    practical engineering tradeoffs.

If you felt like exploring alternate lowering points, that would seem 
entirely reasonable.  It might not work out, or it might require a bunch 
of work to make happen, but the basic idea seems entirely worth exploring.

Philip

On 5/25/21 3:11 AM, Markus Lavin via llvm-dev wrote:
>
> With recent changes in BasicAA (mostly by Nikita Popov I believe) 
> llvm.assumes can now guide in the AA decision making. Which is of 
> course great.
>
> For example for C input (or IR equivalent) as follows it can make a 
> huge difference if the variable ‘x’ is known to be non-zero when AA is 
> queried during scheduling
>
> __builtin_assume(x != 0);
>
> for (int i = 0; i < 64; i += 4) {
>
>   v[(i + 0) * x] = v[(i + 0) * x] >> 2;
>
>   v[(i + 1) * x] = v[(i + 1) * x] >> 2;
>
>   v[(i + 2) * x] = v[(i + 2) * x] >> 2;
>
> v[(i + 3) * x] = v[(i + 3) * x] >> 2;
>
> }
>
> Unfortunately it appears that the CodeGenPrepare pass removes 
> llvm.assume so that they never reach the code generator. Currently 
> commit 91c9dee3fb6d89ab3 (and before that commit 6d20937c29a1a1d67) 
> eliminate assumptions in CodeGenPrepare for reasons that appear to be 
> optimization (avoiding blocks that would be empty if it was not for 
> the llvm.assume and its predecessors).
>
> It seems these two efforts are quite contradictory. Is there any 
> deeper thinking behind this? I for one would be in favor of not 
> eliminating assumes.
>
> -Markus
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210525/dc241bb1/attachment.html>


More information about the llvm-dev mailing list