public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Sebastian Huber <sebastian.huber@embedded-brains.de>
To: Segher Boessenkool <segher@kernel.crashing.org>
Cc: GCC Development <gcc@gcc.gnu.org>
Subject: Re: How to configure a bi-arch PowerPC GCC?
Date: Thu, 20 Jul 2017 22:40:00 -0000	[thread overview]
Message-ID: <1b060957-eb13-0018-4f18-604914d863a7@embedded-brains.de> (raw)
In-Reply-To: <588F179B.70402@embedded-brains.de>



On 30/01/17 11:38, Sebastian Huber wrote:
> On 25/01/17 18:55, Segher Boessenkool wrote:
>> On Wed, Jan 25, 2017 at 01:11:49PM +0100, Sebastian Huber wrote:
>>> >I still get a lot of ICEs with the attached two patches (examples):
>>> >/home/EB/sebastian_h/archive/gcc-git/libgcc/libgcc2.c: In function
>>> >'__multc3':
>>> >/home/EB/sebastian_h/archive/gcc-git/libgcc/libgcc2.c:2035:1: error:
>>> >unrecognizable insn:
>>> >  }
>>> >  ^
>>> >(insn 59 58 60 2 (set (reg:CCFP 219)
>>> >         (compare:CCFP (reg/v:TF 193 [ x ])
>>> >             (reg/v:TF 193 [ x ])))
>>> >"/home/EB/sebastian_h/archive/gcc-git/libgcc/libgcc2.c":1990 -1
>>> >      (nil))
>>> >/home/EB/sebastian_h/archive/gcc-git/libgcc/libgcc2.c:2035:1: internal
>>> >compiler error: in extract_insn, at recog.c:2311
>> The IEEE128 code almost certainly has some bugs on non-Linux 
>> configurations.
>> You could try debugging it, or you could avoid it (for now) by e.g. 
>> making
>> long double the same as double.
>>
>
> If I set rs6000_long_double_type_size to 64, then I can build all 
> libgcc multilibs including the one for -m64 -mcpu=e6500. I am a bit 
> surprised that the GCC support for 64-bit PowerPC is so extremely 
> Linux-dependent. I guess that I have to figure out all the magic 
> configuration bits to get everything set up like it is on Linux.  It 
> would be nice if the working Linux configuration bits are the default.
>
> With rs6000_long_double_type_size == 128, then I get the attached ICEs.
>
> I would be glad to get some advice how I can debug them, since I have 
> no idea how the compiler works actually if it comes to code generation.
>

I gave it a new try after the SPE split up. I still have problems to 
build a bi-arch PowerPC compiler for RTEMS. I get an ICE with this test 
case:

typedef float TFtype __attribute__ ((mode (TF)));
void
f (TFtype b)
{
   if (b - b) {
     __asm__ volatile ("");
   }
}

xgcc -B/build/git-build/b-gcc-git-powerpc-rtems4.12/./gcc/ -mcpu=e6500 
-m64 -O2 -fpreprocessed -S test-v0.i -o /dev/null 2>&1
test-v0.i: In function 'f':
test-v0.i:8:1: error: unrecognizable insn:
  }
  ^
(insn 12 11 13 2 (set (reg:CCFP 126)
         (compare:CCFP (reg:TF 123)
             (reg:TF 124))) "test-v0.i":5 -1
      (nil))
during RTL pass: vregs
test-v0.i:8:1: internal compiler error: in extract_insn, at recog.c:2311
0x40a233 _fatal_insn(char const*, rtx_def const*, char const*, int, char 
const*)
         /home/EB/sebastian_h/archive/gcc-git/gcc/rtl-error.c:108
0x40a252 _fatal_insn_not_found(rtx_def const*, char const*, int, char 
const*)
         /home/EB/sebastian_h/archive/gcc-git/gcc/rtl-error.c:116
0x965abf extract_insn(rtx_insn*)
         /home/EB/sebastian_h/archive/gcc-git/gcc/recog.c:2311
0x71dd73 instantiate_virtual_regs_in_insn
         /home/EB/sebastian_h/archive/gcc-git/gcc/function.c:1589
0x71dd73 instantiate_virtual_regs
         /home/EB/sebastian_h/archive/gcc-git/gcc/function.c:1957
0x71dd73 execute
         /home/EB/sebastian_h/archive/gcc-git/gcc/function.c:2006
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

