]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
* config/alpha/alpha.c (alpha_stdarg_optimize_hook): Strip
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 13 Feb 2007 17:29:35 +0000 (17:29 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 13 Feb 2007 17:29:35 +0000 (17:29 +0000)
        handled_component_p before looking for the indirect_ref.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121886 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/alpha/alpha.c

index 96ff9accdfb5511c0201c2bceb9ed9e210ff83af..e1afa7183497f1a6cd32a64a3f56faa7a4139236 100644 (file)
@@ -1,3 +1,8 @@
+2007-02-13  Richard Henderson  <rth@redhat.com>
+
+       * config/alpha/alpha.c (alpha_stdarg_optimize_hook): Strip
+       handled_component_p before looking for the indirect_ref.
+
 2007-02-13  Richard Henderson  <rth@redhat.com>
 
        * config/i386/i386.md (bswapsi_1): Rename from bswapsi2,
index 1c5a1592bde6934cb7ab4df916caee77ab1d16d8..b98085716c3f44481cec207a58ddd8718740c7f8 100644 (file)
@@ -5860,11 +5860,15 @@ va_list_skip_additions (tree lhs)
              ? ap.__offset + cst - 48 : ap.__offset + cst) + cst2).
    If the former, indicate that GPR registers are needed,
    if the latter, indicate that FPR registers are needed.
+
+   Also look for LHS = (*ptr).field, where ptr is one of the forms
+   listed above.
+
    On alpha, cfun->va_list_gpr_size is used as size of the needed
-   regs and cfun->va_list_fpr_size is a bitmask, bit 0 set if
-   GPR registers are needed and bit 1 set if FPR registers are needed.
-   Return true if va_list references should not be scanned for the current
-   statement.  */
+   regs and cfun->va_list_fpr_size is a bitmask, bit 0 set if GPR
+   registers are needed and bit 1 set if FPR registers are needed.
+   Return true if va_list references should not be scanned for the
+   current statement.  */
 
 static bool
 alpha_stdarg_optimize_hook (struct stdarg_info *si, tree lhs, tree rhs)
@@ -5872,6 +5876,8 @@ alpha_stdarg_optimize_hook (struct stdarg_info *si, tree lhs, tree rhs)
   tree base, offset, arg1, arg2;
   int offset_arg = 1;
 
+  while (handled_component_p (rhs))
+    rhs = TREE_OPERAND (rhs, 0);
   if (TREE_CODE (rhs) != INDIRECT_REF
       || TREE_CODE (TREE_OPERAND (rhs, 0)) != SSA_NAME)
     return false;