summaryrefslogtreecommitdiff
path: root/gcc/tree-predcom.c
diff options
context:
space:
mode:
authormrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4>2013-08-13 20:41:07 +0000
committermrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4>2013-08-13 20:41:07 +0000
commite913b5cd5b6a9bd3a2ad58c65f9e3cd2bb55a28c (patch)
treef52a097017e3dcf89fad6525984e4591489f961e /gcc/tree-predcom.c
parent9a5942c1d4d9116ab74b0741cfe3894a89fd17fb (diff)
downloadgcc-e913b5cd5b6a9bd3a2ad58c65f9e3cd2bb55a28c.tar.gz
Add wide-int branch.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/wide-int@201707 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-predcom.c')
-rw-r--r--gcc/tree-predcom.c39
1 files changed, 20 insertions, 19 deletions
diff --git a/gcc/tree-predcom.c b/gcc/tree-predcom.c
index dceea8cc89a..dbc3bf48098 100644
--- a/gcc/tree-predcom.c
+++ b/gcc/tree-predcom.c
@@ -201,6 +201,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-pass.h"
#include "tree-affine.h"
#include "tree-inline.h"
+#include "wide-int-print.h"
/* The maximum number of iterations between the considered memory
references. */
@@ -228,7 +229,7 @@ typedef struct dref_d
unsigned distance;
/* Number of iterations offset from the first reference in the component. */
- double_int offset;
+ max_wide_int offset;
/* Number of the reference in a component, in dominance ordering. */
unsigned pos;
@@ -344,7 +345,7 @@ dump_dref (FILE *file, dref ref)
DR_IS_READ (ref->ref) ? "" : ", write");
fprintf (file, " offset ");
- dump_double_int (file, ref->offset, false);
+ print_decs (ref->offset, file);
fprintf (file, "\n");
fprintf (file, " distance %u\n", ref->distance);
@@ -617,7 +618,7 @@ aff_combination_dr_offset (struct data_reference *dr, aff_tree *offset)
tree_to_aff_combination_expand (DR_OFFSET (dr), type, offset,
&name_expansions);
- aff_combination_const (&delta, type, tree_to_double_int (DR_INIT (dr)));
+ aff_combination_const (&delta, type, max_wide_int (DR_INIT (dr)));
aff_combination_add (offset, &delta);
}
@@ -629,7 +630,7 @@ aff_combination_dr_offset (struct data_reference *dr, aff_tree *offset)
static bool
determine_offset (struct data_reference *a, struct data_reference *b,
- double_int *off)
+ max_wide_int *off)
{
aff_tree diff, baseb, step;
tree typea, typeb;
@@ -650,7 +651,7 @@ determine_offset (struct data_reference *a, struct data_reference *b,
{
/* If the references have loop invariant address, check that they access
exactly the same location. */
- *off = double_int_zero;
+ *off = 0;
return (operand_equal_p (DR_OFFSET (a), DR_OFFSET (b), 0)
&& operand_equal_p (DR_INIT (a), DR_INIT (b), 0));
}
@@ -659,7 +660,7 @@ determine_offset (struct data_reference *a, struct data_reference *b,
is a multiple of step. */
aff_combination_dr_offset (a, &diff);
aff_combination_dr_offset (b, &baseb);
- aff_combination_scale (&baseb, double_int_minus_one);
+ aff_combination_scale (&baseb, -1);
aff_combination_add (&diff, &baseb);
tree_to_aff_combination_expand (DR_STEP (a), TREE_TYPE (DR_STEP (a)),
@@ -733,7 +734,7 @@ split_data_refs_to_components (struct loop *loop,
FOR_EACH_VEC_ELT (depends, i, ddr)
{
- double_int dummy_off;
+ max_wide_int dummy_off;
if (DDR_ARE_DEPENDENT (ddr) == chrec_known)
continue;
@@ -776,7 +777,7 @@ split_data_refs_to_components (struct loop *loop,
dataref = XCNEW (struct dref_d);
dataref->ref = dr;
dataref->stmt = DR_STMT (dr);
- dataref->offset = double_int_zero;
+ dataref->offset = 0;
dataref->distance = 0;
dataref->always_accessed
@@ -832,7 +833,7 @@ suitable_component_p (struct loop *loop, struct component *comp)
first = comp->refs[0];
ok = suitable_reference_p (first->ref, &comp->comp_step);
gcc_assert (ok);
- first->offset = double_int_zero;
+ first->offset = 0;
for (i = 1; comp->refs.iterate (i, &a); i++)
{
@@ -896,7 +897,7 @@ order_drefs (const void *a, const void *b)
{
const dref *const da = (const dref *) a;
const dref *const db = (const dref *) b;
- int offcmp = (*da)->offset.scmp ((*db)->offset);
+ int offcmp = (*da)->offset.cmps ((*db)->offset);
if (offcmp != 0)
return offcmp;
@@ -918,16 +919,16 @@ static void
add_ref_to_chain (chain_p chain, dref ref)
{
dref root = get_chain_root (chain);
- double_int dist;
+ max_wide_int dist;
- gcc_assert (root->offset.sle (ref->offset));
+ gcc_assert (root->offset.les_p (ref->offset));
dist = ref->offset - root->offset;
- if (double_int::from_uhwi (MAX_DISTANCE).ule (dist))
+ if (max_wide_int::from_uhwi (MAX_DISTANCE).leu_p (dist))
{
free (ref);
return;
}
- gcc_assert (dist.fits_uhwi ());
+ gcc_assert (dist.fits_uhwi_p ());
chain->refs.safe_push (ref);
@@ -1022,7 +1023,7 @@ valid_initializer_p (struct data_reference *ref,
unsigned distance, struct data_reference *root)
{
aff_tree diff, base, step;
- double_int off;
+ max_wide_int off;
/* Both REF and ROOT must be accessing the same object. */
if (!operand_equal_p (DR_BASE_ADDRESS (ref), DR_BASE_ADDRESS (root), 0))
@@ -1042,7 +1043,7 @@ valid_initializer_p (struct data_reference *ref,
-DISTANCE-th iteration. */
aff_combination_dr_offset (root, &diff);
aff_combination_dr_offset (ref, &base);
- aff_combination_scale (&base, double_int_minus_one);
+ aff_combination_scale (&base, -1);
aff_combination_add (&diff, &base);
tree_to_aff_combination_expand (DR_STEP (root), TREE_TYPE (DR_STEP (root)),
@@ -1050,7 +1051,7 @@ valid_initializer_p (struct data_reference *ref,
if (!aff_combination_constant_multiple_p (&diff, &step, &off))
return false;
- if (off != double_int::from_uhwi (distance))
+ if (off != distance)
return false;
return true;
@@ -1178,7 +1179,7 @@ determine_roots_comp (struct loop *loop,
unsigned i;
dref a;
chain_p chain = NULL;
- double_int last_ofs = double_int_zero;
+ max_wide_int last_ofs = 0;
/* Invariants are handled specially. */
if (comp->comp_step == RS_INVARIANT)
@@ -1193,7 +1194,7 @@ determine_roots_comp (struct loop *loop,
FOR_EACH_VEC_ELT (comp->refs, i, a)
{
if (!chain || DR_IS_WRITE (a->ref)
- || double_int::from_uhwi (MAX_DISTANCE).ule (a->offset - last_ofs))
+ || max_wide_int (MAX_DISTANCE).leu_p (a->offset - last_ofs))
{
if (nontrivial_chain_p (chain))
{