aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2007-02-13 09:29:35 -0800
committerRichard Henderson <rth@gcc.gnu.org>2007-02-13 09:29:35 -0800
commit138ae41e4d1de35af5bfd0573b60bfd92dd57f18 (patch)
tree9c09e112e85590173d6a411e13d13c54b5a34ef9
parentea20d970169c0a0641838675b462d581215f706c (diff)
downloadgcc-138ae41e4d1de35af5bfd0573b60bfd92dd57f18.zip
gcc-138ae41e4d1de35af5bfd0573b60bfd92dd57f18.tar.gz
gcc-138ae41e4d1de35af5bfd0573b60bfd92dd57f18.tar.bz2
alpha.c (alpha_stdarg_optimize_hook): Strip handled_component_p before looking for the indirect_ref.
* config/alpha/alpha.c (alpha_stdarg_optimize_hook): Strip handled_component_p before looking for the indirect_ref. From-SVN: r121886
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/alpha/alpha.c14
2 files changed, 15 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 96ff9ac..e1afa71 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
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,
remove flags clobber.
(bswapsi2): New expander, emit code for !TARGET_BSWAP.
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c
index 1c5a159..b980857 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -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;