------- Comment #11 from edmar at freescale dot com  2006-07-13 18:01 -------
I tested with both examples. Both fails with the same ICE.

I am sure I am using the right compiler, because I invoked it explictitly with:
./install_area/gcc-trunk-20060712-e500v2/bin/powerpc-unknown-linux-gnuspe-gcc
which is my latest built.

I am sure I patched the compiler because I have a log file that reads:
Building gcc-trunk with patches patche500v2 for core e500v2
   ... applying patch
/proj/ppc/sysperf/sw/gnu_toolchain/patche500v2/gcc-trunk-asmfix
   ... applying patch
/proj/ppc/sysperf/sw/gnu_toolchain/patche500v2/gcc-trunk-double_constants
   ... building binutils
   ... building powerpc-unknown-linux-gnuspe with --enable-e500_double

The patch succeed because another log file reads:
> cat gcc-trunk-20060712-e500v2.00.patches
patching file gcc/config/rs6000/rs6000.c
Hunk #1 succeeded at 10787 (offset 37 lines).
patching file gcc/config/rs6000/spe.md


The file
/proj/ppc/sysperf/sw/gnu_toolchain/patche500v2/gcc-trunk-double_constants
has:
--- eliot/gcc/gcc/config/rs6000/spe.md  2006-07-10 13:17:10.000000000 -0500
+++ eliot/teak/gcc/gcc/config/rs6000/spe.md.new 2006-07-10 13:15:59.000000000
-0500
@@ -2211,11 +2211,13 @@
   [(set_attr "length" "8")])

 (define_insn "*frob_di_df_2"
-  [(set (subreg:DF (match_operand:DI 0 "register_operand" "=&r") 0)
+  [(set (subreg:DF (match_operand:DI 0 "register_operand" "=&r,r") 0)
-       (match_operand:DF 1 "register_operand" "r"))]
+       (match_operand:DF 1 "register_operand" "r,m"))]
   "TARGET_E500_DOUBLE"
-  "evmergehi %H0,%1,%1\;evmergelo %L0,%1,%1"
-  [(set_attr "length" "8")])
+  "@
+   evmergehi %H0,%1,%1\;evmergelo %L0,%1,%1
+   evldd%X1 %0,%y1"
+  [(set_attr "length" "8,4")])

 (define_insn "*mov_sidf_e500_subreg0"
   [(set (subreg:SI (match_operand:DF 0 "register_operand" "+r") 0)


Another piece of evidence comes from the obj directory the built was done:
file: /local/gnu_toolchain/build_area/obj_gcc-trunk_e500v2/gcc/insn-extract.c
contains:
    case 931:  /* *frob_di_df_2 */
      ro[0] = *(ro_loc[0] = &XEXP (XEXP (pat, 0), 0));
      ro[1] = *(ro_loc[1] = &XEXP (pat, 1));
      break;


And to kill the last shread of doubt, here I am using the xgcc present on the
very same build directoty:
/local/gnu_toolchain/build_area/obj_gcc-trunk_e500v2/gcc/xgcc -O2 -c foo.c
foo.c: In function 'f':
foo.c:1: error: unrecognizable insn:
(insn 11 10 12 3 (set (subreg:DF (reg:DI 121) 0)
        (mem/u/c/i:DF (reg/f:SI 122) [2 S8 A64])) -1 (nil)
    (nil))
foo.c:1: internal compiler error: in extract_insn, at recog.c:2077
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.

Did I miss anything ?


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27287

Reply via email to