Hi All, Our private backend has the macro defined as
#define FIRST_PARM_OFFSET(FNDECL) (get_frame_size() + STARTING_FRAME_OFFSET + RETURN_BYTES ) #define STARTING_FRAME_OFFSET 1 #define STACK_POINTER_REGNUM 10 #define FRAME_POINTER_REGNUM STACK_POINTER_REGNUM #define ARG_POINTER_REGNUM STACK_POINTER_REGNUM #define RETURN_BYTES 2 The pass i.e instantiate_virtual_regs set the in_arg_offset as in_arg_offset = FIRST_PARM_OFFSET (current_function_decl); the computed frame_size is X and in_arg_offset is X + 1 + 2 i.e X + 3. And calls the instantiate_virtual_regs_in_rtx function ,which emits the insns to access the incoming argumnets (that are passed with stack) via stack_pointer_rtx + in_arg_offset (stack grows downward). But in the reload pass the the alter_reg function (spill the reg to stack ) expand the stack frame and update the frame_size i.e X = X + allocated space. For each spill the frame_size is updated and at the end of the reload pass the frame_size=frame_size+ total_allocated_spilled _space; Our prologue code looks like void expand_prologue() { HOST_WIDE_INT frame_size = get_frame_size (); //here frame_size=frame_size+ total_allocated_spilled _space; rtx reg,insn ; if(frame_size > 0 ) { insn = emit_move_insn(stack_pointer_rtx,gen_rtx_MINUS(GET_MODE(stack_pointer_rtx),stack_pointer_rtx,(GEN_INT(frame_size)) )); RTX_FRAME_RELATED_P (insn) = 1; } } The problem is that the frame_size is not same ,when there is the spill code between instantiate_virtual_regs_in_rtx() and expand_prologue() ,hence incoming arg offset goes for a toss like sub sp ,10 // prologue where frame_size =10 ld R1,sp // accessing the first argument that is passed in the stack; add R1, 11 // the offset should be 13 i.e frame_size + 1 + 2; but it is 11 (stack_pointer_rtx + (in_arg_offset =11) where the frame_size is 8 for locals ) ld R2, [R1] ld[sp+9] ,R10 // spill code add sp,10 // epilogue In the above asm the incoming arguments fetch going for a toss ,Any idea what going wrong with the computation offset for incoming arguments here ?? Thank you ~Umesh