I built a native GCC on gcc112. It produces:

./install-gcc-git/bin/gcc -S -O2 -mcpu=e6500 -m64 -o - test.c
         .file   "test.c"
         .abiversion 2
         .globl __gcc_qsub
         .section        ".text"
         .align 2
         .p2align 4,,15
         .globl f
         .type   f, @function
f:
.LCF0:
0:      addis 2,12,.TOC.-.LCF0@ha
         addi 2,2,.TOC.-.LCF0@l
         .localentry     f,.-f
         fmr 4,2
         mflr 0
         fmr 3,1
         std 0,16(1)
         stdu 1,-32(1)
         bl __gcc_qsub
         nop
         addis 9,2,.LC0@toc@ha
         addi 9,9,.LC0@toc@l
         lfd 12,0(9)
         lfd 13,8(9)
         fcmpu 7,1,12
         bne 7,$+8
         fcmpu 7,2,13
         beq- 7,.L1
.L1:
         addi 1,1,32
         ld 0,16(1)
         mtlr 0
         blr
         .long 0
         .byte 0,0,0,1,128,0,0,0
         .size   f,.-f
         .section        .rodata.cst16,"aM",@progbits,16
         .align 4
.LC0:
         .long   0
         .long   0
         .long   0
         .long   0
         .ident  "GCC: (GNU) 8.0.0 20170720 (experimental) [master 
revision f37822f:0bf6d30:61658d61fdbd0e76bb1b7ea20c3bb8dc334568cd]"
         .gnu_attribute 4, 5
         .section        .note.GNU-stack,"",@progbits

So, I looked for " __gcc_qsub" in the GCC sources. It seems this is 
generated by rs6000_init_libfuncs() for some "sub_optab" stuff. If I run 
my bi-arch GCC in GDB, then I get:

Breakpoint 1, rs6000_init_libfuncs () at 
/home/EB/sebastian_h/archive/gcc-git/gcc/config/rs6000/rs6000.c:18670
18670     if (TARGET_FLOAT128_TYPE)
(gdb) n
18677     if (TARGET_LONG_DOUBLE_128)
(gdb)
18684           init_float128_ieee (TFmode);
(gdb) s
init_float128_ieee (mode=TFmode) at 
/home/EB/sebastian_h/archive/gcc-git/gcc/config/rs6000/rs6000.c:18581
18581     if (FLOAT128_VECTOR_P (mode))
(gdb) n
18580   {
(gdb)
18581     if (FLOAT128_VECTOR_P (mode))
(gdb)
18640         set_optab_libfunc (add_optab, mode, "_q_add");
(gdb)
18641         set_optab_libfunc (sub_optab, mode, "_q_sub");

Ok, so why do I get a "error: unrecognizable insn:"? How can I debug a 
message like this:

(insn 12 11 13 2 (set (reg:CCFP 126)
         (compare:CCFP (reg:TF 123)
             (reg:TF 124))) "test-v0.i":5 -1
      (nil))

I don't know how I can figure out the corresponding GCC sources that are 
involved here.

-- 
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.huber@embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.

  parent reply	other threads:[~2017-07-20 12:47 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-19 12:41 Sebastian Huber
2017-01-20  1:04 ` Segher Boessenkool
2017-01-20  7:35   ` Sebastian Huber
2017-01-21  0:46     ` Segher Boessenkool
2017-01-23  8:19       ` Sebastian Huber
2017-01-23 17:18         ` Segher Boessenkool
2017-01-25 12:14           ` Sebastian Huber
     [not found]           ` <58889605.4060501@embedded-brains.de>
2017-01-25 17:55             ` Segher Boessenkool
2017-01-30 10:38               ` Sebastian Huber
2017-01-30 12:13                 ` Sebastian Huber
2017-01-31  5:57                   ` Segher Boessenkool
2017-01-31  8:16                 ` Segher Boessenkool
2017-07-20 22:40                 ` Sebastian Huber [this message]
2017-07-23 13:16                   ` Segher Boessenkool
2017-09-13 13:11                   ` Andreas Schwab
2017-09-14 11:50                     ` Sebastian Huber

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1b060957-eb13-0018-4f18-604914d863a7@embedded-brains.de \
    --to=sebastian.huber@embedded-brains.de \
    --cc=gcc@gcc.gnu.org \
    --cc=segher@kernel.crashing.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).