On Fri, Nov 22, 2013 at 6:11 AM, Zdenek Dvorak <rakd...@iuuk.mff.cuni.cz> wrote: > Hi, > >> >> > If a pointer typed use is plainly value passed to a func call, it is >> >> > not an address use, right? But as you said, x86 lea may help here. >> >> >> >> But that's what you are matching ... (well, for builtins you know >> >> will expand that to a memory reference). >> >> >> >> What I dislike in the patch is the special-casing of some builtins >> >> via a target hook. I'd rather say treat all internal functions and >> >> all target builtins that way. Or simply all addresses. >> > >> > unless the architecture has lea-type instruction to compute the address, >> > computing say b+4*i incurs some cost, while if mem[b+4*i] is accessed, the >> > computation is for free. Thus, it does not make sense to treat the address >> > computations the same way as memory references (or to treat all functions >> > the same way as builtins which translate to memory references), >> >> I understand that, but I think the patch tries to improve code generation >> not by changing the set of IVs used (thus adjust cost considerations) >> but by changing the way it rewrites certain address uses. > > actually, the costs are adjusted in the patch -- the address calculations > for the handled builtins are recorded as USE_ADDRESS (not as > USE_NONLINEAR_EXPR), > so that their costs are calculated in the same way as for memory references, > > Zdenek
Sorry for not making it clear. Yes, the costs are adjusted in the patch. Although I changed the expr to addr_expr(mem(expr)) pattern, the intention was only to avoid changing find_interesting_uses_address and rewrite_use_address, which Zdenek and Bin.Cheng thought was not good. I am changing this part. Thanks, Wei.