cgraphunit.c (cgraph_varpool_analyze_pending_decls): Call align_variable.

* 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
This commit is contained in:
Jan Hubicka 2006-07-13 22:49:34 +02:00 committed by Jan Hubicka
parent 56dbe89df5
commit 88d03811f8
7 changed files with 43 additions and 2 deletions

View File

@ -1,3 +1,12 @@
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

View File

@ -281,6 +281,10 @@ cgraph_varpool_analyze_pending_decls (void)
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 ();

View File

@ -200,6 +200,10 @@ extern void assemble_end_function (tree, const char *);
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. */

View File

@ -1,3 +1,7 @@
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.

View File

@ -0,0 +1,16 @@
/* { 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);
}

View File

@ -147,7 +147,11 @@ tree_value_profile_transformations (void)
{
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. */

View File

@ -834,7 +834,7 @@ bss_initializer_p (tree decl)
/* 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);