re PR rtl-optimization/38879 (scheduler does not look for conflicting alias sets)
PR rtl-optimization/38879 * alias.c (base_alias_check): Unaligned access via AND address can alias all surrounding object types except those with sizes equal or wider than the size of unaligned access. From-SVN: r143549
This commit is contained in:
parent
d597b3ce68
commit
435da62879
2 changed files with 52 additions and 51 deletions
|
@ -1,9 +1,16 @@
|
|||
2009-01-21 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR rtl-optimization/38879
|
||||
* alias.c (base_alias_check): Unaligned access via AND address can
|
||||
alias all surrounding object types except those with sizes equal
|
||||
or wider than the size of unaligned access.
|
||||
|
||||
2009-01-21 Dodji Seketeli <dodji@redhat.com>
|
||||
|
||||
PR c++/26693
|
||||
* c-decl.c: (clone_underlying_type): Move this ...
|
||||
* c-decl.c: (clone_underlying_type): Move this ...
|
||||
* c-common.c (set_underlying_type): ... here.
|
||||
Also, make sure the function properly sets TYPE_STUB_DECL() on
|
||||
Also, make sure the function properly sets TYPE_STUB_DECL() on
|
||||
the newly created typedef variant type.
|
||||
(is_typedef_decl ): New entry point.
|
||||
* tree.h: Added a new member member_types_needing_access_check to
|
||||
|
@ -35,7 +42,7 @@
|
|||
(version_id): Modify.
|
||||
|
||||
2009-01-20 Andrew Pinski <andrew_pinski@playstation.sony.com>
|
||||
Richard Guenther <rguenther@suse.de>
|
||||
Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/38747
|
||||
PR tree-optimization/38748
|
||||
|
@ -62,14 +69,13 @@
|
|||
2009-01-20 Ben Elliston <bje@au.ibm.com>
|
||||
|
||||
* libgcov.c (__gcov_execl, __gcov_execlp, __gcov_execle): Remove
|
||||
const qualifier from arg parameter. Remove unnecessary cast to
|
||||
char *.
|
||||
const qualifier from arg parameter. Remove unnecessary cast to char *.
|
||||
* gcov-io.h (__gcov_execl, __gcov_execlp, __gcov_execle): Remove
|
||||
const qualifier from arg 2.
|
||||
|
||||
2009-01-19 Iain Sandoe <iain.sandoe@sandoe-acoustics.co.uk>
|
||||
|
||||
* config/darwin.h: Add static-libgfortran to LINK_SPEC.
|
||||
* config/darwin.h: Add static-libgfortran to LINK_SPEC.
|
||||
|
||||
2009-01-19 Vladimir Makarov <vmakarov@redhat.com>
|
||||
|
||||
|
@ -228,8 +234,7 @@
|
|||
|
||||
2009-01-15 Kenneth Zadeck <zadeck@naturalbridge.com>
|
||||
|
||||
* dce.c (find_call_stack_args, delete_unmarked_insns): Fixed
|
||||
comments.
|
||||
* dce.c (find_call_stack_args, delete_unmarked_insns): Fixed comments.
|
||||
|
||||
2009-01-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
|
@ -255,9 +260,9 @@
|
|||
2009-01-14 Michael Meissner <gnu@the-meissners.org>
|
||||
|
||||
PR target/22599
|
||||
* i386.c (print_operand): Add tests for 'D', 'C', 'F', 'f' to make
|
||||
sure the insn is a conditional test (bug 22599). Reformat a few long
|
||||
lines.
|
||||
* config/i386/i386.c (print_operand): Add tests for 'D', 'C', 'F', 'f'
|
||||
to make sure the insn is a conditional test (bug 22599). Reformat a
|
||||
few long lines.
|
||||
|
||||
2009-01-14 Sebastian Pop <sebastian.pop@amd.com>
|
||||
|
||||
|
@ -268,10 +273,6 @@
|
|||
(graphite_transform_loops): Call cleanup_tree_cfg after all
|
||||
scops have been code generated.
|
||||
|
||||
2009-01-14 Vladimir Makarov <vmakarov@redhat.com>
|
||||
|
||||
* testsuite/g++.dg/torture/pr38811.C: New file.
|
||||
|
||||
2009-01-14 Basile Starynkevitch <basile@starynkevitch.net>
|
||||
* doc/gty.texi (Invoking the garbage collector): Added new node
|
||||
and section documenting ggc_collect.
|
||||
|
@ -291,10 +292,8 @@
|
|||
|
||||
* ira-conflicts.c: Include addresses.h for the definition of
|
||||
base_reg_class.
|
||||
(ira_build_conflicts): Use base_reg_class instead of
|
||||
BASE_REG_CLASS.
|
||||
* Makefile.in: Add a dependency of ira-conflicts.o on
|
||||
addresses.h.
|
||||
(ira_build_conflicts): Use base_reg_class instead of BASE_REG_CLASS.
|
||||
* Makefile.in: Add a dependency of ira-conflicts.o on addresses.h.
|
||||
|
||||
2009-01-13 Vladimir Makarov <vmakarov@redhat.com>
|
||||
|
||||
|
@ -337,13 +336,13 @@
|
|||
|
||||
2009-01-13 Richard Earnshaw <rearnsha@arm.com>
|
||||
|
||||
* arm.c (output_move_double): Don't synthesize thumb-2 ldrd/strd with
|
||||
two 32-bit instructions.
|
||||
* config/arm/arm.c (output_move_double): Don't synthesize thumb-2
|
||||
ldrd/strd with two 32-bit instructions.
|
||||
|
||||
2009-01-13 Richard Earnshaw <rearnsha@arm.com>
|
||||
|
||||
* arm.c (struct processors): Pass for speed down into cost helper
|
||||
functions.
|
||||
* config/arm/arm.c (struct processors): Pass for speed down into
|
||||
cost helper functions.
|
||||
(const_ok_for_op): Handle COMPARE and inequality nodes.
|
||||
(arm_rtx_costs_1): Rewrite.
|
||||
(arm_size_rtx_costs): Update prototype.
|
||||
|
@ -355,7 +354,7 @@
|
|||
2009-01-13 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
* config/alpha/alpha.c (alpha_legitimate_address_p): Explicit
|
||||
relocations of local symbols wider than UNITS_PER_WORD are not valid.
|
||||
relocations of local symbols wider than UNITS_PER_WORD are not valid.
|
||||
(alpha_legitimize_address): Do not split local symbols wider than
|
||||
UNITS_PER_WORD into HIGH/LO_SUM parts.
|
||||
|
||||
|
@ -652,7 +651,7 @@
|
|||
2009-01-06 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
PR target/38744
|
||||
* i386.c (ix86_expand_call): Use ARRAY_SIZE.
|
||||
* config/i386/i386.c (ix86_expand_call): Use ARRAY_SIZE.
|
||||
|
||||
2009-01-06 Gerald Pfeifer <gerald@pfeifer.com>
|
||||
|
||||
|
@ -662,14 +661,15 @@
|
|||
2009-01-06 Jan Hubicka <jh@suse.cz>
|
||||
Kai Tietz <kai.tietz@onevision.com>
|
||||
|
||||
* i386.md (*msabi_syvabi): Add SSE regs clobbers.
|
||||
* i386.c (ix86_expand_call): Add clobbers.
|
||||
* config/i386/i386.md (*msabi_syvabi): Add SSE regs clobbers.
|
||||
* config/i386/i386.c (ix86_expand_call): Add clobbers.
|
||||
|
||||
2009-01-06 Jan Hubicka <jh@suse.cz>
|
||||
Kai Tietz <kai.tietz@onevision.com>
|
||||
|
||||
* i386.h (CONDITIONAL_CALL_USAGE): SSE regs are not used for w64 ABI.
|
||||
* i386.c (struct ix86_frame): Add padding0 and nsseregs.
|
||||
* config/i386/i386.h (CONDITIONAL_CALL_USAGE): SSE regs are not used
|
||||
for w64 ABI.
|
||||
* config/i386/i386.c (struct ix86_frame): Add padding0 and nsseregs.
|
||||
(ix86_nsaved_regs): Count only general purpose regs.
|
||||
(ix86_nsaved_sseregs): New.
|
||||
(ix86_compute_frame_layout): Update nsseregs; set preferred alignment
|
||||
|
@ -685,9 +685,9 @@
|
|||
2009-01-06 Jan Hubicka <jh@suse.cz>
|
||||
Kai Tietz <kai.tietz@onevision.com>
|
||||
|
||||
* i386.h (ACCUMULATE_OUTGOING_ARGS): Enable for MSABI
|
||||
* i386.c (init_cumulative_args): Disallow calls of MSABI functions
|
||||
when accumulate outgoing args is off.
|
||||
* config/i386/i386.h (ACCUMULATE_OUTGOING_ARGS): Enable for MSABI
|
||||
* config/i386/i386.c (init_cumulative_args): Disallow calls of MSABI
|
||||
functions when accumulate outgoing args is off.
|
||||
|
||||
2009-01-06 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
|
|
39
gcc/alias.c
39
gcc/alias.c
|
@ -1559,26 +1559,27 @@ base_alias_check (rtx x, rtx y, enum machine_mode x_mode,
|
|||
if (rtx_equal_p (x_base, y_base))
|
||||
return 1;
|
||||
|
||||
/* The base addresses of the read and write are different expressions.
|
||||
If they are both symbols and they are not accessed via AND, there is
|
||||
no conflict. We can bring knowledge of object alignment into play
|
||||
here. For example, on alpha, "char a, b;" can alias one another,
|
||||
though "char a; long b;" cannot. */
|
||||
/* The base addresses are different expressions. If they are not accessed
|
||||
via AND, there is no conflict. We can bring knowledge of object
|
||||
alignment into play here. For example, on alpha, "char a, b;" can
|
||||
alias one another, though "char a; long b;" cannot. AND addesses may
|
||||
implicitly alias surrounding objects; i.e. unaligned access in DImode
|
||||
via AND address can alias all surrounding object types except those
|
||||
with aligment 8 or higher. */
|
||||
if (GET_CODE (x) == AND && GET_CODE (y) == AND)
|
||||
return 1;
|
||||
if (GET_CODE (x) == AND
|
||||
&& (GET_CODE (XEXP (x, 1)) != CONST_INT
|
||||
|| (int) GET_MODE_UNIT_SIZE (y_mode) < -INTVAL (XEXP (x, 1))))
|
||||
return 1;
|
||||
if (GET_CODE (y) == AND
|
||||
&& (GET_CODE (XEXP (y, 1)) != CONST_INT
|
||||
|| (int) GET_MODE_UNIT_SIZE (x_mode) < -INTVAL (XEXP (y, 1))))
|
||||
return 1;
|
||||
|
||||
/* Differing symbols not accessed via AND never alias. */
|
||||
if (GET_CODE (x_base) != ADDRESS && GET_CODE (y_base) != ADDRESS)
|
||||
{
|
||||
if (GET_CODE (x) == AND && GET_CODE (y) == AND)
|
||||
return 1;
|
||||
if (GET_CODE (x) == AND
|
||||
&& (GET_CODE (XEXP (x, 1)) != CONST_INT
|
||||
|| (int) GET_MODE_UNIT_SIZE (y_mode) < -INTVAL (XEXP (x, 1))))
|
||||
return 1;
|
||||
if (GET_CODE (y) == AND
|
||||
&& (GET_CODE (XEXP (y, 1)) != CONST_INT
|
||||
|| (int) GET_MODE_UNIT_SIZE (x_mode) < -INTVAL (XEXP (y, 1))))
|
||||
return 1;
|
||||
/* Differing symbols never alias. */
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
|
||||
/* If one address is a stack reference there can be no alias:
|
||||
stack references using different base registers do not alias,
|
||||
|
|
Loading…
Add table
Reference in a new issue