> If you compile without optimization, then this is the same as the > prologue end. If you compile with optimization, then the function body > and the prologue overlap. Now the question is, do you really want to > mark the beginning of the function body (which may be before the > prologue end), or the end of the prologue (which may be after the > function body beginning). Either way, it is likely that someone may not > be happy. However, in general, the former (function body beginning) is > more useful to end users, as otherwise they won't be able to debug all > of the code in the function body. So the current code in final.c looks > correct.
Yes, the code in final.c is OK. However, there is a bug pertaining to the placement of the NOTE_INSN_FUNCTION_BEG note for parameterless functions. void foo(void) { int i = 0; } In .flow2 at -O0: (note 3 2 6 2 NOTE_INSN_FUNCTION_BEG) ;; Start of basic block 3, registers live: 6 [bp] 7 [sp] 16 [argp] 20 [frame] (note 6 3 19 3 [bb 3] NOTE_INSN_BASIC_BLOCK) (insn/f 19 6 20 3 (set (mem:DI (pre_dec:DI (reg/f:DI 7 sp)) [0 S8 A8]) (reg/f:DI 6 bp)) -1 (nil) (nil)) (insn/f 20 19 21 3 (set (reg/f:DI 6 bp) (reg/f:DI 7 sp)) -1 (nil) (nil)) (note 21 20 8 3 NOTE_INSN_PROLOGUE_END) void bar(int par) { int i = 0; } (insn/f 20 6 21 2 (set (mem:DI (pre_dec:DI (reg/f:DI 7 sp)) [0 S8 A8]) (reg/f:DI 6 bp)) -1 (nil) (nil)) (insn/f 21 20 22 2 (set (reg/f:DI 6 bp) (reg/f:DI 7 sp)) -1 (nil) (nil)) (note 22 21 3 2 NOTE_INSN_PROLOGUE_END) (insn 3 22 4 2 (set (mem/c/i:SI (plus:DI (reg/f:DI 6 bp) (const_int -20 [0xffffffffffffffec])) [0 par+0 S4 A32]) (reg:SI 5 di [ par ])) 40 {*movsi_1} (nil) (nil)) (note 4 3 9 2 NOTE_INSN_FUNCTION_BEG) function.c:thread_prologue_and_epilogue_insns has code to fix up the order of NOTE_INSN_FUNCTION_BEG and NOTE_INSN_FUNCTION_END notes for the epilogue, but not for the prologue. We've found out in the meantime that it was the root cause of Doug's problem and fixed it locally. > Othogonal to this, there is the problem of what to do with these notes > when instruction scheduling is enabled. > [...] > It isn't clear if this extra work is worthwhile. Yes, the interaction with scheduling is another, more difficult problem. And I don't think we really care about it for Doug's work. Thanks for your feedback. -- Eric Botcazou