From 653a4b32fe72e33bfd4cdd4c25493049524a3805 Mon Sep 17 00:00:00 2001 From: Bin Cheng Date: Thu, 2 Mar 2017 11:25:11 +0000 Subject: [PATCH] re PR tree-optimization/66768 (address space gets lost on literal pointer) PR tree-optimization/66768 * tree-ssa-loop-ivopts.c (find_interesting_uses_address): Skip addr iv_use if base object can't be determined. gcc/testsuite * gcc.target/i386/pr66768.c: New test. From-SVN: r245837 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.target/i386/pr66768.c | 17 +++++++++++++++++ gcc/tree-ssa-loop-ivopts.c | 4 ++++ 4 files changed, 32 insertions(+) create mode 100644 gcc/testsuite/gcc.target/i386/pr66768.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0909183..8f196d7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2017-03-02 Bin Cheng + + PR tree-optimization/66768 + * tree-ssa-loop-ivopts.c (find_interesting_uses_address): Skip addr + iv_use if base object can't be determined. + 2017-03-02 Jakub Jelinek PR tree-optimization/79345 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8677d67..9f23154 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-03-02 Bin Cheng + + PR tree-optimization/66768 + * gcc.target/i386/pr66768.c: New test. + 2017-03-02 Richard Biener * gcc.dg/rtl/x86_64/dfinit.c: Only run for lp64. diff --git a/gcc/testsuite/gcc.target/i386/pr66768.c b/gcc/testsuite/gcc.target/i386/pr66768.c new file mode 100644 index 0000000..9a8ad1f --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr66768.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +typedef __seg_gs struct foo_s { + int a[20]; +} foo_t; + +int sum(void) +{ + const foo_t *p = (const foo_t *)0x1234; + int i, total=0; + for (i=0; i<20; i++) + total += p->a[i]; + return total; +} + +/* { dg-final { scan-assembler "add*.\[ \t\]%gs:" } } */ diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c index c9d16b2..f3ad373 100644 --- a/gcc/tree-ssa-loop-ivopts.c +++ b/gcc/tree-ssa-loop-ivopts.c @@ -2324,6 +2324,10 @@ find_interesting_uses_address (struct ivopts_data *data, gimple *stmt, } civ = alloc_iv (data, base, step); + /* Fail if base object of this memory reference is unknown. */ + if (civ->base_object == NULL_TREE) + goto fail; + record_group_use (data, op_p, civ, stmt, USE_ADDRESS); return; -- 2.7.4