rtl.h (MEM_COPY_ATTRIBUTES): Also copy RTX_UNCHANGING_P and MEM_ALIAS_SET.

* rtl.h (MEM_COPY_ATTRIBUTES): Also copy RTX_UNCHANGING_P and
	MEM_ALIAS_SET.
	* alias.c (canon_rtx): Don't copy RTX_UNCHANGING_P or MEM_ALIAS_SET
	when calling MEM_COPY_ATTRIBUTES.
	* emit-rtl.c (operand_subword, change_address): Likewise.
	* explow.c (stabilize): Likewise.
	* expr.c (protect_from_queue, emit_move_insn_1): Likewise.
	* integrate.c (copy_rtx_and_substitute): Likewise.
	* combine.c (combine_simplify_rtx): Don't copy RTX_UNCHANGING_P
	when calling MEM_COPY_ATTRIBUTES.
	(make_extraction, simplify_shift_const, gen_lowpart_for_combine):
	Likewise.
	* cse.c (gen_lowpart_if_possible): Likewise.
	* function.c (fixup_var_refs_1, purge_addressof_1): Likewise.
	* optabs.c (gen_move_insn): Likewise.
	* recog.c (validate_replace_rtx_1): Likewise.
	* simplify-rtx.c (add_mem_for_addr): Likewise.
	* stmt.c (expand_anon_union_decl): Likewise.
	* config/arm/arm.md: Likewise.
	* config/h8300/h7300.c (fix_bit_operand): Likewise.
	* config/m88k/m88k.c (legitimize_address, block_move_loop): Likewise.
	(block_move_no_loop, block_move_sequence): Likewise.
	* config/rs6000/rs6000.c (expand_block_move_mem): Likewise.
	* config/alpha/alpha.c (get_aligned_mem): Likewise.
	Clear MEM_ALIAS_SET.
	* final.c (alter_subreg): Don't copy MEM_ALIAS_SET when calling
	MEM_COPY_ATTRIBUTES.

From-SVN: r33665
This commit is contained in:
Richard Kenner 2000-05-04 13:49:50 +00:00 committed by Richard Kenner
parent 5b8714bfa9
commit bf49b1396b
20 changed files with 41 additions and 63 deletions

View File

@ -1,3 +1,33 @@
Thu May 4 09:45:12 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* rtl.h (MEM_COPY_ATTRIBUTES): Also copy RTX_UNCHANGING_P and
MEM_ALIAS_SET.
* alias.c (canon_rtx): Don't copy RTX_UNCHANGING_P or MEM_ALIAS_SET
when calling MEM_COPY_ATTRIBUTES.
* emit-rtl.c (operand_subword, change_address): Likewise.
* explow.c (stabilize): Likewise.
* expr.c (protect_from_queue, emit_move_insn_1): Likewise.
* integrate.c (copy_rtx_and_substitute): Likewise.
* combine.c (combine_simplify_rtx): Don't copy RTX_UNCHANGING_P
when calling MEM_COPY_ATTRIBUTES.
(make_extraction, simplify_shift_const, gen_lowpart_for_combine):
Likewise.
* cse.c (gen_lowpart_if_possible): Likewise.
* function.c (fixup_var_refs_1, purge_addressof_1): Likewise.
* optabs.c (gen_move_insn): Likewise.
* recog.c (validate_replace_rtx_1): Likewise.
* simplify-rtx.c (add_mem_for_addr): Likewise.
* stmt.c (expand_anon_union_decl): Likewise.
* config/arm/arm.md: Likewise.
* config/h8300/h7300.c (fix_bit_operand): Likewise.
* config/m88k/m88k.c (legitimize_address, block_move_loop): Likewise.
(block_move_no_loop, block_move_sequence): Likewise.
* config/rs6000/rs6000.c (expand_block_move_mem): Likewise.
* config/alpha/alpha.c (get_aligned_mem): Likewise.
Clear MEM_ALIAS_SET.
* final.c (alter_subreg): Don't copy MEM_ALIAS_SET when calling
MEM_COPY_ATTRIBUTES.
2000-05-03 Robert Lipe <robertlipe@usa.net>
* configure.in (i[34567]86-*-isc*) [tmake_file]: Add t-i386bare

