From 1f9be5050fa8869c7a07bd1b0953ce3754917b5d Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Thu, 3 Aug 2017 11:41:55 +0200 Subject: [PATCH] re PR tree-optimization/81655 (new test case gcc.dg/tree-ssa/pr81588.c fails on powerpc64) PR tree-optimization/81655 PR tree-optimization/81588 * tree-ssa-reassoc.c (optimize_range_tests_var_bound): Handle also the case when ranges[i].low and high are 1 for unsigned type with precision 1. From-SVN: r250849 --- gcc/ChangeLog | 6 ++++++ gcc/tree-ssa-reassoc.c | 19 +++++++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a9b923a22fa..466afb908b6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2017-08-03 Jakub Jelinek + PR tree-optimization/81655 + PR tree-optimization/81588 + * tree-ssa-reassoc.c (optimize_range_tests_var_bound): Handle also + the case when ranges[i].low and high are 1 for unsigned type with + precision 1. + PR middle-end/81052 * omp-low.c (diagnose_sb_0): Handle flag_openmp_simd like flag_openmp. (pass_diagnose_omp_blocks::gate): Enable also for flag_openmp_simd. diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c index b4fe488e797..6ecba809199 100644 --- a/gcc/tree-ssa-reassoc.c +++ b/gcc/tree-ssa-reassoc.c @@ -2918,11 +2918,22 @@ optimize_range_tests_var_bound (enum tree_code opcode, int first, int length, for (i = 0; i < length; i++) { + bool in_p = ranges[i].in_p; if (ranges[i].low == NULL_TREE - || ranges[i].high == NULL_TREE - || !integer_zerop (ranges[i].low) - || !integer_zerop (ranges[i].high)) + || ranges[i].high == NULL_TREE) continue; + if (!integer_zerop (ranges[i].low) + || !integer_zerop (ranges[i].high)) + { + if (ranges[i].exp + && TYPE_PRECISION (TREE_TYPE (ranges[i].exp)) == 1 + && TYPE_UNSIGNED (TREE_TYPE (ranges[i].exp)) + && integer_onep (ranges[i].low) + && integer_onep (ranges[i].high)) + in_p = !in_p; + else + continue; + } gimple *stmt; tree_code ccode; @@ -2964,7 +2975,7 @@ optimize_range_tests_var_bound (enum tree_code opcode, int first, int length, default: continue; } - if (ranges[i].in_p) + if (in_p) ccode = invert_tree_comparison (ccode, false); switch (ccode) { -- 2.30.2