aboutsummaryrefslogtreecommitdiff
path: root/gcc/calls.c
diff options
context:
space:
mode:
authorKugan Vivekanandarajah <kuganv@linaro.org>2014-08-08 05:31:44 +0000
committerKugan Vivekanandarajah <kugan@gcc.gnu.org>2014-08-08 05:31:44 +0000
commit8c9a36b7cac01afb70ca41c1435efb2077202035 (patch)
tree564b60254e3780325da325e3491a46fca2b8c908 /gcc/calls.c
parent362d42dcc965c63977160984292b3429c2d15de7 (diff)
downloadgcc-8c9a36b7cac01afb70ca41c1435efb2077202035.zip
gcc-8c9a36b7cac01afb70ca41c1435efb2077202035.tar.gz
gcc-8c9a36b7cac01afb70ca41c1435efb2077202035.tar.bz2
calls.c (precompute_arguments): Check promoted_for_signed_and_unsigned_p and set the promoted mode.
gcc 2014-08-08 Kugan Vivekanandarajah <kuganv@linaro.org> * 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. gcc/testsuite 2014-08-08 Kugan Vivekanandarajah <kuganv@linaro.org> * gcc.dg/zero_sign_ext_test.c: New test. From-SVN: r213750
Diffstat (limited to 'gcc/calls.c')
-rw-r--r--gcc/calls.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/calls.c b/gcc/calls.c
index 00c5028..4285ec1 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -1484,7 +1484,10 @@ 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;
- SUBREG_PROMOTED_SET (args[i].initial_value, args[i].unsignedp);
+ 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);
}
}
}