Hi, Micheal, Thanks for explaining the design principle of debug info with gimple, now I can understand your concerns. And thanks for providing the patch.
However, in some places after gimplification (e.g. tree-inline.c), we still updates the block/location info. And EXPR_LOCATION is still used widely after gimplification. Do you mean that in the long run, we'd want to remove all these? Thanks, Dehao On Mon, Oct 29, 2012 at 9:49 AM, Dehao Chen <de...@google.com> wrote: > On Mon, Oct 29, 2012 at 9:10 AM, Richard Biener > <richard.guent...@gmail.com> wrote: >> On Mon, Oct 29, 2012 at 4:25 PM, Dehao Chen <de...@google.com> wrote: >>> On Mon, Oct 29, 2012 at 7:17 AM, Michael Matz <m...@suse.de> wrote: >>>> Hi, >>>> >>>> On Mon, 29 Oct 2012, Richard Biener wrote: >>>> >>>>> > Well, you merely moved the bogus code to gimple-low.c. It is bogus >>>>> > because you unconditionally overwrite TREE_BLOCK of all operands (and >>>>> > all >>> >>> Emm, then in gimple-low.c, we should probably not unconditionally >>> overwrite gimple_block for stmts too? >> >> gimple stmts have no block before gimple-low. >> >>>>> > operands operands) with the statements block. I assume the unit-test >>>>> > you >>>>> > added shows the problem you were trying to fix? >>>>> > >>>>> > From the scan-assembler-no directive I'm not really sure what exactly >>>>> > the >>>>> > problem is you're seeing. Can you try to describe it with words for the >>>>> > example code? Which operands has no tree-block where it should have >>>>> > one, >>>>> > or which one has the wrong tree-block? >>>>> >>>>> trees without block could be an issue when we extract them to some other >>>>> statement (then without block), and move that to some random place. >>>> >>>> Even then it would be either the frontends job to set the block, or the >>>> the job of the pass that introduced the new expression, when there is a >>>> clearly sane candidate for the block. >>> >>> Please correct me if I'm wrong: front-end does not set blocks for >>> either stmt/expr. lower_stmt is the first place that block is set for >>> stmt, thus I think it should also be the first place to set block for >>> expr. >> >> No, only the block on the gimple stmt matters for gimple. You should not >> need to touch the operands block. >> >>>> >>>>> But the only issue should be that the stmt/expressions effective block >>>>> becomes a different one (the currently "active" one during expansion). >>> >>> I agree. Initially, both stmt and expressions is set to NULL block. >>> Whenever we update the stmt's block, we should also update the >>> expression's block, otherwise they will be inconsistent. >> >> I don't think so. > > Hi, Richard, > > Can you share some insights why you don't think we want to make stmt > and expr's block consistent? > >> >>>> >>>> Yep. >>>> >>>>> I don't see how we could end up generating too many block location >>>>> DIEs because of this. >>> >>> For the unittest I added, all the assembly code guarded by "if" are >>> should be within one lexical block, which is lock: >>> >>> LBB1 >>> { >>> asm1 >>> asm2 >>> asm3 >>> asm4 >>> .... >>> } >>> >>> However, because some expression are with NULL lexical block, these >>> assembly codes are separated by several discontinual lexical block >>> which is like: >>> >>> LBB1 >>> { >>> asm1 >>> } >>> asm2 >> >> asm2 should have gone into the currently open scope (similiar for what >> we do for line number information). > > In location_block patch, we changed this not to fall into the > currently open scope, because we want every insn to have correct > location/block with it. This is one of the reasons why we introduced > the location_block patch: it makes it easy to update block for > stmt/expr/phi_arg thus keeping a consistent location/block pair for > all instructions becomes possible. > > Yes, let location/block fall into the currently open scope/location > was a workaround before, but if we are able to make the location/block > pair consistent all through compilation, we should do that, right? > > Thanks, > Dehao > >> >>> LBB2 >>> { >>> asm3 >>> } >>> asm4 >>> .... >>> >>>> >>>> And even if, I don't see what's the _problem_ with too many block >>>> locations, except bloat. >>> >>> Yes, bloat is the major problem. >>> >>> Thanks, >>> Dehao >>> >>>> >>>> >>>> Ciao, >>>> Michael.