------- Comment #3 from hjl dot tools at gmail dot com 2008-05-13 13:58 ------- This bug may be related to PR 30961. Another example:
bash-3.2$ cat d.c #include <emmintrin.h> __m128i foo2 (long long x1, long long x2) { return _mm_set_epi64x (x1, x2); } bash-3.2$ /export/build/gnu/gcc-stack/build-x86_64-linux/gcc/xgcc -B./ -B/export/build/gnu/gcc-stack/build-x86_64-linux/gcc/ -Wall -I.. -O2 -march=core2 -msse4 -fno-asynchronous-unwind-tables -DDEBUG -S d.c bash-3.2$ cat d.s .file "d.c" .text .p2align 4,,15 .globl foo2 .type foo2, @function foo2: movd %rsi, %xmm1 pinsrq $0x1, %rdi, %xmm1 movdqa %xmm1, %xmm0 ret .size foo2, .-foo2 d.c.176r.lreg has ;; Pred edge ENTRY [100.0%] (fallthru) (note:HI 5 1 2 2 [bb 2] NOTE_INSN_BASIC_BLOCK) (insn:HI 2 5 3 2 d.c:5 (set (reg/v:DI 59 [ x1 ]) (reg:DI 5 di [ x1 ])) 89 {*movdi_1_rex64} (expr_list:REG_DEAD (reg:DI 5 di [ x1 ]) (nil))) (insn:HI 3 2 4 2 d.c:5 (set (reg/v:DI 60 [ x2 ]) (reg:DI 4 si [ x2 ])) 89 {*movdi_1_rex64} (expr_list:REG_DEAD (reg:DI 4 si [ x2 ]) (nil))) (note:HI 4 3 7 2 NOTE_INSN_FUNCTION_BEG) (note:HI 7 4 12 2 NOTE_INSN_DELETED) (insn:HI 12 7 18 2 d.c:7 (set (reg/i:V2DI 21 xmm0 [ <result> ]) (vec_concat:V2DI (reg/v:DI 60 [ x2 ]) (reg/v:DI 59 [ x1 ]))) 1340 {*vec_concatv2di_rex64_sse4_1} (expr_lis t:REG_DEAD (reg/v:DI 60 [ x2 ]) (expr_list:REG_DEAD (reg/v:DI 59 [ x1 ]) (nil)))) (insn:HI 18 12 0 2 d.c:7 (use (reg/i:V2DI 21 xmm0 [ <result> ])) -1 (nil)) ;; End of basic block 2 -> ( 1) ;; lr out 6 [bp] 7 [sp] 16 [argp] 20 [frame] 21 [xmm0] ;; live out 6 [bp] 7 [sp] 16 [argp] 20 [frame] 21 [xmm0] But d.c.177r.greg has ;; Pred edge ENTRY [100.0%] (fallthru) (note:HI 5 1 4 2 [bb 2] NOTE_INSN_BASIC_BLOCK) (note:HI 4 5 7 2 NOTE_INSN_FUNCTION_BEG) (note:HI 7 4 24 2 NOTE_INSN_DELETED) (insn 24 7 12 2 d.c:7 (set (reg:DI 22 xmm1) (reg/v:DI 4 si [orig:60 x2 ] [60])) 89 {*movdi_1_rex64} (nil)) (insn:HI 12 24 25 2 d.c:7 (set (reg:V2DI 22 xmm1) (vec_concat:V2DI (reg:DI 22 xmm1) (reg/v:DI 5 di [orig:59 x1 ] [59]))) 1340 {*vec_concatv2di_rex64_sse 4_1} (nil)) (insn 25 12 18 2 d.c:7 (set (reg/i:V2DI 21 xmm0 [ <result> ]) (reg:V2DI 22 xmm1)) 1019 {*movv2di_internal} (nil)) (insn 18 25 23 2 d.c:7 (use (reg/i:V2DI 21 xmm0 [ <result> ])) -1 (nil)) ;; End of basic block 2 -> ( 1) ;; lr out 7 [sp] 21 [xmm0] ;; live out 7 [sp] 21 [xmm0] Ulrich, do you have any idea why reload won't use xmm0? Thanks. -- hjl dot tools at gmail dot com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |uweigand at de dot ibm dot | |com BugsThisDependsOn| |30961 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36222