This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

ICE in flow.c - Gcc 4.1.2 private port


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]