[patch] Fix dangling references in thunks at -O0
Eric Botcazou
botcazou@adacore.com
Mon Sep 14 10:56:19 GMT 2020
> No, so you're right - validity analysis is split. Still the cause you
> reference comes from RTL expansion which means RTL expansion should
> possibly do the disqualification here. The question is what makes the case
> you run into at -O0 impossible to trigger with -O1+?
The key test in use_register_for_decl is:
if (optimize)
return true;
I think that all the preceding tests that return false cannot trigger in this
context - a parameter passed by invisible reference - so, by returning true
here, you're pretty much covered I think.
> Maybe we can also avoid this spilling at -O0?
The code wants to retrieve the parameter at all optimization levels. The
question is: register or stack slot? It uses use_register_for_decl to decide
as in other circumstances, but so you want to always force a register?
Note that, since cgraph_node::expand_thunk has expanded the thunk in GIMPLE,
the function is no longer a thunk for the middle-end (cfun->is_thunk false).
That being said, I can add another bit to cfun, e.g. is_gimple_thunk, and
force the use of a register above only in case the bit is true.
> Yeah, but the asm thunk tail-calls also at -O0. I guess tail-calling is
> forced here because gimple analysis sometimes would not mark the call.
The low-level assembly thunks simply support the most simple thunks, see the
condition in expand_thunk. Moreover targets can opt out as they wish.
--
Eric Botcazou
More information about the Gcc-patches
mailing list