http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51287
Bug #: 51287 Summary: [4.7 regression] 252.eon compfail with -march=atom Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target AssignedTo: unassig...@gcc.gnu.org ReportedBy: izamya...@gmail.com Compilation string g++ -c -o ggSolidNoise2.o -DSPEC_CPU2000_LP64 -DHAS_ERRLIST -I. -DNDEBUG -O2 -ffast-math -march=atom ggSolidNoise2.cc After the fix commit 0a55d49743f9fb5b2981037ca7676b818d273073 Author: amodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Wed Nov 9 01:20:14 2011 +0000 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@181188 138bc75d-0d04-0410-961f-82ee72b054a4 I see following code in rtl dumps since 206r.csa (insn 36 10 37 3 (clobber (reg:DI 0 ax)) -1 (1) (nil)) (insn/f 37 36 31 3 (parallel [ (set (mem:DI (pre_dec:DI (reg/f:DI 7 sp)) [0 S8 A8]) (reg:DI 0 ax)) (clobber (mem:BLK (scratch) [0 A8])) ]) ./ggRanNum.cc:45 -1 (expr_list:REG_CFA_ADJUST_CFA (set (reg/f:DI 7 sp) (plus:DI (reg/f:DI 7 sp) (const_int -8 [0xfffffffffffffff8]))) (nil))) (note 31 37 11 3 NOTE_INSN_PROLOGUE_END) (insn 11 31 12 3 (set (reg:DI 4 si) (symbol_ref/f:DI ("*.LC5") [flags 0x2] <var_decl 0x7f5bc282ae60 *.LC5>)) ./ggRanNum.cc:47 62 {*movdi_internal_rex64} (nil)) (insn 12 11 13 3 (set (reg:DI 5 di) (symbol_ref:DI ("_ZSt4cerr") [flags 0x40] <var_decl 0x7f5bc2cb95a0 cerr>)) ./ggRanNum.cc:47 62 {*movdi_internal_rex64} (nil)) (call_insn 13 12 15 3 (set (reg:DI 0 ax) (call (mem:QI (symbol_ref:DI ("_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc") [flags 0x41] <function_decl 0x7f5bc2c9b400 operator<<>) [0 operator<< S1 A8]) (const_int 0 [0]))) ./ggRanNum.cc:47 636 {*call_value} (expr_list:REG_DEAD (reg:DI 5 di) (expr_list:REG_DEAD (reg:DI 4 si) (nil))) (expr_list:REG_FRAME_RELATED_EXPR (use (reg:DI 5 di)) (expr_list:REG_FRAME_RELATED_EXPR (use (reg:DI 4 si)) (nil)))) (insn 15 13 16 3 (set (reg:DI 5 di) (2) (reg/f:DI 0 ax [orig:59 D.23804 ] [59])) lib/gcc/x86_64-unknown-linux-gnu/4.7.0/../../../../include/c++/4.7.0/ostream:115 62 {*movdi_internal_rex64} (expr_list:REG_DEAD (reg/f:DI 0 ax [orig:59 D.23804 ] [59]) (nil))) Fail is in i386.c, routine distance_non_agu_define_in_bb (when looking at (2)). get_attr_type call for (1) raises assert since such instruction cannot be recognized. Fix seems to be obvious but couple of questions left: Is rtx (1) legal and if yes what exactly does it mean? Is it correct statement that caller of get_attr_type is always responsible for checking that passing instruction is recognizable? Compiler: Target: x86_64-unknown-linux-gnu Configured with: ../configure --disable-bootstrap --enable-languages=c,c++ --prefix=....