On Nov 13, 2014, at 9:21 AM, Jeff Law <[email protected]> wrote:
> Presumably we can get the same kinds of problems with ports that don't emit
> prologues/epilogues as RTL?
I use prologue/epilogue to emit rtl in my port. I’d like this optimization to
kick on in my port, as we do explain everything in rtl.
I do what 59 other ports do:
(define_expand "epilogue"
[(clobber (const_int 0))]
""
"
aarch64_expand_epilogue (false);
DONE;
“
)
this causes HAVE_prologue and HAVE_epilogue to be set. We don’t want to just
nix the optimization if HAVE_epilogue or HAVE_prologue is set.
This problem is unique to FUNCTION_PROFILER, the interface for it is fprintf
(“call mount”). This is what causes the problem. If all those ports used
PROFILE_HOOK instead (ia64.c for example), then I don’t think this would be an
issue. fprintf bad. FUNCTION_PROFILER is only used when doing profiling.
We don’t support fprintf prologues anymore, they were removed years ago.
> I'm particularly concerned about cases where the prologue or epilogue might
> use a call-clobbered register as a scratch that isn't used anywhere else in
> the function.
>
> ISTM this test out to be expanded to test HAVE_prologue and HAVE_epilogue as
> well.
So, the solution to that is to look at the registers post prologue/epilogue
expansion. Then the rtl has all the bit in it.