re PR target/65167 (ICE: in assign_by_spills, at lra-assigns.c:1383 (unable to find...
authorIlya Enkovich <ilya.enkovich@intel.com>
Wed, 25 Feb 2015 15:05:48 +0000 (15:05 +0000)
committerIlya Enkovich <ienkovich@gcc.gnu.org>
Wed, 25 Feb 2015 15:05:48 +0000 (15:05 +0000)
gcc/

PR target/65167
* gcc/config/i386/i386.c (ix86_function_arg_regno_p): Support
bounds registers.
(avoid_func_arg_motion): Add dependencies for BNDSTX insns.

gcc/testsuite/

PR target/65167
* gcc.target/i386/pr65167.c: New.

From-SVN: r220970

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr65167.c [new file with mode: 0644]

index 1e2b60971695ad6dc2317e72697b901e0ea5f798..6e9faf9f0d88b24b471f37159429f4c36a320764 100644 (file)
@@ -1,3 +1,10 @@
+2015-02-25  Ilya Enkovich  <ilya.enkovich@intel.com>
+
+       PR target/65167
+       * gcc/config/i386/i386.c (ix86_function_arg_regno_p): Support
+       bounds registers.
+       (avoid_func_arg_motion): Add dependencies for BNDSTX insns.
+
 2015-02-25  Alan Lawrence  <alan.lawrence@arm.com>
 
        PR target/64997
index bc4fb4be39959f2f3291986569ccb8939d562677..a1cb5dade380782523ef7bc896de12fb5167a3ce 100644 (file)
@@ -6120,6 +6120,9 @@ ix86_function_arg_regno_p (int regno)
   int i;
   const int *parm_regs;
 
+  if (TARGET_MPX && BND_REGNO_P (regno))
+    return true;
+
   if (!TARGET_64BIT)
     {
       if (TARGET_MACHO)
@@ -26898,6 +26901,16 @@ avoid_func_arg_motion (rtx_insn *first_arg, rtx_insn *insn)
   rtx set;
   rtx tmp;
 
+  /* Add anti dependencies for bounds stores.  */
+  if (INSN_P (insn)
+      && GET_CODE (PATTERN (insn)) == PARALLEL
+      && GET_CODE (XVECEXP (PATTERN (insn), 0, 0)) == UNSPEC
+      && XINT (XVECEXP (PATTERN (insn), 0, 0), 1) == UNSPEC_BNDSTX)
+    {
+      add_dependence (first_arg, insn, REG_DEP_ANTI);
+      return;
+    }
+
   set = single_set (insn);
   if (!set)
     return;
index 49bf525cdaf177b46fb4acbc427cbaab677b974f..199b967c07ca45d775c820b2d3f3bed617925d3a 100644 (file)
@@ -1,3 +1,8 @@
+2015-02-25  Ilya Enkovich  <ilya.enkovich@intel.com>
+
+       PR target/65167
+       * gcc.target/i386/pr65167.c: New.
+
 2015-02-25  Kai Tietz  <ktietz@redhat.com>
 
        PR tree-optimization/61917
diff --git a/gcc/testsuite/gcc.target/i386/pr65167.c b/gcc/testsuite/gcc.target/i386/pr65167.c
new file mode 100644 (file)
index 0000000..35f3d6b
--- /dev/null
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target mpx } */
+/* { dg-options "-O -fschedule-insns -fcheck-pointer-bounds -mmpx" } */
+
+void bar(int *a, int *b, int *c, int *d, int *e, int *f);
+
+int foo (int *a, int *b, int *c, int *d, int *e, int *f)
+{
+  bar (a, b, c, d, e, f);
+  return *f;
+}