summaryrefslogtreecommitdiffstats
path: root/contrib/gcc
diff options
context:
space:
mode:
authorpfg <pfg@FreeBSD.org>2014-01-02 13:53:53 +0000
committerpfg <pfg@FreeBSD.org>2014-01-02 13:53:53 +0000
commit6053c493e0e2a18f4e546f35ab4b1d119a2b8baa (patch)
tree5f444ea4148b370cd2253753252a21e4e28c5e7a /contrib/gcc
parent541c54820f14b6c054df1b29b785d8aca7911f23 (diff)
downloadFreeBSD-src-6053c493e0e2a18f4e546f35ab4b1d119a2b8baa.zip
FreeBSD-src-6053c493e0e2a18f4e546f35ab4b1d119a2b8baa.tar.gz
Revert r260073; small diff reduction wrt gcc43 and Apple GCC.
Unfortunately this causes ICE on powerpc and sparc64. Reducing these differences against upstream is not important anymore so hopefully I have finished breaking the compiler occasionally.
Diffstat (limited to 'contrib/gcc')
-rw-r--r--contrib/gcc/ChangeLog.gcc4319
-rw-r--r--contrib/gcc/cp/ChangeLog6
-rw-r--r--contrib/gcc/cp/g++spec.c17
-rw-r--r--contrib/gcc/libgcc2.c44
-rw-r--r--contrib/gcc/libgcc2.h10
-rw-r--r--contrib/gcc/loop-init.c7
-rw-r--r--contrib/gcc/toplev.c5
-rw-r--r--contrib/gcc/tree-ssa-address.c17
8 files changed, 41 insertions, 84 deletions
diff --git a/contrib/gcc/ChangeLog.gcc43 b/contrib/gcc/ChangeLog.gcc43
index 36df02b..ded412b 100644
--- a/contrib/gcc/ChangeLog.gcc43
+++ b/contrib/gcc/ChangeLog.gcc43
@@ -156,15 +156,6 @@
* reload1.c (merge_assigned_reloads) : Do not merge a RELOAD_OTHER
instruction with a RELOAD_FOR_OPERAND_ADDRESS instruction.
-2007-04-24 Richard Henderson <rth@redhat.com> (r124106)
-
- * libgcc2.h (AVOID_FP_TYPE_CONVERSION): Rename from
- IS_IBM_EXTENDED. Also define in terms of WIDEST_HARDWARE_FP_SIZE.
- * libgcc2.c (__floatdisf): Avoid double-word arithmetic when
- looking for non-zero bits shifted out. Avoid a recursive call
- when constructing the scalar.
- (__floatundisf): Likewise.
-
2007-04-16 Lawrence Crowl <crowl@google.com> (r123909)
* doc/invoke.texi (Debugging Options): Add documentation for the
@@ -257,11 +248,6 @@
* tree-vrp.c (vrp_int_const_binop): Handle PLUS_EXPR and
the *_DIV_EXPR codes correctly with overflow infinities.
-2007-03-04 Zdenek Dvorak <dvorakz@suse.cz> (r122528)
-
- * tree-ssa-address.c (create_mem_ref): Do not put an expression
- containing a cast to the base of TARGET_MEM_REF.
-
2007-02-09 Dwarakanath Rajagopal <dwarak.rajagopal@amd.com> (r121763)
* config/i386/driver-i386.c: Turn on -mtune=native for AMDFAM10.
@@ -438,11 +424,6 @@
and amdfam10.
* doc/extend.texi: Add documentation for SSE4A builtins.
-2007-02-01 Zdenek Dvorak <dvorakz@suse.cz> (r121464)
-
- * toplev.c (lang_dependent_init): Call init_set_costs.
- * loop-init.c (loop_optimizer_init): Do not call init_set_costs.
-
2007-01-24 Jakub Jelinek <jakub@redhat.com> (r121140)
* config/i386/i386.h (x86_cmpxchg16b): Remove const.
diff --git a/contrib/gcc/cp/ChangeLog b/contrib/gcc/cp/ChangeLog
index a79ed04..7629e8b 100644
--- a/contrib/gcc/cp/ChangeLog
+++ b/contrib/gcc/cp/ChangeLog
@@ -314,12 +314,6 @@
PR c++/30895
* tree.c (cp_tree_equal): Properly handle COMPLEX_CST trees.
-2007-03-02 Geoffrey Keating <geoffk@apple.com> (r122488)
-
- * g++spec.c (lang_specific_driver): Add -lstdc++ when compiling
- Objective-C++. Don't exit early if -shared-libgcc needs to be
- added.
-
2007-02-22 Simon Martin <simartin@users.sourceforge.net>
PR c++/29475
diff --git a/contrib/gcc/cp/g++spec.c b/contrib/gcc/cp/g++spec.c
index 0d3a442..b58fdcd 100644
--- a/contrib/gcc/cp/g++spec.c
+++ b/contrib/gcc/cp/g++spec.c
@@ -159,19 +159,11 @@ lang_specific_driver (int *in_argc, const char *const **in_argv,
arg = "";
if (library == 0
&& (strcmp (arg, "c++") == 0
- || strcmp (arg, "c++-cpp-output") == 0
- || strcmp (arg, "objective-c++") == 0
- || strcmp (arg, "objective-c++-cpp-output") == 0))
+ || strcmp (arg, "c++-cpp-output") == 0))
library = 1;
saw_speclang = 1;
}
- else if (strcmp (argv[i], "-ObjC++") == 0)
- {
- if (library == 0)
- library = 1;
- saw_speclang = 1;
- }
/* Arguments that go directly to the linker might be .o files,
or something, and so might cause libstdc++ to be needed. */
else if (strcmp (argv[i], "-Xlinker") == 0)
@@ -245,6 +237,13 @@ lang_specific_driver (int *in_argc, const char *const **in_argv,
if (quote)
fatal ("argument to '%s' missing\n", quote);
+ /* If we know we don't have to do anything, bail now. */
+ if (! added && library <= 0)
+ {
+ free (args);
+ return;
+ }
+
/* There's no point adding -shared-libgcc if we don't have a shared
libgcc. */
#ifndef ENABLE_SHARED_LIBGCC
diff --git a/contrib/gcc/libgcc2.c b/contrib/gcc/libgcc2.c
index 5921d97..58ad320 100644
--- a/contrib/gcc/libgcc2.c
+++ b/contrib/gcc/libgcc2.c
@@ -1420,7 +1420,11 @@ __floatunditf (UDWtype u)
#define F_MODE_OK(SIZE) \
(SIZE < DI_SIZE \
&& SIZE > (DI_SIZE - SIZE + FSSIZE) \
- && !AVOID_FP_TYPE_CONVERSION(SIZE))
+ /* Don't use IBM Extended Double TFmode for TI->SF calculations. \
+ The conversion from long double to float suffers from double \
+ rounding, because we convert via double. In any case, the \
+ fallback code is faster. */ \
+ && !IS_IBM_EXTENDED (SIZE))
#if defined(L_floatdisf)
#define FUNC __floatdisf
#define FSTYPE SFtype
@@ -1511,21 +1515,13 @@ FUNC (DWtype u)
hi = u >> shift;
/* If we lost any nonzero bits, set the lsb to ensure correct rounding. */
- if ((UWtype)u << (W_TYPE_SIZE - shift))
+ if (u & (((DWtype)1 << shift) - 1))
hi |= 1;
/* Convert the one word of data, and rescale. */
- FSTYPE f = hi, e;
- if (shift == W_TYPE_SIZE)
- e = Wtype_MAXp1_F;
- /* The following two cases could be merged if we knew that the target
- supported a native unsigned->float conversion. More often, we only
- have a signed conversion, and have to add extra fixup code. */
- else if (shift == W_TYPE_SIZE - 1)
- e = Wtype_MAXp1_F / 2;
- else
- e = (Wtype)1 << shift;
- return f * e;
+ FSTYPE f = hi;
+ f *= (UDWtype)1 << shift;
+ return f;
#endif
}
#endif
@@ -1536,7 +1532,11 @@ FUNC (DWtype u)
#define F_MODE_OK(SIZE) \
(SIZE < DI_SIZE \
&& SIZE > (DI_SIZE - SIZE + FSSIZE) \
- && !AVOID_FP_TYPE_CONVERSION(SIZE))
+ /* Don't use IBM Extended Double TFmode for TI->SF calculations. \
+ The conversion from long double to float suffers from double \
+ rounding, because we convert via double. In any case, the \
+ fallback code is faster. */ \
+ && !IS_IBM_EXTENDED (SIZE))
#if defined(L_floatundisf)
#define FUNC __floatundisf
#define FSTYPE SFtype
@@ -1620,21 +1620,13 @@ FUNC (UDWtype u)
hi = u >> shift;
/* If we lost any nonzero bits, set the lsb to ensure correct rounding. */
- if ((UWtype)u << (W_TYPE_SIZE - shift))
+ if (u & (((UDWtype)1 << shift) - 1))
hi |= 1;
/* Convert the one word of data, and rescale. */
- FSTYPE f = hi, e;
- if (shift == W_TYPE_SIZE)
- e = Wtype_MAXp1_F;
- /* The following two cases could be merged if we knew that the target
- supported a native unsigned->float conversion. More often, we only
- have a signed conversion, and have to add extra fixup code. */
- else if (shift == W_TYPE_SIZE - 1)
- e = Wtype_MAXp1_F / 2;
- else
- e = (Wtype)1 << shift;
- return f * e;
+ FSTYPE f = hi;
+ f *= (UDWtype)1 << shift;
+ return f;
#endif
}
#endif
diff --git a/contrib/gcc/libgcc2.h b/contrib/gcc/libgcc2.h
index 4f8d5a4..d15ab8d 100644
--- a/contrib/gcc/libgcc2.h
+++ b/contrib/gcc/libgcc2.h
@@ -119,16 +119,10 @@ extern short int __get_eh_table_version (struct exception_descriptor *);
/* FIXME: This #ifdef probably should be removed, ie. enable the test
for mips too. */
-/* Don't use IBM Extended Double TFmode for TI->SF calculations.
- The conversion from long double to float suffers from double
- rounding, because we convert via double. In other cases, going
- through the software fp routines is much slower than the fallback. */
#ifdef __powerpc__
-#define AVOID_FP_TYPE_CONVERSION(SIZE) (SIZE == 106)
-#elif defined(WIDEST_HARDWARE_FP_SIZE)
-#define AVOID_FP_TYPE_CONVERSION(SIZE) (SIZE > WIDEST_HARDWARE_FP_SIZE)
+#define IS_IBM_EXTENDED(SIZE) (SIZE == 106)
#else
-#define AVOID_FP_TYPE_CONVERSION(SIZE) 0
+#define IS_IBM_EXTENDED(SIZE) 0
#endif
/* In the first part of this file, we are interfacing to calls generated
diff --git a/contrib/gcc/loop-init.c b/contrib/gcc/loop-init.c
index 00aa1be..d2c63404 100644
--- a/contrib/gcc/loop-init.c
+++ b/contrib/gcc/loop-init.c
@@ -43,6 +43,13 @@ loop_optimizer_init (unsigned flags)
struct loops *loops = XCNEW (struct loops);
edge e;
edge_iterator ei;
+ static bool first_time = true;
+
+ if (first_time)
+ {
+ first_time = false;
+ init_set_costs ();
+ }
/* Avoid annoying special cases of edges going to exit
block. */
diff --git a/contrib/gcc/toplev.c b/contrib/gcc/toplev.c
index 71c4a8b..786ec12 100644
--- a/contrib/gcc/toplev.c
+++ b/contrib/gcc/toplev.c
@@ -1948,11 +1948,6 @@ lang_dependent_init (const char *name)
provide a dummy function context for them. */
init_dummy_function_start ();
init_expr_once ();
-
- /* Although the actions of init_set_costs are language-independent,
- it uses optabs, so we cannot call it from backend_init. */
- init_set_costs ();
-
expand_dummy_function_end ();
/* If dbx symbol table desired, initialize writing it and output the
diff --git a/contrib/gcc/tree-ssa-address.c b/contrib/gcc/tree-ssa-address.c
index 4fd8ae6..89f1cda 100644
--- a/contrib/gcc/tree-ssa-address.c
+++ b/contrib/gcc/tree-ssa-address.c
@@ -569,7 +569,7 @@ create_mem_ref (block_stmt_iterator *bsi, tree type,
struct affine_tree_combination *addr)
{
tree mem_ref, tmp;
- tree atype;
+ tree addr_type = build_pointer_type (type), atype;
struct mem_address parts;
addr_to_parts (addr, &parts);
@@ -597,23 +597,18 @@ create_mem_ref (block_stmt_iterator *bsi, tree type,
if (parts.symbol)
{
- tmp = build_addr (parts.symbol, current_function_decl);
- gcc_assert (is_gimple_val (tmp));
+ tmp = fold_convert (addr_type,
+ build_addr (parts.symbol, current_function_decl));
/* Add the symbol to base, eventually forcing it to register. */
if (parts.base)
{
- gcc_assert (TREE_TYPE (parts.base) == sizetype);
-
if (parts.index)
- {
- atype = TREE_TYPE (tmp);
- parts.base = force_gimple_operand_bsi (bsi,
- fold_build2 (PLUS_EXPR, atype,
- fold_convert (atype, parts.base),
+ parts.base = force_gimple_operand_bsi (bsi,
+ fold_build2 (PLUS_EXPR, addr_type,
+ fold_convert (addr_type, parts.base),
tmp),
true, NULL_TREE);
- }
else
{
parts.index = parts.base;
OpenPOWER on IntegriCloud