> > How is that different from: > > struct S { long long d; int e; }; > > struct T { long long d; long long e; }; > > s->e vs. t->e ? > > One thing is comparison of the address (as it is comparing > > DECL_FIELD_BIT_OFFSET too, it is essentially bit-address), and another thing > > (unlrelated to OEP_ADDRESS comparisons) is if you need to ensure the access > > has the same size, in that case you just compare the bit size of the > > access... > > I believe for that I only need to compare TYPE_SIZE of the access. > Bitfields are special since their types are wider and they do extension.
So the extra sanity check fires in 0xe3d093 operand_compare::operand_equal_p(tree_node const*, tree_node const*, unsigned int) ../../gcc/fold-const.c:3329 0xe4066d operand_equal_p(tree_node const*, tree_node const*, unsigned int) ../../gcc/fold-const.c:3949 0x167fad5 refs_hasher::equal(ref_to_bb const*, ref_to_bb const*) ../../gcc/tree-ssa-phiopt.c:2152 0x1680555 hash_table<refs_hasher, false, xcallocator>::find_slot_with_hash(ref_to_bb* const&, unsigned int, insert_option) ../../gcc/hash-table.h:981 0x16802d6 hash_table<refs_hasher, false, xcallocator>::find_slot(ref_to_bb* const&, insert_option) ../../gcc/hash-table.h:435 0x167b4f2 nontrapping_dom_walker::add_or_mark_expr(basic_block_def*, tree_node*, bool) ../../gcc/tree-ssa-phiopt.c:2261 0x167b380 nontrapping_dom_walker::before_dom_children(basic_block_def*) ../../gcc/tree-ssa-phiopt.c:2211 0x23705e1 dom_walker::walk(basic_block_def*) ../../gcc/domwalk.c:309 0x167b637 get_non_trapping ../../gcc/tree-ssa-phiopt.c:2308 0x167410e tree_ssa_phiopt_worker ../../gcc/tree-ssa-phiopt.c:177 0x1673f65 tree_ssa_cs_elim ../../gcc/tree-ssa-phiopt.c:127 0x167d84c execute ../../gcc/tree-ssa-phiopt.c:3192 This makes sort of sense: refs hasher is trying to prove that two accesses go to exactly same location to eliminate NULL pointer checks. If my ao_ref_compare gets approved (that is I guess not at all clear at this point) I suppose we could use it here. We want only accesses to have same address&size, we do not care about TBAA properties here. It is not obvious to me how this optimization is safe without -fnon-call-exceptions though. I will test the patch without assert for now. Honza