diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2009-09-30 09:13:20 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2009-09-30 09:13:20 +0200 |
commit | 08a4a761ebe388e1b231eabd6f8e7e155d10b222 (patch) | |
tree | 9e128ec574bf2a222c259d1a12f00d3d15ba25a0 /gcc | |
parent | c03c52480a18bf0d6060d99e597bc284fd576a31 (diff) | |
download | gcc-08a4a761ebe388e1b231eabd6f8e7e155d10b222.zip gcc-08a4a761ebe388e1b231eabd6f8e7e155d10b222.tar.gz gcc-08a4a761ebe388e1b231eabd6f8e7e155d10b222.tar.bz2 |
re PR target/22093 (Unaligned access to HI values causes unrecognizable insn error)
PR target/22093
* config/alpha/alpha.md (unaligned_storehi_be): Force operand
of plus RTX into register.
testsuite/ChangeLog:
PR target/22093
* gcc.target/alpha/pr22093.c: New test.
From-SVN: r152322
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/alpha/alpha.md | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/alpha/pr22093.c | 14 |
4 files changed, 27 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 70a3efc..a14b81c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-09-30 Uros Bizjak <ubizjak@gmail.com> + + PR target/22093 + * config/alpha/alpha.md (unaligned_storehi_be): Force operand + of plus RTX into register. + 2009-09-30 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> * doc/install.texi: Linguistic and markup fixes. diff --git a/gcc/config/alpha/alpha.md b/gcc/config/alpha/alpha.md index 2773008..2327879 100644 --- a/gcc/config/alpha/alpha.md +++ b/gcc/config/alpha/alpha.md @@ -5861,7 +5861,7 @@ (mem:DI (and:DI (match_operand:DI 0 "address_operand" "") (const_int -8)))) (set (match_operand:DI 2 "register_operand" "") - (plus:DI (match_dup 0) (const_int 1))) + (plus:DI (match_dup 5) (const_int 1))) (set (match_dup 3) (and:DI (not:DI (ashift:DI (const_int 65535) @@ -5876,7 +5876,7 @@ (set (mem:DI (and:DI (match_dup 0) (const_int -8))) (match_dup 4))] "WORDS_BIG_ENDIAN" - "") + "operands[5] = force_reg (DImode, operands[0]);") ;; Here are the define_expand's for QI and HI moves that use the above ;; patterns. We have the normal sets, plus the ones that need scratch diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4a7961c..9c3ca43 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-09-30 Uros Bizjak <ubizjak@gmail.com> + + PR target/22093 + * gcc.target/alpha/pr22093.c: New test. + 2009-09-29 John Freeman <jfreeman08@gmail.com> Jason Merrill <jason@redhat.com> diff --git a/gcc/testsuite/gcc.target/alpha/pr22093.c b/gcc/testsuite/gcc.target/alpha/pr22093.c new file mode 100644 index 0000000..aa00e15 --- /dev/null +++ b/gcc/testsuite/gcc.target/alpha/pr22093.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +struct shared_ptr_struct +{ + unsigned long phase : 48; + unsigned thread : 16; + void *addr; +} x; + +void foo (void) +{ + x.thread = 2; +} |