This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: nios2 builds still broken due to streamer changes
- From: Martin Liška <mliska at suse dot cz>
- To: gcc-patches at gcc dot gnu dot org
- Cc: "hubi >> Jan Hubicka" <hubicka at ucw dot cz>
- Date: Fri, 09 Jan 2015 10:33:33 +0100
- Subject: Re: nios2 builds still broken due to streamer changes
- Authentication-results: sourceware.org; auth=none
- References: <20141115165720 dot GG31795 at kam dot mff dot cuni dot cz> <20141115204519 dot GM8445 at lug-owl dot de> <20141115215643 dot GA629 at kam dot mff dot cuni dot cz> <20141115233626 dot GA13765 at kam dot mff dot cuni dot cz> <20141115234903 dot GN8445 at lug-owl dot de> <546801DD dot 2070007 at codesourcery dot com> <546D21A4 dot 3070106 at codesourcery dot com> <20141120043431 dot GA32119 at kam dot mff dot cuni dot cz> <5493A53C dot 1060903 at codesourcery dot com>
On 12/19/2014 05:10 AM, Sandra Loosemore wrote:
On 11/19/2014 09:34 PM, Jan Hubicka wrote:
[snip]
As for timeline, I have a workshop next week and need to prepare draft for it.
So ideally I would like to work on this only after the workshop (ending
November 28). I would be also happy to help anyone interested to help (I am
just bit slow on portable AWK hacking).
Has there been any progress on getting this fixed? It's been over a month since this was reported and I see nios2-elf builds are still broken. It's blocking me testing a fix for PR59710, among other things.
-Sandra
Hello Sandra.
After talking to Honza, I decided to implement array support, marked as 1) from Honza's.
I don't have any nios2 target I can bootstrap, so the following patch has been just
tested for stage1 compiler.
Does it solve your bootstrap problems?
Thanks,
Martin
>From f0249323295d02373211a03f5465b8dc3f786bf0 Mon Sep 17 00:00:00 2001
From: mliska <mliska@suse.cz>
Date: Fri, 9 Jan 2015 10:31:00 +0100
Subject: [PATCH] Initial version.
---
gcc/optc-save-gen.awk | 44 ++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 42 insertions(+), 2 deletions(-)
diff --git a/gcc/optc-save-gen.awk b/gcc/optc-save-gen.awk
index ebeb509..5578144 100644
--- a/gcc/optc-save-gen.awk
+++ b/gcc/optc-save-gen.awk
@@ -437,6 +437,7 @@ print " struct cl_target_option const *ptr2 ATTRIBUTE_UNUSED
print "{";
n_target_val = 0;
n_target_str = 0;
+n_target_array = 0;
for (i = 0; i < n_target_save; i++) {
var = target_save_decl[i];
@@ -448,8 +449,20 @@ for (i = 0; i < n_target_save; i++) {
if (target_save_decl[i] ~ "^const char \\*+[_" alnum "]+$")
var_target_str[n_target_str++] = name;
else {
- var_target_val_type[n_target_val] = type;
- var_target_val[n_target_val++] = name;
+ if (target_save_decl[i] ~ " .*\\[.+\\]+$") {
+ size = name;
+ sub("[^\\[]+\\[", "", size);
+ sub("\\]$", "", size);
+ sub("\\[.+", "", name)
+ sub(" [^ ]+$", "", type)
+ var_target_array[n_target_array] = name
+ var_target_array_type[n_target_array] = type
+ var_target_array_size[n_target_array++] = size
+ }
+ else {
+ var_target_val_type[n_target_val] = type;
+ var_target_val[n_target_val++] = name;
+ }
}
}
if (have_save) {
@@ -484,6 +497,14 @@ for (i = 0; i < n_target_str; i++) {
print " || strcmp (ptr1->" name", ptr2->" name ")))";
print " return false;";
}
+for (i = 0; i < n_target_array; i++) {
+ name = var_target_array[i]
+ size = var_target_array_size[i]
+ type = var_target_array_type[i]
+ print " if (ptr1->" name" != ptr2->" name "";
+ print " || memcmp (ptr1->" name ", ptr2->" name ", " size " * sizeof(" type ")))"
+ print " return false;";
+}
for (i = 0; i < n_target_val; i++) {
name = var_target_val[i]
print " if (ptr1->" name" != ptr2->" name ")";
@@ -507,6 +528,13 @@ for (i = 0; i < n_target_str; i++) {
print " else";
print " hstate.add_int (0);";
}
+for (i = 0; i < n_target_array; i++) {
+ name= var_target_array[i]
+ size = var_target_array_size[i]
+ type = var_target_array_type[i]
+ print " hstate.add_int (" size ");";
+ print " hstate.add (ptr->" name ", sizeof (" type ") * " size ");";
+}
for (i = 0; i < n_target_val; i++) {
name = var_target_val[i]
print " hstate.add_wide_int (ptr->" name");";
@@ -525,6 +553,12 @@ for (i = 0; i < n_target_str; i++) {
name = var_target_str[i]
print " bp_pack_string (ob, bp, ptr->" name", true);";
}
+for (i = 0; i < n_target_array; i++) {
+ name = var_target_array[i]
+ size = var_target_array_size[i]
+ print " for (unsigned i = 0; i < " size "; i++)"
+ print " bp_pack_value (bp, ptr->" name "[i], 64);";
+}
for (i = 0; i < n_target_val; i++) {
name = var_target_val[i]
print " bp_pack_value (bp, ptr->" name", 64);";
@@ -544,6 +578,12 @@ for (i = 0; i < n_target_str; i++) {
print " if (ptr->" name")";
print " ptr->" name" = xstrdup (ptr->" name");";
}
+for (i = 0; i < n_target_array; i++) {
+ name = var_target_array[i]
+ size = var_target_array_size[i]
+ print " for (int i = " size "; i >= 0; i--)"
+ print " ptr->" name "[i] = (" var_target_array_type[i] ") bp_unpack_value (bp, 64);";
+}
for (i = 0; i < n_target_val; i++) {
name = var_target_val[i]
print " ptr->" name" = (" var_target_val_type[i] ") bp_unpack_value (bp, 64);";
--
2.1.2