Re: [52/77] Use scalar_int_mode in extract/store_bit_field

2017-08-24 Thread Jeff Law
On 07/13/2017 02:56 AM, Richard Sandiford wrote:
> After a certain point, extract_bit_field and store_bit_field
> ensure that they're dealing with integer modes or BLKmode MEMs.
> This patch uses scalar_int_mode and opt_scalar_int_mode for
> those parts.
> 
> 2017-07-13  Richard Sandiford  
>   Alan Hayward  
>   David Sherwood  
> 
> gcc/
>   * expmed.c (store_bit_field_using_insv): Add op0_mode and
>   value_mode arguments.  Use scalar_int_mode internally.
>   (store_bit_field_1): Rename the new integer mode from imode
>   to op0_mode and use it instead of GET_MODE (op0).  Update calls
>   to store_split_bit_field, store_bit_field_using_insv and
>   store_fixed_bit_field.
>   (store_fixed_bit_field): Add op0_mode and value_mode arguments.
>   Use scalar_int_mode internally.  Use a bit count rather than a mode
>   when calculating the largest bit size for get_best_mode.
>   Update calls to store_split_bit_field and store_fixed_bit_field_1.
>   (store_fixed_bit_field_1): Add mode and value_mode arguments.
>   Remove assertion that OP0 has a scalar integer mode.
>   (store_split_bit_field): Add op0_mode and value_mode arguments.
>   Update calls to extract_fixed_bit_field.
>   (extract_bit_field_using_extv): Add an op0_mode argument.
>   Use scalar_int_mode internally.
>   (extract_bit_field_1): Rename the new integer mode from imode to
>   op0_mode and use it instead of GET_MODE (op0).  Update calls to
>   extract_split_bit_field, extract_bit_field_using_extv and
>   extract_fixed_bit_field.
>   (extract_fixed_bit_field): Add an op0_mode argument.  Update calls
>   to extract_split_bit_field and extract_fixed_bit_field_1.
>   (extract_fixed_bit_field_1): Add a mode argument.  Remove assertion
>   that OP0 has a scalar integer mode.  Use as_a 
>   on the target mode.
>   (extract_split_bit_field): Add an op0_mode argument.  Update call
>   to extract_fixed_bit_field.
> 
OK.
jeff


[52/77] Use scalar_int_mode in extract/store_bit_field

2017-07-13 Thread Richard Sandiford
After a certain point, extract_bit_field and store_bit_field
ensure that they're dealing with integer modes or BLKmode MEMs.
This patch uses scalar_int_mode and opt_scalar_int_mode for
those parts.

2017-07-13  Richard Sandiford  
Alan Hayward  
David Sherwood  

gcc/
* expmed.c (store_bit_field_using_insv): Add op0_mode and
value_mode arguments.  Use scalar_int_mode internally.
(store_bit_field_1): Rename the new integer mode from imode
to op0_mode and use it instead of GET_MODE (op0).  Update calls
to store_split_bit_field, store_bit_field_using_insv and
store_fixed_bit_field.
(store_fixed_bit_field): Add op0_mode and value_mode arguments.
Use scalar_int_mode internally.  Use a bit count rather than a mode
when calculating the largest bit size for get_best_mode.
Update calls to store_split_bit_field and store_fixed_bit_field_1.
(store_fixed_bit_field_1): Add mode and value_mode arguments.
Remove assertion that OP0 has a scalar integer mode.
(store_split_bit_field): Add op0_mode and value_mode arguments.
Update calls to extract_fixed_bit_field.
(extract_bit_field_using_extv): Add an op0_mode argument.
Use scalar_int_mode internally.
(extract_bit_field_1): Rename the new integer mode from imode to
op0_mode and use it instead of GET_MODE (op0).  Update calls to
extract_split_bit_field, extract_bit_field_using_extv and
extract_fixed_bit_field.
(extract_fixed_bit_field): Add an op0_mode argument.  Update calls
to extract_split_bit_field and extract_fixed_bit_field_1.
(extract_fixed_bit_field_1): Add a mode argument.  Remove assertion
that OP0 has a scalar integer mode.  Use as_a 
on the target mode.
(extract_split_bit_field): Add an op0_mode argument.  Update call
to extract_fixed_bit_field.

Index: gcc/expmed.c
===
--- gcc/expmed.c2017-07-13 09:18:46.700153153 +0100
+++ gcc/expmed.c2017-07-13 09:18:47.197114027 +0100
@@ -45,27 +45,31 @@ struct target_expmed default_target_expm
 struct target_expmed *this_target_expmed = _target_expmed;
 #endif
 
-static void store_fixed_bit_field (rtx, unsigned HOST_WIDE_INT,
+static void store_fixed_bit_field (rtx, opt_scalar_int_mode,
   unsigned HOST_WIDE_INT,
   unsigned HOST_WIDE_INT,
   unsigned HOST_WIDE_INT,
-  rtx, bool);
-static void store_fixed_bit_field_1 (rtx, unsigned HOST_WIDE_INT,
+  unsigned HOST_WIDE_INT,
+  rtx, scalar_int_mode, bool);
+static void store_fixed_bit_field_1 (rtx, scalar_int_mode,
+unsigned HOST_WIDE_INT,
 unsigned HOST_WIDE_INT,
-rtx, bool);
-static void store_split_bit_field (rtx, unsigned HOST_WIDE_INT,
+rtx, scalar_int_mode, bool);
+static void store_split_bit_field (rtx, opt_scalar_int_mode,
   unsigned HOST_WIDE_INT,
   unsigned HOST_WIDE_INT,
   unsigned HOST_WIDE_INT,
-  rtx, bool);
-static rtx extract_fixed_bit_field (machine_mode, rtx,
+  unsigned HOST_WIDE_INT,
+  rtx, scalar_int_mode, bool);
+static rtx extract_fixed_bit_field (machine_mode, rtx, opt_scalar_int_mode,
unsigned HOST_WIDE_INT,
unsigned HOST_WIDE_INT, rtx, int, bool);
-static rtx extract_fixed_bit_field_1 (machine_mode, rtx,
+static rtx extract_fixed_bit_field_1 (machine_mode, rtx, scalar_int_mode,
  unsigned HOST_WIDE_INT,
  unsigned HOST_WIDE_INT, rtx, int, bool);
 static rtx lshift_value (machine_mode, unsigned HOST_WIDE_INT, int);
-static rtx extract_split_bit_field (rtx, unsigned HOST_WIDE_INT,
+static rtx extract_split_bit_field (rtx, opt_scalar_int_mode,
+   unsigned HOST_WIDE_INT,
unsigned HOST_WIDE_INT, int, bool);
 static void do_cmp_and_jump (rtx, rtx, enum rtx_code, machine_mode, 
rtx_code_label *);
 static rtx expand_smod_pow2 (machine_mode, rtx, HOST_WIDE_INT);
@@ -568,13 +572,16 @@ simple_mem_bitfield_p (rtx op0, unsigned
 }
 
 /* Try to use instruction INSV to store VALUE into a field of OP0.
-   BITSIZE and BITNUM are as for store_bit_field.  */
+   If OP0_MODE is defined, it is the mode of OP0, otherwise OP0 is a
+   BLKmode MEM.