On Fri, Feb 8, 2013 at 7:20 PM, Richard Biener <richard.guent...@gmail.com> wrote: > On Fri, Feb 8, 2013 at 2:40 AM, Matt Davis <mattdav...@gmail.com> wrote: >> I have a GIMPLE_CALL statement and I want to mark the left-hand-side >> value as being addressable (mark_addressable()). I am trying to force >> the result to be stored on the stack, and not in a register. I know >> the return of a call on an 64bit x86 is passed back to the caller in >> the rax register. I want the return value to be immediately moved >> onto the stack from rax after the caller resumes execution. When I do >> mark the LHS of the call as being addressable, the ssa-expansion >> fails, as the updated node is not in the var_partition when >> get_rtx_for_ssa_name() is called. How can I tease the return of a >> caller to be stored on the stack, in a temporary variable, instead of >> lying around in a register, or being passed to other free registers? > > It depends on where you are doing that transform. If during GIMPLE > optimization then the only good way is to use a new volatile local decl. > You can create that with create_tmp_var_raw () and set > TREE_THIS_VOLATILE on it. > > Richard. > >> -Matt
Thanks Richard! -Matt