diff options
author | Robin Dapp <rdapp@linux.vnet.ibm.com> | 2016-09-28 05:13:19 +0000 |
---|---|---|
committer | Markus Trippelsdorf <trippels@gcc.gnu.org> | 2016-09-28 05:13:19 +0000 |
commit | 1f5638916419d13d302d37c5fe4210d34417cc19 (patch) | |
tree | cc8dcd93c833922b0e9a385007793ef6506b7931 /gcc/tree-vect-loop-manip.c | |
parent | c03049b614676692ccd99a99c0b39a69f61bebec (diff) | |
download | gcc-1f5638916419d13d302d37c5fe4210d34417cc19.zip gcc-1f5638916419d13d302d37c5fe4210d34417cc19.tar.gz gcc-1f5638916419d13d302d37c5fe4210d34417cc19.tar.bz2 |
re PR tree-optimization/77724 (bootstrap-O3 broken: ICE: in tree_to_uhwi, at tree.c:7330)
Fix PR tree-optimization/77724
2016-09-27 Robin Dapp <rdapp@linux.vnet.ibm.com>
PR tree-optimization/77724
* tree-vect-loop-manip.c (create_intersect_range_checks_index):
Add tree_fits_shwi_p check.
From-SVN: r240565
Diffstat (limited to 'gcc/tree-vect-loop-manip.c')
-rw-r--r-- | gcc/tree-vect-loop-manip.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/gcc/tree-vect-loop-manip.c b/gcc/tree-vect-loop-manip.c index 8203040..a715fd9 100644 --- a/gcc/tree-vect-loop-manip.c +++ b/gcc/tree-vect-loop-manip.c @@ -2301,6 +2301,9 @@ create_intersect_range_checks_index (loop_vec_info loop_vinfo, tree *cond_expr, if (!tree_fits_uhwi_p (dr_a.seg_len) || !tree_fits_uhwi_p (dr_b.seg_len)) return false; + if (!tree_fits_shwi_p (DR_STEP (dr_a.dr))) + return false; + if (!operand_equal_p (DR_BASE_OBJECT (dr_a.dr), DR_BASE_OBJECT (dr_b.dr), 0)) return false; @@ -2310,9 +2313,8 @@ create_intersect_range_checks_index (loop_vec_info loop_vinfo, tree *cond_expr, gcc_assert (TREE_CODE (DR_STEP (dr_a.dr)) == INTEGER_CST); bool neg_step = tree_int_cst_compare (DR_STEP (dr_a.dr), size_zero_node) < 0; - unsigned HOST_WIDE_INT abs_step = tree_to_uhwi (DR_STEP (dr_a.dr)); - if (neg_step) - abs_step = -abs_step; + unsigned HOST_WIDE_INT abs_step + = absu_hwi (tree_to_shwi (DR_STEP (dr_a.dr))); unsigned HOST_WIDE_INT seg_len1 = tree_to_uhwi (dr_a.seg_len); unsigned HOST_WIDE_INT seg_len2 = tree_to_uhwi (dr_b.seg_len); @@ -2331,7 +2333,7 @@ create_intersect_range_checks_index (loop_vec_info loop_vinfo, tree *cond_expr, { tree access1 = DR_ACCESS_FN (dr_a.dr, i); tree access2 = DR_ACCESS_FN (dr_b.dr, i); - /* Two index must be the same if they are not scev, or not scev wrto + /* Two indices must be the same if they are not scev, or not scev wrto current loop being vecorized. */ if (TREE_CODE (access1) != POLYNOMIAL_CHREC || TREE_CODE (access2) != POLYNOMIAL_CHREC @@ -2343,7 +2345,7 @@ create_intersect_range_checks_index (loop_vec_info loop_vinfo, tree *cond_expr, return false; } - /* Two index must have the same step. */ + /* The two indices must have the same step. */ if (!operand_equal_p (CHREC_RIGHT (access1), CHREC_RIGHT (access2), 0)) return false; |