aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPitchumani Sivanupandi <pitchumani.s@atmel.com>2016-05-21 10:47:27 +0000
committerDenis Chertykov <denisc@gcc.gnu.org>2016-05-21 13:47:27 +0300
commit8e916b1650bfb449cf121b432d7f08e210f1782f (patch)
tree3165cf398cdf026a4c35a082462aaab4768d33d9 /gcc
parent03b2a15fa54e5ea1d02e86bb036f4692b155151e (diff)
downloadgcc-8e916b1650bfb449cf121b432d7f08e210f1782f.zip
gcc-8e916b1650bfb449cf121b432d7f08e210f1782f.tar.gz
gcc-8e916b1650bfb449cf121b432d7f08e210f1782f.tar.bz2
re PR target/71103 (avr-gcc crashes with unrecognizable insn error)
PR target/71103 * config/avr/avr.md (define_expand "mov<mode>"): If the source operand is subreg (symbol_ref) then move the symbol ref to register. PR target/71103 * gcc.target/avr/pr71103.c: New test. From-SVN: r236558
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/avr/avr.md7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/avr/pr71103.c16
4 files changed, 34 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a4cdb4e..8652f5c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2016-05-21 Pitchumani Sivanupandi <pitchumani.s@atmel.com>
+
+ PR target/71103
+ * config/avr/avr.md (define_expand "mov<mode>"): If the source
+ operand is subreg (symbol_ref) then move the symbol ref to register.
+
2016-05-21 Jan Hubicka <hubicka@ucw.cz>
* tree.c (array_at_struct_end_p): Look through MEM_REF.
diff --git a/gcc/config/avr/avr.md b/gcc/config/avr/avr.md
index c988446..927bc69 100644
--- a/gcc/config/avr/avr.md
+++ b/gcc/config/avr/avr.md
@@ -638,6 +638,13 @@
rtx dest = operands[0];
rtx src = avr_eval_addr_attrib (operands[1]);
+ if (SUBREG_P(src) && (GET_CODE(XEXP(src,0)) == SYMBOL_REF) &&
+ can_create_pseudo_p())
+ {
+ rtx symbol_ref = XEXP(src, 0);
+ XEXP (src, 0) = copy_to_mode_reg (GET_MODE(symbol_ref), symbol_ref);
+ }
+
if (avr_mem_flash_p (dest))
DONE;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 3fc92f1..a409b88 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-05-20 Pitchumani Sivanupandi <pitchumani.s@atmel.com>
+
+ PR target/71103
+ * gcc.target/avr/pr71103.c: New test.
+
2016-05-21 Kugan Vivekanandarajah <kuganv@linaro.org>
PR middle-end/71179
diff --git a/gcc/testsuite/gcc.target/avr/pr71103.c b/gcc/testsuite/gcc.target/avr/pr71103.c
new file mode 100644
index 0000000..43244d1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/avr/pr71103.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-O1" } */
+
+struct ResponseStruct{
+ unsigned char responseLength;
+ char *response;
+};
+
+static char response[5];
+struct ResponseStruct something(){
+ struct ResponseStruct returnValue;
+ returnValue.responseLength = 5;
+ returnValue.response = response;
+ return returnValue;
+}
+