* cgraphunit.c (cgraph_varpool_analyze_pending_decls): Call align_variable.
* output.h (align_variable): Declare.
* varasm.c (align_variable): Export.
* value-prof.c (tree_value_profile_transformations): Recompute iterator
when basic block changed.
From-SVN: r115421
+2006-07-13 Jan Hubicka <jh@suse.cz>
+
+ * cgraphunit.c (cgraph_varpool_analyze_pending_decls): Call
+ align_variable.
+ * output.h (align_variable): Declare.
+ * varasm.c (align_variable): Export.
+ * value-prof.c (tree_value_profile_transformations): Recompute iterator
+ when basic block changed.
+
2006-07-13 Nick Clifton <nickc@redhat.com>
* config/sh/sh.c (sh_reorg): Ignore deleted insns whilst
cgraph_varpool_first_unanalyzed_node = cgraph_varpool_first_unanalyzed_node->next_needed;
+ /* Compute the alignment early so function body expanders are
+ already informed about increased alignment. */
+ align_variable (decl, 0);
+
if (DECL_INITIAL (decl))
{
visited_nodes = pointer_set_create ();
initial value (that will be done by the caller). */
extern void assemble_variable (tree, int, int, int);
+/* Compute the alignment of variable specified by DECL.
+ DONT_OUTPUT_DATA is from assemble_variable. */
+extern void align_variable (tree decl, bool dont_output_data);
+
/* Output something to declare an external symbol to the assembler.
(Most assemblers don't need this, so we normally output nothing.)
Do nothing if DECL is not external. */
+2006-07-13 Jan Hubicka <jh@suse.cz>
+
+ * gcc.target/i386/memcpy-1.c: New.
+
2006-07-12 Geoffrey Keating <geoffk@apple.com>
* g++.dg/ext/visibility/fvisibility-inlines-hidden-2.C: New.
--- /dev/null
+/* { dg-do compile { target i?86-*-* } } */
+/* { dg-options "-O2 -march=pentiumpro -minline-all-stringops" } */
+/* { dg-final { scan-assembler "rep" } } */
+/* { dg-final { scan-assembler "movs" } } */
+/* { dg-final { scan-assembler-not "test" } } */
+/* { dg-final { scan-assembler "\.L?:" } } */
+
+/* A and B are aligned, but we used to lose track of it.
+ Ensure that memcpy is inlined and alignment prologue is missing. */
+
+char a[900];
+char b[900];
+t()
+{
+ __builtin_memcpy (a,b,900);
+}
{
changed = true;
/* Original statement may no longer be in the same block. */
- bb = bb_for_stmt (stmt);
+ if (bb != bb_for_stmt (stmt))
+ {
+ bb = bb_for_stmt (stmt);
+ bsi = bsi_for_stmt (stmt);
+ }
}
/* Free extra storage from compute_value_histograms. */
/* Compute the alignment of variable specified by DECL.
DONT_OUTPUT_DATA is from assemble_variable. */
-static void
+void
align_variable (tree decl, bool dont_output_data)
{
unsigned int align = DECL_ALIGN (decl);