@@ -1,5 +1,11 @@
2011-03-28 H.J. Lu <hongjiu.lu@intel.com>
+ PR target/47744
+ * config/i386/i386.c (ix86_simplify_base_disp): Add symbol plus
+ constant support.
+
+2011-03-28 H.J. Lu <hongjiu.lu@intel.com>
+
PR rtl-optimization/47958
* reload.c (find_reloads): Don't put symbol reference in memory
in ptr_mode.
@@ -11659,6 +11659,20 @@ ix86_live_on_entry (bitmap regs)
(reg:SI 2 cx [86]))
(const_int [CONST1 + CONST2])))
+ We also translate
+
+ (plus:SI (plus:SI (plus:SI (reg:SI 4 si [70])
+ (reg:SI 2 cx [86]))
+ (symbol_ref:SI ("A.193.2210")))
+ (const_int CONST))
+
+ into
+
+ (plus:SI (plus:SI (reg:SI 4 si [70])
+ (reg:SI 2 cx [86]))
+ (const (plus:SI (symbol_ref:SI ("A.193.2210"))
+ (const_int CONST))))
+
If PLUS is true, we also translate
(set (reg:SI 40 r11)
@@ -11706,12 +11720,17 @@ ix86_simplify_base_disp (rtx *base_p, rtx
*disp_p, bool plus)
&& GET_MODE (op0) == ptr_mode
&& REG_P (XEXP (op0, 0))
&& REG_P (XEXP (op0, 1))))
- && CONST_INT_P (op1))
+ && (CONST_INT_P (op1)
+ || GET_CODE (op1) == SYMBOL_REF
+ || GET_CODE (op1) == LABEL_REF))
{
base = op0;
addend = op1;
}
- else if (REG_P (op1) && CONST_INT_P (op0))
+ else if (REG_P (op1)
+ && (CONST_INT_P (op0)
+ || GET_CODE (op0) == SYMBOL_REF
+ || GET_CODE (op0) == LABEL_REF))
{
base = op1;