(call_insn 84 66 141 (call_placeholder 77 67 0 0 (call_insn 83 82 0 (parallel [
call_placeholder is a special kind of RTL. It contains 3 instruction sequences for the 3 different possible kinds of calls: a normal call, a tail call, and a sibling call. These aren't printed in the dumps, but you can print them inside the debugger. See the docs for call_placeholder (look at rtl.def in particular).
The missing instructions you are looking for are all inside the call_placeholder.
This stuff is already gone in gcc-4.0, so we no longer have this problem.
Am I wrong in assuming that the two digits in the names of the RTL dump files indicate the sequence of the RTL passes?
You are not wrong.
Any tips on debugging this codegen issue would be appreciated.
Try putting breakpoints in make_insn_raw, conditional on the instruction numbers for the insns that load the arguments, then go up the call stack to see how the values were computed.
Try looking at the decls for the local variables to see what address they were allocated to.
Make sure decls are being properly marked as used. -funit-at-a-time is much better at optimizing away that appears to be unused.
--
Jim Wilson, GNU Tools Support, http://www.SpecifixInc.com