Commit f60a97cf by Alan Modra Committed by Alan Modra

re PR target/47935 (PowerPC64 -mcmodel=medium invalid lwa offset)

	PR target/47935
	* config/rs6000/predicates.md (lwa_operand): Check cmodel medium
	toc relative addresses for valid offsets.

From-SVN: r170606
parent 60b5f5ad
2011-03-02 Alan Modra <amodra@gmail.com>
PR target/47935
* config/rs6000/predicates.md (lwa_operand): Check cmodel medium
toc relative addresses for valid offsets.
2011-03-01 Richard Guenther <rguenther@suse.de> 2011-03-01 Richard Guenther <rguenther@suse.de>
PR tree-optimization/47890 PR tree-optimization/47890
......
...@@ -734,20 +734,32 @@ ...@@ -734,20 +734,32 @@
(define_predicate "lwa_operand" (define_predicate "lwa_operand"
(match_code "reg,subreg,mem") (match_code "reg,subreg,mem")
{ {
rtx inner = op; rtx inner, addr, offset;
inner = op;
if (reload_completed && GET_CODE (inner) == SUBREG) if (reload_completed && GET_CODE (inner) == SUBREG)
inner = SUBREG_REG (inner); inner = SUBREG_REG (inner);
return gpc_reg_operand (inner, mode) if (gpc_reg_operand (inner, mode))
|| (memory_operand (inner, mode) return true;
&& GET_CODE (XEXP (inner, 0)) != PRE_INC if (!memory_operand (inner, mode))
&& GET_CODE (XEXP (inner, 0)) != PRE_DEC return false;
&& (GET_CODE (XEXP (inner, 0)) != PRE_MODIFY addr = XEXP (inner, 0);
|| legitimate_indexed_address_p (XEXP (XEXP (inner, 0), 1), 0)) if (GET_CODE (addr) == PRE_INC
&& (GET_CODE (XEXP (inner, 0)) != PLUS || GET_CODE (addr) == PRE_DEC
|| GET_CODE (XEXP (XEXP (inner, 0), 1)) != CONST_INT || (GET_CODE (addr) == PRE_MODIFY
|| INTVAL (XEXP (XEXP (inner, 0), 1)) % 4 == 0)); && !legitimate_indexed_address_p (XEXP (addr, 1), 0)))
return false;
if (GET_CODE (addr) == LO_SUM
&& GET_CODE (XEXP (addr, 0)) == REG
&& GET_CODE (XEXP (addr, 1)) == CONST)
addr = XEXP (XEXP (addr, 1), 0);
if (GET_CODE (addr) != PLUS)
return true;
offset = XEXP (addr, 1);
if (GET_CODE (offset) != CONST_INT)
return true;
return INTVAL (offset) % 4 == 0;
}) })
;; Return 1 if the operand, used inside a MEM, is a SYMBOL_REF. ;; Return 1 if the operand, used inside a MEM, is a SYMBOL_REF.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment