My extend* pattern patches exposed a problem elsewhere. I don't build java so I didn't see it. This fixes it. Also handles the zero-extend case, that had the same problem. Pre-approved by David, committed.
Segher 2014-09-04 Segher Boessenkool <seg...@kernel.crashing.org> PR target/63165 * config/rs6000/rs6000.md (floatsi<mode>2_lfiwax_mem): Use indexed_or_indirect_operand instead of memory_operand. (floatsi<mode>2_lfiwzx_mem): Ditto. --- gcc/config/rs6000/rs6000.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 9c0002d..0934467 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -5514,7 +5514,7 @@ (define_insn_and_split "floatsi<mode>2_lfiwax_mem" [(set (match_operand:SFDF 0 "gpc_reg_operand" "=d,<rreg2>") (float:SFDF (sign_extend:DI - (match_operand:SI 1 "memory_operand" "Z,Z")))) + (match_operand:SI 1 "indexed_or_indirect_operand" "Z,Z")))) (clobber (match_scratch:DI 2 "=0,d"))] "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT && TARGET_LFIWAX && <SI_CONVERT_FP>" @@ -5589,7 +5589,7 @@ (define_insn_and_split "floatunssi<mode>2_lfiwzx_mem" [(set (match_operand:SFDF 0 "gpc_reg_operand" "=d,<rreg2>") (unsigned_float:SFDF (zero_extend:DI - (match_operand:SI 1 "memory_operand" "Z,Z")))) + (match_operand:SI 1 "indexed_or_indirect_operand" "Z,Z")))) (clobber (match_scratch:DI 2 "=0,d"))] "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT && TARGET_LFIWZX && <SI_CONVERT_FP>" -- 1.8.1.4