aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>2015-10-27 18:32:37 +0000
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>2015-10-27 18:32:37 +0000
commit7263fa9ff190a311c6fefc4aafb374437d1020ae (patch)
tree423a818625d7445fed2a22a6965d2871d0c3ff24 /gcc
parent0d8e1702cfe8da6c3af6485aaba8c3d006cd3791 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/config/aarch64/aarch64.md4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/aarch64/pr68102_1.c18
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;
+}