{"push_id":740276096,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"7d4d116067f9569c2969a4a3e22f7bb4bde4b7e5","before":"c3f2d5b69084cccc66415e95ac1e9a7dcf3142b9","commits":[{"sha":"7d4d116067f9569c2969a4a3e22f7bb4bde4b7e5","author":{"email":"56049f4b163f7f84e75f836729f274dcad040b86@google.com","name":"Jingyue Wu"},"message":"[SCEV] Apply NSW and NUW flags via poison value analysis\n\nSummary:\nMake 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.\n\nThere 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.\n\nThis change makes LSR able to create induction variables for expressions like &ptr[i + offset] for loops like this:\n\n  for (int i = 0; i < limit; ++i) {\n    sum += ptr[i + offset];\n  }\n\nHere 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.\n\n\nThere are more details in this discussion on llvmdev.\nJune: http://lists.cs.uiuc.edu/pipermail/llvmdev/2015-June/thread.html#87234\nJuly: http://lists.cs.uiuc.edu/pipermail/llvmdev/2015-July/thread.html#87392\n\nPatch by Bjarke Roune\n\nReviewers: eliben, atrick, sanjoy\n\nSubscribers: majnemer, hfinkel, jingyue, meheff, llvm-commits\n\nDifferential Revision: http://reviews.llvm.org/D11212\n\ngit-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243460 91177308-0d34-0410-b5e6-96231b3b80d8","distinct":true,"url":"https://api.github.com/repos/llvm-mirror/llvm/commits/7d4d116067f9569c2969a4a3e22f7bb4bde4b7e5"}]}