aboutsummaryrefslogtreecommitdiff
path: root/gcc/fold-const.h
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2017-07-19 14:31:59 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2017-07-19 14:31:59 +0200
commit8d1628eb33d4f53832d6d4be2b0021353057a370 (patch)
treed094faeffd74258f4d93793acf99507d3bb801ad /gcc/fold-const.h
parent20deef65ae6058143c29199c1aab12d94e75181c (diff)
downloadgcc-8d1628eb33d4f53832d6d4be2b0021353057a370.zip
gcc-8d1628eb33d4f53832d6d4be2b0021353057a370.tar.gz
gcc-8d1628eb33d4f53832d6d4be2b0021353057a370.tar.bz2
re PR tree-optimization/81346 (Missed constant propagation into comparison)
PR tree-optimization/81346 * fold-const.h (fold_div_compare, range_check_type): Declare. * fold-const.c (range_check_type): New function. (build_range_check): Use range_check_type. (fold_div_compare): No longer static, rewritten into a match.pd helper function. (fold_comparison): Don't call fold_div_compare here. * match.pd (X / C1 op C2): New optimization using fold_div_compare as helper function. * gcc.dg/tree-ssa/pr81346-1.c: New test. * gcc.dg/tree-ssa/pr81346-2.c: New test. * gcc.dg/tree-ssa/pr81346-3.c: New test. * gcc.dg/tree-ssa/pr81346-4.c: New test. * gcc.target/i386/umod-3.c: Hide comparison against 1 from the compiler to avoid X / C1 op C2 optimization to trigger. From-SVN: r250338
Diffstat (limited to 'gcc/fold-const.h')
-rw-r--r--gcc/fold-const.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/gcc/fold-const.h b/gcc/fold-const.h
index 7abf4d1..780e5c7 100644
--- a/gcc/fold-const.h
+++ b/gcc/fold-const.h
@@ -88,6 +88,8 @@ extern void fold_undefer_overflow_warnings (bool, const gimple *, int);
extern void fold_undefer_and_ignore_overflow_warnings (void);
extern bool fold_deferring_overflow_warnings_p (void);
extern void fold_overflow_warning (const char*, enum warn_strict_overflow_code);
+extern enum tree_code fold_div_compare (enum tree_code, tree, tree,
+ tree *, tree *, bool *);
extern int operand_equal_p (const_tree, const_tree, unsigned int);
extern int multiple_of_p (tree, const_tree, const_tree);
#define omit_one_operand(T1,T2,T3)\
@@ -175,6 +177,7 @@ extern bool tree_expr_nonnegative_warnv_p (tree, bool *, int = 0);
extern tree make_range (tree, int *, tree *, tree *, bool *);
extern tree make_range_step (location_t, enum tree_code, tree, tree, tree,
tree *, tree *, int *, bool *);
+extern tree range_check_type (tree);
extern tree build_range_check (location_t, tree, tree, int, tree, tree);
extern bool merge_ranges (int *, tree *, tree *, int, tree, tree, int,
tree, tree);