Hello all, For the target that i am porting if support for partial argument passing is enabled i get the following error: error: Attempt to delete prologue/epilogue insn: internal compiler error: in propagate_one_insn, at flow.c:1699
This is 16bit target with 4 argument registers. FRAME_POINTER_REQUIRED is defined to 0. The code that is being complied is : f(float a[],int b[],int c,float d) { } >>>>>> >From *.c.00.expand ;; Start of basic block 0, registers live: (nil) (note 15 2 6 0 [bb 0] NOTE_INSN_BASIC_BLOCK) (insn 6 15 7 0 (set (reg/v/f:HI 24 [ a ]) (reg:HI 0 R0 [ a ])) -1 (nil) (nil)) (insn 7 6 8 0 (set (reg/v/f:HI 25 [ b ]) (reg:HI 1 R1 [ b ])) -1 (nil) (nil)) (insn 8 7 9 0 (set (reg/v:HI 26 [ c ]) (reg:HI 2 R2 [ c ])) -1 (nil) (nil)) (insn 9 8 12 0 (set (mem/c/i:HI (reg/f:HI 18 virtual-incoming-args) [0 d+0 S2 A16]) (reg:HI 3 R3)) -1 (nil) (nil)) (insn 12 9 10 0 (clobber (reg/v:SF 27 [ d ])) -1 (nil) (nil)) (insn 10 12 11 0 (set (subreg:HI (reg/v:SF 27 [ d ]) 0) (mem/c/i:HI (reg/f:HI 18 virtual-incoming-args) [0 d+0 S2 A16])) -1 (nil) (nil)) (insn 11 10 13 0 (set (subreg:HI (reg/v:SF 27 [ d ]) 2) (mem/c/i:HI (plus:HI (reg/f:HI 18 virtual-incoming-args) (const_int 2 [0x2])) [0 d+2 S2 A16])) -1 (nil) (nil)) (note 13 11 14 0 NOTE_INSN_FUNCTION_BEG) >>>>> from *.c.37.lreg (note 2 0 15 NOTE_INSN_DELETED) ;; Start of basic block 0, registers live: 3 [R3] 12 [R12] (note 15 2 9 0 [bb 0] NOTE_INSN_BASIC_BLOCK) (insn 9 15 13 0 (set (mem/c/i:HI (reg/f:HI 12 R12) [0 d+0 S2 A16]) (reg:HI 3 R3)) 1 {movhi_internal} (nil) (nil)) (note 13 9 17 0 NOTE_INSN_FUNCTION_BEG) >>>>> from *.c.40.flow2 (note 15 2 31 0 [bb 0] NOTE_INSN_BASIC_BLOCK) (insn/f 31 15 32 0 (set (reg/f:HI 12 R12) (minus:HI (reg/f:HI 12 R12) (const_int 2 [0x2]))) -1 (nil) (nil)) (insn/f 32 31 33 0 (set (mem:HI (reg/f:HI 12 R12) [0 S2 A16]) (reg:HI 3 R3)) -1 (nil) (nil)) (note 33 32 9 0 NOTE_INSN_PROLOGUE_END) (insn 9 33 13 0 (set (mem/c/i:HI (reg/f:HI 12 R12) [0 d+0 S2 A16]) (reg:HI 3 R3)) 1 {movhi_internal} (nil) (nil)) (note 13 9 17 0 NOTE_INSN_FUNCTION_BEG) >>>>> When argument is passed partially then 'current_function_pretend_args_size' is initialized and prologue will set stack space accordingly. Based on the live information 'propagate_one_insn()' is trying to delete the insn from the prologue. My question is is gcc suppose to delete insn 9, even before prologue generation ? If its not the case where am i going wrong? Regards, Shafi