aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJames Greenhalgh <james.greenhalgh@arm.com>2015-12-04 20:02:56 +0000
committerJames Greenhalgh <jgreenhalgh@gcc.gnu.org>2015-12-04 20:02:56 +0000
commitbdf5848047f719389f64bcd2a6dda081adafa9aa (patch)
tree0ac0c59087b9ab59d5606ca5a8c2f5da25468ea6 /gcc
parent2331aa006980bf87ff024815cdd74146d2ca6d2d (diff)
downloadgcc-bdf5848047f719389f64bcd2a6dda081adafa9aa.zip
gcc-bdf5848047f719389f64bcd2a6dda081adafa9aa.tar.gz
gcc-bdf5848047f719389f64bcd2a6dda081adafa9aa.tar.bz2
[AArch64] Add register constraints to add<mode>3_pluslong
gcc/ 2015-12-04 James Greenhalgh <james.greenhalgh@arm.com> * config/aarch64/aarch64.md (add<mode>3_pluslong): Add register constraints. gcc/testsuite/ 2015-12-04 James Greenhalgh <james.greenhalgh@arm.com> * gcc.c-torture/compile/20151204.c: New. From-SVN: r231304
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/aarch64/aarch64.md6
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20151204.c19
4 files changed, 31 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 81eb73f..06e0d7b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2015-12-04 James Greenhalgh <james.greenhalgh@arm.com>
+
+ * config/aarch64/aarch64.md (add<mode>3_pluslong): Add register
+ constraints.
+
2015-12-04 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/68349
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index dee757b..28936d0 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -1615,9 +1615,9 @@
(define_insn_and_split "*add<mode>3_pluslong"
[(set
- (match_operand:GPI 0 "register_operand" "")
- (plus:GPI (match_operand:GPI 1 "register_operand" "")
- (match_operand:GPI 2 "aarch64_pluslong_operand" "")))]
+ (match_operand:GPI 0 "register_operand" "=r")
+ (plus:GPI (match_operand:GPI 1 "register_operand" "r")
+ (match_operand:GPI 2 "aarch64_pluslong_immediate" "i")))]
"!aarch64_plus_operand (operands[2], VOIDmode)
&& !aarch64_move_imm (INTVAL (operands[2]), <MODE>mode)"
"#"
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ce36ec7..ebeab6b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2015-12-04 James Greenhalgh <james.greenhalgh@arm.com>
+
+ * gcc.c-torture/compile/20151204.c: New.
+
2015-12-04 Nathan Sidwell <nathan@acm.org>
* gcc.dg/vla-24.c: Requires alloca.
diff --git a/gcc/testsuite/gcc.c-torture/compile/20151204.c b/gcc/testsuite/gcc.c-torture/compile/20151204.c
new file mode 100644
index 0000000..036316c
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/20151204.c
@@ -0,0 +1,19 @@
+typedef __SIZE_TYPE__ size_t;
+
+int strcmp (const char*, const char*);
+void *memchr (const void *, int, size_t);
+char* strncpy (char *, const char *, size_t);
+
+int
+main (int argc, char** argv)
+{
+ char target[32753] = "A";
+ char buffer[32753];
+ char *x;
+ x = buffer;
+
+ if (strcmp (target, "A")
+ || memchr (target, 'A', 0) != ((void *) 0))
+ if (strncpy (x, "", 4) != x);
+ return 0;
+}