diff options
author | Jakub Jelinek <jakub@redhat.com> | 2005-12-16 13:12:41 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2005-12-16 13:12:41 +0100 |
commit | a1615718f5f7eae8acb173637725808d02bb9c00 (patch) | |
tree | ac8e1c720ac8e73c2f5c6adefd286fbc5483c5be /gcc/loop.c | |
parent | 0c8c236b7ac9f111048741b57339eee2e72a0a3e (diff) | |
download | gcc-a1615718f5f7eae8acb173637725808d02bb9c00.zip gcc-a1615718f5f7eae8acb173637725808d02bb9c00.tar.gz gcc-a1615718f5f7eae8acb173637725808d02bb9c00.tar.bz2 |
re PR rtl-optimization/24899 (loop.c miscompiles libgnomecanvas)
PR rtl-optimization/24899
* loop.c (strength_reduce): Don't reduce giv that is not always
computable and where add_val or mult_val can trap.
* gcc.c-torture/execute/20051215-1.c: New test.
From-SVN: r108642
Diffstat (limited to 'gcc/loop.c')
-rw-r--r-- | gcc/loop.c | 11 |
1 files changed, 11 insertions, 0 deletions
@@ -6486,6 +6486,17 @@ strength_reduce (struct loop *loop, int flags) v->ignore = 1; bl->all_reduced = 0; } + else if (!v->always_computable + && (may_trap_or_fault_p (v->add_val) + || may_trap_or_fault_p (v->mult_val))) + { + if (loop_dump_stream) + fprintf (loop_dump_stream, + "giv of insn %d: not always computable.\n", + INSN_UID (v->insn)); + v->ignore = 1; + bl->all_reduced = 0; + } else { /* Check that we can increment the reduced giv without a |