View File

@ -586,9 +586,7 @@ canon_rtx (x)
{
rtx new = gen_rtx_MEM (GET_MODE (x), addr);
RTX_UNCHANGING_P (new) = RTX_UNCHANGING_P (x);
MEM_COPY_ATTRIBUTES (new, x);
MEM_ALIAS_SET (new) = MEM_ALIAS_SET (x);
x = new;
}
}

View File

@ -3740,7 +3740,6 @@ combine_simplify_rtx (x, op0_mode, last, in_dest)
plus_constant (XEXP (inner, 0),
(SUBREG_WORD (x) * UNITS_PER_WORD
+ endian_offset)));
RTX_UNCHANGING_P (x) = RTX_UNCHANGING_P (inner);
MEM_COPY_ATTRIBUTES (x, inner);
return x;
}
@ -5922,7 +5921,6 @@ make_extraction (mode, inner, pos, pos_rtx, len,
offset = pos / BITS_PER_UNIT;
new = gen_rtx_MEM (tmode, plus_constant (XEXP (inner, 0), offset));
RTX_UNCHANGING_P (new) = RTX_UNCHANGING_P (inner);
MEM_COPY_ATTRIBUTES (new, inner);
}
else if (GET_CODE (inner) == REG)
@ -6147,7 +6145,7 @@ make_extraction (mode, inner, pos, pos_rtx, len,
{
rtx newmem = gen_rtx_MEM (wanted_inner_mode,
plus_constant (XEXP (inner, 0), offset));
RTX_UNCHANGING_P (newmem) = RTX_UNCHANGING_P (inner);
MEM_COPY_ATTRIBUTES (newmem, inner);
inner = newmem;
}
@ -8914,7 +8912,7 @@ simplify_shift_const (x, code, result_mode, varop, input_count)
new = gen_rtx_MEM (tmode,
plus_constant (XEXP (varop, 0),
count / BITS_PER_UNIT));
RTX_UNCHANGING_P (new) = RTX_UNCHANGING_P (varop);
MEM_COPY_ATTRIBUTES (new, varop);
varop = gen_rtx_combine (code == ASHIFTRT ? SIGN_EXTEND
: ZERO_EXTEND, mode, new);
@ -9669,7 +9667,6 @@ gen_lowpart_for_combine (mode, x)
- MIN (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (x))));
}
new = gen_rtx_MEM (mode, plus_constant (XEXP (x, 0), offset));
RTX_UNCHANGING_P (new) = RTX_UNCHANGING_P (x);
MEM_COPY_ATTRIBUTES (new, x);
return new;
}

View File

@ -1033,11 +1033,10 @@ get_aligned_mem (ref, paligned_mem, pbitnum)
*paligned_mem = gen_rtx_MEM (SImode, plus_constant (base, offset & ~3));
MEM_COPY_ATTRIBUTES (*paligned_mem, ref);
RTX_UNCHANGING_P (*paligned_mem) = RTX_UNCHANGING_P (ref);
/* Sadly, we cannot use alias sets here because we may overlap other
data in a different alias set. */
/* MEM_ALIAS_SET (*paligned_mem) = MEM_ALIAS_SET (ref); */
MEM_ALIAS_SET (*paligned_mem) = 0;
*pbitnum = GEN_INT ((offset & 3) * 8);
}

View File

