diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2021-09-23 09:32:00 -0400 |
---|---|---|
committer | Andrew MacLeod <amacleod@redhat.com> | 2021-09-23 12:56:43 -0400 |
commit | fe4e6c824a580012bf9034cc33f0b440df93f56f (patch) | |
tree | d51ab000122b4b0e4c987ac4c00cccf6d0675680 | |
parent | 053e1d642104d19d5f9e5fb08a9e7354a0db28f5 (diff) | |
download | gcc-fe4e6c824a580012bf9034cc33f0b440df93f56f.zip gcc-fe4e6c824a580012bf9034cc33f0b440df93f56f.tar.gz gcc-fe4e6c824a580012bf9034cc33f0b440df93f56f.tar.bz2 |
Look for a relation between operands only when possible.
Do not look for a relation between 2 operands if there is no range-ops handler.
gcc/
PR tree-optimization/102463
* gimple-range-fold.cc (fold_using_range::relation_fold_and_or): If
there is no range-ops handler, don't look for a relation.
gcc/testsuite/
* gcc.dg/pr102463.c: New.
-rw-r--r-- | gcc/gimple-range-fold.cc | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr102463.c | 21 |
2 files changed, 25 insertions, 0 deletions
diff --git a/gcc/gimple-range-fold.cc b/gcc/gimple-range-fold.cc index 35324fd..bb09b75 100644 --- a/gcc/gimple-range-fold.cc +++ b/gcc/gimple-range-fold.cc @@ -1358,6 +1358,10 @@ fold_using_range::relation_fold_and_or (irange& lhs_range, gimple *s, range_operator *handler1 = gimple_range_handler (SSA_NAME_DEF_STMT (ssa1)); range_operator *handler2 = gimple_range_handler (SSA_NAME_DEF_STMT (ssa2)); + // If either handler is not present, no relation is found. + if (!handler1 || !handler2) + return; + int_range<2> bool_one (boolean_true_node, boolean_true_node); relation_kind relation1 = handler1->op1_op2_relation (bool_one); diff --git a/gcc/testsuite/gcc.dg/pr102463.c b/gcc/testsuite/gcc.dg/pr102463.c new file mode 100644 index 0000000..ca63f0b --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr102463.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +_Bool _bfd_elf_merge_symbol_h, _bfd_elf_merge_symbol_h_1; +_Bool _bfd_elf_merge_symbol_olddef; +_Bool bfd_is_com_section(); + +void +_bfd_elf_merge_symbol() { + _Bool newdef = bfd_is_com_section(), ntdef, tdef; + _bfd_elf_merge_symbol_olddef = _bfd_elf_merge_symbol_h; + if (_bfd_elf_merge_symbol_h_1) { + ntdef = newdef; + tdef = _bfd_elf_merge_symbol_h; + } else { + ntdef = _bfd_elf_merge_symbol_h; + tdef = newdef; + } + if (tdef && ntdef) + ; +} |