[llvm] r308847 - [SCEV] Limit max size of AddRecExpr during evolving
Maxim Kazantsev via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 9 21:05:19 PDT 2017
I think yes, it should.
-- Max
-----Original Message-----
From: Sanjoy Das [mailto:sanjoy at playingwithpointers.com]
Sent: Thursday, August 10, 2017 6:50 AM
To: Hans Wennborg <hans at chromium.org>
Cc: Maxim Kazantsev <max.kazantsev at azul.com>; llvm-commits <llvm-commits at lists.llvm.org>
Subject: Re: [llvm] r308847 - [SCEV] Limit max size of AddRecExpr during evolving
On Wed, Aug 9, 2017 at 4:48 PM, Hans Wennborg <hans at chromium.org> wrote:
> Ping?
>
> On Wed, Jul 26, 2017 at 9:57 AM, Hans Wennborg <hans at chromium.org> wrote:
>> Should this be merged to 5.0?
SGTM. Max?
>>
>> On Sun, Jul 23, 2017 at 8:40 AM, Max Kazantsev via llvm-commits
>> <llvm-commits at lists.llvm.org> wrote:
>>> Author: mkazantsev
>>> Date: Sun Jul 23 08:40:19 2017
>>> New Revision: 308847
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=308847&view=rev
>>> Log:
>>> [SCEV] Limit max size of AddRecExpr during evolving
>>>
>>> When SCEV calculates product of two SCEVAddRecs from the same loop,
>>> it tries to combine them into one big AddRecExpr. If the sizes of
>>> the initial SCEVs were `S1` and `S2`, the size of their product is
>>> `S1 + S2 - 1`, and every operand of the resulting SCEV is combined
>>> from operands of initial SCEV and has much higher complexity than they have.
>>>
>>> As result, if we try to calculate something like:
>>> %x1 = {a,+,b}
>>> %x2 = mul i32 %x1, %x1
>>> %x3 = mul i32 %x2, %x1
>>> %x4 = mul i32 %x3, %x2
>>> ...
>>> The size of such SCEVs grows as `2^N`, and the arguments become more
>>> and more complex as we go forth. This leads to long compilation and
>>> huge memory consumption.
>>>
>>> This patch sets a limit after which we don't try to combine two
>>> `SCEVAddRecExpr`s into one. By default, max allowed size of the
>>> resulting AddRecExpr is set to 16.
>>>
>>> Differential Revision: https://reviews.llvm.org/D35664
>>>
>>> Added:
>>> llvm/trunk/test/Analysis/ScalarEvolution/max-addrec-size.ll
>>> Modified:
>>> llvm/trunk/lib/Analysis/ScalarEvolution.cpp
More information about the llvm-commits
mailing list