@ -3309,10 +3309,8 @@
mem1 = gen_rtx_MEM (QImode, addr);
MEM_COPY_ATTRIBUTES (mem1, operands[1]);
RTX_UNCHANGING_P (mem1) = RTX_UNCHANGING_P (operands[1]);
mem2 = gen_rtx_MEM (QImode, plus_constant (addr, 1));
MEM_COPY_ATTRIBUTES (mem2, operands[1]);
RTX_UNCHANGING_P (mem2) = RTX_UNCHANGING_P (operands[1]);
operands[0] = gen_lowpart (SImode, operands[0]);
operands[1] = mem1;
operands[2] = gen_reg_rtx (SImode);
@ -3427,7 +3425,6 @@
operands[3] = gen_rtx_REG (SImode, REGNO (operands[0]));
operands[2] = gen_rtx_MEM (QImode, operands[3]);
MEM_COPY_ATTRIBUTES (operands[2], operands[1]);
RTX_UNCHANGING_P (operands[2]) = RTX_UNCHANGING_P (operands[1]);
operands[1] = XEXP (operands[1], 0);
if (GET_CODE (operands[1]) == PLUS
&& GET_CODE (XEXP (operands[1], 1)) == CONST_INT
@ -3522,7 +3519,6 @@
operands[2] = gen_rtx_MEM (QImode, operands[0]);
MEM_COPY_ATTRIBUTES (operands[2], operands[1]);
RTX_UNCHANGING_P (operands[2]) = RTX_UNCHANGING_P (operands[1]);
operands[1] = XEXP (operands[1], 0);
if (GET_CODE (operands[1]) == PLUS
&& GET_CODE (XEXP (operands[1], 1)) == CONST_INT
@ -4201,7 +4197,6 @@
new = gen_rtx_MEM (SImode,
plus_constant (base, new_offset));
MEM_COPY_ATTRIBUTES (new, operands[1]);
RTX_UNCHANGING_P (new) = RTX_UNCHANGING_P (operands[1]);
emit_insn (gen_movsi (reg, new));
if (((INTVAL (offset) & 2) != 0)
^ (BYTES_BIG_ENDIAN ? 1 : 0))
@ -4237,15 +4232,12 @@
new = gen_rtx_MEM (SImode,
plus_constant (base, new_offset));
MEM_COPY_ATTRIBUTES (new, operands[1]);
RTX_UNCHANGING_P (new) = RTX_UNCHANGING_P (operands[1]);
emit_insn (gen_movsi (reg, new));
}
else
{
new = gen_rtx_MEM (SImode, XEXP (operands[1], 0));
MEM_COPY_ATTRIBUTES (new, operands[1]);
RTX_UNCHANGING_P (new)
= RTX_UNCHANGING_P (operands[1]);
emit_insn (gen_rotated_loadsi (reg, new));
}
@ -4393,10 +4385,8 @@
mem1 = gen_rtx_MEM (QImode, addr);
MEM_COPY_ATTRIBUTES (mem1, operands[1]);
RTX_UNCHANGING_P (mem1) = RTX_UNCHANGING_P (operands[1]);
mem2 = gen_rtx_MEM (QImode, plus_constant (addr, 1));
MEM_COPY_ATTRIBUTES (mem2, operands[1]);
RTX_UNCHANGING_P (mem2) = RTX_UNCHANGING_P (operands[1]);
operands[0] = gen_lowpart (SImode, operands[0]);
operands[1] = mem1;
operands[2] = gen_reg_rtx (SImode);

View File

@ -2814,7 +2814,6 @@ fix_bit_operand (operands, what, type)
rtx mem = gen_rtx_MEM (GET_MODE (operands[0]),
copy_to_mode_reg (Pmode,
XEXP (operands[0], 0)));
RTX_UNCHANGING_P (mem) = RTX_UNCHANGING_P (operands[0]);
MEM_COPY_ATTRIBUTES (mem, operands[0]);
operands[0] = mem;
}
@ -2824,7 +2823,6 @@ fix_bit_operand (operands, what, type)
rtx mem = gen_rtx_MEM (GET_MODE (operands[1]),
copy_to_mode_reg (Pmode,
XEXP (operands[1], 0)));
RTX_UNCHANGING_P (mem) = RTX_UNCHANGING_P (operands[1]);
MEM_COPY_ATTRIBUTES (mem, operands[0]);
operands[1] = mem;
}

View File

