Commit a0145633 by Mircea Namolaru Committed by Razya Ladelsky

see.c: Code style changes such as redundant paranthesis...

2006-05-15  Mircea Namolaru  <namolaru@il.ibm.com>

        * see.c: Code style changes such as redundant paranthesis,
        redundant intialization of local variables etc.
        (see_main): Declared now as static.
        * doc/invoke.texi: Update that -fsee is not enabled by
        default at -O3.

From-SVN: r113792
parent a6fc8e21
2006-05-15 Mircea Namolaru <namolaru@il.ibm.com>
* see.c: Code style changes such as redundant paranthesis,
redundant intialization of local variables etc.
(see_main): Declared now as static.
* doc/invoke.texi: Update that -fsee is not enabled by
default at -O3.
2006-05-15 Jakub Jelinek <jakub@redhat.com> 2006-05-15 Jakub Jelinek <jakub@redhat.com>
* omp-low.c (check_omp_nesting_restrictions): New function. * omp-low.c (check_omp_nesting_restrictions): New function.
......
...@@ -5012,7 +5012,6 @@ sense when scheduling after register allocation, i.e.@: with ...@@ -5012,7 +5012,6 @@ sense when scheduling after register allocation, i.e.@: with
@opindex fsee @opindex fsee
Eliminates redundant extension instructions and move the non redundant Eliminates redundant extension instructions and move the non redundant
ones to optimal placement using LCM. ones to optimal placement using LCM.
Enabled at level @option{-O3}.
@item -freschedule-modulo-scheduled-loops @item -freschedule-modulo-scheduled-loops
@opindex fscheduling-in-modulo-scheduled-loops @opindex fscheduling-in-modulo-scheduled-loops
......
...@@ -480,9 +480,6 @@ The implementation consists of four data structures: ...@@ -480,9 +480,6 @@ The implementation consists of four data structures:
#include "timevar.h" #include "timevar.h"
#include "tree-pass.h" #include "tree-pass.h"
void
see_main (void);
/* Used to classify defs and uses according to relevancy. */ /* Used to classify defs and uses according to relevancy. */
enum entry_type { enum entry_type {
NOT_RELEVANT, NOT_RELEVANT,
...@@ -659,7 +656,7 @@ static unsigned int uses_num; ...@@ -659,7 +656,7 @@ static unsigned int uses_num;
/* Records the number of definitions at the beginning of the optimization. */ /* Records the number of definitions at the beginning of the optimization. */
static unsigned int defs_num; static unsigned int defs_num;
#define ENTRY_EI(ENTRY) ((struct see_entry_extra_info *)(ENTRY)->extra_info) #define ENTRY_EI(ENTRY) ((struct see_entry_extra_info *) (ENTRY)->extra_info)
/* Functions implementation. */ /* Functions implementation. */
...@@ -673,9 +670,7 @@ static unsigned int defs_num; ...@@ -673,9 +670,7 @@ static unsigned int defs_num;
static rtx static rtx
see_get_extension_reg (rtx extension, bool return_dest_reg) see_get_extension_reg (rtx extension, bool return_dest_reg)
{ {
rtx set = NULL; rtx set, rhs, lhs;
rtx rhs = NULL;
rtx lhs = NULL;
rtx reg1 = NULL; rtx reg1 = NULL;
rtx reg2 = NULL; rtx reg2 = NULL;
...@@ -692,7 +687,7 @@ see_get_extension_reg (rtx extension, bool return_dest_reg) ...@@ -692,7 +687,7 @@ see_get_extension_reg (rtx extension, bool return_dest_reg)
else else
return NULL; return NULL;
if ((GET_CODE (rhs) != SIGN_EXTEND) && (GET_CODE (rhs) != ZERO_EXTEND)) if (GET_CODE (rhs) != SIGN_EXTEND && GET_CODE (rhs) != ZERO_EXTEND)
return NULL; return NULL;
rhs = XEXP (rhs, 0); rhs = XEXP (rhs, 0);
...@@ -719,9 +714,7 @@ see_get_extension_reg (rtx extension, bool return_dest_reg) ...@@ -719,9 +714,7 @@ see_get_extension_reg (rtx extension, bool return_dest_reg)
static enum rtx_code static enum rtx_code
see_get_extension_data (rtx extension, enum machine_mode *source_mode) see_get_extension_data (rtx extension, enum machine_mode *source_mode)
{ {
rtx rhs = NULL; rtx rhs, lhs, set;
rtx lhs = NULL;
rtx set = NULL;
if (!extension || !INSN_P (extension)) if (!extension || !INSN_P (extension))
return UNKNOWN; return UNKNOWN;
...@@ -737,19 +730,18 @@ see_get_extension_data (rtx extension, enum machine_mode *source_mode) ...@@ -737,19 +730,18 @@ see_get_extension_data (rtx extension, enum machine_mode *source_mode)
if (!REG_P (lhs) && !SUBREG_REG (lhs)) if (!REG_P (lhs) && !SUBREG_REG (lhs))
return UNKNOWN; return UNKNOWN;
if ((GET_CODE (rhs) != SIGN_EXTEND) && (GET_CODE (rhs) != ZERO_EXTEND)) if (GET_CODE (rhs) != SIGN_EXTEND && GET_CODE (rhs) != ZERO_EXTEND)
return UNKNOWN; return UNKNOWN;
if (!REG_P (XEXP (rhs, 0)) if (!REG_P (XEXP (rhs, 0))
&& !((GET_CODE (XEXP (rhs, 0)) == SUBREG) && !(GET_CODE (XEXP (rhs, 0)) == SUBREG
&& (REG_P (SUBREG_REG (XEXP (rhs, 0)))))) && REG_P (SUBREG_REG (XEXP (rhs, 0)))))
return UNKNOWN; return UNKNOWN;
*source_mode = GET_MODE (XEXP (rhs, 0)); *source_mode = GET_MODE (XEXP (rhs, 0));
if (GET_CODE (rhs) == SIGN_EXTEND) if (GET_CODE (rhs) == SIGN_EXTEND)
return SIGN_EXTEND; return SIGN_EXTEND;
else
return ZERO_EXTEND; return ZERO_EXTEND;
} }
...@@ -766,13 +758,12 @@ static rtx ...@@ -766,13 +758,12 @@ static rtx
see_gen_normalized_extension (rtx reg, enum rtx_code extension_code, see_gen_normalized_extension (rtx reg, enum rtx_code extension_code,
enum machine_mode mode) enum machine_mode mode)
{ {
rtx subreg = NULL; rtx subreg, insn;
rtx extension = NULL; rtx extension = NULL;
rtx insn = NULL;
if (!reg if (!reg
|| !REG_P (reg) || !REG_P (reg)
|| ((extension_code != SIGN_EXTEND) && (extension_code != ZERO_EXTEND))) || (extension_code != SIGN_EXTEND && extension_code != ZERO_EXTEND))
return NULL; return NULL;
subreg = gen_lowpart_SUBREG (mode, reg); subreg = gen_lowpart_SUBREG (mode, reg);
...@@ -815,8 +806,7 @@ eq_descriptor_pre_extension (const void *p1, const void *p2) ...@@ -815,8 +806,7 @@ eq_descriptor_pre_extension (const void *p1, const void *p2)
const struct see_pre_extension_expr *extension2 = p2; const struct see_pre_extension_expr *extension2 = p2;
rtx set1 = single_set (extension1->se_insn); rtx set1 = single_set (extension1->se_insn);
rtx set2 = single_set (extension2->se_insn); rtx set2 = single_set (extension2->se_insn);
rtx rhs1 = NULL; rtx rhs1, rhs2;
rtx rhs2 = NULL;
gcc_assert (set1 && set2); gcc_assert (set1 && set2);
rhs1 = SET_SRC (set1); rhs1 = SET_SRC (set1);
...@@ -835,7 +825,7 @@ hash_descriptor_pre_extension (const void *p) ...@@ -835,7 +825,7 @@ hash_descriptor_pre_extension (const void *p)
{ {
const struct see_pre_extension_expr *extension = p; const struct see_pre_extension_expr *extension = p;
rtx set = single_set (extension->se_insn); rtx set = single_set (extension->se_insn);
rtx rhs = NULL; rtx rhs;
gcc_assert (set); gcc_assert (set);
rhs = SET_SRC (set); rhs = SET_SRC (set);
...@@ -892,7 +882,7 @@ eq_descriptor_properties (const void *p1, const void *p2) ...@@ -892,7 +882,7 @@ eq_descriptor_properties (const void *p1, const void *p2)
const struct see_register_properties *curr_prop1 = p1; const struct see_register_properties *curr_prop1 = p1;
const struct see_register_properties *curr_prop2 = p2; const struct see_register_properties *curr_prop2 = p2;
return (curr_prop1->regno == curr_prop2->regno); return curr_prop1->regno == curr_prop2->regno;
} }
...@@ -940,8 +930,8 @@ eq_descriptor_extension (const void *p1, const void *p2) ...@@ -940,8 +930,8 @@ eq_descriptor_extension (const void *p1, const void *p2)
const rtx insn = (rtx) p1; const rtx insn = (rtx) p1;
const rtx element = (rtx) p2; const rtx element = (rtx) p2;
rtx set1 = single_set (insn); rtx set1 = single_set (insn);
rtx dest_reg1;
rtx set2 = NULL; rtx set2 = NULL;
rtx dest_reg1 = NULL;
rtx dest_reg2 = NULL; rtx dest_reg2 = NULL;
gcc_assert (set1 && element && (REG_P (element) || INSN_P (element))); gcc_assert (set1 && element && (REG_P (element) || INSN_P (element)));
...@@ -956,7 +946,7 @@ eq_descriptor_extension (const void *p1, const void *p2) ...@@ -956,7 +946,7 @@ eq_descriptor_extension (const void *p1, const void *p2)
else else
dest_reg2 = element; dest_reg2 = element;
return (REGNO (dest_reg1) == REGNO (dest_reg2)); return REGNO (dest_reg1) == REGNO (dest_reg2);
} }
...@@ -967,19 +957,16 @@ static hashval_t ...@@ -967,19 +957,16 @@ static hashval_t
hash_descriptor_extension (const void *p) hash_descriptor_extension (const void *p)
{ {
const rtx r = (rtx) p; const rtx r = (rtx) p;
rtx set = NULL; rtx set, lhs;
rtx lhs = NULL;
if (r && REG_P (r)) if (r && REG_P (r))
return REGNO (r); return REGNO (r);
else
{
gcc_assert (r && INSN_P (r)); gcc_assert (r && INSN_P (r));
set = single_set (r); set = single_set (r);
gcc_assert (set); gcc_assert (set);
lhs = SET_DEST (set); lhs = SET_DEST (set);
return REGNO (lhs); return REGNO (lhs);
}
} }
...@@ -1017,8 +1004,7 @@ see_free_ref_s (splay_tree_value value) ...@@ -1017,8 +1004,7 @@ see_free_ref_s (splay_tree_value value)
static struct see_pre_extension_expr * static struct see_pre_extension_expr *
see_seek_pre_extension_expr (rtx extension, enum extension_type type) see_seek_pre_extension_expr (rtx extension, enum extension_type type)
{ {
struct see_pre_extension_expr **slot_pre_exp = NULL; struct see_pre_extension_expr **slot_pre_exp, temp_pre_exp;
struct see_pre_extension_expr temp_pre_exp;
rtx dest_extension_reg = see_get_extension_reg (extension, 1); rtx dest_extension_reg = see_get_extension_reg (extension, 1);
enum rtx_code extension_code; enum rtx_code extension_code;
enum machine_mode source_extension_mode; enum machine_mode source_extension_mode;
...@@ -1065,8 +1051,7 @@ see_seek_pre_extension_expr (rtx extension, enum extension_type type) ...@@ -1065,8 +1051,7 @@ see_seek_pre_extension_expr (rtx extension, enum extension_type type)
static bool static bool
see_update_leader_extra_info (struct web_entry *first, struct web_entry *second) see_update_leader_extra_info (struct web_entry *first, struct web_entry *second)
{ {
struct see_entry_extra_info *first_ei = NULL; struct see_entry_extra_info *first_ei, *second_ei;
struct see_entry_extra_info *second_ei = NULL;
first = unionfind_root (first); first = unionfind_root (first);
second = unionfind_root (second); second = unionfind_root (second);
...@@ -1074,8 +1059,8 @@ see_update_leader_extra_info (struct web_entry *first, struct web_entry *second) ...@@ -1074,8 +1059,8 @@ see_update_leader_extra_info (struct web_entry *first, struct web_entry *second)
if (unionfind_union (first, second)) if (unionfind_union (first, second))
return true; return true;
first_ei = (struct see_entry_extra_info *)first->extra_info; first_ei = (struct see_entry_extra_info *) first->extra_info;
second_ei = (struct see_entry_extra_info *)second->extra_info; second_ei = (struct see_entry_extra_info *) second->extra_info;
gcc_assert (first_ei && second_ei); gcc_assert (first_ei && second_ei);
...@@ -1087,25 +1072,26 @@ see_update_leader_extra_info (struct web_entry *first, struct web_entry *second) ...@@ -1087,25 +1072,26 @@ see_update_leader_extra_info (struct web_entry *first, struct web_entry *second)
switch (first_ei->relevancy) switch (first_ei->relevancy)
{ {
case NOT_RELEVANT: case NOT_RELEVANT:
return false; break;
case RELEVANT_USE: case RELEVANT_USE:
switch (second_ei->relevancy) switch (second_ei->relevancy)
{ {
case RELEVANT_USE: case RELEVANT_USE:
return false; break;
case EXTENDED_DEF: case EXTENDED_DEF:
first_ei->relevancy = second_ei->relevancy; first_ei->relevancy = second_ei->relevancy;
first_ei->source_mode_signed = second_ei->source_mode_signed; first_ei->source_mode_signed = second_ei->source_mode_signed;
first_ei->source_mode_unsigned = second_ei->source_mode_unsigned; first_ei->source_mode_unsigned = second_ei->source_mode_unsigned;
return false; break;
case SIGN_EXTENDED_DEF: case SIGN_EXTENDED_DEF:
case ZERO_EXTENDED_DEF: case ZERO_EXTENDED_DEF:
first_ei->relevancy = second_ei->relevancy; first_ei->relevancy = second_ei->relevancy;
first_ei->source_mode = second_ei->source_mode; first_ei->source_mode = second_ei->source_mode;
return false; break;
default: default:
gcc_unreachable (); gcc_unreachable ();
} }
break;
case SIGN_EXTENDED_DEF: case SIGN_EXTENDED_DEF:
switch (second_ei->relevancy) switch (second_ei->relevancy)
{ {
...@@ -1114,13 +1100,13 @@ see_update_leader_extra_info (struct web_entry *first, struct web_entry *second) ...@@ -1114,13 +1100,13 @@ see_update_leader_extra_info (struct web_entry *first, struct web_entry *second)
first_ei->source_mode = first_ei->source_mode =
(first_ei->source_mode > second_ei->source_mode) ? (first_ei->source_mode > second_ei->source_mode) ?
first_ei->source_mode : second_ei->source_mode; first_ei->source_mode : second_ei->source_mode;
return false; break;
case RELEVANT_USE: case RELEVANT_USE:
return false; break;
case ZERO_EXTENDED_DEF: case ZERO_EXTENDED_DEF:
/* Don't mix webs with zero extend and sign extend. */ /* Don't mix webs with zero extend and sign extend. */
first_ei->relevancy = NOT_RELEVANT; first_ei->relevancy = NOT_RELEVANT;
return false; break;
case EXTENDED_DEF: case EXTENDED_DEF:
if (second_ei->source_mode_signed == MAX_MACHINE_MODE) if (second_ei->source_mode_signed == MAX_MACHINE_MODE)
first_ei->relevancy = NOT_RELEVANT; first_ei->relevancy = NOT_RELEVANT;
...@@ -1129,10 +1115,11 @@ see_update_leader_extra_info (struct web_entry *first, struct web_entry *second) ...@@ -1129,10 +1115,11 @@ see_update_leader_extra_info (struct web_entry *first, struct web_entry *second)
first_ei->source_mode = first_ei->source_mode =
(first_ei->source_mode > second_ei->source_mode_signed) ? (first_ei->source_mode > second_ei->source_mode_signed) ?
first_ei->source_mode : second_ei->source_mode_signed; first_ei->source_mode : second_ei->source_mode_signed;
return false; break;
default: default:
gcc_unreachable (); gcc_unreachable ();
} }
break;
/* This case is similar to the previous one, with little changes. */ /* This case is similar to the previous one, with little changes. */
case ZERO_EXTENDED_DEF: case ZERO_EXTENDED_DEF:
switch (second_ei->relevancy) switch (second_ei->relevancy)
...@@ -1140,15 +1127,15 @@ see_update_leader_extra_info (struct web_entry *first, struct web_entry *second) ...@@ -1140,15 +1127,15 @@ see_update_leader_extra_info (struct web_entry *first, struct web_entry *second)
case SIGN_EXTENDED_DEF: case SIGN_EXTENDED_DEF:
/* Don't mix webs with zero extend and sign extend. */ /* Don't mix webs with zero extend and sign extend. */
first_ei->relevancy = NOT_RELEVANT; first_ei->relevancy = NOT_RELEVANT;
return false; break;
case RELEVANT_USE: case RELEVANT_USE:
return false; break;
case ZERO_EXTENDED_DEF: case ZERO_EXTENDED_DEF:
/* The mode of the root should be the wider one in this case. */ /* The mode of the root should be the wider one in this case. */
first_ei->source_mode = first_ei->source_mode =
(first_ei->source_mode > second_ei->source_mode) ? (first_ei->source_mode > second_ei->source_mode) ?
first_ei->source_mode : second_ei->source_mode; first_ei->source_mode : second_ei->source_mode;
return false; break;
case EXTENDED_DEF: case EXTENDED_DEF:
if (second_ei->source_mode_unsigned == MAX_MACHINE_MODE) if (second_ei->source_mode_unsigned == MAX_MACHINE_MODE)
first_ei->relevancy = NOT_RELEVANT; first_ei->relevancy = NOT_RELEVANT;
...@@ -1157,13 +1144,14 @@ see_update_leader_extra_info (struct web_entry *first, struct web_entry *second) ...@@ -1157,13 +1144,14 @@ see_update_leader_extra_info (struct web_entry *first, struct web_entry *second)
first_ei->source_mode = first_ei->source_mode =
(first_ei->source_mode > second_ei->source_mode_unsigned) ? (first_ei->source_mode > second_ei->source_mode_unsigned) ?
first_ei->source_mode : second_ei->source_mode_unsigned; first_ei->source_mode : second_ei->source_mode_unsigned;
return false; break;
default: default:
gcc_unreachable (); gcc_unreachable ();
} }
break;
case EXTENDED_DEF: case EXTENDED_DEF:
if ((first_ei->source_mode_signed != MAX_MACHINE_MODE) if (first_ei->source_mode_signed != MAX_MACHINE_MODE
&& (first_ei->source_mode_unsigned != MAX_MACHINE_MODE)) && first_ei->source_mode_unsigned != MAX_MACHINE_MODE)
{ {
switch (second_ei->relevancy) switch (second_ei->relevancy)
{ {
...@@ -1172,15 +1160,15 @@ see_update_leader_extra_info (struct web_entry *first, struct web_entry *second) ...@@ -1172,15 +1160,15 @@ see_update_leader_extra_info (struct web_entry *first, struct web_entry *second)
first_ei->source_mode = first_ei->source_mode =
(first_ei->source_mode_signed > second_ei->source_mode) ? (first_ei->source_mode_signed > second_ei->source_mode) ?
first_ei->source_mode_signed : second_ei->source_mode; first_ei->source_mode_signed : second_ei->source_mode;
return false; break;
case RELEVANT_USE: case RELEVANT_USE:
return false; break;
case ZERO_EXTENDED_DEF: case ZERO_EXTENDED_DEF:
first_ei->relevancy = ZERO_EXTENDED_DEF; first_ei->relevancy = ZERO_EXTENDED_DEF;
first_ei->source_mode = first_ei->source_mode =
(first_ei->source_mode_unsigned > second_ei->source_mode) ? (first_ei->source_mode_unsigned > second_ei->source_mode) ?
first_ei->source_mode_unsigned : second_ei->source_mode; first_ei->source_mode_unsigned : second_ei->source_mode;
return false; break;
case EXTENDED_DEF: case EXTENDED_DEF:
if (second_ei->source_mode_unsigned != MAX_MACHINE_MODE) if (second_ei->source_mode_unsigned != MAX_MACHINE_MODE)
first_ei->source_mode_unsigned = first_ei->source_mode_unsigned =
...@@ -1193,7 +1181,7 @@ see_update_leader_extra_info (struct web_entry *first, struct web_entry *second) ...@@ -1193,7 +1181,7 @@ see_update_leader_extra_info (struct web_entry *first, struct web_entry *second)
(first_ei->source_mode_signed > (first_ei->source_mode_signed >
second_ei->source_mode_signed) ? second_ei->source_mode_signed) ?
first_ei->source_mode_signed : second_ei->source_mode_signed; first_ei->source_mode_signed : second_ei->source_mode_signed;
return false; break;
default: default:
gcc_unreachable (); gcc_unreachable ();
} }
...@@ -1205,15 +1193,15 @@ see_update_leader_extra_info (struct web_entry *first, struct web_entry *second) ...@@ -1205,15 +1193,15 @@ see_update_leader_extra_info (struct web_entry *first, struct web_entry *second)
{ {
case SIGN_EXTENDED_DEF: case SIGN_EXTENDED_DEF:
first_ei->relevancy = NOT_RELEVANT; first_ei->relevancy = NOT_RELEVANT;
return false; break;
case RELEVANT_USE: case RELEVANT_USE:
return false; break;
case ZERO_EXTENDED_DEF: case ZERO_EXTENDED_DEF:
first_ei->relevancy = ZERO_EXTENDED_DEF; first_ei->relevancy = ZERO_EXTENDED_DEF;
first_ei->source_mode = first_ei->source_mode =
(first_ei->source_mode_unsigned > second_ei->source_mode) ? (first_ei->source_mode_unsigned > second_ei->source_mode) ?
first_ei->source_mode_unsigned : second_ei->source_mode; first_ei->source_mode_unsigned : second_ei->source_mode;
return false; break;
case EXTENDED_DEF: case EXTENDED_DEF:
if (second_ei->source_mode_unsigned == MAX_MACHINE_MODE) if (second_ei->source_mode_unsigned == MAX_MACHINE_MODE)
first_ei->relevancy = NOT_RELEVANT; first_ei->relevancy = NOT_RELEVANT;
...@@ -1223,7 +1211,7 @@ see_update_leader_extra_info (struct web_entry *first, struct web_entry *second) ...@@ -1223,7 +1211,7 @@ see_update_leader_extra_info (struct web_entry *first, struct web_entry *second)
second_ei->source_mode_unsigned) ? second_ei->source_mode_unsigned) ?
first_ei->source_mode_unsigned : first_ei->source_mode_unsigned :
second_ei->source_mode_unsigned; second_ei->source_mode_unsigned;
return false; break;
default: default:
gcc_unreachable (); gcc_unreachable ();
} }
...@@ -1239,12 +1227,12 @@ see_update_leader_extra_info (struct web_entry *first, struct web_entry *second) ...@@ -1239,12 +1227,12 @@ see_update_leader_extra_info (struct web_entry *first, struct web_entry *second)
first_ei->source_mode = first_ei->source_mode =
(first_ei->source_mode_signed > second_ei->source_mode) ? (first_ei->source_mode_signed > second_ei->source_mode) ?
first_ei->source_mode_signed : second_ei->source_mode; first_ei->source_mode_signed : second_ei->source_mode;
return false; break;
case RELEVANT_USE: case RELEVANT_USE:
return false; break;
case ZERO_EXTENDED_DEF: case ZERO_EXTENDED_DEF:
first_ei->relevancy = NOT_RELEVANT; first_ei->relevancy = NOT_RELEVANT;
return false; break;
case EXTENDED_DEF: case EXTENDED_DEF:
if (second_ei->source_mode_signed == MAX_MACHINE_MODE) if (second_ei->source_mode_signed == MAX_MACHINE_MODE)
first_ei->relevancy = NOT_RELEVANT; first_ei->relevancy = NOT_RELEVANT;
...@@ -1253,15 +1241,18 @@ see_update_leader_extra_info (struct web_entry *first, struct web_entry *second) ...@@ -1253,15 +1241,18 @@ see_update_leader_extra_info (struct web_entry *first, struct web_entry *second)
(first_ei->source_mode_signed > (first_ei->source_mode_signed >
second_ei->source_mode_signed) ? second_ei->source_mode_signed) ?
first_ei->source_mode_signed : second_ei->source_mode_signed; first_ei->source_mode_signed : second_ei->source_mode_signed;
return false; break;
default: default:
gcc_unreachable (); gcc_unreachable ();
} }
} }
break;
default: default:
/* Unknown patern type. */ /* Unknown patern type. */
gcc_unreachable (); gcc_unreachable ();
} }
return false;
} }
...@@ -1362,8 +1353,9 @@ see_initialize_data_structures (void) ...@@ -1362,8 +1353,9 @@ see_initialize_data_structures (void)
/* Allocate the extension hash. It will hold the extensions that we want /* Allocate the extension hash. It will hold the extensions that we want
to PRE. */ to PRE. */
see_pre_extension_hash = see_pre_extension_hash = htab_create (10,
htab_create (10, hash_descriptor_pre_extension, eq_descriptor_pre_extension, hash_descriptor_pre_extension,
eq_descriptor_pre_extension,
hash_del_pre_extension); hash_del_pre_extension);
} }
...@@ -1402,7 +1394,7 @@ static bool ...@@ -1402,7 +1394,7 @@ static bool
see_want_to_be_merged_with_extension (rtx ref, rtx extension, see_want_to_be_merged_with_extension (rtx ref, rtx extension,
enum extension_type type) enum extension_type type)
{ {
rtx pat = NULL; rtx pat;
rtx dest_extension_reg = see_get_extension_reg (extension, 1); rtx dest_extension_reg = see_get_extension_reg (extension, 1);
rtx source_extension_reg = see_get_extension_reg (extension, 0); rtx source_extension_reg = see_get_extension_reg (extension, 0);
enum rtx_code code; enum rtx_code code;
...@@ -1418,16 +1410,16 @@ see_want_to_be_merged_with_extension (rtx ref, rtx extension, ...@@ -1418,16 +1410,16 @@ see_want_to_be_merged_with_extension (rtx ref, rtx extension,
{ {
rtx sub = XVECEXP (pat, 0, i); rtx sub = XVECEXP (pat, 0, i);
if ((GET_CODE (sub) == SET) if (GET_CODE (sub) == SET
&& (REG_P (SET_DEST (sub)) && (REG_P (SET_DEST (sub))
|| ((GET_CODE (SET_DEST (sub)) == SUBREG) || (GET_CODE (SET_DEST (sub)) == SUBREG
&& (REG_P (SUBREG_REG (SET_DEST (sub)))))) && REG_P (SUBREG_REG (SET_DEST (sub)))))
&& (REG_P (SET_SRC (sub)) && (REG_P (SET_SRC (sub))
|| ((GET_CODE (SET_SRC (sub)) == SUBREG) || (GET_CODE (SET_SRC (sub)) == SUBREG
&& (REG_P (SUBREG_REG (SET_SRC (sub))))))) && REG_P (SUBREG_REG (SET_SRC (sub))))))
{ {
/* This is a simple move SET. */ /* This is a simple move SET. */
if ((type == DEF_EXTENSION) if (type == DEF_EXTENSION
&& reg_mentioned_p (source_extension_reg, SET_DEST (sub))) && reg_mentioned_p (source_extension_reg, SET_DEST (sub)))
return false; return false;
} }
...@@ -1450,13 +1442,13 @@ see_want_to_be_merged_with_extension (rtx ref, rtx extension, ...@@ -1450,13 +1442,13 @@ see_want_to_be_merged_with_extension (rtx ref, rtx extension,
} }
else else
{ {
if ((code == SET) if (code == SET
&& (REG_P (SET_DEST (pat)) && (REG_P (SET_DEST (pat))
|| ((GET_CODE (SET_DEST (pat)) == SUBREG) || (GET_CODE (SET_DEST (pat)) == SUBREG
&& (REG_P (SUBREG_REG (SET_DEST (pat)))))) && REG_P (SUBREG_REG (SET_DEST (pat)))))
&& (REG_P (SET_SRC (pat)) && (REG_P (SET_SRC (pat))
|| ((GET_CODE (SET_SRC (pat)) == SUBREG) || (GET_CODE (SET_SRC (pat)) == SUBREG
&& (REG_P (SUBREG_REG (SET_SRC (pat))))))) && REG_P (SUBREG_REG (SET_SRC (pat))))))
/* This is a simple move SET. */ /* This is a simple move SET. */
return false; return false;
} }
...@@ -1846,12 +1838,11 @@ see_analyze_merged_def_local_prop (void **slot, void *b) ...@@ -1846,12 +1838,11 @@ see_analyze_merged_def_local_prop (void **slot, void *b)
rtx def_se = *slot; rtx def_se = *slot;
struct see_ref_s *curr_ref_s = (struct see_ref_s *) b; struct see_ref_s *curr_ref_s = (struct see_ref_s *) b;
rtx ref = curr_ref_s->insn; rtx ref = curr_ref_s->insn;
struct see_pre_extension_expr *extension_expr = NULL; struct see_pre_extension_expr *extension_expr;
int indx; int indx;
int bb_num = BLOCK_NUM (ref); int bb_num = BLOCK_NUM (ref);
htab_t curr_bb_hash = NULL; htab_t curr_bb_hash;
struct see_register_properties *curr_prop = NULL; struct see_register_properties *curr_prop, **slot_prop;
struct see_register_properties **slot_prop = NULL;
struct see_register_properties temp_prop; struct see_register_properties temp_prop;
rtx dest_extension_reg = see_get_extension_reg (def_se, 1); rtx dest_extension_reg = see_get_extension_reg (def_se, 1);
struct see_occr *curr_occr = NULL; struct see_occr *curr_occr = NULL;
...@@ -1915,12 +1906,11 @@ see_analyze_unmerged_def_local_prop (void **slot, void *b) ...@@ -1915,12 +1906,11 @@ see_analyze_unmerged_def_local_prop (void **slot, void *b)
rtx def_se = *slot; rtx def_se = *slot;
struct see_ref_s *curr_ref_s = (struct see_ref_s *) b; struct see_ref_s *curr_ref_s = (struct see_ref_s *) b;
rtx ref = curr_ref_s->insn; rtx ref = curr_ref_s->insn;
struct see_pre_extension_expr *extension_expr = NULL; struct see_pre_extension_expr *extension_expr;
int indx; int indx;
int bb_num = BLOCK_NUM (ref); int bb_num = BLOCK_NUM (ref);
htab_t curr_bb_hash = NULL; htab_t curr_bb_hash;
struct see_register_properties *curr_prop = NULL; struct see_register_properties *curr_prop, **slot_prop;
struct see_register_properties **slot_prop = NULL;
struct see_register_properties temp_prop; struct see_register_properties temp_prop;
rtx dest_extension_reg = see_get_extension_reg (def_se, 1); rtx dest_extension_reg = see_get_extension_reg (def_se, 1);
...@@ -1964,13 +1954,12 @@ see_analyze_use_local_prop (void **slot, void *b) ...@@ -1964,13 +1954,12 @@ see_analyze_use_local_prop (void **slot, void *b)
rtx use_se = *slot; rtx use_se = *slot;
rtx ref = curr_ref_s->insn; rtx ref = curr_ref_s->insn;
rtx dest_extension_reg = see_get_extension_reg (use_se, 1); rtx dest_extension_reg = see_get_extension_reg (use_se, 1);
struct see_pre_extension_expr *extension_expr = NULL; struct see_pre_extension_expr *extension_expr;
struct see_register_properties *curr_prop = NULL; struct see_register_properties *curr_prop, **slot_prop;
struct see_register_properties **slot_prop = NULL;
struct see_register_properties temp_prop; struct see_register_properties temp_prop;
struct see_occr *curr_occr = NULL; struct see_occr *curr_occr = NULL;
struct see_occr *tmp_occr = NULL; struct see_occr *tmp_occr = NULL;
htab_t curr_bb_hash = NULL; htab_t curr_bb_hash;
int indx; int indx;
int bb_num = BLOCK_NUM (ref); int bb_num = BLOCK_NUM (ref);
...@@ -2163,9 +2152,9 @@ see_set_prop_merged_def (void **slot, void *b) ...@@ -2163,9 +2152,9 @@ see_set_prop_merged_def (void **slot, void *b)
struct see_ref_s *curr_ref_s = (struct see_ref_s *) b; struct see_ref_s *curr_ref_s = (struct see_ref_s *) b;
rtx insn = curr_ref_s->insn; rtx insn = curr_ref_s->insn;
rtx dest_extension_reg = see_get_extension_reg (def_se, 1); rtx dest_extension_reg = see_get_extension_reg (def_se, 1);
htab_t curr_bb_hash = NULL; htab_t curr_bb_hash;
struct see_register_properties *curr_prop = NULL; struct see_register_properties *curr_prop = NULL;
struct see_register_properties **slot_prop = NULL; struct see_register_properties **slot_prop;
struct see_register_properties temp_prop; struct see_register_properties temp_prop;
int ref_luid = DF_INSN_LUID (df, insn); int ref_luid = DF_INSN_LUID (df, insn);
...@@ -2173,8 +2162,9 @@ see_set_prop_merged_def (void **slot, void *b) ...@@ -2173,8 +2162,9 @@ see_set_prop_merged_def (void **slot, void *b)
if (!curr_bb_hash) if (!curr_bb_hash)
{ {
/* The hash doesn't exist yet. Create it. */ /* The hash doesn't exist yet. Create it. */
curr_bb_hash = curr_bb_hash = htab_create (10,
htab_create (10, hash_descriptor_properties, eq_descriptor_properties, hash_descriptor_properties,
eq_descriptor_properties,
hash_del_properties); hash_del_properties);
see_bb_hash_ar[BLOCK_NUM (curr_ref_s->insn)] = curr_bb_hash; see_bb_hash_ar[BLOCK_NUM (curr_ref_s->insn)] = curr_bb_hash;
} }
...@@ -2185,7 +2175,7 @@ see_set_prop_merged_def (void **slot, void *b) ...@@ -2185,7 +2175,7 @@ see_set_prop_merged_def (void **slot, void *b)
(struct see_register_properties **) htab_find_slot (curr_bb_hash, (struct see_register_properties **) htab_find_slot (curr_bb_hash,
&temp_prop, INSERT); &temp_prop, INSERT);
if (slot_prop && (*slot_prop != NULL)) if (slot_prop && *slot_prop != NULL)
{ {
/* Property already exists. */ /* Property already exists. */
curr_prop = *slot_prop; curr_prop = *slot_prop;
...@@ -2233,9 +2223,9 @@ see_set_prop_unmerged_def (void **slot, void *b) ...@@ -2233,9 +2223,9 @@ see_set_prop_unmerged_def (void **slot, void *b)
struct see_ref_s *curr_ref_s = (struct see_ref_s *) b; struct see_ref_s *curr_ref_s = (struct see_ref_s *) b;
rtx insn = curr_ref_s->insn; rtx insn = curr_ref_s->insn;
rtx dest_extension_reg = see_get_extension_reg (def_se, 1); rtx dest_extension_reg = see_get_extension_reg (def_se, 1);
htab_t curr_bb_hash = NULL; htab_t curr_bb_hash;
struct see_register_properties *curr_prop = NULL; struct see_register_properties *curr_prop = NULL;
struct see_register_properties **slot_prop = NULL; struct see_register_properties **slot_prop;
struct see_register_properties temp_prop; struct see_register_properties temp_prop;
int ref_luid = DF_INSN_LUID (df, insn); int ref_luid = DF_INSN_LUID (df, insn);
...@@ -2243,8 +2233,9 @@ see_set_prop_unmerged_def (void **slot, void *b) ...@@ -2243,8 +2233,9 @@ see_set_prop_unmerged_def (void **slot, void *b)
if (!curr_bb_hash) if (!curr_bb_hash)
{ {
/* The hash doesn't exist yet. Create it. */ /* The hash doesn't exist yet. Create it. */
curr_bb_hash = curr_bb_hash = htab_create (10,
htab_create (10, hash_descriptor_properties, eq_descriptor_properties, hash_descriptor_properties,
eq_descriptor_properties,
hash_del_properties); hash_del_properties);
see_bb_hash_ar[BLOCK_NUM (curr_ref_s->insn)] = curr_bb_hash; see_bb_hash_ar[BLOCK_NUM (curr_ref_s->insn)] = curr_bb_hash;
} }
...@@ -2255,7 +2246,7 @@ see_set_prop_unmerged_def (void **slot, void *b) ...@@ -2255,7 +2246,7 @@ see_set_prop_unmerged_def (void **slot, void *b)
(struct see_register_properties **) htab_find_slot (curr_bb_hash, (struct see_register_properties **) htab_find_slot (curr_bb_hash,
&temp_prop, INSERT); &temp_prop, INSERT);
if (slot_prop && (*slot_prop != NULL)) if (slot_prop && *slot_prop != NULL)
{ {
/* Property already exists. */ /* Property already exists. */
curr_prop = *slot_prop; curr_prop = *slot_prop;
...@@ -2305,9 +2296,9 @@ see_set_prop_unmerged_use (void **slot, void *b) ...@@ -2305,9 +2296,9 @@ see_set_prop_unmerged_use (void **slot, void *b)
struct see_ref_s *curr_ref_s = (struct see_ref_s *) b; struct see_ref_s *curr_ref_s = (struct see_ref_s *) b;
rtx insn = curr_ref_s->insn; rtx insn = curr_ref_s->insn;
rtx dest_extension_reg = see_get_extension_reg (use_se, 1); rtx dest_extension_reg = see_get_extension_reg (use_se, 1);
htab_t curr_bb_hash = NULL; htab_t curr_bb_hash;
struct see_register_properties *curr_prop = NULL; struct see_register_properties *curr_prop = NULL;
struct see_register_properties **slot_prop = NULL; struct see_register_properties **slot_prop;
struct see_register_properties temp_prop; struct see_register_properties temp_prop;
bool locally_redundant = false; bool locally_redundant = false;
int ref_luid = DF_INSN_LUID (df, insn); int ref_luid = DF_INSN_LUID (df, insn);
...@@ -2316,8 +2307,9 @@ see_set_prop_unmerged_use (void **slot, void *b) ...@@ -2316,8 +2307,9 @@ see_set_prop_unmerged_use (void **slot, void *b)
if (!curr_bb_hash) if (!curr_bb_hash)
{ {
/* The hash doesn't exist yet. Create it. */ /* The hash doesn't exist yet. Create it. */
curr_bb_hash = curr_bb_hash = htab_create (10,
htab_create (10, hash_descriptor_properties, eq_descriptor_properties, hash_descriptor_properties,
eq_descriptor_properties,
hash_del_properties); hash_del_properties);
see_bb_hash_ar[BLOCK_NUM (curr_ref_s->insn)] = curr_bb_hash; see_bb_hash_ar[BLOCK_NUM (curr_ref_s->insn)] = curr_bb_hash;
} }
...@@ -2328,27 +2320,27 @@ see_set_prop_unmerged_use (void **slot, void *b) ...@@ -2328,27 +2320,27 @@ see_set_prop_unmerged_use (void **slot, void *b)
(struct see_register_properties **) htab_find_slot (curr_bb_hash, (struct see_register_properties **) htab_find_slot (curr_bb_hash,
&temp_prop, INSERT); &temp_prop, INSERT);
if (slot_prop && (*slot_prop != NULL)) if (slot_prop && *slot_prop != NULL)
{ {
/* Property already exists. */ /* Property already exists. */
curr_prop = *slot_prop; curr_prop = *slot_prop;
gcc_assert (curr_prop->regno == REGNO (dest_extension_reg)); gcc_assert (curr_prop->regno == REGNO (dest_extension_reg));
if ((curr_prop->last_def < 0) && (curr_prop->first_se_before_any_def < 0)) if (curr_prop->last_def < 0 && curr_prop->first_se_before_any_def < 0)
curr_prop->first_se_before_any_def = ref_luid; curr_prop->first_se_before_any_def = ref_luid;
else if ((curr_prop->last_def < 0) else if (curr_prop->last_def < 0
&& (curr_prop->first_se_before_any_def >= 0)) && curr_prop->first_se_before_any_def >= 0)
{ {
/* In this case the extension is localy redundant. */ /* In this case the extension is localy redundant. */
htab_clear_slot (curr_ref_s->use_se_hash, (PTR *)slot); htab_clear_slot (curr_ref_s->use_se_hash, (PTR *)slot);
locally_redundant = true; locally_redundant = true;
} }
else if ((curr_prop->last_def >= 0) else if (curr_prop->last_def >= 0
&& (curr_prop->first_se_after_last_def < 0)) && curr_prop->first_se_after_last_def < 0)
curr_prop->first_se_after_last_def = ref_luid; curr_prop->first_se_after_last_def = ref_luid;
else if ((curr_prop->last_def >= 0) else if (curr_prop->last_def >= 0
&& (curr_prop->first_se_after_last_def >= 0)) && curr_prop->first_se_after_last_def >= 0)
{ {
/* In this case the extension is localy redundant. */ /* In this case the extension is localy redundant. */
htab_clear_slot (curr_ref_s->use_se_hash, (PTR *)slot); htab_clear_slot (curr_ref_s->use_se_hash, (PTR *)slot);
...@@ -2449,26 +2441,23 @@ see_def_extension_not_merged (struct see_ref_s *curr_ref_s, rtx def_se) ...@@ -2449,26 +2441,23 @@ see_def_extension_not_merged (struct see_ref_s *curr_ref_s, rtx def_se)
rtx merged_ref_next = (curr_ref_s->merged_insn) ? rtx merged_ref_next = (curr_ref_s->merged_insn) ?
NEXT_INSN (curr_ref_s->merged_insn): NULL_RTX; NEXT_INSN (curr_ref_s->merged_insn): NULL_RTX;
rtx ref_copy = copy_rtx (ref); rtx ref_copy = copy_rtx (ref);
rtx dest_reg = NULL;
rtx dest_real_reg = NULL;
rtx source_extension_reg = see_get_extension_reg (def_se, 0); rtx source_extension_reg = see_get_extension_reg (def_se, 0);
rtx dest_extension_reg = see_get_extension_reg (def_se, 1); rtx dest_extension_reg = see_get_extension_reg (def_se, 1);
rtx new_pseudo_reg = NULL;
rtx subreg = NULL;
rtx move_insn = NULL; rtx move_insn = NULL;
rtx set = NULL; rtx set, rhs;
rtx rhs = NULL; rtx dest_reg, dest_real_reg;
rtx new_pseudo_reg, subreg;
enum machine_mode source_extension_mode = GET_MODE (source_extension_reg); enum machine_mode source_extension_mode = GET_MODE (source_extension_reg);
enum machine_mode dest_mode; enum machine_mode dest_mode;
set = single_set (def_se); set = single_set (def_se);
gcc_assert (set); gcc_assert (set);
rhs = SET_SRC (set); rhs = SET_SRC (set);
gcc_assert ((GET_CODE (rhs) == SIGN_EXTEND) gcc_assert (GET_CODE (rhs) == SIGN_EXTEND
|| (GET_CODE (rhs) == ZERO_EXTEND)); || GET_CODE (rhs) == ZERO_EXTEND);
dest_reg = XEXP (rhs, 0); dest_reg = XEXP (rhs, 0);
gcc_assert (REG_P (dest_reg) gcc_assert (REG_P (dest_reg)
|| ((GET_CODE (dest_reg) == SUBREG) || (GET_CODE (dest_reg) == SUBREG
&& REG_P (SUBREG_REG (dest_reg)))); && REG_P (SUBREG_REG (dest_reg))));
dest_real_reg = REG_P (dest_reg) ? dest_reg : SUBREG_REG (dest_reg); dest_real_reg = REG_P (dest_reg) ? dest_reg : SUBREG_REG (dest_reg);
dest_mode = GET_MODE (dest_reg); dest_mode = GET_MODE (dest_reg);
...@@ -2737,12 +2726,10 @@ see_merge_one_def_extension (void **slot, void *b) ...@@ -2737,12 +2726,10 @@ see_merge_one_def_extension (void **slot, void *b)
rtx new_set = NULL; rtx new_set = NULL;
rtx source_extension_reg = see_get_extension_reg (def_se, 0); rtx source_extension_reg = see_get_extension_reg (def_se, 0);
rtx dest_extension_reg = see_get_extension_reg (def_se, 1); rtx dest_extension_reg = see_get_extension_reg (def_se, 1);
rtx move_insn = NULL; rtx move_insn, *rtx_slot, subreg;
rtx *rtx_slot = NULL;
rtx subreg = NULL;
rtx temp_extension = NULL; rtx temp_extension = NULL;
rtx simplified_temp_extension = NULL; rtx simplified_temp_extension = NULL;
rtx *pat = NULL; rtx *pat;
enum rtx_code code; enum rtx_code code;
enum rtx_code extension_code; enum rtx_code extension_code;
enum machine_mode source_extension_mode; enum machine_mode source_extension_mode;
...@@ -2790,13 +2777,13 @@ see_merge_one_def_extension (void **slot, void *b) ...@@ -2790,13 +2777,13 @@ see_merge_one_def_extension (void **slot, void *b)
{ {
rtx *sub = &XVECEXP (*pat, 0, i); rtx *sub = &XVECEXP (*pat, 0, i);
if ((GET_CODE (*sub) == SET) if (GET_CODE (*sub) == SET
&& (GET_MODE (SET_SRC (*sub)) != VOIDmode) && GET_MODE (SET_SRC (*sub)) != VOIDmode
&& (GET_MODE (SET_DEST (*sub)) == source_mode) && GET_MODE (SET_DEST (*sub)) == source_mode
&& ((REG_P (SET_DEST (*sub)) && ((REG_P (SET_DEST (*sub))
&& (REGNO (SET_DEST (*sub)) == REGNO (source_extension_reg))) && REGNO (SET_DEST (*sub)) == REGNO (source_extension_reg))
|| ((GET_CODE (SET_DEST (*sub)) == SUBREG) || (GET_CODE (SET_DEST (*sub)) == SUBREG
&& (REG_P (SUBREG_REG (SET_DEST (*sub)))) && REG_P (SUBREG_REG (SET_DEST (*sub)))
&& (REGNO (SUBREG_REG (SET_DEST (*sub))) == && (REGNO (SUBREG_REG (SET_DEST (*sub))) ==
REGNO (source_extension_reg))))) REGNO (source_extension_reg)))))
{ {
...@@ -2822,13 +2809,13 @@ see_merge_one_def_extension (void **slot, void *b) ...@@ -2822,13 +2809,13 @@ see_merge_one_def_extension (void **slot, void *b)
if (apply_change_group ()) if (apply_change_group ())
merge_success = true; merge_success = true;
} }
else if ((code == SET) else if (code == SET
&& (GET_MODE (SET_SRC (*pat)) != VOIDmode) && GET_MODE (SET_SRC (*pat)) != VOIDmode
&& (GET_MODE (SET_DEST (*pat)) == source_mode) && GET_MODE (SET_DEST (*pat)) == source_mode
&& ((REG_P (SET_DEST (*pat)) && ((REG_P (SET_DEST (*pat))
&& REGNO (SET_DEST (*pat)) == REGNO (source_extension_reg)) && REGNO (SET_DEST (*pat)) == REGNO (source_extension_reg))
|| ((GET_CODE (SET_DEST (*pat)) == SUBREG) || (GET_CODE (SET_DEST (*pat)) == SUBREG
&& (REG_P (SUBREG_REG (SET_DEST (*pat)))) && REG_P (SUBREG_REG (SET_DEST (*pat)))
&& (REGNO (SUBREG_REG (SET_DEST (*pat))) == && (REGNO (SUBREG_REG (SET_DEST (*pat))) ==
REGNO (source_extension_reg))))) REGNO (source_extension_reg)))))
{ {
...@@ -2896,8 +2883,9 @@ see_merge_one_def_extension (void **slot, void *b) ...@@ -2896,8 +2883,9 @@ see_merge_one_def_extension (void **slot, void *b)
the merged_def_se_hash. */ the merged_def_se_hash. */
htab_clear_slot (curr_ref_s->unmerged_def_se_hash, (PTR *)slot); htab_clear_slot (curr_ref_s->unmerged_def_se_hash, (PTR *)slot);
if (!curr_ref_s->merged_def_se_hash) if (!curr_ref_s->merged_def_se_hash)
curr_ref_s->merged_def_se_hash = curr_ref_s->merged_def_se_hash = htab_create (10,
htab_create (10, hash_descriptor_extension, eq_descriptor_extension, hash_descriptor_extension,
eq_descriptor_extension,
NULL); NULL);
rtx_slot = (rtx *) htab_find_slot (curr_ref_s->merged_def_se_hash, rtx_slot = (rtx *) htab_find_slot (curr_ref_s->merged_def_se_hash,
dest_extension_reg, INSERT); dest_extension_reg, INSERT);
...@@ -2932,7 +2920,7 @@ see_handle_extensions_for_one_ref (splay_tree_node stn, ...@@ -2932,7 +2920,7 @@ see_handle_extensions_for_one_ref (splay_tree_node stn,
htab_t use_se_hash = ((struct see_ref_s *) (stn->value))->use_se_hash; htab_t use_se_hash = ((struct see_ref_s *) (stn->value))->use_se_hash;
htab_t unmerged_def_se_hash = htab_t unmerged_def_se_hash =
((struct see_ref_s *) (stn->value))->unmerged_def_se_hash; ((struct see_ref_s *) (stn->value))->unmerged_def_se_hash;
htab_t merged_def_se_hash = NULL; htab_t merged_def_se_hash;
rtx ref = ((struct see_ref_s *) (stn->value))->insn; rtx ref = ((struct see_ref_s *) (stn->value))->insn;
if (dump_file) if (dump_file)
...@@ -3037,7 +3025,7 @@ static bool ...@@ -3037,7 +3025,7 @@ static bool
see_store_reference_and_extension (rtx ref_insn, rtx se_insn, see_store_reference_and_extension (rtx ref_insn, rtx se_insn,
enum extension_type type) enum extension_type type)
{ {
rtx *rtx_slot = NULL; rtx *rtx_slot;
int curr_bb_num; int curr_bb_num;
splay_tree_node stn = NULL; splay_tree_node stn = NULL;
htab_t se_hash = NULL; htab_t se_hash = NULL;
...@@ -3049,7 +3037,7 @@ see_store_reference_and_extension (rtx ref_insn, rtx se_insn, ...@@ -3049,7 +3037,7 @@ see_store_reference_and_extension (rtx ref_insn, rtx se_insn,
return false; return false;
curr_bb_num = BLOCK_NUM (ref_insn); curr_bb_num = BLOCK_NUM (ref_insn);
gcc_assert ((curr_bb_num < last_bb) && (curr_bb_num >= 0)); gcc_assert (curr_bb_num < last_bb && curr_bb_num >= 0);
/* Insert the reference to the splay tree of its basic block. */ /* Insert the reference to the splay tree of its basic block. */
if (!see_bb_splay_ar[curr_bb_num]) if (!see_bb_splay_ar[curr_bb_num])
...@@ -3063,7 +3051,6 @@ see_store_reference_and_extension (rtx ref_insn, rtx se_insn, ...@@ -3063,7 +3051,6 @@ see_store_reference_and_extension (rtx ref_insn, rtx se_insn,
stn = splay_tree_lookup (see_bb_splay_ar[curr_bb_num], stn = splay_tree_lookup (see_bb_splay_ar[curr_bb_num],
DF_INSN_LUID (df, ref_insn)); DF_INSN_LUID (df, ref_insn));
if (stn) if (stn)
{
switch (type) switch (type)
{ {
case EXPLICIT_DEF_EXTENSION: case EXPLICIT_DEF_EXTENSION:
...@@ -3071,8 +3058,10 @@ see_store_reference_and_extension (rtx ref_insn, rtx se_insn, ...@@ -3071,8 +3058,10 @@ see_store_reference_and_extension (rtx ref_insn, rtx se_insn,
((struct see_ref_s *) (stn->value))->unmerged_def_se_hash; ((struct see_ref_s *) (stn->value))->unmerged_def_se_hash;
if (!se_hash) if (!se_hash)
{ {
se_hash = htab_create (10, hash_descriptor_extension, se_hash = htab_create (10,
eq_descriptor_extension, NULL); hash_descriptor_extension,
eq_descriptor_extension,
NULL);
((struct see_ref_s *) (stn->value))->unmerged_def_se_hash = ((struct see_ref_s *) (stn->value))->unmerged_def_se_hash =
se_hash; se_hash;
} }
...@@ -3081,8 +3070,10 @@ see_store_reference_and_extension (rtx ref_insn, rtx se_insn, ...@@ -3081,8 +3070,10 @@ see_store_reference_and_extension (rtx ref_insn, rtx se_insn,
se_hash = ((struct see_ref_s *) (stn->value))->merged_def_se_hash; se_hash = ((struct see_ref_s *) (stn->value))->merged_def_se_hash;
if (!se_hash) if (!se_hash)
{ {
se_hash = htab_create (10, hash_descriptor_extension, se_hash = htab_create (10,
eq_descriptor_extension, NULL); hash_descriptor_extension,
eq_descriptor_extension,
NULL);
((struct see_ref_s *) (stn->value))->merged_def_se_hash = ((struct see_ref_s *) (stn->value))->merged_def_se_hash =
se_hash; se_hash;
} }
...@@ -3091,8 +3082,10 @@ see_store_reference_and_extension (rtx ref_insn, rtx se_insn, ...@@ -3091,8 +3082,10 @@ see_store_reference_and_extension (rtx ref_insn, rtx se_insn,
se_hash = ((struct see_ref_s *) (stn->value))->use_se_hash; se_hash = ((struct see_ref_s *) (stn->value))->use_se_hash;
if (!se_hash) if (!se_hash)
{ {
se_hash = htab_create (10, hash_descriptor_extension, se_hash = htab_create (10,
eq_descriptor_extension, NULL); hash_descriptor_extension,
eq_descriptor_extension,
NULL);
((struct see_ref_s *) (stn->value))->use_se_hash = se_hash; ((struct see_ref_s *) (stn->value))->use_se_hash = se_hash;
} }
break; break;
...@@ -3100,7 +3093,6 @@ see_store_reference_and_extension (rtx ref_insn, rtx se_insn, ...@@ -3100,7 +3093,6 @@ see_store_reference_and_extension (rtx ref_insn, rtx se_insn,
gcc_unreachable (); gcc_unreachable ();
} }
} }
}
/* Initialize a new see_ref_s structure and insert it to the splay /* Initialize a new see_ref_s structure and insert it to the splay
tree. */ tree. */
...@@ -3115,24 +3107,27 @@ see_store_reference_and_extension (rtx ref_insn, rtx se_insn, ...@@ -3115,24 +3107,27 @@ see_store_reference_and_extension (rtx ref_insn, rtx se_insn,
switch (type) switch (type)
{ {
case EXPLICIT_DEF_EXTENSION: case EXPLICIT_DEF_EXTENSION:
ref_s->unmerged_def_se_hash = ref_s->unmerged_def_se_hash = htab_create (10,
htab_create (10, hash_descriptor_extension, eq_descriptor_extension, hash_descriptor_extension,
eq_descriptor_extension,
NULL); NULL);
se_hash = ref_s->unmerged_def_se_hash; se_hash = ref_s->unmerged_def_se_hash;
ref_s->merged_def_se_hash = NULL; ref_s->merged_def_se_hash = NULL;
ref_s->use_se_hash = NULL; ref_s->use_se_hash = NULL;
break; break;
case IMPLICIT_DEF_EXTENSION: case IMPLICIT_DEF_EXTENSION:
ref_s->merged_def_se_hash = ref_s->merged_def_se_hash = htab_create (10,
htab_create (10, hash_descriptor_extension, eq_descriptor_extension, hash_descriptor_extension,
eq_descriptor_extension,
NULL); NULL);
se_hash = ref_s->merged_def_se_hash; se_hash = ref_s->merged_def_se_hash;
ref_s->unmerged_def_se_hash = NULL; ref_s->unmerged_def_se_hash = NULL;
ref_s->use_se_hash = NULL; ref_s->use_se_hash = NULL;
break; break;
case USE_EXTENSION: case USE_EXTENSION:
ref_s->use_se_hash = ref_s->use_se_hash = htab_create (10,
htab_create (10, hash_descriptor_extension, eq_descriptor_extension, hash_descriptor_extension,
eq_descriptor_extension,
NULL); NULL);
se_hash = ref_s->use_se_hash; se_hash = ref_s->use_se_hash;
ref_s->unmerged_def_se_hash = NULL; ref_s->unmerged_def_se_hash = NULL;
...@@ -3197,8 +3192,8 @@ see_handle_relevant_defs (void) ...@@ -3197,8 +3192,8 @@ see_handle_relevant_defs (void)
root_entry = unionfind_root (&def_entry[i]); root_entry = unionfind_root (&def_entry[i]);
if ((ENTRY_EI (root_entry)->relevancy != SIGN_EXTENDED_DEF) if (ENTRY_EI (root_entry)->relevancy != SIGN_EXTENDED_DEF
&& (ENTRY_EI (root_entry)->relevancy != ZERO_EXTENDED_DEF)) && ENTRY_EI (root_entry)->relevancy != ZERO_EXTENDED_DEF)
/* The current web is not relevant. Continue to the next def. */ /* The current web is not relevant. Continue to the next def. */
continue; continue;
...@@ -3213,7 +3208,7 @@ see_handle_relevant_defs (void) ...@@ -3213,7 +3208,7 @@ see_handle_relevant_defs (void)
source_mode is narrower then its web's source_mode. source_mode is narrower then its web's source_mode.
This means that we need to generate the implicit extension explicitly This means that we need to generate the implicit extension explicitly
and store it in the current reference's merged_def_se_hash. */ and store it in the current reference's merged_def_se_hash. */
if ((ENTRY_EI (&def_entry[i])->local_relevancy == EXTENDED_DEF) if (ENTRY_EI (&def_entry[i])->local_relevancy == EXTENDED_DEF
|| (ENTRY_EI (&def_entry[i])->local_source_mode < || (ENTRY_EI (&def_entry[i])->local_source_mode <
ENTRY_EI (root_entry)->source_mode)) ENTRY_EI (root_entry)->source_mode))
{ {
...@@ -3282,8 +3277,8 @@ see_handle_relevant_uses (void) ...@@ -3282,8 +3277,8 @@ see_handle_relevant_uses (void)
root_entry = unionfind_root (&use_entry[i]); root_entry = unionfind_root (&use_entry[i]);
if ((ENTRY_EI (root_entry)->relevancy != SIGN_EXTENDED_DEF) if (ENTRY_EI (root_entry)->relevancy != SIGN_EXTENDED_DEF
&& (ENTRY_EI (root_entry)->relevancy != ZERO_EXTENDED_DEF)) && ENTRY_EI (root_entry)->relevancy != ZERO_EXTENDED_DEF)
/* The current web is not relevant. Continue to the next use. */ /* The current web is not relevant. Continue to the next use. */
continue; continue;
...@@ -3460,8 +3455,8 @@ see_analyze_one_def (rtx insn, enum machine_mode *source_mode, ...@@ -3460,8 +3455,8 @@ see_analyze_one_def (rtx insn, enum machine_mode *source_mode,
return NOT_RELEVANT; return NOT_RELEVANT;
/* If we can't use copy_rtx on the reference it can't be a reference. */ /* If we can't use copy_rtx on the reference it can't be a reference. */
if ((GET_CODE (PATTERN (prev_insn)) == PARALLEL) if (GET_CODE (PATTERN (prev_insn)) == PARALLEL
&& (asm_noperands (PATTERN (prev_insn)) >= 0)) && asm_noperands (PATTERN (prev_insn)) >= 0)
return NOT_RELEVANT; return NOT_RELEVANT;
/* Now, check if this extension is a reference itself. If so, it is not /* Now, check if this extension is a reference itself. If so, it is not
...@@ -3503,15 +3498,15 @@ see_analyze_one_def (rtx insn, enum machine_mode *source_mode, ...@@ -3503,15 +3498,15 @@ see_analyze_one_def (rtx insn, enum machine_mode *source_mode,
switch (GET_CODE (rhs)) switch (GET_CODE (rhs))
{ {
case (SIGN_EXTEND): case SIGN_EXTEND:
*source_mode = GET_MODE (XEXP (rhs, 0)); *source_mode = GET_MODE (XEXP (rhs, 0));
*source_mode_unsigned = MAX_MACHINE_MODE; *source_mode_unsigned = MAX_MACHINE_MODE;
return EXTENDED_DEF; return EXTENDED_DEF;
case (ZERO_EXTEND): case ZERO_EXTEND:
*source_mode = MAX_MACHINE_MODE; *source_mode = MAX_MACHINE_MODE;
*source_mode_unsigned = GET_MODE (XEXP (rhs, 0)); *source_mode_unsigned = GET_MODE (XEXP (rhs, 0));
return EXTENDED_DEF; return EXTENDED_DEF;
case (CONST_INT): case CONST_INT:
val = INTVAL (rhs); val = INTVAL (rhs);
...@@ -3521,17 +3516,17 @@ see_analyze_one_def (rtx insn, enum machine_mode *source_mode, ...@@ -3521,17 +3516,17 @@ see_analyze_one_def (rtx insn, enum machine_mode *source_mode,
mode = GET_MODE_WIDER_MODE (mode), i++) mode = GET_MODE_WIDER_MODE (mode), i++)
{ {
val2 = trunc_int_for_mode (val, mode); val2 = trunc_int_for_mode (val, mode);
if ((val2 == val) && (*source_mode == MAX_MACHINE_MODE)) if (val2 == val && *source_mode == MAX_MACHINE_MODE)
*source_mode = mode; *source_mode = mode;
if ((val == (val & (HOST_WIDE_INT)GET_MODE_MASK (mode))) if (val == (val & (HOST_WIDE_INT)GET_MODE_MASK (mode))
&& (*source_mode_unsigned == MAX_MACHINE_MODE)) && *source_mode_unsigned == MAX_MACHINE_MODE)
*source_mode_unsigned = mode; *source_mode_unsigned = mode;
if ((*source_mode != MAX_MACHINE_MODE) if (*source_mode != MAX_MACHINE_MODE
&& (*source_mode_unsigned !=MAX_MACHINE_MODE)) && *source_mode_unsigned !=MAX_MACHINE_MODE)
return EXTENDED_DEF; return EXTENDED_DEF;
} }
if ((*source_mode != MAX_MACHINE_MODE) if (*source_mode != MAX_MACHINE_MODE
|| (*source_mode_unsigned !=MAX_MACHINE_MODE)) || *source_mode_unsigned !=MAX_MACHINE_MODE)
return EXTENDED_DEF; return EXTENDED_DEF;
return NOT_RELEVANT; return NOT_RELEVANT;
default: default:
...@@ -3609,8 +3604,8 @@ see_update_defs_relevancy (void) ...@@ -3609,8 +3604,8 @@ see_update_defs_relevancy (void)
break; break;
case EXTENDED_DEF : case EXTENDED_DEF :
fprintf (dump_file, "EXTENDED_DEF, "); fprintf (dump_file, "EXTENDED_DEF, ");
if ((source_mode != MAX_MACHINE_MODE) if (source_mode != MAX_MACHINE_MODE
&& (source_mode_unsigned != MAX_MACHINE_MODE)) && source_mode_unsigned != MAX_MACHINE_MODE)
{ {
fprintf (dump_file, "positive const, "); fprintf (dump_file, "positive const, ");
fprintf (dump_file, "source_mode_signed = %s, ", fprintf (dump_file, "source_mode_signed = %s, ",
...@@ -3662,10 +3657,8 @@ see_propagate_extensions_to_uses (void) ...@@ -3662,10 +3657,8 @@ see_propagate_extensions_to_uses (void)
and there is at least one definition that was marked as SIGN_EXTENDED_DEF and there is at least one definition that was marked as SIGN_EXTENDED_DEF
or ZERO_EXTENDED_DEF. */ or ZERO_EXTENDED_DEF. */
for (i = 0; i < uses_num; i++) for (i = 0; i < uses_num; i++)
{
union_defs (df, DF_USES_GET (df, i), def_entry, use_entry, union_defs (df, DF_USES_GET (df, i), def_entry, use_entry,
see_update_leader_extra_info); see_update_leader_extra_info);
}
/* Generate use extensions for references and insert these /* Generate use extensions for references and insert these
references to see_bb_splay_ar data structure. */ references to see_bb_splay_ar data structure. */
...@@ -3681,13 +3674,13 @@ see_propagate_extensions_to_uses (void) ...@@ -3681,13 +3674,13 @@ see_propagate_extensions_to_uses (void)
if (num_relevant_defs < 0) if (num_relevant_defs < 0)
return false; return false;
return ((num_relevant_uses > 0) || (num_relevant_defs > 0)); return num_relevant_uses > 0 || num_relevant_defs > 0;
} }
/* Main entry point for the sign extension elimination optimization. */ /* Main entry point for the sign extension elimination optimization. */
void static void
see_main (void) see_main (void)
{ {
bool cont = false; bool cont = false;
...@@ -3742,7 +3735,7 @@ see_main (void) ...@@ -3742,7 +3735,7 @@ see_main (void)
static bool static bool
gate_handle_see (void) gate_handle_see (void)
{ {
return ((optimize > 1) && flag_see); return optimize > 1 && flag_see;
} }
static unsigned int static unsigned int
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment