diff options
author | Kyrylo Tkachov <kyrylo.tkachov@arm.com> | 2015-10-27 18:32:37 +0000 |
---|---|---|
committer | Kyrylo Tkachov <ktkachov@gcc.gnu.org> | 2015-10-27 18:32:37 +0000 |
commit | 7263fa9ff190a311c6fefc4aafb374437d1020ae (patch) | |
tree | 423a818625d7445fed2a22a6965d2871d0c3ff24 /gcc | |
parent | 0d8e1702cfe8da6c3af6485aaba8c3d006cd3791 (diff) | |
download | gcc-7263fa9ff190a311c6fefc4aafb374437d1020ae.zip gcc-7263fa9ff190a311c6fefc4aafb374437d1020ae.tar.gz gcc-7263fa9ff190a311c6fefc4aafb374437d1020ae.tar.bz2 |
[AArch64] PR 68102: Check that operand is REG before checking the REGNO in mov-immediate splitters
PR target/68102
* config/aarch64/aarch64.md (*movsi_aarch64): Check that
operands[0] is a reg before taking its REGNO in split condition.
(*movdi_aarch64): Likewise.
* gcc.target/aarch64/pr68102_1.c: New test.
From-SVN: r229455
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64.md | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/aarch64/pr68102_1.c | 18 |
4 files changed, 32 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ac7bba4..3c436f4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2015-10-27 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + PR target/68102 + * config/aarch64/aarch64.md (*movsi_aarch64): Check that + operands[0] is a reg before taking its REGNO in split condition. + (*movdi_aarch64): Likewise. + +2015-10-27 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + * config/aarch64/aarch64.c (aarch64_output_simd_mov_immediate): Handle floating point inner modes properly. diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md index baa97fd..7c052ca 100644 --- a/gcc/config/aarch64/aarch64.md +++ b/gcc/config/aarch64/aarch64.md @@ -995,7 +995,7 @@ fmov\\t%w0, %s1 fmov\\t%s0, %s1" "CONST_INT_P (operands[1]) && !aarch64_move_imm (INTVAL (operands[1]), SImode) - && GP_REGNUM_P (REGNO (operands[0]))" + && REG_P (operands[0]) && GP_REGNUM_P (REGNO (operands[0]))" [(const_int 0)] "{ aarch64_expand_mov_immediate (operands[0], operands[1]); @@ -1028,7 +1028,7 @@ fmov\\t%d0, %d1 movi\\t%d0, %1" "(CONST_INT_P (operands[1]) && !aarch64_move_imm (INTVAL (operands[1]), DImode)) - && GP_REGNUM_P (REGNO (operands[0]))" + && REG_P (operands[0]) && GP_REGNUM_P (REGNO (operands[0]))" [(const_int 0)] "{ aarch64_expand_mov_immediate (operands[0], operands[1]); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 230581c..78603a3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-10-27 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + + PR target/68102 + * gcc.target/aarch64/pr68102_1.c: New test. + 2015-01-27 Paul Thomas <pault@gcc.gnu.org> PR fortran/67933 diff --git a/gcc/testsuite/gcc.target/aarch64/pr68102_1.c b/gcc/testsuite/gcc.target/aarch64/pr68102_1.c new file mode 100644 index 0000000..3193b27 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/pr68102_1.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +typedef __Float64x1_t float64x1_t; + +typedef long int64_t; + +extern int64_t bar (float64x1_t f); + +int +foo (void) +{ + float64x1_t f = { 3.14159265358979311599796346854 }; + int64_t c = 0x400921FB54442D18; + int64_t r; + r = bar (f); + return r == c; +} |