http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57615
Bug ID: 57615 Summary: power8 support does not deal with -mquad-memory -mno-vsx Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: meissner at gcc dot gnu.org Created attachment 30302 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=30302&action=edit Function to show the problem. If you compile the Advance Toolchain dl-lookup.c with the following options: -m64 dl-lookup.c -c -std=gnu99 -fgnu89-inline -O3 -Wall -Winline -Wwrite-strings -fmerge-all-constants -frounding-math -g -mcpu=power8 -mlong-double-128 -finline-limit=2000 -Wstrict-prototypes -mlong-double-128 -fpic -fexceptions -fasynchronous-unwind-tables -ffixed-32 -ffixed-33 -ffixed-34 -ffixed-35 -ffixed-36 -ffixed-37 -ffixed-38 -ffixed-39 -ffixed-40 -ffixed-41 -ffixed-42 -ffixed-43 -ffixed-44 -ffixed-45 -ffixed-46 -ffixed-47 -ffixed-48 -ffixed-49 -ffixed-50 -ffixed-51 -ffixed-52 -ffixed-53 -ffixed-54 -ffixed-55 -ffixed-56 -ffixed-57 -ffixed-58 -ffixed-59 -ffixed-60 -ffixed-61 -ffixed-62 -ffixed-63 -ffixed-v0 -ffixed-v1 -ffixed-v10 -ffixed-v11 -ffixed-v12 -ffixed-v13 -ffixed-v14 -ffixed-v15 -ffixed-v16 -ffixed-v17 -ffixed-v18 -ffixed-v19 -ffixed-v2 -ffixed-v20 -ffixed-v21 -ffixed-v22 -ffixed-v23 -ffixed-v24 -ffixed-v25 -ffixed-v26 -ffixed-v27 -ffixed-v28 -ffixed-v29 -ffixed-v3 -ffixed-v30 -ffixed-v31 -ffixed-v4 -ffixed-v5 -ffixed-v6 -ffixed-v7 -ffixed-v8 -ffixed-v9 -ffixed-vrsave -ffixed-vscr -mno-altivec -mno-vsx It fails with the message: dl-lookup.c: In function ‘_dl_lookup_symbol_x’: dl-lookup.c:854:1: error: could not split insn (insn:TI 1693 4115 1696 (set (reg:TI 10 10 [orig:838 val2 ] [838]) (mem/c:TI (reg/f:DI 18 18 [889]) [19 val2+0 S16 A128])) dl-lookup.c:976 454 {*movti_ppc64} (expr_list:REG_DEAD (reg/f:DI 18 18 [889]) (expr_list:REG_EQUIV (mem/c:TI (reg/f:DI 22 22 [874]) [19 val+0 S16 A128]) (nil)))) dl-lookup.c:854:1: internal compiler error: in final_scan_insn, at final.c:2887 This is due to the fact that I did not think about somebody having quad memory enabled but not VSX instructions. The non-VSX movti 64-bit insn always does a "#" to split the insn, but the split function will not split it since it could be handled by a "lq" instruction. The fix is to use the function rs6000_output_move_128bit to properly generate lq/stq if it is safe to do so.