@ -402,7 +402,6 @@ legitimize_address (pic, orig, reg, scratch)
&& GET_CODE (orig) == MEM)
{
new = gen_rtx_MEM (GET_MODE (orig), new);
RTX_UNCHANGING_P (new) = RTX_UNCHANGING_P (orig);
MEM_COPY_ATTRIBUTES (new, orig);
}
return new;
@ -602,7 +601,6 @@ block_move_loop (dest, dest_mem, src, src_mem, size, align)
gen_rtx_PLUS (Pmode,
gen_rtx_REG (Pmode, 3),
offset_rtx));
RTX_UNCHANGING_P (value_rtx) = RTX_UNCHANGING_P (src_mem);
MEM_COPY_ATTRIBUTES (value_rtx, src_mem);
emit_insn (gen_call_movstrsi_loop
@ -659,7 +657,6 @@ block_move_no_loop (dest, dest_mem, src, src_mem, size, align)
gen_rtx_REG (Pmode, 3),
offset_rtx));
RTX_UNCHANGING_P (value_rtx) = RTX_UNCHANGING_P (src_mem);
MEM_COPY_ATTRIBUTES (value_rtx, src_mem);
value_reg = ((((most - (size - remainder)) / align) & 1) == 0
@ -730,7 +727,6 @@ block_move_sequence (dest, dest_mem, src, src_mem, size, align, offset)
srcp = gen_rtx_MEM (MEM_IN_STRUCT_P (src_mem) ? mode[next] : BLKmode,
plus_constant (src, offset_ld));
RTX_UNCHANGING_P (srcp) = RTX_UNCHANGING_P (src_mem);
MEM_COPY_ATTRIBUTES (srcp, src_mem);
emit_insn (gen_rtx_SET (VOIDmode, temp[next], srcp));
offset_ld += amount[next];
@ -744,7 +740,6 @@ block_move_sequence (dest, dest_mem, src, src_mem, size, align, offset)
= gen_rtx_MEM (MEM_IN_STRUCT_P (dest_mem) ? mode[phase] : BLKmode,
plus_constant (dest, offset_st));
RTX_UNCHANGING_P (dstp) = RTX_UNCHANGING_P (dest_mem);
MEM_COPY_ATTRIBUTES (dstp, dest_mem);
emit_insn (gen_rtx_SET (VOIDmode, dstp, temp[phase]));
offset_st += amount[phase];

View File

@ -2286,7 +2286,6 @@ expand_block_move_mem (mode, addr, orig_mem)
{
rtx mem = gen_rtx_MEM (mode, addr);
RTX_UNCHANGING_P (mem) = RTX_UNCHANGING_P (orig_mem);
MEM_COPY_ATTRIBUTES (mem, orig_mem);
#ifdef MEM_UNALIGNED_P
MEM_UNALIGNED_P (mem) = MEM_UNALIGNED_P (orig_mem);

View File

@ -4176,7 +4176,6 @@ gen_lowpart_if_possible (mode, x)
new = gen_rtx_MEM (mode, plus_constant (XEXP (x, 0), offset));
if (! memory_address_p (mode, XEXP (new, 0)))
return 0;
RTX_UNCHANGING_P (new) = RTX_UNCHANGING_P (x);
MEM_COPY_ATTRIBUTES (new, x);
return new;
}

View File

@ -1283,11 +1283,7 @@ operand_subword (op, i, validate_address, mode)
}
new = gen_rtx_MEM (word_mode, addr);
MEM_COPY_ATTRIBUTES (new, op);
RTX_UNCHANGING_P (new) = RTX_UNCHANGING_P (op);
MEM_ALIAS_SET (new) = MEM_ALIAS_SET (op);
return new;
}
@ -1597,9 +1593,7 @@ change_address (memref, mode, addr)
return memref;
new = gen_rtx_MEM (mode, addr);
RTX_UNCHANGING_P (new) = RTX_UNCHANGING_P (memref);
MEM_COPY_ATTRIBUTES (new, memref);
MEM_ALIAS_SET (new) = MEM_ALIAS_SET (memref);
return new;
}

View File

