This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On Wed, Jun 29, 2011 at 7:06 AM, H.J. Lu <hjl.tools@gmail.com> wrote: > On Wed, Jun 29, 2011 at 1:45 AM, Richard Sandiford > <richard.sandiford@linaro.org> wrote: >> "H.J. Lu" <hongjiu.lu@intel.com> writes: >>> @@ -706,7 +706,13 @@ precompute_register_parameters (int num_actuals, struct arg_data *args, >>> ? ? ? ? ?pseudo now. ?TLS symbols sometimes need a call to resolve. ?*/ >>> ? ? ? if (CONSTANT_P (args[i].value) >>> ? ? ? ? ? && !targetm.legitimate_constant_p (args[i].mode, args[i].value)) >>> - ? ? ? args[i].value = force_reg (args[i].mode, args[i].value); >>> + ? ? ? { >>> + ? ? ? ? if (GET_MODE (args[i].value) != args[i].mode) >>> + ? ? ? ? ? args[i].value = convert_to_mode (args[i].mode, >>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?args[i].value, >>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?args[i].unsignedp); >>> + ? ? ? ? args[i].value = force_reg (args[i].mode, args[i].value); >>> + ? ? ? } >> >> But if GET_MODE (args[i].value) != args[i].mode, then the call to >> targetm.legitimate_constant_p looks wrong. ?The mode passed in the >> first argument is supposed to the mode of the second argument. >> >> Is there any reason why this and the following: >> >> ? ? ? ?/* If we are to promote the function arg to a wider mode, >> ? ? ? ? ? do it now. ?*/ >> >> ? ? ? ?if (args[i].mode != TYPE_MODE (TREE_TYPE (args[i].tree_value))) >> ? ? ? ? ?args[i].value >> ? ? ? ? ? ?= convert_modes (args[i].mode, >> ? ? ? ? ? ? ? ? ? ? ? ? ? ? TYPE_MODE (TREE_TYPE (args[i].tree_value)), >> ? ? ? ? ? ? ? ? ? ? ? ? ? ? args[i].value, args[i].unsignedp); >> >> need to be done in the current order? ?I can't think of any off-hand. >> If not, would swapping them also fix the bug? >> >> (I can't review this either way, of course.) > > It works on the testcase. ?I will do a full test. > It works. There are no regressions on Linux/x86-64. OK for trunk? Thanks. -- H.J. ---- 2011-06-29 H.J. Lu <hongjiu.lu@intel.com> PR middle-end/47715 * calls.c (precompute_register_parameters): Promote the function argument before checking non-legitimate constant.
Attachment:
gcc-x32-pr47715-1.patch
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |