Commit fe784e0d by Eric Botcazou Committed by Eric Botcazou

fold-const.c (fold_ternary_loc): Preserve the location (if any) of the argument…

fold-const.c (fold_ternary_loc): Preserve the location (if any) of the argument in calls to fold_truth_not_expr.

	* fold-const.c (fold_ternary_loc): Preserve the location (if any) of
	the argument in calls to fold_truth_not_expr.

From-SVN: r171403
parent e3c4580e
2011-03-24 Eric Botcazou <ebotcazou@adacore.com>
* fold-const.c (fold_ternary_loc): Preserve the location (if any) of
the argument in calls to fold_truth_not_expr.
2011-03-24 Nathan Froyd <froydnj@codesourcery.com> 2011-03-24 Nathan Froyd <froydnj@codesourcery.com>
* tree.c (record_node_allocation_statistics): New function. * tree.c (record_node_allocation_statistics): New function.
......
...@@ -13327,7 +13327,10 @@ fold_ternary_loc (location_t loc, enum tree_code code, tree type, ...@@ -13327,7 +13327,10 @@ fold_ternary_loc (location_t loc, enum tree_code code, tree type,
TREE_OPERAND (arg0, 1)) TREE_OPERAND (arg0, 1))
&& !HONOR_SIGNED_ZEROS (TYPE_MODE (TREE_TYPE (op2)))) && !HONOR_SIGNED_ZEROS (TYPE_MODE (TREE_TYPE (op2))))
{ {
tem = fold_truth_not_expr (loc, arg0); location_t loc0 = EXPR_LOCATION (arg0);
if (loc0 == UNKNOWN_LOCATION)
loc0 = loc;
tem = fold_truth_not_expr (loc0, arg0);
if (tem && COMPARISON_CLASS_P (tem)) if (tem && COMPARISON_CLASS_P (tem))
{ {
tem = fold_cond_expr_with_comparison (loc, type, tem, op2, op1); tem = fold_cond_expr_with_comparison (loc, type, tem, op2, op1);
...@@ -13341,10 +13344,13 @@ fold_ternary_loc (location_t loc, enum tree_code code, tree type, ...@@ -13341,10 +13344,13 @@ fold_ternary_loc (location_t loc, enum tree_code code, tree type,
if (truth_value_p (TREE_CODE (arg0)) if (truth_value_p (TREE_CODE (arg0))
&& tree_swap_operands_p (op1, op2, false)) && tree_swap_operands_p (op1, op2, false))
{ {
location_t loc0 = EXPR_LOCATION (arg0);
if (loc0 == UNKNOWN_LOCATION)
loc0 = loc;
/* See if this can be inverted. If it can't, possibly because /* See if this can be inverted. If it can't, possibly because
it was a floating-point inequality comparison, don't do it was a floating-point inequality comparison, don't do
anything. */ anything. */
tem = fold_truth_not_expr (loc, arg0); tem = fold_truth_not_expr (loc0, arg0);
if (tem) if (tem)
return fold_build3_loc (loc, code, type, tem, op2, op1); return fold_build3_loc (loc, code, type, tem, op2, op1);
} }
...@@ -13489,8 +13495,11 @@ fold_ternary_loc (location_t loc, enum tree_code code, tree type, ...@@ -13489,8 +13495,11 @@ fold_ternary_loc (location_t loc, enum tree_code code, tree type,
&& truth_value_p (TREE_CODE (arg0)) && truth_value_p (TREE_CODE (arg0))
&& truth_value_p (TREE_CODE (arg1))) && truth_value_p (TREE_CODE (arg1)))
{ {
location_t loc0 = EXPR_LOCATION (arg0);
if (loc0 == UNKNOWN_LOCATION)
loc0 = loc;
/* Only perform transformation if ARG0 is easily inverted. */ /* Only perform transformation if ARG0 is easily inverted. */
tem = fold_truth_not_expr (loc, arg0); tem = fold_truth_not_expr (loc0, arg0);
if (tem) if (tem)
return fold_build2_loc (loc, TRUTH_ORIF_EXPR, type, return fold_build2_loc (loc, TRUTH_ORIF_EXPR, type,
fold_convert_loc (loc, type, tem), fold_convert_loc (loc, type, tem),
...@@ -13502,8 +13511,11 @@ fold_ternary_loc (location_t loc, enum tree_code code, tree type, ...@@ -13502,8 +13511,11 @@ fold_ternary_loc (location_t loc, enum tree_code code, tree type,
&& truth_value_p (TREE_CODE (arg0)) && truth_value_p (TREE_CODE (arg0))
&& truth_value_p (TREE_CODE (op2))) && truth_value_p (TREE_CODE (op2)))
{ {
location_t loc0 = EXPR_LOCATION (arg0);
if (loc0 == UNKNOWN_LOCATION)
loc0 = loc;
/* Only perform transformation if ARG0 is easily inverted. */ /* Only perform transformation if ARG0 is easily inverted. */
tem = fold_truth_not_expr (loc, arg0); tem = fold_truth_not_expr (loc0, arg0);
if (tem) if (tem)
return fold_build2_loc (loc, TRUTH_ANDIF_EXPR, type, return fold_build2_loc (loc, TRUTH_ANDIF_EXPR, type,
fold_convert_loc (loc, type, tem), fold_convert_loc (loc, type, tem),
......
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