@ -644,22 +644,18 @@ stabilize (x)
{
rtx temp = copy_all_regs (addr);
rtx mem;
if (GET_CODE (temp) != REG)
temp = copy_to_reg (temp);
mem = gen_rtx_MEM (GET_MODE (x), temp);
/* Mark returned memref with in_struct if it's in an array or
structure. Copy const and volatile from original memref. */
structure. Copy everything else from original memref. */
RTX_UNCHANGING_P (mem) = RTX_UNCHANGING_P (x);
MEM_COPY_ATTRIBUTES (mem, x);
if (GET_CODE (addr) == PLUS)
MEM_SET_IN_STRUCT_P (mem, 1);
/* Since the new MEM is just like the old X, it can alias only
the things that X could. */
MEM_ALIAS_SET (mem) = MEM_ALIAS_SET (x);
return mem;
}
return x;

View File

@ -402,9 +402,7 @@ protect_from_queue (x, modify)
register rtx y = XEXP (x, 0);
register rtx new = gen_rtx_MEM (GET_MODE (x), QUEUED_VAR (y));
RTX_UNCHANGING_P (new) = RTX_UNCHANGING_P (x);
MEM_COPY_ATTRIBUTES (new, x);
MEM_ALIAS_SET (new) = MEM_ALIAS_SET (x);
if (QUEUED_INSN (y))
{
@ -2748,9 +2746,7 @@ emit_move_insn_1 (x, y)
{
rtx new = gen_rtx_MEM (GET_MODE (x), inner);
RTX_UNCHANGING_P (new) = RTX_UNCHANGING_P (x);
MEM_COPY_ATTRIBUTES (new, x);
MEM_ALIAS_SET (new) = MEM_ALIAS_SET (x);
x = new;
}
if (reload_in_progress && GET_CODE (y) == MEM
@ -2758,9 +2754,7 @@ emit_move_insn_1 (x, y)
{
rtx new = gen_rtx_MEM (GET_MODE (y), inner);
RTX_UNCHANGING_P (new) = RTX_UNCHANGING_P (y);
MEM_COPY_ATTRIBUTES (new, y);
MEM_ALIAS_SET (new) = MEM_ALIAS_SET (y);
y = new;
}

View File

@ -3110,12 +3110,12 @@ alter_subreg (x)
else if (GET_CODE (y) == MEM)
{
register int offset = SUBREG_WORD (x) * UNITS_PER_WORD;
if (BYTES_BIG_ENDIAN)
offset -= (MIN (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (x)))
- MIN (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (y))));
PUT_CODE (x, MEM);
MEM_COPY_ATTRIBUTES (x, y);
MEM_ALIAS_SET (x) = MEM_ALIAS_SET (y);
XEXP (x, 0) = plus_constant (XEXP (y, 0), offset);
}

View File

@ -2046,7 +2046,6 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
newmem = gen_rtx_MEM (wanted_mode,
plus_constant (XEXP (tem, 0), offset));
RTX_UNCHANGING_P (newmem) = RTX_UNCHANGING_P (tem);
MEM_COPY_ATTRIBUTES (newmem, tem);
/* Make the change and see if the insn remains valid. */
@ -2238,7 +2237,6 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
newmem = gen_rtx_MEM (wanted_mode,
plus_constant (XEXP (tem, 0),
offset));
RTX_UNCHANGING_P (newmem) = RTX_UNCHANGING_P (tem);
MEM_COPY_ATTRIBUTES (newmem, tem);
/* Make the change and see if the insn remains valid. */
@ -2928,7 +2926,6 @@ purge_addressof_1 (loc, insn, force, store, ht)
{
sub2 = gen_rtx_MEM (GET_MODE (x), copy_rtx (XEXP (sub, 0)));
MEM_COPY_ATTRIBUTES (sub2, sub);
RTX_UNCHANGING_P (sub2) = RTX_UNCHANGING_P (sub);
sub = sub2;
}
else if (GET_CODE (sub) == REG

View File

@ -2130,8 +2130,6 @@ copy_rtx_and_substitute (orig, map, for_lhs)
PUT_MODE (copy, mode);
XEXP (copy, 0) = copy_rtx_and_substitute (XEXP (orig, 0), map, 0);
MEM_COPY_ATTRIBUTES (copy, orig);
MEM_ALIAS_SET (copy) = MEM_ALIAS_SET (orig);
RTX_UNCHANGING_P (copy) = RTX_UNCHANGING_P (orig);
return copy;
default:

View File

@ -3769,7 +3769,6 @@ gen_move_insn (x, y)
if (x == 0 && GET_CODE (x1) == MEM)
{
x = gen_rtx_MEM (tmode, XEXP (x1, 0));
RTX_UNCHANGING_P (x) = RTX_UNCHANGING_P (x1);
MEM_COPY_ATTRIBUTES (x, x1);
copy_replacements (x1, x);
}
@ -3778,7 +3777,6 @@ gen_move_insn (x, y)
if (y == 0 && GET_CODE (y1) == MEM)
{
y = gen_rtx_MEM (tmode, XEXP (y1, 0));
RTX_UNCHANGING_P (y) = RTX_UNCHANGING_P (y1);
MEM_COPY_ATTRIBUTES (y, y1);
copy_replacements (y1, y);
}

View File

@ -518,7 +518,6 @@ validate_replace_rtx_1 (loc, from, to, object)
- MIN (UNITS_PER_WORD, GET_MODE_SIZE (mode)));
new = gen_rtx_MEM (mode, plus_constant (XEXP (to, 0), offset));
RTX_UNCHANGING_P (new) = RTX_UNCHANGING_P (to);
MEM_COPY_ATTRIBUTES (new, to);
validate_change (object, loc, new, 1);
return;
@ -576,7 +575,6 @@ validate_replace_rtx_1 (loc, from, to, object)
newmem = gen_rtx_MEM (wanted_mode,
plus_constant (XEXP (to, 0), offset));
RTX_UNCHANGING_P (newmem) = RTX_UNCHANGING_P (to);
MEM_COPY_ATTRIBUTES (newmem, to);
validate_change (object, &XEXP (x, 2), GEN_INT (pos), 1);

