https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93230

--- Comment #2 from Michael Meissner <meissner at gcc dot gnu.org> ---
There is this code in rs6000.md that thinks it is combining the conversion with
the load, but the insn is using the wrong types:

;; Optimize extracting a single scalar element from memory.
(define_insn_and_split "*vsx_extract_<mode>_load"
  [(set (match_operand:<VS_scalar> 0 "register_operand" "=r")
        (vec_select:<VS_scalar>
         (match_operand:VSX_EXTRACT_I 1 "memory_operand" "m")
         (parallel [(match_operand:QI 2 "<VSX_EXTRACT_PREDICATE>" "n")])))
   (clobber (match_scratch:DI 3 "=&b"))]
  "VECTOR_MEM_VSX_P (<MODE>mode) && TARGET_DIRECT_MOVE_64BIT"
  "#"
  "&& reload_completed"
  [(set (match_dup 0) (match_dup 4))]
{
  operands[4] = rs6000_adjust_vec_address (operands[0], operands[1],
operands[2],
                                           operands[3], <VS_scalar>mode);
}
  [(set_attr "type" "load")
   (set_attr "length" "8")])

In addition, the code should also handle sign extension, and loading up the
value into a vector register.

Reply via email to