This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/24689] operand_equal_p does not return true for some equivalent ARRAY_REF
- From: "pinskia at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 16 Jan 2006 06:02:49 -0000
- Subject: [Bug tree-optimization/24689] operand_equal_p does not return true for some equivalent ARRAY_REF
- References: <bug-24689-5009@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #6 from pinskia at gcc dot gnu dot org 2006-01-16 06:02 -------
The problem here is that operand_equal_p returns false for these two trees:
<array_ref 0x41da4b94
type <integer_type 0x41d1b180 char sizes-gimplified public QI
size <integer_cst 0x41d0a320 constant invariant 8>
unit size <integer_cst 0x41d0a340 constant invariant 1>
align 8 symtab 0 alias set -1 precision 8 min <integer_cst 0x41d0a3a0
-128> max <integer_cst 0x41d0a420 127>
pointer_to_this <pointer_type 0x41d23120>>
arg 0 <var_decl 0x41da2540 buf
type <array_type 0x41da24e0 type <integer_type 0x41d1b180 char>
QI size <integer_cst 0x41d0a320 8> unit size <integer_cst
0x41d0a340 1>
align 8 symtab 0 alias set -1 domain <integer_type 0x41da2480>>
addressable used public static common QI file t.c line 4 size
<integer_cst 0x41d0a320 8> unit size <integer_cst 0x41d0a340 1>
align 8
chain <function_decl 0x41da3680 foo type <function_type 0x41d236c0>
public static SI file t.c line 7 initial <block 0x41da4bfc> result
<result_decl 0x41d12268 D.1518>
(mem:SI (symbol_ref:SI ("foo") [flags 0x103] <function_decl
0x41da3680 foo>) [0 S4 A8])
saved-insns 0x41d85c00>>
arg 1 <integer_cst 0x41d0ab40 type <integer_type 0x41d1b2a0 int> constant
invariant 0>>
and
<array_ref 0x41dab6b4
type <integer_type 0x41d23300 char readonly sizes-gimplified public QI
size <integer_cst 0x41d0a320 constant invariant 8>
unit size <integer_cst 0x41d0a340 constant invariant 1>
align 8 symtab 0 alias set -1 precision 8 min <integer_cst 0x41d0a3a0
-128> max <integer_cst 0x41d0a420 127>
pointer_to_this <pointer_type 0x41d23360>>
arg 0 <var_decl 0x41da2540 buf
type <array_type 0x41da24e0 type <integer_type 0x41d1b180 char>
QI size <integer_cst 0x41d0a320 8> unit size <integer_cst
0x41d0a340 1>
align 8 symtab 0 alias set -1 domain <integer_type 0x41da2480>>
addressable used public static common QI file t.c line 4 size
<integer_cst 0x41d0a320 8> unit size <integer_cst 0x41d0a340 1>
align 8
chain <function_decl 0x41da3680 foo type <function_type 0x41d236c0>
public static SI file t.c line 7 initial <block 0x41da4bfc> result
<result_decl 0x41d12268 D.1518>
(mem:SI (symbol_ref:SI ("foo") [flags 0x103] <function_decl
0x41da3680 foo>) [0 S4 A8])
saved-insns 0x41d85c00>>
arg 1 <integer_cst 0x41d76600 type <integer_type 0x41da2480> constant
invariant 0>
arg 2 <integer_cst 0x41d0a2a0 type <integer_type 0x41d1b000 long unsigned
int> constant invariant 0> arg 3 <integer_cst 0x41d0a340 1>>
Even they point to the same spot, it does not work as the two array reference
have different arg2/arg3.
So Store_CCP is doing the correct thing, just the function it depends on is
not.
And the reason for this problem is because when changing **q into buf[0], it
does not fill out those two arguments to the tree.
--
pinskia at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords|alias |
Summary|store_ccp does nothing for |operand_equal_p does not
|array references |return true for some
| |equivalent ARRAY_REF
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24689