- | LastReturn Int -- Return from a function; values in previous copy middles
- | LastJump CmmExpr Int -- Tail call to another procedure; args in a copy middles
- | LastCall { -- A call (native or safe foreign); args in copy middles
- cml_target :: CmmExpr, -- never a CmmPrim to a CallishMachOp!
- cml_cont :: Maybe BlockId,-- BlockId of continuation, if call returns
- cml_args :: Int } -- liveness info for outgoing args
- -- All the last nodes that pass arguments carry the size of the outgoing CallArea
+ | LastCall { -- A call (native or safe foreign)
+ cml_target :: CmmExpr, -- never a CmmPrim to a CallishMachOp!
+ cml_cont :: Maybe BlockId,
+ -- BlockId of continuation (Nothing for return or tail call)
+ cml_args :: ByteOff, -- bytes offset for youngest outgoing arg
+ cml_ret_off :: Maybe UpdFrameOffset}
+ -- stack offset for return (update frames);
+ -- The return offset should be Nothing only if we have to create
+ -- a new call, e.g. for a procpoint, in which case it's an invariant
+ -- that the call does not stand for a return or a tail call,
+ -- and the successor does not need an info table.