aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2009-09-30 09:13:20 +0200
committerUros Bizjak <uros@gcc.gnu.org>2009-09-30 09:13:20 +0200
commit08a4a761ebe388e1b231eabd6f8e7e155d10b222 (patch)
tree9e128ec574bf2a222c259d1a12f00d3d15ba25a0 /gcc
parentc03c52480a18bf0d6060d99e597bc284fd576a31 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/config/alpha/alpha.md4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/alpha/pr22093.c14
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;
+}