Commit 7c27e184 by Paolo Bonzini

Makefile.in: Regenerate.

2004-08-17  Paolo Bonzini  <bonzini@gnu.org>

	* Makefile.in: Regenerate.
	* configure: Regenerate.

	* Makefile.def (bootstrap-stage): Rename extra_*_flags to
	stage_*_flags.
	* Makefile.tpl (configure-[+module+], all-[+module+]): Exit
	for bootstrapped modules if toplevel bootstrap is going.
	(GCC bootstrap): Generate per-stage targets for all bootstrapped
	modules.  Adjust for changes in Makefile.def.  Enable several
	rules even in non-bootstrap mode, just to avoid peppering the
	template with unnecessary "@if/@endif gcc-bootstrap" pairs.
	(stage-[+prev+]-bubble): Remove.

	* Makefile.def (Dependencies): Depend on all-build-bison,
	all-build-flex, all-build-byacc, all-build-texinfo, rather
	than the host variations.
	* Makefile.tpl (BUILD_DIR_PREFIX): Remove.  Replace throughout
	with BUILD_SUBDIR.
	(BISON): Update for recent Bisons.
	(YACC): Fix typo.
	(cross): Depend on all-build.
	(all): Do not depend on all-build.
	(prebootstrap): Remove.
	(dep-kind): Accept separate prefixes for MODULE and ON variables.
	(Prebootstrap dependencies): Add them to the per-stage targets
	and to all-prebootstrap.
	* configure.in (build_configdirs): Always enable build_tools.
	(BUILD_DIR_PREFIX): Remove.

	* Makefile.def (gcc): Add target variable.
	(gdb, expect, guile, tk, tix): Replace with_x with extra_make_flags.
	* Makefile.tpl (Autogenerated `all-*' targets): Invoke $(TARGET-*)
	in the recursive `make', instead of hardwiring `all'.
	(Autogenerated TARGET-* variables): New.

gcc/ChangeLog:
2004-08-17  Paolo Bonzini  <bonzini@gnu.org>

	* configure.ac: Trust toplevel's notion of BISON/FLEX/MAKEINFO.
	No need to check if in a cross configuration.
	* configure: Regenerate.

	* calls.c (precompute_register_parameters):
	Inline preserve_subexpressions_p ().
	* expmed.c (expand_mult_const, emit_store_flag): Likewise.
	* optabs.c (expand_binop, expand_twoval_binop, prepare_cmp_insn):
	Likewise.
	* expr.c (get_subtarget): Likewise.
	* rtl.h (preserve_subexpressions_p): Remove.
	* stmt.c (preserve_subexpressions_p): Remove.

	* dojump.c (do_jump) <COND_EXPR, EQ_EXPR, NE_EXPR,
	TRUTH_ANDIF_EXPR, TRUTH_ORIF_EXPR, COMPOUND_EXPR>:
	Abort on gimplified cases.

From-SVN: r86111
parent 9a9ff549
2004-08-16 Paolo Bonzini <bonzini@gnu.org>
* Makefile.in: Regenerate.
* configure: Regenerate.
* Makefile.def (bootstrap-stage): Rename extra_*_flags to
stage_*_flags.
* Makefile.tpl (configure-[+module+], all-[+module+]): Exit
for bootstrapped modules if toplevel bootstrap is going.
(GCC bootstrap): Generate per-stage targets for all bootstrapped
modules. Adjust for changes in Makefile.def. Enable several
rules even in non-bootstrap mode, just to avoid peppering the
template with unnecessary "@if/@endif gcc-bootstrap" pairs.
(stage-[+prev+]-bubble): Remove.
* Makefile.def (Dependencies): Depend on all-build-bison,
all-build-flex, all-build-byacc, all-build-texinfo, rather
than the host variations.
* Makefile.tpl (BUILD_DIR_PREFIX): Remove. Replace throughout
with BUILD_SUBDIR.
(BISON): Update for recent Bisons.
(YACC): Fix typo.
(cross): Depend on all-build.
(all): Do not depend on all-build.
(prebootstrap): Remove.
(dep-kind): Accept separate prefixes for MODULE and ON variables.
(Prebootstrap dependencies): Add them to the per-stage targets
and to all-prebootstrap.
* configure.in (build_configdirs): Always enable build_tools.
(BUILD_DIR_PREFIX): Remove.
* Makefile.def (gcc): Add target variable.
(gdb, expect, guile, tk, tix): Replace with_x with extra_make_flags.
* Makefile.tpl (Autogenerated `all-*' targets): Invoke $(TARGET-*)
in the recursive `make', instead of hardwiring `all'.
(Autogenerated TARGET-* variables): New.
2004-08-13 Brian Booth <bbooth@redhat.com>
* MAINTAINERS: Remove myself from write-after-approval.
......
......@@ -25,7 +25,6 @@ AutoGen definitions Makefile.tpl;
// that recursive target in its Makefile.
build_modules= { module= libiberty; };
build_modules= { module= libbanshee; };
build_modules= { module= bison; };
build_modules= { module= byacc; };
build_modules= { module= flex; };
......@@ -53,6 +52,7 @@ host_modules= { module= find; };
host_modules= { module= flex; no_check_cross= true; };
host_modules= { module= gas; bootstrap=true; };
host_modules= { module= gcc; bootstrap=true;
target="`if [ -f gcc/stage_last ]; then echo quickstrap ; else echo all; fi`";
extra_make_flags="$(EXTRA_GCC_FLAGS)"; };
host_modules= { module= gawk; };
host_modules= { module= gettext; };
......@@ -94,10 +94,10 @@ host_modules= { module= uudecode; };
host_modules= { module= wdiff; };
host_modules= { module= zip; no_check_cross=true; };
host_modules= { module= zlib; no_install=true; no_check=true; bootstrap=true; };
host_modules= { module= gdb; with_x=true; };
host_modules= { module= expect; with_x=true; };
host_modules= { module= guile; with_x=true; };
host_modules= { module= tk; with_x=true; };
host_modules= { module= gdb; extra_make_flags="$(X11_FLAGS_TO_PASS)"; };
host_modules= { module= expect; extra_make_flags="$(X11_FLAGS_TO_PASS)"; };
host_modules= { module= guile; extra_make_flags="$(X11_FLAGS_TO_PASS)"; };
host_modules= { module= tk; extra_make_flags="$(X11_FLAGS_TO_PASS)"; };
host_modules= { module= libtermcap; no_check=true;
missing=mostlyclean;
missing=clean;
......@@ -238,14 +238,12 @@ dependencies = { module=configure-gcc; on=configure-intl; };
dependencies = { module=configure-gcc; on=configure-binutils; };
dependencies = { module=configure-gcc; on=configure-gas; };
dependencies = { module=configure-gcc; on=configure-ld; };
dependencies = { module=configure-gcc; on=configure-bison; };
dependencies = { module=configure-gcc; on=configure-flex; };
dependencies = { module=all-gcc; on=all-libiberty; hard=true; };
dependencies = { module=all-gcc; on=all-intl; };
dependencies = { module=all-gcc; on=all-texinfo; };
dependencies = { module=all-gcc; on=all-bison; };
dependencies = { module=all-gcc; on=all-byacc; };
dependencies = { module=all-gcc; on=all-flex; };
dependencies = { module=all-gcc; on=all-build-texinfo; };
dependencies = { module=all-gcc; on=all-build-bison; };
dependencies = { module=all-gcc; on=all-build-byacc; };
dependencies = { module=all-gcc; on=all-build-flex; };
dependencies = { module=all-gcc; on=all-binutils; };
dependencies = { module=all-gcc; on=all-gas; };
dependencies = { module=all-gcc; on=all-ld; };
......@@ -268,8 +266,8 @@ dependencies = { module=all-gdb; on=all-libiberty; };
dependencies = { module=all-gdb; on=all-opcodes; };
dependencies = { module=all-gdb; on=all-bfd; };
dependencies = { module=all-gdb; on=all-readline; };
dependencies = { module=all-gdb; on=all-bison; };
dependencies = { module=all-gdb; on=all-byacc; };
dependencies = { module=all-gdb; on=all-build-bison; };
dependencies = { module=all-gdb; on=all-build-byacc; };
dependencies = { module=all-gdb; on=all-sim; };
dependencies = { module=install-gdb; on=install-tcl; };
dependencies = { module=install-gdb; on=install-tk; };
......@@ -290,9 +288,9 @@ dependencies = { module=all-bfd; on=all-intl; };
dependencies = { module=all-binutils; on=all-libiberty; };
dependencies = { module=all-binutils; on=all-opcodes; };
dependencies = { module=all-binutils; on=all-bfd; };
dependencies = { module=all-binutils; on=all-flex; };
dependencies = { module=all-binutils; on=all-bison; };
dependencies = { module=all-binutils; on=all-byacc; };
dependencies = { module=all-binutils; on=all-build-flex; };
dependencies = { module=all-binutils; on=all-build-bison; };
dependencies = { module=all-binutils; on=all-build-byacc; };
dependencies = { module=all-binutils; on=all-intl; };
// We put install-opcodes before install-binutils because the installed
......@@ -314,9 +312,9 @@ dependencies = { module=all-gprof; on=all-intl; };
dependencies = { module=all-ld; on=all-libiberty; };
dependencies = { module=all-ld; on=all-bfd; };
dependencies = { module=all-ld; on=all-opcodes; };
dependencies = { module=all-ld; on=all-bison; };
dependencies = { module=all-ld; on=all-byacc; };
dependencies = { module=all-ld; on=all-flex; };
dependencies = { module=all-ld; on=all-build-bison; };
dependencies = { module=all-ld; on=all-build-byacc; };
dependencies = { module=all-ld; on=all-build-flex; };
dependencies = { module=all-ld; on=all-intl; };
dependencies = { module=all-opcodes; on=all-bfd; };
......@@ -358,43 +356,43 @@ dependencies = { module=all-sim; on=configure-gdb; };
// Other host modules.
dependencies = { module=all-fastjar; on=all-zlib; };
dependencies = { module=all-fastjar; on=all-texinfo; };
dependencies = { module=all-fastjar; on=all-build-texinfo; };
dependencies = { module=all-fastjar; on=all-libiberty; };
// Warning, these are not well tested.
dependencies = { module=all-autoconf; on=all-m4; };
dependencies = { module=all-autoconf; on=all-texinfo; };
dependencies = { module=all-autoconf; on=all-build-texinfo; };
dependencies = { module=all-automake; on=all-m4; };
dependencies = { module=all-automake; on=all-texinfo; };
dependencies = { module=all-automake; on=all-build-texinfo; };
dependencies = { module=all-automake; on=all-autoconf; };
dependencies = { module=all-bison; on=all-intl; };
dependencies = { module=all-bison; on=all-texinfo; };
dependencies = { module=all-bison; on=all-build-texinfo; };
dependencies = { module=all-diff; on=all-intl; };
dependencies = { module=all-diff; on=all-texinfo; };
dependencies = { module=all-diff; on=all-build-texinfo; };
dependencies = { module=all-fileutils; on=all-intl; };
dependencies = { module=all-fileutils; on=all-texinfo; };
dependencies = { module=all-flex; on=all-bison; };
dependencies = { module=all-flex; on=all-byacc; };
dependencies = { module=all-fileutils; on=all-build-texinfo; };
dependencies = { module=all-flex; on=all-build-bison; };
dependencies = { module=all-flex; on=all-build-byacc; };
dependencies = { module=all-flex; on=all-intl; };
dependencies = { module=all-flex; on=all-m4; };
dependencies = { module=all-flex; on=all-texinfo; };
dependencies = { module=all-flex; on=all-build-texinfo; };
dependencies = { module=all-gzip; on=all-intl; };
dependencies = { module=all-gzip; on=all-zlib; };
dependencies = { module=all-gzip; on=all-texinfo; };
dependencies = { module=all-gzip; on=all-build-texinfo; };
dependencies = { module=all-hello; on=all-intl; };
dependencies = { module=all-hello; on=all-texinfo; };
dependencies = { module=all-hello; on=all-build-texinfo; };
dependencies = { module=all-m4; on=all-intl; };
dependencies = { module=all-m4; on=all-texinfo; };
dependencies = { module=all-m4; on=all-build-texinfo; };
dependencies = { module=all-make; on=all-intl; };
dependencies = { module=all-make; on=all-texinfo; };
dependencies = { module=all-patch; on=all-texinfo; };
dependencies = { module=all-make; on=all-texinfo; };
dependencies = { module=all-make; on=all-build-texinfo; };
dependencies = { module=all-patch; on=all-build-texinfo; };
dependencies = { module=all-make; on=all-build-texinfo; };
dependencies = { module=all-prms; on=all-libiberty; };
dependencies = { module=all-recode; on=all-texinfo; };
dependencies = { module=all-sed; on=all-texinfo; };
dependencies = { module=all-recode; on=all-build-texinfo; };
dependencies = { module=all-sed; on=all-build-texinfo; };
dependencies = { module=all-send-pr; on=all-prms; };
dependencies = { module=all-tar; on=all-texinfo; };
dependencies = { module=all-uudecode; on=all-texinfo; };
dependencies = { module=all-tar; on=all-build-texinfo; };
dependencies = { module=all-uudecode; on=all-build-texinfo; };
// Target modules. These can also have dependencies on the language
// environment (e.g. on libstdc++).
......@@ -438,32 +436,32 @@ dependencies = { module=all-target-winsup; on=all-target-libtermcap; };
// Toplevel bootstrap
bootstrap_stage = {
id=1 ;
extra_configure_flags='--disable-intermodule \
stage_configure_flags='--disable-intermodule \
--disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"' ;
extra_make_flags='CFLAGS="$(STAGE1_CFLAGS)"' ; };
stage_make_flags='CFLAGS="$(STAGE1_CFLAGS)"' ; };
bootstrap_stage = {
id=2 ; prev=1 ;
bootstrap_target=bootstrap2 ;
extra_configure_flags="@stage2_werror_flag@" ;
extra_make_flags="" ; };
stage_configure_flags="@stage2_werror_flag@" ;
stage_make_flags="" ; };
bootstrap_stage = {
id=3 ; prev=2 ;
compare_target=compare ;
bootstrap_target=bootstrap ;
cleanstrap_target=cleanstrap ;
extra_configure_flags="@stage2_werror_flag@" ;
extra_make_flags="" ; };
stage_configure_flags="@stage2_werror_flag@" ;
stage_make_flags="" ; };
bootstrap_stage = {
id=4 ; prev=3 ;
compare_target=compare3 ;
bootstrap_target=bootstrap4 ;
extra_configure_flags="@stage2_werror_flag@" ;
extra_make_flags="" ; };
stage_configure_flags="@stage2_werror_flag@" ;
stage_make_flags="" ; };
bootstrap_stage = {
id=profile ; prev=1 ;
extra_configure_flags="@stage2_werror_flag@" ;
extra_make_flags='CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"' ; };
stage_configure_flags="@stage2_werror_flag@" ;
stage_make_flags='CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"' ; };
bootstrap_stage = {
id=feedback ; prev=1 ;
extra_configure_flags="@stage2_werror_flag@" ;
extra_make_flags='CFLAGS="$(BOOT_CFLAGS) -fprofile-use"' ; };
stage_configure_flags="@stage2_werror_flag@" ;
stage_make_flags='CFLAGS="$(BOOT_CFLAGS) -fprofile-use"' ; };
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -184,9 +184,11 @@ target_tools="target-examples target-groff target-gperf target-rda"
configdirs=`echo ${host_libs} ${host_tools}`
target_configdirs=`echo ${target_libraries} ${target_tools}`
# Only make build modules if build != host.
# Only make build libraries if build != host.
if test ${host_alias} != ${build_alias} ; then
build_configdirs=`echo ${build_libs} ${build_tools}`
else
build_configdirs=`echo ${build_tools}`
fi
################################################################################
......@@ -985,7 +987,6 @@ if test "${build}" != "${host}" ; then
CXX_FOR_TARGET=${CXX_FOR_TARGET-${target_alias}-c++}
GCJ_FOR_TARGET=${GCJ_FOR_TARGET-${target_alias}-gcj}
GCC_FOR_TARGET=${GCC_FOR_TARGET-${CC_FOR_TARGET-${target_alias}-gcc}}
BUILD_DIR_PREFIX=${build_subdir}
BUILD_PREFIX=${build_alias}-
BUILD_PREFIX_1=${build_alias}-
......@@ -1000,7 +1001,6 @@ else
CC_FOR_BUILD="\$(CC)"
GCC_FOR_TARGET="\$(USUAL_GCC_FOR_TARGET)"
BUILD_DIR_PREFIX=
BUILD_PREFIX=
BUILD_PREFIX_1=loser-
......@@ -2089,7 +2089,6 @@ AC_SUBST_FILE(ospace_frag)
# Miscellanea: directories, flags, etc.
AC_SUBST(SET_LIB_PATH)
AC_SUBST(RPATH_ENVVAR)
AC_SUBST(BUILD_DIR_PREFIX)
AC_SUBST(BUILD_PREFIX)
AC_SUBST(BUILD_PREFIX_1)
AC_SUBST(gcc_version_trigger)
......
2004-08-17 Paolo Bonzini <bonzini@gnu.org>
* configure.ac: Trust toplevel's notion of BISON/FLEX/MAKEINFO.
No need to check if in a cross configuration.
* configure: Regenerate.
* calls.c (precompute_register_parameters):
Inline preserve_subexpressions_p ().
* expmed.c (expand_mult_const, emit_store_flag): Likewise.
* optabs.c (expand_binop, expand_twoval_binop, prepare_cmp_insn):
Likewise.
* expr.c (get_subtarget): Likewise.
* rtl.h (preserve_subexpressions_p): Remove.
* stmt.c (preserve_subexpressions_p): Remove.
* dojump.c (do_jump) <COND_EXPR, EQ_EXPR, NE_EXPR,
TRUTH_ANDIF_EXPR, TRUTH_ORIF_EXPR, COMPOUND_EXPR>:
Abort on gimplified cases.
2004-08-16 James E Wilson <wilson@specifixinc.com>
* tree.h (VECTOR_FLOAT_TYPE_P): New.
......@@ -115,6 +134,7 @@
Check for arificial variables, not is_gimple_tmp_var.
* tree-ssa-live.c (var_union): Likewise.
>>>>>>> 2.4930
2004-08-16 Nathan Sidwell <nathan@codesourcery.com>
* calls.c (load_register_parameters): Remove spurious FIXME token.
......
......@@ -691,7 +691,7 @@ precompute_register_parameters (int num_actuals, struct arg_data *args, int *reg
&& args[i].mode != BLKmode
&& rtx_cost (args[i].value, SET) > COSTS_N_INSNS (1)
&& ((SMALL_REGISTER_CLASSES && *reg_parm_seen)
|| preserve_subexpressions_p ()))
|| optimize))
args[i].value = copy_to_mode_reg (args[i].mode, args[i].value);
}
}
......
......@@ -2666,17 +2666,18 @@ function_arg (CUMULATIVE_ARGS *cum, /* current arg information */
&& GET_MODE_CLASS (TYPE_MODE (type)) != MODE_VECTOR_FLOAT)
{
enum machine_mode innermode = TYPE_MODE (TREE_TYPE (type));
mode = TREE_CODE (TREE_TYPE (type)) == REAL_TYPE
? MIN_MODE_VECTOR_FLOAT : MIN_MODE_VECTOR_INT;
enum machine_mode newmode
= TREE_CODE (TREE_TYPE (type)) == REAL_TYPE
? MIN_MODE_VECTOR_FLOAT : MIN_MODE_VECTOR_INT;
/* Get the mode which has this inner mode and number of units. */
while (GET_MODE_NUNITS (mode) != TYPE_VECTOR_SUBPARTS (type)
|| GET_MODE_INNER (mode) != innermode)
{
mode = GET_MODE_WIDER_MODE (mode);
if (mode == VOIDmode)
abort ();
}
for (; newmode != VOIDmode; newmode = GET_MODE_WIDER_MODE (newmode))
if (GET_MODE_NUNITS (newmode) == TYPE_VECTOR_SUBPARTS (type)
&& GET_MODE_INNER (newmode) == innermode)
{
mode = newmode;
break;
}
}
/* Handle a hidden AL argument containing number of registers for varargs
......
......@@ -756,56 +756,45 @@ gcc_AC_PROG_CMP_IGNORE_INITIAL
# See if we have the mktemp command.
AC_CHECK_PROG(have_mktemp_command, mktemp, yes, no)
# Do we have a single-tree copy of texinfo?
if test -f $srcdir/../texinfo/Makefile.in; then
MAKEINFO='$(objdir)/../texinfo/makeinfo/makeinfo'
gcc_cv_prog_makeinfo_modern=yes
AC_MSG_RESULT([Using makeinfo from the unified source tree.])
else
# See if makeinfo has been installed and is modern enough
# that we can use it.
gcc_AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
MISSING="${CONFIG_SHELL-/bin/sh} $srcdir/../missing"
# See if makeinfo has been installed and is modern enough
# that we can use it.
gcc_AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version,
[GNU texinfo.* \([0-9][0-9.]*\)],
[4.[2-9]*])
fi
if test $gcc_cv_prog_makeinfo_modern = no; then
MAKEINFO="$MISSING makeinfo"
AC_MSG_WARN([
*** Makeinfo is missing or too old.
*** Info documentation will not be built.])
BUILD_INFO=
else
BUILD_INFO=info AC_SUBST(BUILD_INFO)
BUILD_INFO=info
fi
AC_SUBST(BUILD_INFO)
# Is pod2man recent enough to regenerate manpages?
AC_MSG_CHECKING([for recent Pod::Man])
if (perl -e 'use 1.10 Pod::Man') >/dev/null 2>&1; then
AC_MSG_RESULT(yes)
GENERATED_MANPAGES=generated-manpages AC_SUBST(GENERATED_MANPAGES)
GENERATED_MANPAGES=generated-manpages
else
AC_MSG_RESULT(no)
GENERATED_MANPAGES=
fi
AC_SUBST(GENERATED_MANPAGES)
# How about lex?
dnl Don't use AC_PROG_LEX; we insist on flex.
dnl LEXLIB is not useful in gcc.
if test x${build} = x${host} && test -f $srcdir/../flex/skel.c \
&& test -d ../flex ; then
FLEX='$(objdir)/../flex/flex'
else
AC_CHECK_PROG(FLEX, flex, flex, ${CONFIG_SHELL-/bin/sh} ${srcdir}/../missing flex)
fi
AC_CHECK_PROGS([FLEX], flex, [$MISSING flex])
# Bison?
# The -L switch is so bison can find its skeleton file.
if test x${build} = x${host} && test -f $srcdir/../bison/bison.simple \
&& test -d ../bison ; then
BISON='$(objdir)/../bison/bison -L $(srcdir)/../bison/'
else
AC_CHECK_PROG(BISON, bison, bison, ${CONFIG_SHELL-/bin/sh} ${srcdir}/../missing bison)
fi
AC_CHECK_PROGS([BISON], bison, [$MISSING bison])
# Binutils are not build modules, unlike bison/flex/makeinfo. So we
# check for build == host before using them.
# NM
if test x${build} = x${host} && test -f $srcdir/../binutils/nm.c \
......
......@@ -208,19 +208,6 @@ do_jump (tree exp, rtx if_false_label, rtx if_true_label)
do_jump (TREE_OPERAND (exp, 0), if_false_label, if_true_label);
break;
#if 0
/* This is never less insns than evaluating the PLUS_EXPR followed by
a test and can be longer if the test is eliminated. */
case PLUS_EXPR:
/* Reduce to minus. */
exp = build2 (MINUS_EXPR, TREE_TYPE (exp),
TREE_OPERAND (exp, 0),
fold (build1 (NEGATE_EXPR,
TREE_TYPE (TREE_OPERAND (exp, 1)),
TREE_OPERAND (exp, 1))));
/* Process as MINUS. */
#endif
case MINUS_EXPR:
/* Nonzero iff operands of minus differ. */
do_compare_and_jump (build2 (NE_EXPR, TREE_TYPE (exp),
......@@ -281,28 +268,11 @@ do_jump (tree exp, rtx if_false_label, rtx if_true_label)
break;
case TRUTH_ANDIF_EXPR:
if (if_false_label == 0)
if_false_label = drop_through_label = gen_label_rtx ();
do_jump (TREE_OPERAND (exp, 0), if_false_label, NULL_RTX);
do_jump (TREE_OPERAND (exp, 1), if_false_label, if_true_label);
break;
case TRUTH_ORIF_EXPR:
if (if_true_label == 0)
if_true_label = drop_through_label = gen_label_rtx ();
do_jump (TREE_OPERAND (exp, 0), NULL_RTX, if_true_label);
do_jump (TREE_OPERAND (exp, 1), if_false_label, if_true_label);
break;
case COMPOUND_EXPR:
push_temp_slots ();
expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, 0);
preserve_temp_slots (NULL_RTX);
free_temp_slots ();
pop_temp_slots ();
do_pending_stack_adjust ();
do_jump (TREE_OPERAND (exp, 1), if_false_label, if_true_label);
break;
case COND_EXPR:
/* Lowered by gimplify.c. */
abort ();
case COMPONENT_REF:
case BIT_FIELD_REF:
......@@ -334,70 +304,15 @@ do_jump (tree exp, rtx if_false_label, rtx if_true_label)
goto normal;
}
case COND_EXPR:
/* Do (a ? 1 : 0) and (a ? 0 : 1) as special cases. */
if (integer_onep (TREE_OPERAND (exp, 1))
&& integer_zerop (TREE_OPERAND (exp, 2)))
do_jump (TREE_OPERAND (exp, 0), if_false_label, if_true_label);
else if (integer_zerop (TREE_OPERAND (exp, 1))
&& integer_onep (TREE_OPERAND (exp, 2)))
do_jump (TREE_OPERAND (exp, 0), if_true_label, if_false_label);
else
{
rtx label1 = gen_label_rtx ();
drop_through_label = gen_label_rtx ();
do_jump (TREE_OPERAND (exp, 0), label1, NULL_RTX);
/* Now the THEN-expression. */
do_jump (TREE_OPERAND (exp, 1),
if_false_label ? if_false_label : drop_through_label,
if_true_label ? if_true_label : drop_through_label);
/* In case the do_jump just above never jumps. */
do_pending_stack_adjust ();
emit_label (label1);
/* Now the ELSE-expression. */
do_jump (TREE_OPERAND (exp, 2),
if_false_label ? if_false_label : drop_through_label,
if_true_label ? if_true_label : drop_through_label);
}
break;
case EQ_EXPR:
{
tree inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_FLOAT
|| GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_INT)
{
tree exp0 = save_expr (TREE_OPERAND (exp, 0));
tree exp1 = save_expr (TREE_OPERAND (exp, 1));
do_jump
(fold
(build2 (TRUTH_ANDIF_EXPR, TREE_TYPE (exp),
fold (build2 (EQ_EXPR, TREE_TYPE (exp),
fold (build1 (REALPART_EXPR,
TREE_TYPE (inner_type),
exp0)),
fold (build1 (REALPART_EXPR,
TREE_TYPE (inner_type),
exp1)))),
fold (build2 (EQ_EXPR, TREE_TYPE (exp),
fold (build1 (IMAGPART_EXPR,
TREE_TYPE (inner_type),
exp0)),
fold (build1 (IMAGPART_EXPR,
TREE_TYPE (inner_type),
exp1)))))),
if_false_label, if_true_label);
}
abort ();
else if (integer_zerop (TREE_OPERAND (exp, 1)))
do_jump (TREE_OPERAND (exp, 0), if_true_label, if_false_label);
else if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_INT
&& !can_compare_p (EQ, TYPE_MODE (inner_type), ccp_jump))
do_jump_by_parts_equality (exp, if_false_label, if_true_label);
......@@ -412,32 +327,9 @@ do_jump (tree exp, rtx if_false_label, rtx if_true_label)
if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_FLOAT
|| GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_INT)
{
tree exp0 = save_expr (TREE_OPERAND (exp, 0));
tree exp1 = save_expr (TREE_OPERAND (exp, 1));
do_jump
(fold
(build2 (TRUTH_ORIF_EXPR, TREE_TYPE (exp),
fold (build2 (NE_EXPR, TREE_TYPE (exp),
fold (build1 (REALPART_EXPR,
TREE_TYPE (inner_type),
exp0)),
fold (build1 (REALPART_EXPR,
TREE_TYPE (inner_type),
exp1)))),
fold (build2 (NE_EXPR, TREE_TYPE (exp),
fold (build1 (IMAGPART_EXPR,
TREE_TYPE (inner_type),
exp0)),
fold (build1 (IMAGPART_EXPR,
TREE_TYPE (inner_type),
exp1)))))),
if_false_label, if_true_label);
}
abort ();
else if (integer_zerop (TREE_OPERAND (exp, 1)))
do_jump (TREE_OPERAND (exp, 0), if_false_label, if_true_label);
else if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_INT
&& !can_compare_p (NE, TYPE_MODE (inner_type), ccp_jump))
do_jump_by_parts_equality (exp, if_true_label, if_false_label);
......@@ -602,15 +494,6 @@ do_jump (tree exp, rtx if_false_label, rtx if_true_label)
default:
normal:
temp = expand_expr (exp, NULL_RTX, VOIDmode, 0);
#if 0
/* This is not needed any more and causes poor code since it causes
comparisons and tests from non-SI objects to have different code
sequences. */
/* Copy to register to avoid generating bad insns by cse
from (set (mem ...) (arithop)) (set (cc0) (mem ...)). */
if (!cse_not_expected && MEM_P (temp))
temp = copy_to_reg (temp);
#endif
do_pending_stack_adjust ();
if (GET_CODE (temp) == CONST_INT
......
......@@ -2547,13 +2547,12 @@ expand_mult_const (enum machine_mode mode, rtx op0, HOST_WIDE_INT val,
for (opno = 1; opno < alg->ops; opno++)
{
int log = alg->log[opno];
int preserve = preserve_subexpressions_p ();
rtx shift_subtarget = preserve ? 0 : accum;
rtx shift_subtarget = optimize ? 0 : accum;
rtx add_target
= (opno == alg->ops - 1 && target != 0 && variant != add_variant
&& ! preserve)
&& !optimize)
? target : 0;
rtx accum_target = preserve ? 0 : accum;
rtx accum_target = optimize ? 0 : accum;
switch (alg->op[opno])
{
......@@ -2615,8 +2614,8 @@ expand_mult_const (enum machine_mode mode, rtx op0, HOST_WIDE_INT val,
build_int_cst (NULL_TREE, log, 0),
NULL_RTX, 0);
accum = force_operand (gen_rtx_MINUS (mode, tem, accum),
(add_target ? add_target
: preserve ? 0 : tem));
(add_target
? add_target : (optimize ? 0 : tem)));
val_so_far = (val_so_far << log) - val_so_far;
break;
......@@ -4829,8 +4828,7 @@ emit_store_flag (rtx target, enum rtx_code code, rtx op0, rtx op1,
compare_mode = insn_data[(int) icode].operand[0].mode;
subtarget = target;
pred = insn_data[(int) icode].operand[0].predicate;
if (preserve_subexpressions_p ()
|| ! (*pred) (subtarget, compare_mode))
if (optimize || ! (*pred) (subtarget, compare_mode))
subtarget = gen_reg_rtx (compare_mode);
pattern = GEN_FCN (icode) (subtarget);
......@@ -4863,7 +4861,7 @@ emit_store_flag (rtx target, enum rtx_code code, rtx op0, rtx op1,
/* If we want to keep subexpressions around, don't reuse our
last target. */
if (preserve_subexpressions_p ())
if (optimize)
subtarget = 0;
/* Now normalize to the proper value in COMPARE_MODE. Sometimes
......@@ -4908,10 +4906,10 @@ emit_store_flag (rtx target, enum rtx_code code, rtx op0, rtx op1,
delete_insns_since (last);
/* If expensive optimizations, use different pseudo registers for each
insn, instead of reusing the same pseudo. This leads to better CSE,
but slows down the compiler, since there are more pseudos */
subtarget = (!flag_expensive_optimizations
/* If optimizing, use different pseudo registers for each insn, instead
of reusing the same pseudo. This leads to better CSE, but slows
down the compiler, since there are more pseudos */
subtarget = (!optimize
&& (target_mode == mode)) ? target : NULL_RTX;
/* If we reached here, we can't do this with a scc insn. However, there
......
......@@ -3445,16 +3445,14 @@ emit_push_insn (rtx x, enum machine_mode mode, tree type, rtx size,
static rtx
get_subtarget (rtx x)
{
return ((x == 0
return (optimize
|| x == 0
/* Only registers can be subtargets. */
|| !REG_P (x)
/* If the register is readonly, it can't be set more than once. */
|| RTX_UNCHANGING_P (x)
/* Don't use hard regs to avoid extending their life. */
|| REGNO (x) < FIRST_PSEUDO_REGISTER
/* Avoid subtargets inside loops,
since they hide some invariant expressions. */
|| preserve_subexpressions_p ())
? 0 : x);
}
......
......@@ -782,13 +782,13 @@ expand_binop (enum machine_mode mode, optab binoptab, rtx op0, rtx op1,
binoptab = add_optab;
}
/* If we are inside an appropriately-short loop and one operand is an
expensive constant, force it into a register. */
if (CONSTANT_P (op0) && preserve_subexpressions_p ()
/* If we are inside an appropriately-short loop and we are optimizing,
force expensive constants into a register. */
if (CONSTANT_P (op0) && optimize
&& rtx_cost (op0, binoptab->code) > COSTS_N_INSNS (1))
op0 = force_reg (mode, op0);
if (CONSTANT_P (op1) && preserve_subexpressions_p ()
if (CONSTANT_P (op1) && optimize
&& ! shift_op && rtx_cost (op1, binoptab->code) > COSTS_N_INSNS (1))
op1 = force_reg (mode, op1);
......@@ -2348,13 +2348,13 @@ expand_twoval_binop (optab binoptab, rtx op0, rtx op1, rtx targ0, rtx targ1,
op1 = force_not_mem (op1);
}
/* If we are inside an appropriately-short loop and one operand is an
expensive constant, force it into a register. */
if (CONSTANT_P (op0) && preserve_subexpressions_p ()
/* If we are inside an appropriately-short loop and we are optimizing,
force expensive constants into a register. */
if (CONSTANT_P (op0) && optimize
&& rtx_cost (op0, binoptab->code) > COSTS_N_INSNS (1))
op0 = force_reg (mode, op0);
if (CONSTANT_P (op1) && preserve_subexpressions_p ()
if (CONSTANT_P (op1) && optimize
&& rtx_cost (op1, binoptab->code) > COSTS_N_INSNS (1))
op1 = force_reg (mode, op1);
......@@ -3750,13 +3750,13 @@ prepare_cmp_insn (rtx *px, rtx *py, enum rtx_code *pcomparison, rtx size,
}
}
/* If we are inside an appropriately-short loop and one operand is an
expensive constant, force it into a register. */
if (CONSTANT_P (x) && preserve_subexpressions_p ()
/* If we are inside an appropriately-short loop and we are optimizing,
force expensive constants into a register. */
if (CONSTANT_P (x) && optimize
&& rtx_cost (x, COMPARE) > COSTS_N_INSNS (1))
x = force_reg (mode, x);
if (CONSTANT_P (y) && preserve_subexpressions_p ()
if (CONSTANT_P (y) && optimize
&& rtx_cost (y, COMPARE) > COSTS_N_INSNS (1))
y = force_reg (mode, y);
......
......@@ -2239,7 +2239,6 @@ extern void update_temp_slot_address (rtx, rtx);
extern void expand_null_return (void);
extern void expand_naked_return (void);
extern void emit_jump (rtx);
extern int preserve_subexpressions_p (void);
/* In expr.c */
extern rtx move_by_pieces (rtx, rtx, unsigned HOST_WIDE_INT,
......
......@@ -1491,16 +1491,6 @@ warn_if_unused_value (tree exp, location_t locus)
return 1;
}
}
/* Return nonzero if we should preserve sub-expressions as separate
pseudos. We never do so if we aren't optimizing. We always do so
if -fexpensive-optimizations. */
int
preserve_subexpressions_p (void)
{
return optimize && (cfun || flag_expensive_optimizations);
}
/* Generate RTL to return from the current function, with no value.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment