aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorThomas Schwinge <thomas@codesourcery.com>2015-08-10 17:22:30 +0200
committerThomas Schwinge <tschwinge@gcc.gnu.org>2015-08-10 17:22:30 +0200
commit96a2d174ccfd5b1cdb746e79468dd926ad26718f (patch)
tree8a8774799581261f44d24469fba467584fca849c /gcc
parent78647e656d853937295d821974aca6176b4ea0e7 (diff)
downloadgcc-96a2d174ccfd5b1cdb746e79468dd926ad26718f.zip
gcc-96a2d174ccfd5b1cdb746e79468dd926ad26718f.tar.gz
gcc-96a2d174ccfd5b1cdb746e79468dd926ad26718f.tar.bz2
Fix offloading machine mode stream reading
... in context of the GET_MODE_INNER changes applied in r226328. gcc/ * lto-streamer-in.c (lto_input_mode_table): Adjust to GET_MODE_INNER changes. libgomp/ * testsuite/libgomp.oacc-c-c++-common/vector-type-1.c: New file. From-SVN: r226759
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/lto-streamer-in.c8
-rw-r--r--gcc/lto-streamer-out.c4
3 files changed, 12 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c51aaf9..f547931 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,4 +1,9 @@
2015-08-10 Thomas Schwinge <thomas@codesourcery.com>
+
+ * lto-streamer-in.c (lto_input_mode_table): Adjust to
+ GET_MODE_INNER changes.
+
+2015-08-10 Thomas Schwinge <thomas@codesourcery.com>
Ilya Verbin <ilya.verbin@intel.com>
* lto-streamer-in.c (lto_input_mode_table): Correctly advance
diff --git a/gcc/lto-streamer-in.c b/gcc/lto-streamer-in.c
index 299900a..2eb8051 100644
--- a/gcc/lto-streamer-in.c
+++ b/gcc/lto-streamer-in.c
@@ -1544,7 +1544,7 @@ lto_input_mode_table (struct lto_file_decl_data *file_data)
= bp_unpack_enum (&bp, mode_class, MAX_MODE_CLASS);
unsigned int size = bp_unpack_value (&bp, 8);
unsigned int prec = bp_unpack_value (&bp, 16);
- machine_mode inner = (machine_mode) table[bp_unpack_value (&bp, 8)];
+ machine_mode inner = (machine_mode) bp_unpack_value (&bp, 8);
unsigned int nunits = bp_unpack_value (&bp, 8);
unsigned int ibit = 0, fbit = 0;
unsigned int real_fmt_len = 0;
@@ -1578,7 +1578,9 @@ lto_input_mode_table (struct lto_file_decl_data *file_data)
if (GET_MODE_CLASS (mr) != mclass
|| GET_MODE_SIZE (mr) != size
|| GET_MODE_PRECISION (mr) != prec
- || GET_MODE_INNER (mr) != inner
+ || (inner == m
+ ? GET_MODE_INNER (mr) != mr
+ : GET_MODE_INNER (mr) != table[(int) inner])
|| GET_MODE_IBIT (mr) != ibit
|| GET_MODE_FBIT (mr) != fbit
|| GET_MODE_NUNITS (mr) != nunits)
@@ -1606,7 +1608,7 @@ lto_input_mode_table (struct lto_file_decl_data *file_data)
case MODE_VECTOR_UACCUM:
/* For unsupported vector modes just use BLKmode,
if the scalar mode is supported. */
- if (inner != VOIDmode)
+ if (table[(int) inner] != VOIDmode)
{
table[m] = BLKmode;
break;
diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c
index 1b88115..3ca8855 100644
--- a/gcc/lto-streamer-out.c
+++ b/gcc/lto-streamer-out.c
@@ -2676,7 +2676,7 @@ lto_write_mode_table (void)
ob = create_output_block (LTO_section_mode_table);
bitpack_d bp = bitpack_create (ob->main_stream);
- /* Ensure that for GET_MODE_INNER (m) != VOIDmode we have
+ /* Ensure that for GET_MODE_INNER (m) != m we have
also the inner mode marked. */
for (int i = 0; i < (int) MAX_MACHINE_MODE; i++)
if (streamer_mode_table[i])
@@ -2685,7 +2685,7 @@ lto_write_mode_table (void)
if (GET_MODE_INNER (m) != m)
streamer_mode_table[(int) GET_MODE_INNER (m)] = 1;
}
- /* First stream modes that have GET_MODE_INNER (m) == VOIDmode,
+ /* First stream modes that have GET_MODE_INNER (m) == m,
so that we can refer to them afterwards. */
for (int pass = 0; pass < 2; pass++)
for (int i = 0; i < (int) MAX_MACHINE_MODE; i++)