https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105617
--- Comment #8 from Hongtao.liu <crazylht at gmail dot com> --- (In reply to Hongtao.liu from comment #7) > Hmm, we have specific code to add scalar->vector(vmovq) cost to vector > construct, but it seems not to work here, guess it's because &r0,and thought > it was load not scalar? Yes, true for as gimple_assign_load_p (gdb) p debug_gimple_stmt (def) 72# VUSE <.MEM_46> 73r0.0_20 = r0; (gdb) l 21723246 move it to a vector register, otherwise we have to go 21823247 via a GPR or via vpinsr which involves similar cost. 21923248 Likewise with a BIT_FIELD_REF extracting from a vector 22023249 register we can hope to avoid using a GPR. */ 22123250 if (!is_gimple_assign (def) 22223251 || (!gimple_assign_load_p (def) 22323252 && (gimple_assign_rhs_code (def) != BIT_FIELD_REF 22423253 || !VECTOR_TYPE_P (TREE_TYPE 22523254 (TREE_OPERAND (gimple_assign_rhs1 (def), 0)))))) 22623255 stmt_cost += ix86_cost->sse_to_integer;