View File

@ -760,12 +760,13 @@ extern const char * const note_insn_name[NOTE_INSN_MAX - NOTE_INSN_BIAS];
not refer to a scalar.*/
#define MEM_SCALAR_P(RTX) ((RTX)->frame_related)
/* Copy the MEM_VOLATILE_P, MEM_IN_STRUCT_P, and MEM_SCALAR_P
attributes from RHS to LHS. */
/* Copy the attributes that apply to memory locations from RHS to LHS. */
#define MEM_COPY_ATTRIBUTES(LHS, RHS) \
(MEM_VOLATILE_P (LHS) = MEM_VOLATILE_P (RHS), \
MEM_IN_STRUCT_P (LHS) = MEM_IN_STRUCT_P (RHS), \
MEM_SCALAR_P (LHS) = MEM_SCALAR_P (RHS))
MEM_SCALAR_P (LHS) = MEM_SCALAR_P (RHS), \
MEM_ALIAS_SET (LHS) = MEM_ALIAS_SET (RHS), \
RTX_UNCHANGING_P (LHS) = RTX_UNCHANGING_P (RHS))
/* If VAL is non-zero, set MEM_IN_STRUCT_P and clear MEM_SCALAR_P in
RTX. Otherwise, vice versa. Use this macro only when you are

View File

@ -2604,11 +2604,9 @@ add_mem_for_addr (addr_elt, mem_elt, x)
return;
new = gen_rtx_MEM (GET_MODE (x), addr_elt->u.val_rtx);
addr_elt->addr_list = new_elt_list (addr_elt->addr_list, mem_elt);
RTX_UNCHANGING_P (new) = RTX_UNCHANGING_P (x);
MEM_COPY_ATTRIBUTES (new, x);
addr_elt->addr_list = new_elt_list (addr_elt->addr_list, mem_elt);
mem_elt->locs = new_elt_loc_list (mem_elt->locs, new);
}

View File

@ -4228,7 +4228,6 @@ expand_anon_union_decl (decl, cleanup, decl_elts)
{
DECL_RTL (decl_elt) = gen_rtx_MEM (mode, copy_rtx (XEXP (x, 0)));
MEM_COPY_ATTRIBUTES (DECL_RTL (decl_elt), x);
RTX_UNCHANGING_P (DECL_RTL (decl_elt)) = RTX_UNCHANGING_P (x);
}
}
else if (GET_CODE (x) == REG)