diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2010-07-02 11:48:30 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@gcc.gnu.org> | 2010-07-02 11:48:30 +0000 |
commit | 1a4fc49d7fccd1048eec7c73153e5de4da0a5885 (patch) | |
tree | 6f82b49dda63de30e711545eed096b715a9481f4 /gcc | |
parent | d1f736a2d7b21c9fcc19355e8dcd82c99051c107 (diff) | |
download | gcc-1a4fc49d7fccd1048eec7c73153e5de4da0a5885.zip gcc-1a4fc49d7fccd1048eec7c73153e5de4da0a5885.tar.gz gcc-1a4fc49d7fccd1048eec7c73153e5de4da0a5885.tar.bz2 |
re PR target/44707 (operand requires impossible reload)
ChangeLog:
PR target/44707
* config/rs6000/rs6000.c (rs6000_legitimize_reload_address): Recognize
(lo_sum (high ...) ...) patterns generated by earlier passes.
testsuite/ChangeLog:
PR target/44707
* gcc.c-torture/compile/pr44707.c: New test.
From-SVN: r161703
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 11 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr44707.c | 14 |
4 files changed, 36 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c1e0ae7..4d05ea2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-07-02 Ulrich Weigand <Ulrich.Weigand@de.ibm.com> + + PR target/44707 + * config/rs6000/rs6000.c (rs6000_legitimize_reload_address): Recognize + (lo_sum (high ...) ...) patterns generated by earlier passes. + 2010-07-02 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> * doc/install.texi (Prerequisites): Document Perl requirement on diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 36187c9..a98b4dd 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -5934,6 +5934,17 @@ rs6000_legitimize_reload_address (rtx x, enum machine_mode mode, return x; } + /* Likewise for (lo_sum (high ...) ...) output we have generated. */ + if (GET_CODE (x) == LO_SUM + && GET_CODE (XEXP (x, 0)) == HIGH) + { + push_reload (XEXP (x, 0), NULL_RTX, &XEXP (x, 0), NULL, + BASE_REG_CLASS, Pmode, VOIDmode, 0, 0, + opnum, (enum reload_type)type); + *win = 1; + return x; + } + #if TARGET_MACHO if (DEFAULT_ABI == ABI_DARWIN && flag_pic && GET_CODE (x) == LO_SUM diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c1a291d..9fe76bc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-07-02 Ulrich Weigand <Ulrich.Weigand@de.ibm.com> + + PR target/44707 + * gcc.c-torture/compile/pr44707.c: New test. + 2010-07-02 Paolo Carlini <paolo.carlini@oracle.com> PR c++/44039 diff --git a/gcc/testsuite/gcc.c-torture/compile/pr44707.c b/gcc/testsuite/gcc.c-torture/compile/pr44707.c new file mode 100644 index 0000000..9031f00 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr44707.c @@ -0,0 +1,14 @@ +extern struct { int a, b, c, d; } v; +extern int w; + +void +foo (void) +{ + int e1 = v.a; + int e2 = w; + int e3 = v.b; + int e4 = v.c; + int e5 = v.d; + __asm__ volatile ("/* %0 %1 %2 %3 %4 */" : : "nro" (e1), "nro" (e2), "nro" (e3), "nro" (e4), "nro" (e5)); +} + |