summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2011-12-05 17:04:03 -0800
committerKhem Raj <raj.khem@gmail.com>2011-12-05 18:55:51 -0800
commita3aea9e69ab69dd4b5ac2ad4a602b74f9ef30fa2 (patch)
tree2ac969c53b292839a20f62b3a9795e1fdca6295b
parent2378ee8f21741abd23e434260a88c62cb0e151f1 (diff)
downloadmeta-openembedded-a3aea9e69ab69dd4b5ac2ad4a602b74f9ef30fa2.tar.gz
gcc-4.5: Backport with-linker-hash-style and backports from FSF & linaro
backport --with-linker-hash-style from trunk, fix GNU_HASH QA warnings once for all Explicitly disable configuring with cloog/ppl while building gcc if the user has it installed on build box then gcc's configure will try to use it and it can go wrong and create problems since we never built it so Move to tip of FSF gcc-4_5-branch brings in bug fixes PR 50091/ppc 50464/x86 50273/fortran 44473/c++ mangler 49965/sparc 50565/c 50659/fortran 50618/c++ 50737/alpha 50793/c++ 50788/x86/SSE 50691/pa 50875/x86/SSE 50979/sparc 30282/ppc 51187/rtl 50888/bootstrap 48190/debug/QEMUhog Merge fix for LP689887/linaro https://bugs.launchpad.net/gcc-linaro/+bug/689887 Signed-off-by: Khem Raj <raj.khem@gmail.com>
-rw-r--r--meta-oe/recipes-devtools/gcc/gcc-4.5.inc13
-rw-r--r--meta-oe/recipes-devtools/gcc/gcc-4.5/gcc-with-linker-hash-style.patch212
-rw-r--r--meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99491.patch309
-rw-r--r--meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99541.patch22
-rw-r--r--meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99548.patch80
-rw-r--r--meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99549.patch460
6 files changed, 760 insertions, 336 deletions
diff --git a/meta-oe/recipes-devtools/gcc/gcc-4.5.inc b/meta-oe/recipes-devtools/gcc/gcc-4.5.inc
index 579280ff1c..a0c2a7b289 100644
--- a/meta-oe/recipes-devtools/gcc/gcc-4.5.inc
+++ b/meta-oe/recipes-devtools/gcc/gcc-4.5.inc
@@ -14,7 +14,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
14 14
15 15
16PV = "4.5" 16PV = "4.5"
17PR = "r43" 17PR = "r44"
18 18
19# BINV should be incremented after updating to a revision 19# BINV should be incremented after updating to a revision
20# after a minor gcc release (e.g. 4.5.1 or 4.5.2) has been made 20# after a minor gcc release (e.g. 4.5.1 or 4.5.2) has been made
@@ -23,8 +23,7 @@ PR = "r43"
23# which will be next minor release and so on. 23# which will be next minor release and so on.
24 24
25BINV = "${PV}.4" 25BINV = "${PV}.4"
26 26SRCREV = 181733
27SRCREV = 178923
28BRANCH = "gcc-4_5-branch" 27BRANCH = "gcc-4_5-branch"
29PR_append = "+svnr${SRCPV}" 28PR_append = "+svnr${SRCPV}"
30 29
@@ -179,7 +178,6 @@ SRC_URI = "svn://gcc.gnu.org/svn/gcc/branches;module=${BRANCH};proto=http \
179 file://linaro/gcc-4.5-linaro-r99483.patch \ 178 file://linaro/gcc-4.5-linaro-r99483.patch \
180 file://linaro/gcc-4.5-linaro-r99488.patch \ 179 file://linaro/gcc-4.5-linaro-r99488.patch \
181 file://linaro/gcc-4.5-linaro-r99489.patch \ 180 file://linaro/gcc-4.5-linaro-r99489.patch \
182 file://linaro/gcc-4.5-linaro-r99491.patch \
183 file://linaro/gcc-4.5-linaro-r99494.patch \ 181 file://linaro/gcc-4.5-linaro-r99494.patch \
184 file://linaro/gcc-4.5-linaro-r99495.patch \ 182 file://linaro/gcc-4.5-linaro-r99495.patch \
185 file://linaro/gcc-4.5-linaro-r99498.patch \ 183 file://linaro/gcc-4.5-linaro-r99498.patch \
@@ -208,7 +206,8 @@ SRC_URI = "svn://gcc.gnu.org/svn/gcc/branches;module=${BRANCH};proto=http \
208 file://linaro/gcc-4.5-linaro-r99536.patch \ 206 file://linaro/gcc-4.5-linaro-r99536.patch \
209 file://linaro/gcc-4.5-linaro-r99537.patch \ 207 file://linaro/gcc-4.5-linaro-r99537.patch \
210 file://linaro/gcc-4.5-linaro-r99540.patch \ 208 file://linaro/gcc-4.5-linaro-r99540.patch \
211 file://linaro/gcc-4.5-linaro-r99541.patch \ 209 file://linaro/gcc-4.5-linaro-r99548.patch \
210 file://linaro/gcc-4.5-linaro-r99549.patch \
212 \ 211 \
213 file://more-epilogues.patch \ 212 file://more-epilogues.patch \
214 file://gcc-scalar-widening-pr45847.patch \ 213 file://gcc-scalar-widening-pr45847.patch \
@@ -233,6 +232,7 @@ SRC_URI = "svn://gcc.gnu.org/svn/gcc/branches;module=${BRANCH};proto=http \
233 file://gcc-poison-parameters.patch \ 232 file://gcc-poison-parameters.patch \
234 file://gcc-ppc-config-fix.patch \ 233 file://gcc-ppc-config-fix.patch \
235 file://use-defaults.h-and-t-oe-in-B.patch \ 234 file://use-defaults.h-and-t-oe-in-B.patch \
235 file://gcc-with-linker-hash-style.patch \
236 " 236 "
237 237
238# Language Overrides 238# Language Overrides
@@ -252,6 +252,9 @@ EXTRA_OECONF_BASE = "--enable-lto \
252 --disable-bootstrap \ 252 --disable-bootstrap \
253 --disable-libgomp \ 253 --disable-libgomp \
254 --disable-libmudflap \ 254 --disable-libmudflap \
255 --with-linker-hash-style=${LINKER_HASH_STYLE} \
256 --with-ppl=no \
257 --with-cloog=no \
255 --enable-cheaders=c_global " 258 --enable-cheaders=c_global "
256 259
257EXTRA_OECONF_INITIAL = "--disable-libmudflap \ 260EXTRA_OECONF_INITIAL = "--disable-libmudflap \
diff --git a/meta-oe/recipes-devtools/gcc/gcc-4.5/gcc-with-linker-hash-style.patch b/meta-oe/recipes-devtools/gcc/gcc-4.5/gcc-with-linker-hash-style.patch
new file mode 100644
index 0000000000..ac4281ac28
--- /dev/null
+++ b/meta-oe/recipes-devtools/gcc/gcc-4.5/gcc-with-linker-hash-style.patch
@@ -0,0 +1,212 @@
1Upstream-Status: Backport
2Signed-off-by: Khem Raj <raj.khem@gmail.com>
3
4commit 3cb9bbfa927aa187048534f9069202c017a78e38
5Author: ppluzhnikov <ppluzhnikov@138bc75d-0d04-0410-961f-82ee72b054a4>
6Date: Wed May 11 18:28:14 2011 +0000
7
8 2011-05-11 Satoru Takabayashi <satorux@google.com>
9 Paul Pluzhnikov <ppluzhnikov@google.com>
10
11 * gcc/doc/install.texi (Configuration): Document
12 --with-linker-hash-style.
13 * gcc/gcc.c (init_spec): Handle LINKER_HASH_STYLE.
14 * gcc/config.in: Add LINKER_HASH_STYLE.
15 * gcc/configure.ac: Add --with-linker-hash-style.
16 * gcc/configure: Regenerate.
17
18
19
20 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@173668 138bc75d-0d04-0410-961f-82ee72b054a4
21
22Index: gcc-4_5-branch/gcc/config.in
23===================================================================
24--- gcc-4_5-branch.orig/gcc/config.in 2011-12-03 13:41:00.000000000 -0800
25+++ gcc-4_5-branch/gcc/config.in 2011-12-03 13:44:46.287530329 -0800
26@@ -113,6 +113,12 @@
27 #endif
28
29
30+/* The linker hash style */
31+#ifndef USED_FOR_TARGET
32+#undef LINKER_HASH_STYLE
33+#endif
34+
35+
36 /* Define to enable LTO support. */
37 #ifndef USED_FOR_TARGET
38 #undef ENABLE_LTO
39Index: gcc-4_5-branch/gcc/configure
40===================================================================
41--- gcc-4_5-branch.orig/gcc/configure 2011-12-03 13:41:00.000000000 -0800
42+++ gcc-4_5-branch/gcc/configure 2011-12-03 13:46:12.747530321 -0800
43@@ -600,6 +600,7 @@
44
45 ac_subst_vars='LTLIBOBJS
46 LIBOBJS
47+enable_target_optspace
48 enable_plugin
49 pluginlibs
50 LIBELFINC
51@@ -915,7 +916,7 @@
52 with_slibdir
53 enable_poison_system_directories
54 enable_plugin
55-enable_target_optspace
56+with_linker_hash_style
57 '
58 ac_precious_vars='build_alias
59 host_alias
60@@ -1663,6 +1664,8 @@
61 with the compiler
62 --with-system-zlib use installed libz
63 --with-slibdir=DIR shared libraries in DIR [LIBDIR]
64+ --with-linker-hash-style={sysv,gnu,both}
65+ specify the linker hash style
66
67 Some influential environment variables:
68 CC C compiler command
69@@ -17115,7 +17118,7 @@
70 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
71 lt_status=$lt_dlunknown
72 cat > conftest.$ac_ext <<_LT_EOF
73-#line 17114 "configure"
74+#line 17121 "configure"
75 #include "confdefs.h"
76
77 #if HAVE_DLFCN_H
78@@ -17221,7 +17224,7 @@
79 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
80 lt_status=$lt_dlunknown
81 cat > conftest.$ac_ext <<_LT_EOF
82-#line 17220 "configure"
83+#line 17227 "configure"
84 #include "confdefs.h"
85
86 #if HAVE_DLFCN_H
87@@ -25659,12 +25662,42 @@
88
89 fi
90
91-if test x"$enable_target_optspace" != x; then :
92+
93+if test x"$enable_target_optspace" != x; then
94
95 $as_echo "#define ENABLE_TARGET_OPTSPACE 1" >>confdefs.h
96
97 fi
98
99+# Specify what hash style to use by default.
100+
101+# Check whether --with-linker-hash-style was given.
102+if test "${with_linker_hash_style+set}" = set; then :
103+ withval=$with_linker_hash_style; case x"$withval" in
104+ xsysv)
105+ LINKER_HASH_STYLE=sysv
106+ ;;
107+ xgnu)
108+ LINKER_HASH_STYLE=gnu
109+ ;;
110+ xboth)
111+ LINKER_HASH_STYLE=both
112+ ;;
113+ *)
114+ as_fn_error "$withval is an invalid option to --with-linker-hash-style" "$LINENO" 5
115+ ;;
116+ esac
117+else
118+ LINKER_HASH_STYLE=''
119+fi
120+
121+if test x"${LINKER_HASH_STYLE}" != x; then
122+
123+cat >>confdefs.h <<_ACEOF
124+#define LINKER_HASH_STYLE "$LINKER_HASH_STYLE"
125+_ACEOF
126+
127+fi
128
129 # Configure the subdirectories
130 # AC_CONFIG_SUBDIRS($subdirs)
131Index: gcc-4_5-branch/gcc/configure.ac
132===================================================================
133--- gcc-4_5-branch.orig/gcc/configure.ac 2011-12-03 13:41:00.000000000 -0800
134+++ gcc-4_5-branch/gcc/configure.ac 2011-12-03 13:41:04.499530358 -0800
135@@ -4664,6 +4664,30 @@
136 AC_DEFINE(ENABLE_TARGET_OPTSPACE, 1, [Define to enable target optspace support.])
137 fi
138
139+# Specify what hash style to use by default.
140+AC_ARG_WITH([linker-hash-style],
141+[AC_HELP_STRING([--with-linker-hash-style={sysv,gnu,both}],
142+ [specify the linker hash style])],
143+[case x"$withval" in
144+ xsysv)
145+ LINKER_HASH_STYLE=sysv
146+ ;;
147+ xgnu)
148+ LINKER_HASH_STYLE=gnu
149+ ;;
150+ xboth)
151+ LINKER_HASH_STYLE=both
152+ ;;
153+ *)
154+ AC_MSG_ERROR([$withval is an invalid option to --with-linker-hash-style])
155+ ;;
156+ esac],
157+[LINKER_HASH_STYLE=''])
158+if test x"${LINKER_HASH_STYLE}" != x; then
159+ AC_DEFINE_UNQUOTED(LINKER_HASH_STYLE, "$LINKER_HASH_STYLE",
160+ [The linker hash style])
161+fi
162+
163 # Configure the subdirectories
164 # AC_CONFIG_SUBDIRS($subdirs)
165
166Index: gcc-4_5-branch/gcc/doc/install.texi
167===================================================================
168--- gcc-4_5-branch.orig/gcc/doc/install.texi 2011-12-03 13:15:09.000000000 -0800
169+++ gcc-4_5-branch/gcc/doc/install.texi 2011-12-03 13:41:04.499530358 -0800
170@@ -1630,6 +1630,11 @@
171 support @option{--build-id} option, a warning is issued and the
172 @option{--enable-linker-build-id} option is ignored. The default is off.
173
174+@item --with-linker-hash-style=@var{choice}
175+Tells GCC to pass @option{--hash-style=@var{choice}} option to the
176+linker for all final links. @var{choice} can be one of
177+@samp{sysv}, @samp{gnu}, and @samp{both} where @samp{sysv} is the default.
178+
179 @item --enable-gnu-unique-object
180 @itemx --disable-gnu-unique-object
181 Tells GCC to use the gnu_unique_object relocation for C++ template
182Index: gcc-4_5-branch/gcc/gcc.c
183===================================================================
184--- gcc-4_5-branch.orig/gcc/gcc.c 2011-12-03 13:41:00.000000000 -0800
185+++ gcc-4_5-branch/gcc/gcc.c 2011-12-03 13:41:04.499530358 -0800
186@@ -1917,7 +1917,8 @@
187 }
188 #endif
189
190-#if defined LINK_EH_SPEC || defined LINK_BUILDID_SPEC
191+#if defined LINK_EH_SPEC || defined LINK_BUILDID_SPEC || \
192+ defined LINKER_HASH_STYLE
193 # ifdef LINK_BUILDID_SPEC
194 /* Prepend LINK_BUILDID_SPEC to whatever link_spec we had before. */
195 obstack_grow (&obstack, LINK_BUILDID_SPEC, sizeof(LINK_BUILDID_SPEC) - 1);
196@@ -1926,6 +1927,16 @@
197 /* Prepend LINK_EH_SPEC to whatever link_spec we had before. */
198 obstack_grow (&obstack, LINK_EH_SPEC, sizeof(LINK_EH_SPEC) - 1);
199 # endif
200+# ifdef LINKER_HASH_STYLE
201+ /* Prepend --hash-style=LINKER_HASH_STYLE to whatever link_spec we had
202+ before. */
203+ {
204+ static const char hash_style[] = "--hash-style=";
205+ obstack_grow (&obstack, hash_style, sizeof(hash_style) - 1);
206+ obstack_grow (&obstack, LINKER_HASH_STYLE, sizeof(LINKER_HASH_STYLE) - 1);
207+ obstack_1grow (&obstack, ' ');
208+ }
209+# endif
210 obstack_grow0 (&obstack, link_spec, strlen (link_spec));
211 link_spec = XOBFINISH (&obstack, const char *);
212 #endif
diff --git a/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99491.patch b/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99491.patch
deleted file mode 100644
index a2d6c6a69a..0000000000
--- a/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99491.patch
+++ /dev/null
@@ -1,309 +0,0 @@
12011-04-08 Richard Sandiford <richard.sandiford@linaro.org>
2
3 Backport from mainline:
4 gcc/
5 * dwarf2out.c (dw_loc_list_node): Add resolved_addr and replaced.
6 (cached_dw_loc_list_def): New structure.
7 (cached_dw_loc_list): New typedef.
8 (cached_dw_loc_list_table): New variable.
9 (cached_dw_loc_list_table_hash): New function.
10 (cached_dw_loc_list_table_eq): Likewise.
11 (add_location_or_const_value_attribute): Take a bool cache_p.
12 Cache the list when the parameter is true.
13 (gen_formal_parameter_die): Update caller.
14 (gen_variable_die): Likewise.
15 (dwarf2out_finish): Likewise.
16 (dwarf2out_abstract_function): Nullify cached_dw_loc_list_table
17 while generating debug info for the decl.
18 (dwarf2out_function_decl): Clear cached_dw_loc_list_table.
19 (dwarf2out_init): Initialize cached_dw_loc_list_table.
20 (resolve_addr): Cache the result of resolving a chain of
21 location lists.
22
23 From: 2010-10-12 Jakub Jelinek <jakub@redhat.com>
24 * dwarf2out.c (dw_loc_list_node): Add emitted field.
25 (output_loc_list): Return immediately if emitted is set, set it.
26
27=== modified file 'gcc/dwarf2out.c'
28--- old/gcc/dwarf2out.c 2011-03-10 14:55:10 +0000
29+++ new/gcc/dwarf2out.c 2011-03-28 09:43:50 +0000
30@@ -4256,6 +4256,12 @@
31 Only on head of list */
32 const char *section; /* Section this loclist is relative to */
33 dw_loc_descr_ref expr;
34+ /* True if all addresses in this and subsequent lists are known to be
35+ resolved. */
36+ bool resolved_addr;
37+ /* True if this list has been replaced by dw_loc_next. */
38+ bool replaced;
39+ bool emitted;
40 } dw_loc_list_node;
41
42 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
43@@ -5759,6 +5765,19 @@
44 /* Table of decl location linked lists. */
45 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
46
47+/* A cached location list. */
48+struct GTY (()) cached_dw_loc_list_def {
49+ /* The DECL_UID of the decl that this entry describes. */
50+ unsigned int decl_id;
51+
52+ /* The cached location list. */
53+ dw_loc_list_ref loc_list;
54+};
55+typedef struct cached_dw_loc_list_def cached_dw_loc_list;
56+
57+/* Table of cached location lists. */
58+static GTY ((param_is (cached_dw_loc_list))) htab_t cached_dw_loc_list_table;
59+
60 /* A pointer to the base of a list of references to DIE's that
61 are uniquely identified by their tag, presence/absence of
62 children DIE's, and list of attribute/value pairs. */
63@@ -6112,7 +6131,7 @@
64 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
65 static void insert_float (const_rtx, unsigned char *);
66 static rtx rtl_for_decl_location (tree);
67-static bool add_location_or_const_value_attribute (dw_die_ref, tree,
68+static bool add_location_or_const_value_attribute (dw_die_ref, tree, bool,
69 enum dwarf_attribute);
70 static bool tree_add_const_value_attribute (dw_die_ref, tree);
71 static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
72@@ -7731,6 +7750,24 @@
73 htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
74 }
75
76+/* Returns a hash value for X (which really is a cached_dw_loc_list_list). */
77+
78+static hashval_t
79+cached_dw_loc_list_table_hash (const void *x)
80+{
81+ return (hashval_t) ((const cached_dw_loc_list *) x)->decl_id;
82+}
83+
84+/* Return nonzero if decl_id of cached_dw_loc_list X is the same as
85+ UID of decl *Y. */
86+
87+static int
88+cached_dw_loc_list_table_eq (const void *x, const void *y)
89+{
90+ return (((const cached_dw_loc_list *) x)->decl_id
91+ == DECL_UID ((const_tree) y));
92+}
93+
94 /* Equate a DIE to a particular declaration. */
95
96 static void
97@@ -10355,6 +10392,10 @@
98 {
99 dw_loc_list_ref curr = list_head;
100
101+ if (list_head->emitted)
102+ return;
103+ list_head->emitted = true;
104+
105 ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
106
107 /* Walk the location list, and output each range + expression. */
108@@ -15920,15 +15961,22 @@
109 these things can crop up in other ways also.) Note that one type of
110 constant value which can be passed into an inlined function is a constant
111 pointer. This can happen for example if an actual argument in an inlined
112- function call evaluates to a compile-time constant address. */
113+ function call evaluates to a compile-time constant address.
114+
115+ CACHE_P is true if it is worth caching the location list for DECL,
116+ so that future calls can reuse it rather than regenerate it from scratch.
117+ This is true for BLOCK_NONLOCALIZED_VARS in inlined subroutines,
118+ since we will need to refer to them each time the function is inlined. */
119
120 static bool
121-add_location_or_const_value_attribute (dw_die_ref die, tree decl,
122+add_location_or_const_value_attribute (dw_die_ref die, tree decl, bool cache_p,
123 enum dwarf_attribute attr)
124 {
125 rtx rtl;
126 dw_loc_list_ref list;
127 var_loc_list *loc_list;
128+ cached_dw_loc_list *cache;
129+ void **slot;
130
131 if (TREE_CODE (decl) == ERROR_MARK)
132 return false;
133@@ -15964,7 +16012,34 @@
134 && add_const_value_attribute (die, rtl))
135 return true;
136 }
137- list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
138+ /* If this decl is from BLOCK_NONLOCALIZED_VARS, we might need its
139+ list several times. See if we've already cached the contents. */
140+ list = NULL;
141+ if (loc_list == NULL || cached_dw_loc_list_table == NULL)
142+ cache_p = false;
143+ if (cache_p)
144+ {
145+ cache = (cached_dw_loc_list *)
146+ htab_find_with_hash (cached_dw_loc_list_table, decl, DECL_UID (decl));
147+ if (cache)
148+ list = cache->loc_list;
149+ }
150+ if (list == NULL)
151+ {
152+ list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
153+ /* It is usually worth caching this result if the decl is from
154+ BLOCK_NONLOCALIZED_VARS and if the list has at least two elements. */
155+ if (cache_p && list && list->dw_loc_next)
156+ {
157+ slot = htab_find_slot_with_hash (cached_dw_loc_list_table, decl,
158+ DECL_UID (decl), INSERT);
159+ cache = (cached_dw_loc_list *)
160+ ggc_alloc_cleared (sizeof (cached_dw_loc_list));
161+ cache->decl_id = DECL_UID (decl);
162+ cache->loc_list = list;
163+ *slot = cache;
164+ }
165+ }
166 if (list)
167 {
168 add_AT_location_description (die, attr, list);
169@@ -17532,7 +17607,7 @@
170 equate_decl_number_to_die (node, parm_die);
171 if (! DECL_ABSTRACT (node_or_origin))
172 add_location_or_const_value_attribute (parm_die, node_or_origin,
173- DW_AT_location);
174+ node == NULL, DW_AT_location);
175
176 break;
177
178@@ -17712,6 +17787,7 @@
179 tree context;
180 int was_abstract;
181 htab_t old_decl_loc_table;
182+ htab_t old_cached_dw_loc_list_table;
183
184 /* Make sure we have the actual abstract inline, not a clone. */
185 decl = DECL_ORIGIN (decl);
186@@ -17725,7 +17801,9 @@
187 DIE. Be sure to not clobber the outer location table nor use it or we would
188 get locations in abstract instantces. */
189 old_decl_loc_table = decl_loc_table;
190+ old_cached_dw_loc_list_table = cached_dw_loc_list_table;
191 decl_loc_table = NULL;
192+ cached_dw_loc_list_table = NULL;
193
194 /* Be sure we've emitted the in-class declaration DIE (if any) first, so
195 we don't get confused by DECL_ABSTRACT. */
196@@ -17750,6 +17828,7 @@
197
198 current_function_decl = save_fn;
199 decl_loc_table = old_decl_loc_table;
200+ cached_dw_loc_list_table = old_cached_dw_loc_list_table;
201 pop_cfun ();
202 }
203
204@@ -18431,9 +18510,8 @@
205 && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
206 defer_location (decl_or_origin, var_die);
207 else
208- add_location_or_const_value_attribute (var_die,
209- decl_or_origin,
210- DW_AT_location);
211+ add_location_or_const_value_attribute (var_die, decl_or_origin,
212+ decl == NULL, DW_AT_location);
213 add_pubname (decl_or_origin, var_die);
214 }
215 else
216@@ -20049,6 +20127,7 @@
217 dwarf2out_decl (decl);
218
219 htab_empty (decl_loc_table);
220+ htab_empty (cached_dw_loc_list_table);
221 }
222
223 /* Output a marker (i.e. a label) for the beginning of the generated code for
224@@ -20649,6 +20728,11 @@
225 decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
226 decl_loc_table_eq, NULL);
227
228+ /* Allocate the cached_dw_loc_list_table. */
229+ cached_dw_loc_list_table
230+ = htab_create_ggc (10, cached_dw_loc_list_table_hash,
231+ cached_dw_loc_list_table_eq, NULL);
232+
233 /* Allocate the initial hunk of the decl_scope_table. */
234 decl_scope_table = VEC_alloc (tree, gc, 256);
235
236@@ -21278,30 +21362,53 @@
237 {
238 dw_die_ref c;
239 dw_attr_ref a;
240- dw_loc_list_ref *curr;
241+ dw_loc_list_ref *curr, *start, loc;
242 unsigned ix;
243
244 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
245 switch (AT_class (a))
246 {
247 case dw_val_class_loc_list:
248- curr = AT_loc_list_ptr (a);
249- while (*curr)
250+ start = curr = AT_loc_list_ptr (a);
251+ loc = *curr;
252+ gcc_assert (loc);
253+ /* The same list can be referenced more than once. See if we have
254+ already recorded the result from a previous pass. */
255+ if (loc->replaced)
256+ *curr = loc->dw_loc_next;
257+ else if (!loc->resolved_addr)
258 {
259- if (!resolve_addr_in_expr ((*curr)->expr))
260+ /* As things stand, we do not expect or allow one die to
261+ reference a suffix of another die's location list chain.
262+ References must be identical or completely separate.
263+ There is therefore no need to cache the result of this
264+ pass on any list other than the first; doing so
265+ would lead to unnecessary writes. */
266+ while (*curr)
267 {
268- dw_loc_list_ref next = (*curr)->dw_loc_next;
269- if (next && (*curr)->ll_symbol)
270+ gcc_assert (!(*curr)->replaced && !(*curr)->resolved_addr);
271+ if (!resolve_addr_in_expr ((*curr)->expr))
272 {
273- gcc_assert (!next->ll_symbol);
274- next->ll_symbol = (*curr)->ll_symbol;
275+ dw_loc_list_ref next = (*curr)->dw_loc_next;
276+ if (next && (*curr)->ll_symbol)
277+ {
278+ gcc_assert (!next->ll_symbol);
279+ next->ll_symbol = (*curr)->ll_symbol;
280+ }
281+ *curr = next;
282 }
283- *curr = next;
284+ else
285+ curr = &(*curr)->dw_loc_next;
286 }
287+ if (loc == *start)
288+ loc->resolved_addr = 1;
289 else
290- curr = &(*curr)->dw_loc_next;
291+ {
292+ loc->replaced = 1;
293+ loc->dw_loc_next = *start;
294+ }
295 }
296- if (!AT_loc_list (a))
297+ if (!*start)
298 {
299 remove_AT (die, a->dw_attr);
300 ix--;
301@@ -21361,6 +21468,7 @@
302 add_location_or_const_value_attribute (
303 VEC_index (deferred_locations, deferred_locations_list, i)->die,
304 VEC_index (deferred_locations, deferred_locations_list, i)->variable,
305+ false,
306 DW_AT_location);
307 }
308
309
diff --git a/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99541.patch b/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99541.patch
deleted file mode 100644
index ae0e4bcd35..0000000000
--- a/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99541.patch
+++ /dev/null
@@ -1,22 +0,0 @@
12011-09-12 Richard Sandiford <richard.sandiford@linaro.org>
2
3 gcc/
4 Backport from mainline:
5
6 2010-12-06 Jakub Jelinek <jakub@redhat.com>
7
8 PR debug/46771
9 * reginfo.c (init_subregs_of_mode): Don't call find_subregs_of_mode
10 on DEBUG_INSNs.
11
12=== modified file 'gcc/reginfo.c'
13--- old/gcc/reginfo.c 2010-10-04 00:50:43 +0000
14+++ new/gcc/reginfo.c 2011-09-12 10:54:51 +0000
15@@ -1350,7 +1350,7 @@
16
17 FOR_EACH_BB (bb)
18 FOR_BB_INSNS (bb, insn)
19- if (INSN_P (insn))
20+ if (NONDEBUG_INSN_P (insn))
21 find_subregs_of_mode (PATTERN (insn));
22 }
diff --git a/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99548.patch b/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99548.patch
new file mode 100644
index 0000000000..b78319e8fa
--- /dev/null
+++ b/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99548.patch
@@ -0,0 +1,80 @@
12011-09-22 Revital Eres <revital.eres@linaro.org>
2
3 gcc/
4 Backport from trunk -r178804:
5 modulo-sched.c (remove_node_from_ps): Return void
6 instead of bool.
7 (optimize_sc): Adjust call to remove_node_from_ps.
8 (sms_schedule): Add print info.
9
10=== modified file 'gcc/modulo-sched.c'
11--- old/gcc/modulo-sched.c 2011-08-09 04:31:10 +0000
12+++ new/gcc/modulo-sched.c 2011-09-22 13:58:43 +0000
13@@ -211,7 +211,7 @@
14 static bool try_scheduling_node_in_cycle (partial_schedule_ptr, ddg_node_ptr,
15 int, int, sbitmap, int *, sbitmap,
16 sbitmap);
17-static bool remove_node_from_ps (partial_schedule_ptr, ps_insn_ptr);
18+static void remove_node_from_ps (partial_schedule_ptr, ps_insn_ptr);
19
20 #define SCHED_ASAP(x) (((node_sched_params_ptr)(x)->aux.info)->asap)
21 #define SCHED_TIME(x) (((node_sched_params_ptr)(x)->aux.info)->time)
22@@ -834,8 +834,7 @@
23 if (next_ps_i->node->cuid == g->closing_branch->cuid)
24 break;
25
26- gcc_assert (next_ps_i);
27- gcc_assert (remove_node_from_ps (ps, next_ps_i));
28+ remove_node_from_ps (ps, next_ps_i);
29 success =
30 try_scheduling_node_in_cycle (ps, g->closing_branch,
31 g->closing_branch->cuid, c,
32@@ -1485,8 +1484,8 @@
33 if (dump_file)
34 {
35 fprintf (dump_file,
36- "SMS succeeded %d %d (with ii, sc)\n", ps->ii,
37- stage_count);
38+ "%s:%d SMS succeeded %d %d (with ii, sc)\n",
39+ insn_file (tail), insn_line (tail), ps->ii, stage_count);
40 print_partial_schedule (ps, dump_file);
41 }
42
43@@ -2810,22 +2809,18 @@
44 }
45
46
47-/* Removes the given PS_INSN from the partial schedule. Returns false if the
48- node is not found in the partial schedule, else returns true. */
49-static bool
50+/* Removes the given PS_INSN from the partial schedule. */
51+static void
52 remove_node_from_ps (partial_schedule_ptr ps, ps_insn_ptr ps_i)
53 {
54 int row;
55
56- if (!ps || !ps_i)
57- return false;
58-
59+ gcc_assert (ps && ps_i);
60+
61 row = SMODULO (ps_i->cycle, ps->ii);
62 if (! ps_i->prev_in_row)
63 {
64- if (ps_i != ps->rows[row])
65- return false;
66-
67+ gcc_assert (ps_i == ps->rows[row]);
68 ps->rows[row] = ps_i->next_in_row;
69 if (ps->rows[row])
70 ps->rows[row]->prev_in_row = NULL;
71@@ -2839,7 +2834,7 @@
72
73 ps->rows_length[row] -= 1;
74 free (ps_i);
75- return true;
76+ return;
77 }
78
79 /* Unlike what literature describes for modulo scheduling (which focuses
80
diff --git a/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99549.patch b/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99549.patch
new file mode 100644
index 0000000000..43617024a1
--- /dev/null
+++ b/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99549.patch
@@ -0,0 +1,460 @@
12011-10-03 Richard Sandiford <richard.sandiford@linaro.org>
2
3 gcc/
4 Backport from mainline:
5
6 2010-12-06 Jakub Jelinek <jakub@redhat.com>
7
8 PR debug/46771
9 * reginfo.c (init_subregs_of_mode): Don't call find_subregs_of_mode
10 on DEBUG_INSNs.
11
122011-10-03 Richard Sandiford <richard.sandiford@linaro.org>
13
14 gcc/
15 Backport from mainline:
16
17 2011-09-22 Richard Sandiford <richard.sandiford@linaro.org>
18
19 * config/arm/predicates.md (expandable_comparison_operator): New
20 predicate, extracted from...
21 (arm_comparison_operator): ...here.
22 * config/arm/arm.md (cbranchsi4, cbranchsf4, cbranchdf4, cbranchdi4)
23 (cstoresi4, cstoresf4, cstoredf4, cstoredi4, movsicc, movsfcc)
24 (movdfcc): Use expandable_comparison_operator.
25
26 gcc/testsuite/
27 Backport from mainline:
28
29 2011-09-22 Richard Sandiford <richard.sandiford@linaro.org>
30
31 * gcc.target/arm/cmp-1.c: New test.
32 * gcc.target/arm/cmp-2.c: Likewise.
33
342011-10-03 Richard Sandiford <richard.sandiford@linaro.org>
35
36 gcc/
37 Backport from mainline:
38
39 2011-09-07 Richard Sandiford <richard.sandiford@linaro.org>
40
41 PR target/49030
42 * config/arm/arm-protos.h (maybe_get_arm_condition_code): Declare.
43 * config/arm/arm.c (maybe_get_arm_condition_code): New function,
44 reusing the old code from get_arm_condition_code. Return ARM_NV
45 for invalid comparison codes.
46 (get_arm_condition_code): Redefine in terms of
47 maybe_get_arm_condition_code.
48 * config/arm/predicates.md (arm_comparison_operator): Use
49 maybe_get_arm_condition_code.
50
51 gcc/testsuite/
52 Backport from mainline:
53
54 2011-09-07 Richard Sandiford <richard.sandiford@linaro.org>
55
56 PR target/49030
57 * gcc.dg/torture/pr49030.c: New test.
58
59=== modified file 'gcc/config/arm/arm-protos.h'
60--- old/gcc/config/arm/arm-protos.h 2011-09-15 10:06:35 +0000
61+++ new/gcc/config/arm/arm-protos.h 2011-10-03 10:09:06 +0000
62@@ -182,6 +182,7 @@
63 #endif
64 extern int thumb_shiftable_const (unsigned HOST_WIDE_INT);
65 #ifdef RTX_CODE
66+extern enum arm_cond_code maybe_get_arm_condition_code (rtx);
67 extern void thumb1_final_prescan_insn (rtx);
68 extern void thumb2_final_prescan_insn (rtx);
69 extern const char *thumb_load_double_from_address (rtx *);
70
71=== modified file 'gcc/config/arm/arm.c'
72--- old/gcc/config/arm/arm.c 2011-09-15 10:06:35 +0000
73+++ new/gcc/config/arm/arm.c 2011-10-03 10:09:06 +0000
74@@ -17196,10 +17196,10 @@
75 decremented/zeroed by arm_asm_output_opcode as the insns are output. */
76
77 /* Returns the index of the ARM condition code string in
78- `arm_condition_codes'. COMPARISON should be an rtx like
79- `(eq (...) (...))'. */
80-static enum arm_cond_code
81-get_arm_condition_code (rtx comparison)
82+ `arm_condition_codes', or ARM_NV if the comparison is invalid.
83+ COMPARISON should be an rtx like `(eq (...) (...))'. */
84+enum arm_cond_code
85+maybe_get_arm_condition_code (rtx comparison)
86 {
87 enum machine_mode mode = GET_MODE (XEXP (comparison, 0));
88 enum arm_cond_code code;
89@@ -17223,11 +17223,11 @@
90 case CC_DLTUmode: code = ARM_CC;
91
92 dominance:
93- gcc_assert (comp_code == EQ || comp_code == NE);
94-
95 if (comp_code == EQ)
96 return ARM_INVERSE_CONDITION_CODE (code);
97- return code;
98+ if (comp_code == NE)
99+ return code;
100+ return ARM_NV;
101
102 case CC_NOOVmode:
103 switch (comp_code)
104@@ -17236,7 +17236,7 @@
105 case EQ: return ARM_EQ;
106 case GE: return ARM_PL;
107 case LT: return ARM_MI;
108- default: gcc_unreachable ();
109+ default: return ARM_NV;
110 }
111
112 case CC_Zmode:
113@@ -17244,7 +17244,7 @@
114 {
115 case NE: return ARM_NE;
116 case EQ: return ARM_EQ;
117- default: gcc_unreachable ();
118+ default: return ARM_NV;
119 }
120
121 case CC_Nmode:
122@@ -17252,7 +17252,7 @@
123 {
124 case NE: return ARM_MI;
125 case EQ: return ARM_PL;
126- default: gcc_unreachable ();
127+ default: return ARM_NV;
128 }
129
130 case CCFPEmode:
131@@ -17277,7 +17277,7 @@
132 /* UNEQ and LTGT do not have a representation. */
133 case UNEQ: /* Fall through. */
134 case LTGT: /* Fall through. */
135- default: gcc_unreachable ();
136+ default: return ARM_NV;
137 }
138
139 case CC_SWPmode:
140@@ -17293,7 +17293,7 @@
141 case GTU: return ARM_CC;
142 case LEU: return ARM_CS;
143 case LTU: return ARM_HI;
144- default: gcc_unreachable ();
145+ default: return ARM_NV;
146 }
147
148 case CC_Cmode:
149@@ -17301,7 +17301,7 @@
150 {
151 case LTU: return ARM_CS;
152 case GEU: return ARM_CC;
153- default: gcc_unreachable ();
154+ default: return ARM_NV;
155 }
156
157 case CC_CZmode:
158@@ -17313,7 +17313,7 @@
159 case GTU: return ARM_HI;
160 case LEU: return ARM_LS;
161 case LTU: return ARM_CC;
162- default: gcc_unreachable ();
163+ default: return ARM_NV;
164 }
165
166 case CC_NCVmode:
167@@ -17323,7 +17323,7 @@
168 case LT: return ARM_LT;
169 case GEU: return ARM_CS;
170 case LTU: return ARM_CC;
171- default: gcc_unreachable ();
172+ default: return ARM_NV;
173 }
174
175 case CCmode:
176@@ -17339,13 +17339,22 @@
177 case GTU: return ARM_HI;
178 case LEU: return ARM_LS;
179 case LTU: return ARM_CC;
180- default: gcc_unreachable ();
181+ default: return ARM_NV;
182 }
183
184 default: gcc_unreachable ();
185 }
186 }
187
188+/* Like maybe_get_arm_condition_code, but never return ARM_NV. */
189+static enum arm_cond_code
190+get_arm_condition_code (rtx comparison)
191+{
192+ enum arm_cond_code code = maybe_get_arm_condition_code (comparison);
193+ gcc_assert (code != ARM_NV);
194+ return code;
195+}
196+
197 /* Tell arm_asm_output_opcode to output IT blocks for conditionally executed
198 instructions. */
199 void
200
201=== modified file 'gcc/config/arm/arm.md'
202--- old/gcc/config/arm/arm.md 2011-07-12 16:35:20 +0000
203+++ new/gcc/config/arm/arm.md 2011-10-03 10:09:55 +0000
204@@ -6428,7 +6428,7 @@
205
206 (define_expand "cbranchsi4"
207 [(set (pc) (if_then_else
208- (match_operator 0 "arm_comparison_operator"
209+ (match_operator 0 "expandable_comparison_operator"
210 [(match_operand:SI 1 "s_register_operand" "")
211 (match_operand:SI 2 "nonmemory_operand" "")])
212 (label_ref (match_operand 3 "" ""))
213@@ -6479,7 +6479,7 @@
214
215 (define_expand "cbranchsf4"
216 [(set (pc) (if_then_else
217- (match_operator 0 "arm_comparison_operator"
218+ (match_operator 0 "expandable_comparison_operator"
219 [(match_operand:SF 1 "s_register_operand" "")
220 (match_operand:SF 2 "arm_float_compare_operand" "")])
221 (label_ref (match_operand 3 "" ""))
222@@ -6491,7 +6491,7 @@
223
224 (define_expand "cbranchdf4"
225 [(set (pc) (if_then_else
226- (match_operator 0 "arm_comparison_operator"
227+ (match_operator 0 "expandable_comparison_operator"
228 [(match_operand:DF 1 "s_register_operand" "")
229 (match_operand:DF 2 "arm_float_compare_operand" "")])
230 (label_ref (match_operand 3 "" ""))
231@@ -6503,7 +6503,7 @@
232
233 (define_expand "cbranchdi4"
234 [(set (pc) (if_then_else
235- (match_operator 0 "arm_comparison_operator"
236+ (match_operator 0 "expandable_comparison_operator"
237 [(match_operand:DI 1 "cmpdi_operand" "")
238 (match_operand:DI 2 "cmpdi_operand" "")])
239 (label_ref (match_operand 3 "" ""))
240@@ -7898,7 +7898,7 @@
241
242 (define_expand "cstoresi4"
243 [(set (match_operand:SI 0 "s_register_operand" "")
244- (match_operator:SI 1 "arm_comparison_operator"
245+ (match_operator:SI 1 "expandable_comparison_operator"
246 [(match_operand:SI 2 "s_register_operand" "")
247 (match_operand:SI 3 "reg_or_int_operand" "")]))]
248 "TARGET_32BIT || TARGET_THUMB1"
249@@ -8034,7 +8034,7 @@
250
251 (define_expand "cstoresf4"
252 [(set (match_operand:SI 0 "s_register_operand" "")
253- (match_operator:SI 1 "arm_comparison_operator"
254+ (match_operator:SI 1 "expandable_comparison_operator"
255 [(match_operand:SF 2 "s_register_operand" "")
256 (match_operand:SF 3 "arm_float_compare_operand" "")]))]
257 "TARGET_32BIT && TARGET_HARD_FLOAT"
258@@ -8044,7 +8044,7 @@
259
260 (define_expand "cstoredf4"
261 [(set (match_operand:SI 0 "s_register_operand" "")
262- (match_operator:SI 1 "arm_comparison_operator"
263+ (match_operator:SI 1 "expandable_comparison_operator"
264 [(match_operand:DF 2 "s_register_operand" "")
265 (match_operand:DF 3 "arm_float_compare_operand" "")]))]
266 "TARGET_32BIT && TARGET_HARD_FLOAT && !TARGET_VFP_SINGLE"
267@@ -8054,7 +8054,7 @@
268
269 (define_expand "cstoredi4"
270 [(set (match_operand:SI 0 "s_register_operand" "")
271- (match_operator:SI 1 "arm_comparison_operator"
272+ (match_operator:SI 1 "expandable_comparison_operator"
273 [(match_operand:DI 2 "cmpdi_operand" "")
274 (match_operand:DI 3 "cmpdi_operand" "")]))]
275 "TARGET_32BIT"
276@@ -8174,7 +8174,7 @@
277
278 (define_expand "movsicc"
279 [(set (match_operand:SI 0 "s_register_operand" "")
280- (if_then_else:SI (match_operand 1 "arm_comparison_operator" "")
281+ (if_then_else:SI (match_operand 1 "expandable_comparison_operator" "")
282 (match_operand:SI 2 "arm_not_operand" "")
283 (match_operand:SI 3 "arm_not_operand" "")))]
284 "TARGET_32BIT"
285@@ -8194,7 +8194,7 @@
286
287 (define_expand "movsfcc"
288 [(set (match_operand:SF 0 "s_register_operand" "")
289- (if_then_else:SF (match_operand 1 "arm_comparison_operator" "")
290+ (if_then_else:SF (match_operand 1 "expandable_comparison_operator" "")
291 (match_operand:SF 2 "s_register_operand" "")
292 (match_operand:SF 3 "nonmemory_operand" "")))]
293 "TARGET_32BIT && TARGET_HARD_FLOAT"
294@@ -8220,7 +8220,7 @@
295
296 (define_expand "movdfcc"
297 [(set (match_operand:DF 0 "s_register_operand" "")
298- (if_then_else:DF (match_operand 1 "arm_comparison_operator" "")
299+ (if_then_else:DF (match_operand 1 "expandable_comparison_operator" "")
300 (match_operand:DF 2 "s_register_operand" "")
301 (match_operand:DF 3 "arm_float_add_operand" "")))]
302 "TARGET_32BIT && TARGET_HARD_FLOAT && (TARGET_FPA || TARGET_VFP_DOUBLE)"
303
304=== modified file 'gcc/config/arm/predicates.md'
305--- old/gcc/config/arm/predicates.md 2011-09-15 10:06:35 +0000
306+++ new/gcc/config/arm/predicates.md 2011-10-03 10:09:55 +0000
307@@ -236,11 +236,15 @@
308
309 ;; True for integer comparisons and, if FP is active, for comparisons
310 ;; other than LTGT or UNEQ.
311+(define_special_predicate "expandable_comparison_operator"
312+ (match_code "eq,ne,le,lt,ge,gt,geu,gtu,leu,ltu,
313+ unordered,ordered,unlt,unle,unge,ungt"))
314+
315+;; Likewise, but only accept comparisons that are directly supported
316+;; by ARM condition codes.
317 (define_special_predicate "arm_comparison_operator"
318- (ior (match_code "eq,ne,le,lt,ge,gt,geu,gtu,leu,ltu")
319- (and (match_test "TARGET_32BIT && TARGET_HARD_FLOAT
320- && (TARGET_FPA || TARGET_VFP)")
321- (match_code "unordered,ordered,unlt,unle,unge,ungt"))))
322+ (and (match_operand 0 "expandable_comparison_operator")
323+ (match_test "maybe_get_arm_condition_code (op) != ARM_NV")))
324
325 (define_special_predicate "lt_ge_comparison_operator"
326 (match_code "lt,ge"))
327
328=== modified file 'gcc/reginfo.c'
329--- old/gcc/reginfo.c 2011-09-15 10:06:35 +0000
330+++ new/gcc/reginfo.c 2011-10-03 10:10:17 +0000
331@@ -1350,7 +1350,7 @@
332
333 FOR_EACH_BB (bb)
334 FOR_BB_INSNS (bb, insn)
335- if (INSN_P (insn))
336+ if (NONDEBUG_INSN_P (insn))
337 find_subregs_of_mode (PATTERN (insn));
338 }
339
340
341=== added file 'gcc/testsuite/gcc.dg/torture/pr49030.c'
342--- old/gcc/testsuite/gcc.dg/torture/pr49030.c 1970-01-01 00:00:00 +0000
343+++ new/gcc/testsuite/gcc.dg/torture/pr49030.c 2011-10-03 10:09:06 +0000
344@@ -0,0 +1,19 @@
345+void
346+sample_move_d32u24_sS (char *dst, float *src, unsigned long nsamples,
347+ unsigned long dst_skip)
348+{
349+ long long y;
350+ while (nsamples--)
351+ {
352+ y = (long long) (*src * 8388608.0f) << 8;
353+ if (y > 2147483647) {
354+ *(int *) dst = 2147483647;
355+ } else if (y < -2147483647 - 1) {
356+ *(int *) dst = -2147483647 - 1;
357+ } else {
358+ *(int *) dst = (int) y;
359+ }
360+ dst += dst_skip;
361+ src++;
362+ }
363+}
364
365=== added file 'gcc/testsuite/gcc.target/arm/cmp-1.c'
366--- old/gcc/testsuite/gcc.target/arm/cmp-1.c 1970-01-01 00:00:00 +0000
367+++ new/gcc/testsuite/gcc.target/arm/cmp-1.c 2011-10-03 10:09:55 +0000
368@@ -0,0 +1,37 @@
369+/* { dg-do compile } */
370+/* { dg-options "-O" } */
371+/* { dg-final { scan-assembler-not "\tbl\t" } } */
372+/* { dg-final { scan-assembler-not "__aeabi" } } */
373+int x, y;
374+
375+#define TEST_EXPR(NAME, ARGS, EXPR) \
376+ int NAME##1 ARGS { return (EXPR); } \
377+ int NAME##2 ARGS { return !(EXPR); } \
378+ int NAME##3 ARGS { return (EXPR) ? x : y; } \
379+ void NAME##4 ARGS { if (EXPR) x++; } \
380+ void NAME##5 ARGS { if (!(EXPR)) x++; }
381+
382+#define TEST(NAME, TYPE, OPERATOR) \
383+ TEST_EXPR (NAME##_rr, (TYPE a1, TYPE a2), a1 OPERATOR a2) \
384+ TEST_EXPR (NAME##_rm, (TYPE a1, TYPE *a2), a1 OPERATOR *a2) \
385+ TEST_EXPR (NAME##_mr, (TYPE *a1, TYPE a2), *a1 OPERATOR a2) \
386+ TEST_EXPR (NAME##_mm, (TYPE *a1, TYPE *a2), *a1 OPERATOR *a2) \
387+ TEST_EXPR (NAME##_rc, (TYPE a1), a1 OPERATOR 100) \
388+ TEST_EXPR (NAME##_cr, (TYPE a1), 100 OPERATOR a1)
389+
390+#define TEST_OP(NAME, OPERATOR) \
391+ TEST (sc_##NAME, signed char, OPERATOR) \
392+ TEST (uc_##NAME, unsigned char, OPERATOR) \
393+ TEST (ss_##NAME, short, OPERATOR) \
394+ TEST (us_##NAME, unsigned short, OPERATOR) \
395+ TEST (si_##NAME, int, OPERATOR) \
396+ TEST (ui_##NAME, unsigned int, OPERATOR) \
397+ TEST (sll_##NAME, long long, OPERATOR) \
398+ TEST (ull_##NAME, unsigned long long, OPERATOR)
399+
400+TEST_OP (eq, ==)
401+TEST_OP (ne, !=)
402+TEST_OP (lt, <)
403+TEST_OP (gt, >)
404+TEST_OP (le, <=)
405+TEST_OP (ge, >=)
406
407=== added file 'gcc/testsuite/gcc.target/arm/cmp-2.c'
408--- old/gcc/testsuite/gcc.target/arm/cmp-2.c 1970-01-01 00:00:00 +0000
409+++ new/gcc/testsuite/gcc.target/arm/cmp-2.c 2011-10-03 10:09:55 +0000
410@@ -0,0 +1,49 @@
411+/* { dg-do compile } */
412+/* { dg-require-effective-target arm_vfp_ok } */
413+/* { dg-skip-if "need fp instructions" { *-*-* } { "-mfloat-abi=soft" } { "" } } */
414+/* { dg-options "-O -mfpu=vfp -mfloat-abi=softfp" } */
415+/* { dg-final { scan-assembler-not "\tbl\t" } } */
416+/* { dg-final { scan-assembler-not "__aeabi" } } */
417+int x, y;
418+
419+#define EQ(X, Y) ((X) == (Y))
420+#define NE(X, Y) ((X) != (Y))
421+#define LT(X, Y) ((X) < (Y))
422+#define GT(X, Y) ((X) > (Y))
423+#define LE(X, Y) ((X) <= (Y))
424+#define GE(X, Y) ((X) >= (Y))
425+
426+#define TEST_EXPR(NAME, ARGS, EXPR) \
427+ int NAME##1 ARGS { return (EXPR); } \
428+ int NAME##2 ARGS { return !(EXPR); } \
429+ int NAME##3 ARGS { return (EXPR) ? x : y; } \
430+ void NAME##4 ARGS { if (EXPR) x++; } \
431+ void NAME##5 ARGS { if (!(EXPR)) x++; }
432+
433+#define TEST(NAME, TYPE, OPERATOR) \
434+ TEST_EXPR (NAME##_rr, (TYPE a1, TYPE a2), OPERATOR (a1, a2)) \
435+ TEST_EXPR (NAME##_rm, (TYPE a1, TYPE *a2), OPERATOR (a1, *a2)) \
436+ TEST_EXPR (NAME##_mr, (TYPE *a1, TYPE a2), OPERATOR (*a1, a2)) \
437+ TEST_EXPR (NAME##_mm, (TYPE *a1, TYPE *a2), OPERATOR (*a1, *a2)) \
438+ TEST_EXPR (NAME##_rc, (TYPE a1), OPERATOR (a1, 100)) \
439+ TEST_EXPR (NAME##_cr, (TYPE a1), OPERATOR (100, a1))
440+
441+#define TEST_OP(NAME, OPERATOR) \
442+ TEST (f_##NAME, float, OPERATOR) \
443+ TEST (d_##NAME, double, OPERATOR) \
444+ TEST (ld_##NAME, long double, OPERATOR)
445+
446+TEST_OP (eq, EQ)
447+TEST_OP (ne, NE)
448+TEST_OP (lt, LT)
449+TEST_OP (gt, GT)
450+TEST_OP (le, LE)
451+TEST_OP (ge, GE)
452+TEST_OP (blt, __builtin_isless)
453+TEST_OP (bgt, __builtin_isgreater)
454+TEST_OP (ble, __builtin_islessequal)
455+TEST_OP (bge, __builtin_isgreaterequal)
456+/* This one should be expanded into separate ordered and equality
457+ comparisons. */
458+TEST_OP (blg, __builtin_islessgreater)
459+TEST_OP (bun, __builtin_isunordered)
460