------- 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