rs6000: Use known constant for GET_MODE_NUNITS and similar
This patch is to clean up some codes with GET_MODE_UNIT_SIZE or GET_MODE_NUNITS, which can use known constants or just be removed. Note that Carl Love helped to confirm altivec_vreveti2 introduced in r12-1341 is useless and can be removed. gcc/ChangeLog: * config/rs6000/altivec.md (altivec_vreveti2): Remove. * config/rs6000/vsx.md (*vsx_extract_si, *vsx_extract_si_<uns>float_df, *vsx_extract_si_<uns>float_<mode>, *vsx_insert_extract_v4sf_p9): Use known constant values to simplify code.
This commit is contained in:
parent
240dd6c063
commit
b3e77224ed
2 changed files with 12 additions and 29 deletions
|
@ -3961,31 +3961,6 @@
|
|||
DONE;
|
||||
})
|
||||
|
||||
;; Vector reverse elements
|
||||
(define_expand "altivec_vreveti2"
|
||||
[(set (match_operand:TI 0 "register_operand" "=v")
|
||||
(unspec:TI [(match_operand:TI 1 "register_operand" "v")]
|
||||
UNSPEC_VREVEV))]
|
||||
"TARGET_ALTIVEC"
|
||||
{
|
||||
int i, j, size, num_elements;
|
||||
rtvec v = rtvec_alloc (16);
|
||||
rtx mask = gen_reg_rtx (V16QImode);
|
||||
|
||||
size = GET_MODE_UNIT_SIZE (TImode);
|
||||
num_elements = GET_MODE_NUNITS (TImode);
|
||||
|
||||
for (j = 0; j < num_elements; j++)
|
||||
for (i = 0; i < size; i++)
|
||||
RTVEC_ELT (v, i + j * size)
|
||||
= GEN_INT (i + (num_elements - 1 - j) * size);
|
||||
|
||||
emit_insn (gen_vec_initv16qiqi (mask, gen_rtx_PARALLEL (V16QImode, v)));
|
||||
emit_insn (gen_altivec_vperm_ti (operands[0], operands[1],
|
||||
operands[1], mask));
|
||||
DONE;
|
||||
})
|
||||
|
||||
;; Vector reverse elements for V16QI V8HI V4SI V4SF
|
||||
(define_expand "altivec_vreve<mode>2"
|
||||
[(set (match_operand:VEC_K 0 "register_operand" "=v")
|
||||
|
|
|
@ -3854,8 +3854,10 @@
|
|||
rtx vec_tmp = operands[3];
|
||||
int value;
|
||||
|
||||
/* Adjust index for LE element ordering, the below minuend 3 is computed by
|
||||
GET_MODE_NUNITS (V4SImode) - 1. */
|
||||
if (!BYTES_BIG_ENDIAN)
|
||||
element = GEN_INT (GET_MODE_NUNITS (V4SImode) - 1 - INTVAL (element));
|
||||
element = GEN_INT (3 - INTVAL (element));
|
||||
|
||||
/* If the value is in the correct position, we can avoid doing the VSPLT<x>
|
||||
instruction. */
|
||||
|
@ -4230,8 +4232,10 @@
|
|||
rtx v4si_tmp = operands[3];
|
||||
int value;
|
||||
|
||||
/* Adjust index for LE element ordering, the below minuend 3 is computed by
|
||||
GET_MODE_NUNITS (V4SImode) - 1. */
|
||||
if (!BYTES_BIG_ENDIAN)
|
||||
element = GEN_INT (GET_MODE_NUNITS (V4SImode) - 1 - INTVAL (element));
|
||||
element = GEN_INT (3 - INTVAL (element));
|
||||
|
||||
/* If the value is in the correct position, we can avoid doing the VSPLT<x>
|
||||
instruction. */
|
||||
|
@ -4273,8 +4277,10 @@
|
|||
rtx df_tmp = operands[4];
|
||||
int value;
|
||||
|
||||
/* Adjust index for LE element ordering, the below minuend 3 is computed by
|
||||
GET_MODE_NUNITS (V4SImode) - 1. */
|
||||
if (!BYTES_BIG_ENDIAN)
|
||||
element = GEN_INT (GET_MODE_NUNITS (V4SImode) - 1 - INTVAL (element));
|
||||
element = GEN_INT (3 - INTVAL (element));
|
||||
|
||||
/* If the value is in the correct position, we can avoid doing the VSPLT<x>
|
||||
instruction. */
|
||||
|
@ -4466,8 +4472,10 @@
|
|||
{
|
||||
int ele = INTVAL (operands[4]);
|
||||
|
||||
/* Adjust index for LE element ordering, the below minuend 3 is computed by
|
||||
GET_MODE_NUNITS (V4SFmode) - 1. */
|
||||
if (!BYTES_BIG_ENDIAN)
|
||||
ele = GET_MODE_NUNITS (V4SFmode) - 1 - ele;
|
||||
ele = 3 - ele;
|
||||
|
||||
operands[4] = GEN_INT (GET_MODE_SIZE (SFmode) * ele);
|
||||
return "xxinsertw %x0,%x2,%4";
|
||||
|
|
Loading…
Add table
Reference in a new issue