revert: calls.c (precompute_arguments): Check promoted_for_signed_and_unsigned_p and set the promoted mode.

gcc/ChangeLog:

2014-09-10  Kugan Vivekanandarajah  <kuganv@linaro.org>

	Revert r213751:
	* calls.c (precompute_arguments): Check
	 promoted_for_signed_and_unsigned_p and set the promoted mode.
	(promoted_for_signed_and_unsigned_p): New function.
	(expand_expr_real_1): Check promoted_for_signed_and_unsigned_p
	and set the promoted mode.
	* expr.h (promoted_for_signed_and_unsigned_p): New function definition.
	* cfgexpand.c (expand_gimple_stmt_1): Call emit_move_insn if
	SUBREG is promoted with SRP_SIGNED_AND_UNSIGNED.

From-SVN: r215100
This commit is contained in:
Kugan Vivekanandarajah 2014-09-10 00:19:23 +00:00 committed by Kugan Vivekanandarajah
parent 6e8962a5a0
commit 27be0c3223
5 changed files with 15 additions and 46 deletions

View File

@ -1,3 +1,15 @@
2014-09-10 Kugan Vivekanandarajah <kuganv@linaro.org>
Revert r213751:
* calls.c (precompute_arguments): Check
promoted_for_signed_and_unsigned_p and set the promoted mode.
(promoted_for_signed_and_unsigned_p): New function.
(expand_expr_real_1): Check promoted_for_signed_and_unsigned_p
and set the promoted mode.
* expr.h (promoted_for_signed_and_unsigned_p): New function definition.
* cfgexpand.c (expand_gimple_stmt_1): Call emit_move_insn if
SUBREG is promoted with SRP_SIGNED_AND_UNSIGNED.
2014-09-09 Manuel López-Ibáñez <manu@gcc.gnu.org>
* opth-gen.awk: Generate mapping from cpp message reasons to the

View File

@ -1486,10 +1486,7 @@ precompute_arguments (int num_actuals, struct arg_data *args)
args[i].initial_value
= gen_lowpart_SUBREG (mode, args[i].value);
SUBREG_PROMOTED_VAR_P (args[i].initial_value) = 1;
if (promoted_for_signed_and_unsigned_p (args[i].tree_value, mode))
SUBREG_PROMOTED_SET (args[i].initial_value, SRP_SIGNED_AND_UNSIGNED);
else
SUBREG_PROMOTED_SET (args[i].initial_value, args[i].unsignedp);
SUBREG_PROMOTED_SET (args[i].initial_value, args[i].unsignedp);
}
}
}

View File

@ -3325,13 +3325,7 @@ expand_gimple_stmt_1 (gimple stmt)
GET_MODE (target), temp, unsignedp);
}
if ((SUBREG_PROMOTED_GET (target) == SRP_SIGNED_AND_UNSIGNED)
&& (GET_CODE (temp) == SUBREG)
&& (GET_MODE (target) == GET_MODE (temp))
&& (GET_MODE (SUBREG_REG (target)) == GET_MODE (SUBREG_REG (temp))))
emit_move_insn (SUBREG_REG (target), SUBREG_REG (temp));
else
convert_move (SUBREG_REG (target), temp, unsignedp);
convert_move (SUBREG_REG (target), temp, unsignedp);
}
else if (nontemporal && emit_storent_insn (target, temp))
;

View File

@ -68,7 +68,6 @@ along with GCC; see the file COPYING3. If not see
#include "tree-ssa-address.h"
#include "cfgexpand.h"
#include "builtins.h"
#include "tree-ssa.h"
#ifndef STACK_PUSH_CODE
#ifdef STACK_GROWS_DOWNWARD
@ -9250,35 +9249,6 @@ expand_expr_real_2 (sepops ops, rtx target, enum machine_mode tmode,
}
#undef REDUCE_BIT_FIELD
/* Return TRUE if value in SSA is zero and sign extended for wider mode MODE
using value range information stored. Return FALSE otherwise.
This is used to check if SUBREG is zero and sign extended and to set
promoted mode SRP_SIGNED_AND_UNSIGNED to SUBREG. */
bool
promoted_for_signed_and_unsigned_p (tree ssa, enum machine_mode mode)
{
wide_int min, max;
if (ssa == NULL_TREE
|| TREE_CODE (ssa) != SSA_NAME
|| !INTEGRAL_TYPE_P (TREE_TYPE (ssa))
|| (TYPE_PRECISION (TREE_TYPE (ssa)) != GET_MODE_PRECISION (mode)))
return false;
/* Return FALSE if value_range is not recorded for SSA. */
if (get_range_info (ssa, &min, &max) != VR_RANGE)
return false;
/* Return true (to set SRP_SIGNED_AND_UNSIGNED to SUBREG) if MSB of the
smaller mode is not set (i.e. MSB of ssa is not set). */
if (!wi::neg_p (min, SIGNED) && !wi::neg_p(max, SIGNED))
return true;
else
return false;
}
/* Return TRUE if expression STMT is suitable for replacement.
Never consider memory loads as replaceable, because those don't ever lead
@ -9582,10 +9552,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
temp = gen_lowpart_SUBREG (mode, decl_rtl);
SUBREG_PROMOTED_VAR_P (temp) = 1;
if (promoted_for_signed_and_unsigned_p (ssa_name, mode))
SUBREG_PROMOTED_SET (temp, SRP_SIGNED_AND_UNSIGNED);
else
SUBREG_PROMOTED_SET (temp, unsignedp);
SUBREG_PROMOTED_SET (temp, unsignedp);
return temp;
}

View File

@ -440,7 +440,6 @@ extern rtx expand_expr_real_1 (tree, rtx, enum machine_mode,
enum expand_modifier, rtx *, bool);
extern rtx expand_expr_real_2 (sepops, rtx, enum machine_mode,
enum expand_modifier);
extern bool promoted_for_signed_and_unsigned_p (tree, enum machine_mode);
/* Generate code for computing expression EXP.
An rtx for the computed value is returned. The value is never null.