[PATCH] D11212: [SCEV] Apply NSW and NUW flags via poison value analysis

Bjarke Hammersholt Roune broune at google.com
Tue Jul 14 22:22:55 PDT 2015


broune created this revision.
broune added reviewers: eliben, atrick, sanjoy.
broune added subscribers: llvm-commits, meheff, jingyue.

Make Scalar Evolution able to propagate NSW and NUW flags from instructions to SCEVs in some cases. This is based on reasoning about when poison from instructions with these flags would trigger undefined behavior. This gives a 13% speed-up on some Eigen3-based Google-internal microbenchmarks for NVPTX.

There does not seem to be clear agreement about when poison should be considered to propagate through instructions. In this analysis, poison propagates only in cases where that should be uncontroversial.

This change makes LSR able to create induction variables for expressions like &ptr[i + offset] for loops like this:

  for (int i = 0; i < limit; ++i) {
    sum += ptr[i + offset];
  }

Here ptr is a 64 bit pointer and offset is a 32 bit integer. For NVPTX, LSR currently creates an induction variable for i + offset instead, which is not as fast. Improving this situation is what brings the 13% speed-up on some Eigen3-based Google-internal microbenchmarks for NVPTX.


There are more details in this discussion on llvmdev.
June: http://lists.cs.uiuc.edu/pipermail/llvmdev/2015-June/thread.html#87234
July: http://lists.cs.uiuc.edu/pipermail/llvmdev/2015-July/thread.html#87392

http://reviews.llvm.org/D11212

Files:
  include/llvm/Analysis/ScalarEvolution.h
  lib/Analysis/ScalarEvolution.cpp
  test/Analysis/Delinearization/multidim_ivs_and_integer_offsets_3d.ll
  test/Analysis/Delinearization/multidim_ivs_and_parameteric_offsets_3d.ll
  test/Analysis/ScalarEvolution/flags-from-poison.ll
  test/Transforms/LoopStrengthReduce/sext-ind-var.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D11212.29752.patch
Type: text/x-patch
Size: 28358 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150715/f40b5d3e/attachment.bin>


More information about the llvm-commits mailing list