[backport proposed but not yet approved or applied patch for gcc-4.9/trunk ] List-Archive: From: "Bin Cheng" Subject: FW: [PATCH GCC/pr56124] Don't prefer memory if the source of load operation has side effect Date: Mon, 25 Mar 2013 15:15:09 +0800 Sorry for the wrong list. -----Original Message----- From: Bin Cheng [mailto:bin.cheng@arm.com]=20 Sent: Monday, March 25, 2013 3:00 PM To: gcc@gcc.gnu.org Subject: [PATCH GCC/pr56124] Don't prefer memory if the source of load operation has side effect Hi, As reported in PR56124, IRA causes redundant reload by preferring to put pseudo which is target of loading in memory. Generally this is good but the case in which the src of loading has side effect. This patch fixes this issue by checking whether source of loading has side effect. I tested the patch on x86/thumb2. Is it OK? Thanks. 2013-03-25 Bin Cheng PR target/56124 * ira-costs.c (scan_one_insn): Check whether the source rtx of loading has side effect.= --- gcc-4.8.0/gcc/ira-costs.c.~1~ 2013-01-10 21:38:27.000000000 +0100 +++ gcc-4.8.0/gcc/ira-costs.c 2013-03-29 14:18:50.720511482 +0100 @@ -1293,10 +1293,13 @@ scan_one_insn (rtx insn) a memory requiring special instructions to load it, decreasing mem_cost might result in it being loaded using the specialized instruction into a register, then stored into stack and loaded - again from the stack. See PR52208. */ + again from the stack. See PR52208. + + Don't do this if SET_SRC (set) has side effect. See PR56124. */ if (set != 0 && REG_P (SET_DEST (set)) && MEM_P (SET_SRC (set)) && (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != NULL_RTX - && ((MEM_P (XEXP (note, 0))) + && ((MEM_P (XEXP (note, 0)) + && !side_effects_p (SET_SRC (set))) || (CONSTANT_P (XEXP (note, 0)) && targetm.legitimate_constant_p (GET_MODE (SET_DEST (set)), XEXP (note, 0))