From 7743fdb993f4468e0f47fdff3f2db3c64fd344f6 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 3 Sep 2001 22:54:02 +0200 Subject: [PATCH] loop.c (express_from_1): Fix CONSTANT_P(a) case. * loop.c (express_from_1): Fix CONSTANT_P(a) case. * gcc.c-torture/compile/20010903-1.c: New test. From-SVN: r45365 --- gcc/ChangeLog | 4 +++ gcc/loop.c | 2 +- gcc/testsuite/ChangeLog | 4 +++ .../gcc.c-torture/compile/20010903-1.c | 28 +++++++++++++++++++ 4 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/20010903-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 312b2e069c4..a7ce66e5751 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2001-09-03 Jakub Jelinek + + * loop.c (express_from_1): Fix CONSTANT_P(a) case. + 2001-09-03 Richard Henderson * function.h (struct function): Add arg_pointer_save_area_init. diff --git a/gcc/loop.c b/gcc/loop.c index 5fbe6670f71..e72f421b8cc 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -6371,7 +6371,7 @@ express_from_1 (a, b, mult) } else if (CONSTANT_P (a)) { - return simplify_gen_binary (MINUS, GET_MODE (b) != VOIDmode ? GET_MODE (b) : GET_MODE (a), const0_rtx, a); + return simplify_gen_binary (MINUS, GET_MODE (b) != VOIDmode ? GET_MODE (b) : GET_MODE (a), b, a); } else if (GET_CODE (b) == PLUS) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 405b0e0d63c..b76142b9752 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2001-09-03 Jakub Jelinek + + * gcc.c-torture/compile/20010903-1.c: New test. + 2001-08-31 Roman Zippel * testsuite/gcc.c-torture/execute/ieee/ieee.exp: Add -ffloat-store diff --git a/gcc/testsuite/gcc.c-torture/compile/20010903-1.c b/gcc/testsuite/gcc.c-torture/compile/20010903-1.c new file mode 100644 index 00000000000..8e519f26e41 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20010903-1.c @@ -0,0 +1,28 @@ +struct A { + long a; +}; + +static inline void foo(struct A *x) +{ + __asm__ __volatile__("" : "+m"(x->a) : "r"(x) : "memory", "cc"); +} + +static inline void bar(struct A *x) +{ + foo(x); +} + +struct B { char buf[640]; struct A a; }; +struct B b[32]; + +int baz(void) +{ + int i; + struct B *j; + for (i = 1; i < 32; i++) + { + j = &b[i]; + bar(&j->a); + } + return 0; +}