gcc: small diff reduction wrt gcc43 and Apple GCC.

Obtained from:	gcc 4.3 (rev. 121464, 122528, 124106; GPLv2)
MFC after:	3 weeks
This commit is contained in:
pfg 2013-12-30 02:52:43 +00:00
parent 4ba8fc2916
commit 7f6132b57e
8 changed files with 84 additions and 41 deletions

View File

@ -156,6 +156,15 @@
* 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
@ -248,6 +257,11 @@
* 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.
@ -424,6 +438,11 @@
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.

View File

@ -314,6 +314,12 @@
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

View File

@ -159,11 +159,19 @@ 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, "c++-cpp-output") == 0
|| strcmp (arg, "objective-c++") == 0
|| strcmp (arg, "objective-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)
@ -237,13 +245,6 @@ 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

View File

@ -1420,11 +1420,7 @@ __floatunditf (UDWtype u)
#define F_MODE_OK(SIZE) \
(SIZE < DI_SIZE \
&& SIZE > (DI_SIZE - SIZE + FSSIZE) \
/* 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))
&& !AVOID_FP_TYPE_CONVERSION(SIZE))
#if defined(L_floatdisf)
#define FUNC __floatdisf
#define FSTYPE SFtype
@ -1515,13 +1511,21 @@ FUNC (DWtype u)
hi = u >> shift;
/* If we lost any nonzero bits, set the lsb to ensure correct rounding. */
if (u & (((DWtype)1 << shift) - 1))
if ((UWtype)u << (W_TYPE_SIZE - shift))
hi |= 1;
/* Convert the one word of data, and rescale. */
FSTYPE f = hi;
f *= (UDWtype)1 << shift;
return f;
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;
#endif
}
#endif
@ -1532,11 +1536,7 @@ FUNC (DWtype u)
#define F_MODE_OK(SIZE) \
(SIZE < DI_SIZE \
&& SIZE > (DI_SIZE - SIZE + FSSIZE) \
/* 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))
&& !AVOID_FP_TYPE_CONVERSION(SIZE))
#if defined(L_floatundisf)
#define FUNC __floatundisf
#define FSTYPE SFtype
@ -1620,13 +1620,21 @@ FUNC (UDWtype u)
hi = u >> shift;
/* If we lost any nonzero bits, set the lsb to ensure correct rounding. */
if (u & (((UDWtype)1 << shift) - 1))
if ((UWtype)u << (W_TYPE_SIZE - shift))
hi |= 1;
/* Convert the one word of data, and rescale. */
FSTYPE f = hi;
f *= (UDWtype)1 << shift;
return f;
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;
#endif
}
#endif

View File

@ -119,10 +119,16 @@ 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 IS_IBM_EXTENDED(SIZE) (SIZE == 106)
#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)
#else
#define IS_IBM_EXTENDED(SIZE) 0
#define AVOID_FP_TYPE_CONVERSION(SIZE) 0
#endif
/* In the first part of this file, we are interfacing to calls generated

View File

@ -43,13 +43,6 @@ 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. */

View File

@ -1948,6 +1948,11 @@ 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

View File

@ -569,7 +569,7 @@ create_mem_ref (block_stmt_iterator *bsi, tree type,
struct affine_tree_combination *addr)
{
tree mem_ref, tmp;
tree addr_type = build_pointer_type (type), atype;
tree atype;
struct mem_address parts;
addr_to_parts (addr, &parts);
@ -597,18 +597,23 @@ create_mem_ref (block_stmt_iterator *bsi, tree type,
if (parts.symbol)
{
tmp = fold_convert (addr_type,
build_addr (parts.symbol, current_function_decl));
tmp = build_addr (parts.symbol, current_function_decl);
gcc_assert (is_gimple_val (tmp));
/* 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, addr_type,
fold_convert (addr_type, parts.base),
fold_build2 (PLUS_EXPR, atype,
fold_convert (atype, parts.base),
tmp),
true, NULL_TREE);
}
else
{
parts.index = parts.base;