Promote the function argument before checking non-legitimate constant.
authorH.J. Lu <hongjiu.lu@intel.com>
Tue, 5 Jul 2011 15:47:40 +0000 (15:47 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Tue, 5 Jul 2011 15:47:40 +0000 (08:47 -0700)
2011-07-05  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.

From-SVN: r175864

gcc/ChangeLog
gcc/calls.c

index 418f5dce6a7a9cf012079603d0421046cb7502c1..03313681666d320732cce8513eac51a0e1cac6e3 100644 (file)
@@ -1,3 +1,9 @@
+2011-07-05  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.
+
 2011-07-05  Sebastian Pop  <sebastian.pop@amd.com>
 
        PR tree-optimization/47654
index bba477ce274f99e825380bd9de653eb166496a10..7538e4e5040899bd9806187c715e1a66c0144f6f 100644 (file)
@@ -702,12 +702,6 @@ precompute_register_parameters (int num_actuals, struct arg_data *args,
            pop_temp_slots ();
          }
 
-       /* If the value is a non-legitimate constant, force it into a
-          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 we are to promote the function arg to a wider mode,
           do it now.  */
 
@@ -717,6 +711,12 @@ precompute_register_parameters (int num_actuals, struct arg_data *args,
                             TYPE_MODE (TREE_TYPE (args[i].tree_value)),
                             args[i].value, args[i].unsignedp);
 
+       /* If the value is a non-legitimate constant, force it into a
+          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 we're going to have to load the value by parts, pull the
           parts into pseudos.  The part extraction process can involve
           non-trivial computation.  */