rs6000: Add len_load/len_store optab support
Define rs6000 specific len_load/len_store for the LEN_LOAD/LEN_STORE internal function's expansion. As the doc description of the len_load/len_store optab shows, we should use V16QI to wrap those available vector modes. gcc/ChangeLog: * config/rs6000/vsx.md (len_load_v16qi): New define_expand. (len_store_v16qi): Likewise.
This commit is contained in:
parent
d496134a6b
commit
4070208f23
@ -5100,6 +5100,34 @@
|
||||
operands[3] = gen_reg_rtx (DImode);
|
||||
})
|
||||
|
||||
;; Define optab for vector access with length vectorization exploitation.
|
||||
(define_expand "len_load_v16qi"
|
||||
[(match_operand:V16QI 0 "vlogical_operand")
|
||||
(match_operand:V16QI 1 "memory_operand")
|
||||
(match_operand:QI 2 "gpc_reg_operand")]
|
||||
"TARGET_P9_VECTOR && TARGET_64BIT"
|
||||
{
|
||||
rtx mem = XEXP (operands[1], 0);
|
||||
mem = force_reg (DImode, mem);
|
||||
rtx len = gen_lowpart (DImode, operands[2]);
|
||||
emit_insn (gen_lxvl (operands[0], mem, len));
|
||||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "len_store_v16qi"
|
||||
[(match_operand:V16QI 0 "memory_operand")
|
||||
(match_operand:V16QI 1 "vlogical_operand")
|
||||
(match_operand:QI 2 "gpc_reg_operand")
|
||||
]
|
||||
"TARGET_P9_VECTOR && TARGET_64BIT"
|
||||
{
|
||||
rtx mem = XEXP (operands[0], 0);
|
||||
mem = force_reg (DImode, mem);
|
||||
rtx len = gen_lowpart (DImode, operands[2]);
|
||||
emit_insn (gen_stxvl (operands[1], mem, len));
|
||||
DONE;
|
||||
})
|
||||
|
||||
(define_insn "*stxvl"
|
||||
[(set (mem:V16QI (match_operand:DI 1 "gpc_reg_operand" "b"))
|
||||
(unspec:V16QI
|
||||
|
Loading…
x
Reference in New Issue
Block a user