diff options
author | Pitchumani Sivanupandi <pitchumani.s@atmel.com> | 2016-05-21 10:47:27 +0000 |
---|---|---|
committer | Denis Chertykov <denisc@gcc.gnu.org> | 2016-05-21 13:47:27 +0300 |
commit | 8e916b1650bfb449cf121b432d7f08e210f1782f (patch) | |
tree | 3165cf398cdf026a4c35a082462aaab4768d33d9 | |
parent | 03b2a15fa54e5ea1d02e86bb036f4692b155151e (diff) | |
download | gcc-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
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/avr/avr.md | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/avr/pr71103.c | 16 |
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; +} + |