diff options
Diffstat (limited to 'meta/recipes-devtools/gcc/gcc-4.9')
-rw-r--r-- | meta/recipes-devtools/gcc/gcc-4.9/0058-gcc-r212171.patch | 112 | ||||
-rw-r--r-- | meta/recipes-devtools/gcc/gcc-4.9/0059-gcc-PR-rtl-optimization-63348.patch | 58 |
2 files changed, 170 insertions, 0 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-4.9/0058-gcc-r212171.patch b/meta/recipes-devtools/gcc/gcc-4.9/0058-gcc-r212171.patch new file mode 100644 index 0000000000..8a205b750b --- /dev/null +++ b/meta/recipes-devtools/gcc/gcc-4.9/0058-gcc-r212171.patch | |||
@@ -0,0 +1,112 @@ | |||
1 | From ca03cf1b133d66eb978c68f6dbc345e9aabcba88 Mon Sep 17 00:00:00 2001 | ||
2 | From: uros <uros@138bc75d-0d04-0410-961f-82ee72b054a4> | ||
3 | Date: Mon, 30 Jun 2014 19:30:52 +0000 | ||
4 | Subject: [PATCH] r212171 | ||
5 | |||
6 | * except.c (emit_note_eh_region_end): New helper | ||
7 | function. (convert_to_eh_region_ranges): Use | ||
8 | emit_note_eh_region_end to emit EH_REGION_END note. | ||
9 | * jump.c (cleanup_barriers): Do not split a call and its | ||
10 | corresponding CALL_ARG_LOCATION note. | ||
11 | |||
12 | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@212171 138bc75d-0d04-0410-961f-82ee72b054a4 | ||
13 | |||
14 | Upstream-status: Backport [https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=212171] | ||
15 | Signed-off-by: Baoshan Pang <baoshan.pang@windriver.com> | ||
16 | --- | ||
17 | gcc/except.c | 23 ++++++++++++++++++----- | ||
18 | gcc/jump.c | 19 +++++++++++++++---- | ||
19 | 2 files changed, 33 insertions(+), 9 deletions(-) | ||
20 | |||
21 | diff --git a/gcc/except.c b/gcc/except.c | ||
22 | index dc5c1d2..7ac114f 100644 | ||
23 | --- a/gcc/except.c | ||
24 | +++ b/gcc/except.c | ||
25 | @@ -2466,6 +2466,20 @@ add_call_site (rtx landing_pad, int action, int section) | ||
26 | return call_site_base + crtl->eh.call_site_record_v[section]->length () - 1; | ||
27 | } | ||
28 | |||
29 | +static rtx | ||
30 | +emit_note_eh_region_end (rtx insn) | ||
31 | +{ | ||
32 | + rtx next = NEXT_INSN (insn); | ||
33 | + | ||
34 | + /* Make sure we do not split a call and its corresponding | ||
35 | + CALL_ARG_LOCATION note. */ | ||
36 | + if (next && NOTE_P (next) | ||
37 | + && NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION) | ||
38 | + insn = next; | ||
39 | + | ||
40 | + return emit_note_after (NOTE_INSN_EH_REGION_END, insn); | ||
41 | +} | ||
42 | + | ||
43 | /* Turn REG_EH_REGION notes back into NOTE_INSN_EH_REGION notes. | ||
44 | The new note numbers will not refer to region numbers, but | ||
45 | instead to call site entries. */ | ||
46 | @@ -2544,8 +2558,8 @@ convert_to_eh_region_ranges (void) | ||
47 | note = emit_note_before (NOTE_INSN_EH_REGION_BEG, | ||
48 | first_no_action_insn_before_switch); | ||
49 | NOTE_EH_HANDLER (note) = call_site; | ||
50 | - note = emit_note_after (NOTE_INSN_EH_REGION_END, | ||
51 | - last_no_action_insn_before_switch); | ||
52 | + note | ||
53 | + = emit_note_eh_region_end (last_no_action_insn_before_switch); | ||
54 | NOTE_EH_HANDLER (note) = call_site; | ||
55 | gcc_assert (last_action != -3 | ||
56 | || (last_action_insn | ||
57 | @@ -2569,8 +2583,7 @@ convert_to_eh_region_ranges (void) | ||
58 | first_no_action_insn = NULL_RTX; | ||
59 | } | ||
60 | |||
61 | - note = emit_note_after (NOTE_INSN_EH_REGION_END, | ||
62 | - last_action_insn); | ||
63 | + note = emit_note_eh_region_end (last_action_insn); | ||
64 | NOTE_EH_HANDLER (note) = call_site; | ||
65 | } | ||
66 | |||
67 | @@ -2617,7 +2630,7 @@ convert_to_eh_region_ranges (void) | ||
68 | |||
69 | if (last_action >= -1 && ! first_no_action_insn) | ||
70 | { | ||
71 | - note = emit_note_after (NOTE_INSN_EH_REGION_END, last_action_insn); | ||
72 | + note = emit_note_eh_region_end (last_action_insn); | ||
73 | NOTE_EH_HANDLER (note) = call_site; | ||
74 | } | ||
75 | |||
76 | diff --git a/gcc/jump.c b/gcc/jump.c | ||
77 | index 9418f65..a5e5f52 100644 | ||
78 | --- a/gcc/jump.c | ||
79 | +++ b/gcc/jump.c | ||
80 | @@ -121,15 +121,26 @@ rebuild_jump_labels_chain (rtx chain) | ||
81 | static unsigned int | ||
82 | cleanup_barriers (void) | ||
83 | { | ||
84 | - rtx insn, next, prev; | ||
85 | - for (insn = get_insns (); insn; insn = next) | ||
86 | + rtx insn; | ||
87 | + for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) | ||
88 | { | ||
89 | - next = NEXT_INSN (insn); | ||
90 | if (BARRIER_P (insn)) | ||
91 | { | ||
92 | - prev = prev_nonnote_insn (insn); | ||
93 | + rtx prev = prev_nonnote_insn (insn); | ||
94 | if (!prev) | ||
95 | continue; | ||
96 | + | ||
97 | + if (CALL_P (prev)) | ||
98 | + { | ||
99 | + /* Make sure we do not split a call and its corresponding | ||
100 | + CALL_ARG_LOCATION note. */ | ||
101 | + rtx next = NEXT_INSN (prev); | ||
102 | + | ||
103 | + if (NOTE_P (next) | ||
104 | + && NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION) | ||
105 | + prev = next; | ||
106 | + } | ||
107 | + | ||
108 | if (BARRIER_P (prev)) | ||
109 | delete_insn (insn); | ||
110 | else if (prev != PREV_INSN (insn)) | ||
111 | -- | ||
112 | 1.7.9.5 | ||
diff --git a/meta/recipes-devtools/gcc/gcc-4.9/0059-gcc-PR-rtl-optimization-63348.patch b/meta/recipes-devtools/gcc/gcc-4.9/0059-gcc-PR-rtl-optimization-63348.patch new file mode 100644 index 0000000000..77f6be33d1 --- /dev/null +++ b/meta/recipes-devtools/gcc/gcc-4.9/0059-gcc-PR-rtl-optimization-63348.patch | |||
@@ -0,0 +1,58 @@ | |||
1 | From 6eae3e637fcc22d21b51d44d61e3a9cb4825e776 Mon Sep 17 00:00:00 2001 | ||
2 | From: Jackie Huang <jackie.huang@windriver.com> | ||
3 | Date: Thu, 30 Oct 2014 20:37:14 -0700 | ||
4 | Subject: [PATCH]PR rtl-optimization/63348 | ||
5 | |||
6 | PR rtl-optimization/63348 | ||
7 | * emit-rtl.c (try_split): Do not emit extra barrier. | ||
8 | |||
9 | Note: this patch is to fix the side effect introduced by r212171 which was reported at: | ||
10 | https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63348 | ||
11 | |||
12 | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@215613 138bc75d-0d04-0410-961f-82ee72b054a4 | ||
13 | |||
14 | Upstream-status: Backport [https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=215613] | ||
15 | Signed-off-by: Baoshan Pang <baoshan.pang@windriver.com> | ||
16 | Signed-off-by: Jackie Huang <jackie.huang@windriver.com> | ||
17 | --- | ||
18 | gcc/emit-rtl.c | 11 ----------- | ||
19 | 1 files changed, 0 insertions(+), 11 deletions(-) | ||
20 | |||
21 | diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c | ||
22 | index 4736f8d..ae69dbd 100644 | ||
23 | --- a/gcc/emit-rtl.c | ||
24 | +++ b/gcc/emit-rtl.c | ||
25 | @@ -3422,7 +3422,6 @@ try_split (rtx pat, rtx trial, int last) | ||
26 | { | ||
27 | rtx before = PREV_INSN (trial); | ||
28 | rtx after = NEXT_INSN (trial); | ||
29 | - int has_barrier = 0; | ||
30 | rtx note, seq, tem; | ||
31 | int probability; | ||
32 | rtx insn_last, insn; | ||
33 | @@ -3441,14 +3440,6 @@ try_split (rtx pat, rtx trial, int last) | ||
34 | |||
35 | split_branch_probability = -1; | ||
36 | |||
37 | - /* If we are splitting a JUMP_INSN, it might be followed by a BARRIER. | ||
38 | - We may need to handle this specially. */ | ||
39 | - if (after && BARRIER_P (after)) | ||
40 | - { | ||
41 | - has_barrier = 1; | ||
42 | - after = NEXT_INSN (after); | ||
43 | - } | ||
44 | - | ||
45 | if (!seq) | ||
46 | return trial; | ||
47 | |||
48 | @@ -3594,8 +3585,6 @@ try_split (rtx pat, rtx trial, int last) | ||
49 | tem = emit_insn_after_setloc (seq, trial, INSN_LOCATION (trial)); | ||
50 | |||
51 | delete_insn (trial); | ||
52 | - if (has_barrier) | ||
53 | - emit_barrier_after (tem); | ||
54 | |||
55 | /* Recursively call try_split for each new insn created; by the | ||
56 | time control returns here that insn will be fully split, so | ||
57 | -- | ||
58 | 1.7.1 | ||