static bool
replace_read (store_info *store_info, insn_info_t store_insn,
- read_info_t read_info, insn_info_t read_insn, rtx *loc,
- bitmap regs_live)
+ read_info_t read_info, insn_info_t read_insn, rtx *loc)
{
machine_mode store_mode = GET_MODE (store_info->mem);
machine_mode read_mode = GET_MODE (read_info->mem);
note_stores (this_insn, look_for_hardregs, regs_set);
}
- bitmap_and_into (regs_set, regs_live);
+ if (store_insn->fixed_regs_live)
+ bitmap_and_into (regs_set, store_insn->fixed_regs_live);
if (!bitmap_empty_p (regs_set))
{
if (dump_file && (dump_flags & TDF_DETAILS))
offset - store_info->offset,
width)
&& replace_read (store_info, i_ptr, read_info,
- insn_info, loc, bb_info->regs_live))
+ insn_info, loc))
return;
/* The bases are the same, just see if the offsets
store_info->width)
&& all_positions_needed_p (store_info,
offset - store_info->offset, width)
- && replace_read (store_info, i_ptr, read_info, insn_info, loc,
- bb_info->regs_live))
+ && replace_read (store_info, i_ptr, read_info, insn_info, loc))
return;
remove = canon_true_dependence (store_info->mem,
--- /dev/null
+/* PR rtl-optimization/99863 */
+/* { dg-do run } */
+/* { dg-options "-O -fno-tree-forwprop -mno-sse2 -Wno-psabi" } */
+
+typedef unsigned char __attribute__((__vector_size__ (8))) A;
+typedef unsigned char __attribute__((__vector_size__ (32))) B;
+typedef unsigned char __attribute__((__vector_size__ (64))) C;
+typedef unsigned int __attribute__((__vector_size__ (32))) D;
+typedef unsigned int __attribute__((__vector_size__ (64))) E;
+typedef unsigned long long F;
+
+D a;
+A b;
+
+A
+foo (E x, F y)
+{
+ D c = (y <= 0) * a;
+ x *= (0 < y);
+ C d = (C) x;
+ B e = ((union { C a; B b[2];}) d).b[0] + (B) c;
+ A f = ((union { B a; A b[4];}) e).b[0] + (A) b;
+ return f;
+}
+
+int
+main ()
+{
+ F x = (F) foo ((E) { 3 }, 5);
+ if (x != 3)
+ __builtin_abort ();
+ return 0;
+}