On Fri, Dec 19, 2014 at 11:28 AM, Jiong Wang <wong.kwongyuan.to...@gmail.com> wrote: > 2014-12-19 3:51 GMT+00:00 Bin.Cheng <amker.ch...@gmail.com>: >> On Fri, Dec 19, 2014 at 6:09 AM, Segher Boessenkool >> <seg...@kernel.crashing.org> wrote: >>> On Thu, Dec 18, 2014 at 05:00:01PM +0000, Jiong Wang wrote: >>>> On 17/12/14 15:54, Richard Biener wrote: >>>> >ick. I realize we don't have SSA form on RTL but doesn't DF provide >>>> >at least some help in looking up definition statements for pseudos? >>>> >In fact we want to restrict the transform to single-use pseudos, thus >>>> >hopefully it can at least tell us that... (maybe not and this is what >>>> >LOG_LINKS are for in combine...?) At least loop-invariant alreadly >>>> >computes df_chain with DF_UD_CHAIN which seems exactly what >>>> >is needed (apart from maybe getting at single-use info). >>>> >>>> thanks very much for these inspiring questions. >>>> >>>> yes, we want to restrict the transformation on single-use pseudo only, >>>> and it's better the transformation could re-use existed info and helper >>>> function to avoid increase compile time. but I haven't found anything I >>>> can reuse at the stage the transformation happen. >>>> >>>> the info similar as LOG_LINKS is what I want, but maybe simpler. I'd study >>>> the code about build LOG_LINKS, and try to see if we can do some factor >>>> out. >>> >>> LOG_LINKs in combine are just historical. combine should be converted >>> to use DF fully.
As noted loop-invariant already computes DF use-def chains. The question is whether it does compute single-use info when doing that (should be trivially possible). Kenny? >>> LOG_LINKs have nothing to do with single use; they point from the _first_ >>> use to its corresponding def. >>> >>> You might want to look at what fwprop does instead. >> Pass rtl fwprop uses df information in single-definition way, it >> doesn't really take into consideration if register is a single use. >> This often corrupts other optimizations like post-increment and >> load/store pair. For example: >> >> add r2, r1, r0 >> ldr rx, [r2] >> add r2, r2, #4 >> is transformed into below form: >> add r2, r1, r0 >> ldr rx, [r1, r0] >> add r2, r2, #4 >> >> As a result, post-increment opportunity is corrupted, also definition >> of r2 can't be deleted because it's not single use. >> >> Thanks, >> bin > > thanks for all these suggestion. > > Have look at the LOG_LINK build function, a simple reverse scan, while > needs to allocate big map array for all pseudo regs. Haven't looked at > similar code in fwprop, > > actually, when found the first matched insn pattern, I just want to > scan several insns next, then abort quickly if nothing meet > requirement. there is no need to build full single-use information. > > still can anyone confirm that it is safe to re-use REG_DEAD info there > without calling df_note_add_problem and df_analysis first? or I am > using those info passed down from the previous pass which calculated > these info and maybe broken? It's not safe to use REG_DEAD info without re-computing it. Richard.