aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIlya Enkovich <ilya.enkovich@intel.com>2015-05-13 07:49:59 +0000
committerIlya Enkovich <ienkovich@gcc.gnu.org>2015-05-13 07:49:59 +0000
commite9ae68afa0154895e42dbc098bc7ba63eaef7ce6 (patch)
tree31b9c5cfef7d4d0d069152409b26c2cba800b09a /gcc
parentaa953e2fc52e2196d62b9669a69c9e82de43dc3c (diff)
downloadgcc-e9ae68afa0154895e42dbc098bc7ba63eaef7ce6.zip
gcc-e9ae68afa0154895e42dbc098bc7ba63eaef7ce6.tar.gz
gcc-e9ae68afa0154895e42dbc098bc7ba63eaef7ce6.tar.bz2
re PR rtl-optimization/66048 ([i386] ICE in create_pre_exit when both AVX and MPX are used)
gcc/ PR target/66048 * function.c (diddle_return_value_1): Process bounds first. * config/i38/i386.c (ix86_function_value_regno_p): Add bnd1 register. gcc/testsuite/ PR target/66048 * gcc.target/i386/mpx/pr66048.cc: New. From-SVN: r223114
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/i386/i386.c3
-rw-r--r--gcc/function.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/mpx/pr66048.cc16
5 files changed, 31 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5d03f43..35f8197 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2015-05-13 Ilya Enkovich <ilya.enkovich@intel.com>
+
+ PR target/66048
+ * function.c (diddle_return_value_1): Process bounds first.
+ * config/i38/i386.c (ix86_function_value_regno_p): Add bnd1
+ register.
+
2015-05-13 Thomas Preud'homme <thomas.preudhomme@arm.com>
PR rtl-optimization/64616
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index fd52d89..bda3257 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -8216,7 +8216,8 @@ ix86_function_value_regno_p (const unsigned int regno)
case SI_REG:
return TARGET_64BIT && ix86_abi != MS_ABI;
- case FIRST_BND_REG:
+ case BND0_REG:
+ case BND1_REG:
return chkp_function_instrumented_p (current_function_decl);
/* Complex values are returned in %st(0)/%st(1) pair. */
diff --git a/gcc/function.c b/gcc/function.c
index 42d5aeb..eb90ed5 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -5224,8 +5224,8 @@ diddle_return_value_1 (void (*doit) (rtx, void *), void *arg, rtx outgoing)
void
diddle_return_value (void (*doit) (rtx, void *), void *arg)
{
- diddle_return_value_1 (doit, arg, crtl->return_rtx);
diddle_return_value_1 (doit, arg, crtl->return_bnd);
+ diddle_return_value_1 (doit, arg, crtl->return_rtx);
}
static void
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 0a70648..2f83f4e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2015-05-13 Ilya Enkovich <ilya.enkovich@intel.com>
+
+ PR target/66048
+ * gcc.target/i386/mpx/pr66048.cc: New.
+
2015-05-13 Thomas Preud'homme <thomas.preudhomme@arm.com>
PR rtl-optimization/64616
diff --git a/gcc/testsuite/gcc.target/i386/mpx/pr66048.cc b/gcc/testsuite/gcc.target/i386/mpx/pr66048.cc
new file mode 100644
index 0000000..b29cd03
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/mpx/pr66048.cc
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fcheck-pointer-bounds -mmpx -march=corei7-avx" } */
+
+struct c1
+{
+ c1 (const c1 &other) : p (other.p) { };
+ int *p;
+};
+
+struct c2 : public c1 { };
+
+c1
+test (c2 a)
+{
+ return a;
+}