From: Julian Brown Date: Sat, 18 May 2013 03:48:18 +0000 (+0000) Subject: gcse.c (compute_ld_motion_mems): If a non-simple MEM is found in a REG_EQUAL note... X-Git-Tag: releases/gcc-4.9.0~5823 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2df013f3cd4c36b7e309758d9210e6cab0d5d83f;p=thirdparty%2Fgcc.git gcse.c (compute_ld_motion_mems): If a non-simple MEM is found in a REG_EQUAL note, invalidate it. * gcse.c (compute_ld_motion_mems): If a non-simple MEM is found in a REG_EQUAL note, invalidate it. From-SVN: r199049 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4536e6279a13..d6eab5f2ef17 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-05-17 Julian Brown + + * gcse.c (compute_ld_motion_mems): If a non-simple MEM is + found in a REG_EQUAL note, invalidate it. + 2013-05-17 Easwaran Raman * tree-ssa-reassoc.c (find_insert_point): New function. diff --git a/gcc/gcse.c b/gcc/gcse.c index 07043f76a4d1..e485985ba722 100644 --- a/gcc/gcse.c +++ b/gcc/gcse.c @@ -3894,6 +3894,8 @@ compute_ld_motion_mems (void) { rtx src = SET_SRC (PATTERN (insn)); rtx dest = SET_DEST (PATTERN (insn)); + rtx note = find_reg_equal_equiv_note (insn); + rtx src_eq; /* Check for a simple LOAD... */ if (MEM_P (src) && simple_mem (src)) @@ -3910,6 +3912,15 @@ compute_ld_motion_mems (void) invalidate_any_buried_refs (src); } + if (note != 0 && REG_NOTE_KIND (note) == REG_EQUAL) + src_eq = XEXP (note, 0); + else + src_eq = NULL_RTX; + + if (src_eq != NULL_RTX + && !(MEM_P (src_eq) && simple_mem (src_eq))) + invalidate_any_buried_refs (src_eq); + /* Check for stores. Don't worry about aliased ones, they will block any movement we might do later. We only care about this exact pattern since those are the only