memory addressed by memory, error

Florent DEFAY spira.inhabitant@gmail.com
Tue Apr 21 07:03:00 GMT 2009


Hi,

I am working on a new port for a 16 bit target.

In some tests from gcc.c-torture, there are internal errors due to
unrecognizable insn.
More precisely, it is about moving an operand which is memory
addressed by memory (impossible on the target).
_________________________________gcc/testsuite/gcc/gcc.log___(cuts)_______________________________
Executing on host: /home/guest1/gcc/build_target/gcc/xgcc
-B/home/guest1/gcc/build_target/gcc/   -O3 -fomit-frame-pointer
-funroll-loops  -w -fno-show-column -c  -o pr34458.o
/home/guest1/gcc/gcc-4.3.3/gcc/testsuite/gcc.c-torture/compile/pr34458.c
   (timeout = 300)
/home/guest1/gcc/gcc-4.3.3/gcc/testsuite/gcc.c-torture/compile/pr34458.c:
In function 'lint_operate':
/home/guest1/gcc/gcc-4.3.3/gcc/testsuite/gcc.c-torture/compile/pr34458.c:16:
error: unrecognizable insn:
(insn 467 277 278 6
/home/guest1/gcc/gcc-4.3.3/gcc/testsuite/gcc.c-torture/compile/pr34458.c:13
(set (reg:HI 0 r0 [101])
        (mem/s/c:HI (mem/c:HI (plus:HI (reg/f:HI 5 r5)
                    (const_int -2056 [0xfffff7f8])) [10 S2 A16]) [4
a.data S2 A16])) -1 (nil))
/home/guest1/gcc/gcc-4.3.3/gcc/testsuite/gcc.c-torture/compile/pr34458.c:16:
internal compiler error: in extract_insn, at recog.c:1990
____________________________________________________________________________________________

I faced this kind of problem earlier and I solved them by reviewing
GO_IF_LEGITIMATE_ADDRESS. Now I know
this part is rightly implemented. For the error above, I have the
proof that GO_IF_LEGITIMATE_ADDRESS rejects
the address (mem/c:HI (plus:HI (reg/f:HI 5 r5) (const_int -2056
[0xfffff7f8])) [10 S2 A16]), which is alright.

I tried to dump all and to look after the insn 467:

$ target-gcc -S pr34458.c -O3 -funroll-loops -da
pr34458.c: In function ‘lint_operate’:
pr34458.c:16: error: unrecognizable insn:
(insn 467 277 278 6 pr34458.c:13 (set (reg:HI 0 r0 [101])
        (mem/s/c:HI (mem/c:HI (plus:HI (reg/f:HI 5 r5)
                    (const_int -2056 [0xfffff7f8])) [10 S2 A16]) [4
a.data S2 A16])) -1 (nil))
pr34458.c:16: internal compiler error: in extract_insn, at recog.c:1990
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
$ grep 467 pr34458.c.*
$

So insn 467 appears in none dump file.
I looked at 277 and 278 in dump files but it did not help at finding
out the cause of this error.

The last dump file where 277 and 278 appear is pr34458.c.205r.shorten:
_______________________________pr34458.c.205r.shorten___(cuts)__________________
(insn 277 4 278 pr34458.c:9 (set (mem:HI (plus:HI (reg/f:HI 6 sp)
                (const_int -2 [0xfffffffe])) [0 S2 A16])
        (reg/f:HI 5 r5)) -1 (nil))

(insn 278 277 279 pr34458.c:9 (set (reg/f:HI 5 r5)
        (reg/f:HI 6 sp)) -1 (nil))
___________________________________________________________________________

Have you any idea about the cause of such an error?
Thank you.

Regards.

Florent



More information about the Gcc-help mailing list