diff options
author | Richard Purdie <rpurdie@linux.intel.com> | 2010-08-27 15:14:24 +0100 |
---|---|---|
committer | Richard Purdie <rpurdie@linux.intel.com> | 2010-08-27 15:29:45 +0100 |
commit | 29d6678fd546377459ef75cf54abeef5b969b5cf (patch) | |
tree | 8edd65790e37a00d01c3f203f773fe4b5012db18 /meta/recipes-devtools/gcc/gcc-4.3.3/debian/pr30961.dpatch | |
parent | da49de6885ee1bc424e70bc02f21f6ab920efb55 (diff) | |
download | poky-29d6678fd546377459ef75cf54abeef5b969b5cf.tar.gz |
Major layout change to the packages directory
Having one monolithic packages directory makes it hard to find things
and is generally overwhelming. This commit splits it into several
logical sections roughly based on function, recipes.txt gives more
information about the classifications used.
The opportunity is also used to switch from "packages" to "recipes"
as used in OpenEmbedded as the term "packages" can be confusing to
people and has many different meanings.
Not all recipes have been classified yet, this is just a first pass
at separating things out. Some packages are moved to meta-extras as
they're no longer actively used or maintained.
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
Diffstat (limited to 'meta/recipes-devtools/gcc/gcc-4.3.3/debian/pr30961.dpatch')
-rw-r--r-- | meta/recipes-devtools/gcc/gcc-4.3.3/debian/pr30961.dpatch | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-4.3.3/debian/pr30961.dpatch b/meta/recipes-devtools/gcc/gcc-4.3.3/debian/pr30961.dpatch new file mode 100644 index 0000000000..b20fdf5bf5 --- /dev/null +++ b/meta/recipes-devtools/gcc/gcc-4.3.3/debian/pr30961.dpatch | |||
@@ -0,0 +1,179 @@ | |||
1 | #! /bin/sh -e | ||
2 | |||
3 | # DP: <your description> | ||
4 | |||
5 | dir= | ||
6 | if [ $# -eq 3 -a "$2" = '-d' ]; then | ||
7 | pdir="-d $3" | ||
8 | dir="$3/" | ||
9 | elif [ $# -ne 1 ]; then | ||
10 | echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" | ||
11 | exit 1 | ||
12 | fi | ||
13 | case "$1" in | ||
14 | -patch) | ||
15 | patch $pdir -f --no-backup-if-mismatch -p0 < $0 | ||
16 | ;; | ||
17 | -unpatch) | ||
18 | patch $pdir -f --no-backup-if-mismatch -R -p0 < $0 | ||
19 | ;; | ||
20 | *) | ||
21 | echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" | ||
22 | exit 1 | ||
23 | esac | ||
24 | exit 0 | ||
25 | |||
26 | From: "H.J. Lu" <hjl@lucon.org> | ||
27 | Sender: gcc-patches-owner@gcc.gnu.org | ||
28 | To: gcc-patches@gcc.gnu.org | ||
29 | Subject: PATCH: PR target/30961: [4.1/4.2/4.3 regression] redundant reg/mem stores/moves | ||
30 | Date: Mon, 27 Aug 2007 11:34:12 -0700 | ||
31 | |||
32 | We start with | ||
33 | |||
34 | (note:HI 3 4 22 2 NOTE_INSN_FUNCTION_BEG) | ||
35 | |||
36 | (insn:HI 6 3 10 2 c.c:3 (set (reg:DF 58 [ <result> ]) | ||
37 | (subreg:DF (reg/v:DI 59 [ in ]) 0)) 102 {*movdf_integer_rex64} (expr_list:REG_DEAD (reg/v:DI 59 [ in ]) | ||
38 | (nil))) | ||
39 | |||
40 | (insn:HI 10 6 16 2 c.c:7 (set (reg/i:DF 21 xmm0 [ <result> ]) | ||
41 | (reg:DF 58 [ <result> ])) 102 {*movdf_integer_rex64} (expr_list:REG_DEAD (reg:DF 58 [ <result> ]) | ||
42 | (nil))) | ||
43 | |||
44 | (insn:HI 16 10 0 2 c.c:7 (use (reg/i:DF 21 xmm0 [ <result> ])) -1 (nil)) | ||
45 | |||
46 | we are trying to allocate registers for insn 6 and we allocate | ||
47 | xmm0 for the return value. Reload doesn't check if xmm0 can be used for | ||
48 | DF 59, it allocates xmm1 for DF 59 and generates: | ||
49 | |||
50 | Reloads for insn # 6 | ||
51 | Reload 0: reload_in (DF) = (reg:DF 5 di) | ||
52 | SSE_REGS, RELOAD_FOR_INPUT (opnum = 1), can't combine | ||
53 | reload_in_reg: (subreg:DF (reg/v:DI 5 di [orig:59 in ] [59]) 0) | ||
54 | reload_reg_rtx: (reg:DF 22 xmm1) | ||
55 | ... | ||
56 | |||
57 | (note:HI 4 1 3 2 [bb 2] NOTE_INSN_BASIC_BLOCK) | ||
58 | |||
59 | (note:HI 3 4 22 2 NOTE_INSN_FUNCTION_BEG) | ||
60 | |||
61 | (insn 22 3 23 2 c.c:3 (set (mem/c:DF (plus:DI (reg/f:DI 7 sp) | ||
62 | (const_int -8 [0xfffffffffffffff8])) [0 S8 A8]) | ||
63 | (reg:DF 5 di)) 102 {*movdf_integer_rex64} (nil)) | ||
64 | |||
65 | (insn 23 22 6 2 c.c:3 (set (reg:DF 22 xmm1) | ||
66 | (mem/c:DF (plus:DI (reg/f:DI 7 sp) | ||
67 | (const_int -8 [0xfffffffffffffff8])) [0 S8 A8])) 102 {*movdf_integer_rex64} (nil)) | ||
68 | |||
69 | (insn:HI 6 23 16 2 c.c:3 (set (reg:DF 21 xmm0 [orig:58 <result> ] [58]) | ||
70 | (reg:DF 22 xmm1)) 102 {*movdf_integer_rex64} (nil)) | ||
71 | |||
72 | (insn 16 6 21 2 c.c:7 (use (reg/i:DF 21 xmm0 [ <result> ])) -1 (nil)) | ||
73 | |||
74 | This patch tries to use the destination register when reloading for input. It | ||
75 | generates | ||
76 | |||
77 | Reloads for insn # 6 | ||
78 | Reload 0: reload_in (DF) = (reg:DF 5 di) | ||
79 | SSE_REGS, RELOAD_FOR_INPUT (opnum = 1), can't combine | ||
80 | reload_in_reg: (subreg:DF (reg/v:DI 5 di [orig:59 in ] [59]) 0) | ||
81 | reload_reg_rtx: (reg:DF 21 xmm0) | ||
82 | ... | ||
83 | (note:HI 4 1 3 2 [bb 2] NOTE_INSN_BASIC_BLOCK) | ||
84 | |||
85 | (note:HI 3 4 22 2 NOTE_INSN_FUNCTION_BEG) | ||
86 | |||
87 | (insn 22 3 23 2 c.c:3 (set (mem/c:DF (plus:DI (reg/f:DI 7 sp) | ||
88 | (const_int -8 [0xfffffffffffffff8])) [0 S8 A8]) | ||
89 | (reg:DF 5 di)) 102 {*movdf_integer_rex64} (nil)) | ||
90 | |||
91 | (insn 23 22 6 2 c.c:3 (set (reg:DF 21 xmm0) | ||
92 | (mem/c:DF (plus:DI (reg/f:DI 7 sp) | ||
93 | (const_int -8 [0xfffffffffffffff8])) [0 S8 A8])) 102 {*movdf_integer_rex64} (nil)) | ||
94 | |||
95 | (insn:HI 6 23 10 2 c.c:3 (set (reg:DF 22 xmm1 [orig:58 <result> ] [58]) | ||
96 | (reg:DF 21 xmm0)) 102 {*movdf_integer_rex64} (nil)) | ||
97 | |||
98 | (insn:HI 10 6 16 2 c.c:7 (set (reg/i:DF 21 xmm0 [ <result> ]) | ||
99 | (reg:DF 22 xmm1 [orig:58 <result> ] [58])) 102 {*movdf_integer_rex64} (nil)) | ||
100 | |||
101 | (insn 16 10 21 2 c.c:7 (use (reg/i:DF 21 xmm0 [ <result> ])) -1 (nil)) | ||
102 | |||
103 | |||
104 | H.J. | ||
105 | ---- | ||
106 | gcc/ | ||
107 | |||
108 | 2007-08-27 H.J. Lu <hongjiu.lu@intel.com> | ||
109 | |||
110 | PR target/30961 | ||
111 | * reload1.c (find_reg): Favor the hard register in destination | ||
112 | if it is usable and a memory location is needed for reload | ||
113 | input. | ||
114 | |||
115 | gcc/testsuite/ | ||
116 | |||
117 | 2007-08-27 H.J. Lu <hongjiu.lu@intel.com> | ||
118 | |||
119 | PR target/30961 | ||
120 | * gcc.target/i386/pr30961-1.c: New. | ||
121 | |||
122 | --- gcc/reload1.c.second 2007-08-27 09:35:08.000000000 -0700 | ||
123 | +++ gcc/reload1.c 2007-08-27 09:36:33.000000000 -0700 | ||
124 | @@ -1781,6 +1781,20 @@ find_reg (struct insn_chain *chain, int | ||
125 | HARD_REG_SET not_usable; | ||
126 | HARD_REG_SET used_by_other_reload; | ||
127 | reg_set_iterator rsi; | ||
128 | +#ifdef SECONDARY_MEMORY_NEEDED | ||
129 | + rtx body = PATTERN (chain->insn); | ||
130 | + unsigned int dest_reg = FIRST_PSEUDO_REGISTER; | ||
131 | + | ||
132 | + if (GET_CODE (body) == SET) | ||
133 | + { | ||
134 | + rtx dest = SET_DEST (body); | ||
135 | + | ||
136 | + if ((REG_P (dest) | ||
137 | + || (GET_CODE (dest) == SUBREG | ||
138 | + && REG_P (SUBREG_REG (dest))))) | ||
139 | + dest_reg = reg_or_subregno (dest); | ||
140 | + } | ||
141 | +#endif | ||
142 | |||
143 | COPY_HARD_REG_SET (not_usable, bad_spill_regs); | ||
144 | IOR_HARD_REG_SET (not_usable, bad_spill_regs_global); | ||
145 | @@ -1821,6 +1835,18 @@ find_reg (struct insn_chain *chain, int | ||
146 | this_cost--; | ||
147 | if (rl->out && REG_P (rl->out) && REGNO (rl->out) == regno) | ||
148 | this_cost--; | ||
149 | +#ifdef SECONDARY_MEMORY_NEEDED | ||
150 | + /* If a memory location is needed for rl->in and dest_reg | ||
151 | + is usable, we will favor it. */ | ||
152 | + else if (dest_reg == regno | ||
153 | + && rl->in | ||
154 | + && REG_P (rl->in) | ||
155 | + && REGNO (rl->in) < FIRST_PSEUDO_REGISTER | ||
156 | + && SECONDARY_MEMORY_NEEDED (REGNO_REG_CLASS (REGNO (rl->in)), | ||
157 | + rl->class, | ||
158 | + rl->mode)) | ||
159 | + this_cost = 0; | ||
160 | +#endif | ||
161 | if (this_cost < best_cost | ||
162 | /* Among registers with equal cost, prefer caller-saved ones, or | ||
163 | use REG_ALLOC_ORDER if it is defined. */ | ||
164 | --- gcc/testsuite/gcc.target/i386/pr30961-1.c.second 2007-08-27 11:01:59.000000000 -0700 | ||
165 | +++ gcc/testsuite/gcc.target/i386/pr30961-1.c 2007-08-27 11:02:51.000000000 -0700 | ||
166 | @@ -0,0 +1,13 @@ | ||
167 | +/* { dg-do compile } */ | ||
168 | +/* { dg-require-effective-target lp64 } */ | ||
169 | +/* { dg-options "-O2" } */ | ||
170 | + | ||
171 | +double | ||
172 | +convert (long long in) | ||
173 | +{ | ||
174 | + double f; | ||
175 | + __builtin_memcpy( &f, &in, sizeof( in ) ); | ||
176 | + return f; | ||
177 | +} | ||
178 | + | ||
179 | +/* { dg-final { scan-assembler-not "movapd" } } */ | ||