#include "c-family/c-objc.h"
#include "c-family/c-common.h"
#include "c-family/c-ubsan.h"
+ #include "cilk.h"
+#include "wide-int.h"
/* Possible cases of implicit bad conversions. Used to select
diagnostic messages in convert_for_assignment. */
#include "splay-tree.h"
#include "plugin.h"
#include "cgraph.h"
+ #include "cilk.h"
+#include "wide-int.h"
/* Possible cases of bad specifiers type used by bad_specifiers. */
enum bad_spec_place {
your target, you should override these values by defining the
appropriate symbols in your tm.h file. */
- #ifndef BITS_PER_UNIT
- #define BITS_PER_UNIT 8
- #endif
-
+#if BITS_PER_UNIT == 8
+#define LOG2_BITS_PER_UNIT 3
+#elif BITS_PER_UNIT == 16
+#define LOG2_BITS_PER_UNIT 4
+#else
+#error Unknown BITS_PER_UNIT
+#endif
+
#ifndef BITS_PER_WORD
#define BITS_PER_WORD (BITS_PER_UNIT * UNITS_PER_WORD)
#endif
typedef struct die_struct *dw_die_ref;
typedef const struct die_struct *const_dw_die_ref;
- typedef struct dw_val_struct *dw_val_ref;
- typedef struct dw_cfi_struct *dw_cfi_ref;
- typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
+ typedef struct dw_val_node *dw_val_ref;
+ typedef struct dw_cfi_node *dw_cfi_ref;
+ typedef struct dw_loc_descr_node *dw_loc_descr_ref;
typedef struct dw_loc_list_struct *dw_loc_list_ref;
+typedef wide_int *wide_int_ptr;
/* Call frames are described using a sequence of Call Frame
static rtx extract_fixed_bit_field (enum machine_mode, rtx,
unsigned HOST_WIDE_INT,
unsigned HOST_WIDE_INT, rtx, int);
-static rtx mask_rtx (enum machine_mode, int, int, int);
+ static rtx extract_fixed_bit_field_1 (enum machine_mode, rtx,
+ unsigned HOST_WIDE_INT,
+ unsigned HOST_WIDE_INT, rtx, int);
static rtx lshift_value (enum machine_mode, unsigned HOST_WIDE_INT, int);
static rtx extract_split_bit_field (rtx, unsigned HOST_WIDE_INT,
unsigned HOST_WIDE_INT, int);
if (pred)
{
test->u.pred.data = pred;
- allows_const_int = pred->codes[CONST_INT];
+ allows_const_int = (pred->codes[CONST_INT]
+ || pred->codes[CONST_WIDE_INT]);
if (was_code == MATCH_PARALLEL
&& pred->singleton != PARALLEL)
- message_with_line (pattern_lineno,
- "predicate '%s' used in match_parallel "
- "does not allow only PARALLEL", pred->name);
+ error_with_line (pattern_lineno,
+ "predicate '%s' used in match_parallel "
+ "does not allow only PARALLEL", pred->name);
else
code = pred->singleton;
}
tree val;
/* Its coefficient in the combination. */
- double_int coef;
+ widest_int coef;
};
- typedef struct affine_tree_combination
+ struct aff_tree
{
/* Type of the result of the combination. */
tree type;
than MAX_AFF_ELTS elements. Type of REST will be either sizetype for
TYPE of POINTER_TYPEs or TYPE. */
tree rest;
- } aff_tree;
+ };
-double_int double_int_ext_for_comb (double_int, aff_tree *);
-void aff_combination_const (aff_tree *, tree, double_int);
+widest_int wide_int_ext_for_comb (const widest_int &, aff_tree *);
+void aff_combination_const (aff_tree *, tree, const widest_int &);
void aff_combination_elt (aff_tree *, tree, tree);
-void aff_combination_scale (aff_tree *, double_int);
+void aff_combination_scale (aff_tree *, const widest_int &);
void aff_combination_mult (aff_tree *, aff_tree *, aff_tree *);
void aff_combination_add (aff_tree *, aff_tree *);
-void aff_combination_add_elt (aff_tree *, tree, double_int);
+void aff_combination_add_elt (aff_tree *, tree, const widest_int &);
void aff_combination_remove_elt (aff_tree *, unsigned);
void aff_combination_convert (aff_tree *, tree);
void tree_to_aff_combination (tree, tree, aff_tree *);
}
else
{
- minv = minv.max (minc, TYPE_UNSIGNED (type));
- maxv = maxv.min (maxc, TYPE_UNSIGNED (type));
+ minv = wi::max (minv, minc, sgn);
+ maxv = wi::min (maxv, maxc, sgn);
- gcc_assert (wi::le_p (minv, maxv, sgn));
+ /* If the PHI result range are inconsistent with
+ the VAR range, give up on looking at the PHI
+ results. This can happen if VR_UNDEFINED is
+ involved. */
- if (minv.cmp (maxv, TYPE_UNSIGNED (type)) > 0)
++ if (wi::gt_p (minv, maxv))
+ {
+ rtype = get_range_info (var, &minv, &maxv);
+ break;
+ }
}
}
}
#ifndef GCC_TREE_SSA_LOOP_H
#define GCC_TREE_SSA_LOOP_H
+#include "wide-int.h"
+
/* Affine iv. */
- typedef struct affine_iv_d
+ struct affine_iv
{
/* Iv = BASE + STEP * i. */
tree base, step;