Patchwork [2/8] Remove redundant MAX_MACHINE_MODE tests

login
register
mail settings
Submitter Richard Sandiford
Date Oct. 30, 2012, 7:20 p.m.
Message ID <87a9v3ix7f.fsf@talisman.home>
Download mbox | patch
Permalink /patch/195607/
State New
Headers show

Comments

Richard Sandiford - Oct. 30, 2012, 7:20 p.m.
extract_bit_field_1 has a block beginning:

  /* If OP0 is a memory, try copying it to a register and seeing if a
     cheap register alternative is available.  */
  if (ext_mode != MAX_MACHINE_MODE && MEM_P (op0))
    {

and within it there are tests for whether ext_mode != MAX_MACHINE_MODE.
This patch removes them.

store_bit_field_1 has a similar block, but it uses:

  /* If OP0 is a memory, try copying it to a register and seeing if a
     cheap register alternative is available.  */
  if (HAVE_insv && MEM_P (op0))
    {

However, by definition, HAVE_insv is equivalent to op_mode != MAX_MACHINE_MODE,
so this patch changes it to that form for consistency.  It's then obvious
that the corresponding op_mode != MAX_MACHINE_MODE tests are redundant too.

Tested as described in the covering note.  OK to install?

Richard


gcc/
	* expmed.c (store_bit_field_1): Use OP_MODE to check whether an
	insv pattern is available.  Remove redundant checks for OP_MODE
	being MAX_MACHINE_MODE.
	(extract_bit_field_1): Remove redundant checks for EXT_MODE being
	MAX_MACHINE_MODE.
Eric Botcazou - Oct. 30, 2012, 10:04 p.m.
> gcc/
> 	* expmed.c (store_bit_field_1): Use OP_MODE to check whether an
> 	insv pattern is available.  Remove redundant checks for OP_MODE
> 	being MAX_MACHINE_MODE.
> 	(extract_bit_field_1): Remove redundant checks for EXT_MODE being
> 	MAX_MACHINE_MODE.

We have had a similar change in our tree for some months.

Patch

Index: gcc/expmed.c
===================================================================
--- gcc/expmed.c	2012-10-28 10:54:24.000000000 +0000
+++ gcc/expmed.c	2012-10-28 10:54:53.715350457 +0000
@@ -669,7 +669,7 @@  store_bit_field_1 (rtx str_rtx, unsigned
      in a word.  */
 
   enum machine_mode op_mode = mode_for_extraction (EP_insv, 3);
-  if (HAVE_insv
+  if (op_mode != MAX_MACHINE_MODE
       && bitsize > 0
       && GET_MODE_BITSIZE (op_mode) >= bitsize
       /* Do not use insv for volatile bitfields when
@@ -788,7 +788,7 @@  store_bit_field_1 (rtx str_rtx, unsigned
 
   /* If OP0 is a memory, try copying it to a register and seeing if a
      cheap register alternative is available.  */
-  if (HAVE_insv && MEM_P (op0))
+  if (op_mode != MAX_MACHINE_MODE && MEM_P (op0))
     {
       enum machine_mode bestmode;
       unsigned HOST_WIDE_INT maxbits = MAX_FIXED_MODE_SIZE;
@@ -803,13 +803,10 @@  store_bit_field_1 (rtx str_rtx, unsigned
 
       if (GET_MODE (op0) == BLKmode
 	  || GET_MODE_BITSIZE (GET_MODE (op0)) > maxbits
-	  || (op_mode != MAX_MACHINE_MODE
-	      && GET_MODE_SIZE (GET_MODE (op0)) > GET_MODE_SIZE (op_mode)))
+	  || GET_MODE_SIZE (GET_MODE (op0)) > GET_MODE_SIZE (op_mode))
 	bestmode = get_best_mode (bitsize, bitnum,
 				  bitregion_start, bitregion_end,
-				  MEM_ALIGN (op0),
-				  (op_mode == MAX_MACHINE_MODE
-				   ? VOIDmode : op_mode),
+				  MEM_ALIGN (op0), op_mode,
 				  MEM_VOLATILE_P (op0));
       else
 	bestmode = GET_MODE (op0);
@@ -1597,12 +1594,9 @@  extract_bit_field_1 (rtx str_rtx, unsign
 	 smallest mode containing the field.  */
 
       if (GET_MODE (op0) == BLKmode
-	  || (ext_mode != MAX_MACHINE_MODE
-	      && GET_MODE_SIZE (GET_MODE (op0)) > GET_MODE_SIZE (ext_mode)))
+	  || GET_MODE_SIZE (GET_MODE (op0)) > GET_MODE_SIZE (ext_mode))
 	bestmode = get_best_mode (bitsize, bitnum, 0, 0, MEM_ALIGN (op0),
-				  (ext_mode == MAX_MACHINE_MODE
-				   ? VOIDmode : ext_mode),
-				  MEM_VOLATILE_P (op0));
+				  ext_mode, MEM_VOLATILE_P (op0));
       else
 	bestmode = GET_MODE (op0);