Commit 7f514158 by Alan Modra Committed by Alan Modra

re PR target/19137 (ICE with load of TImode constant)

	PR target/19137
	* config/rs6000/rs6000.md (movti_power, movti_string): Relax
	operand[1] predicate to input_operand, and add r<-n alternative.
	Move TImode const_double_operand splitter to where it belongs.

From-SVN: r92603
parent 1a0f488c
2004-12-25 Alan Modra <amodra@bigpond.net.au> 2004-12-25 Alan Modra <amodra@bigpond.net.au>
PR target/19137
* config/rs6000/rs6000.md (movti_power, movti_string): Relax
operand[1] predicate to input_operand, and add r<-n alternative.
Move TImode const_double_operand splitter to where it belongs.
2004-12-25 Alan Modra <amodra@bigpond.net.au>
PR target/19147 PR target/19147
* config/rs6000/rs6000.md (andsi3_internal7, andsi3_internal8): Delete. * config/rs6000/rs6000.md (andsi3_internal7, andsi3_internal8): Delete.
......
...@@ -8486,32 +8486,6 @@ ...@@ -8486,32 +8486,6 @@
[(pc)] [(pc)]
{ rs6000_split_multireg_move (operands[0], operands[1]); DONE; }) { rs6000_split_multireg_move (operands[0], operands[1]); DONE; })
(define_split
[(set (match_operand:TI 0 "gpc_reg_operand" "")
(match_operand:TI 1 "const_double_operand" ""))]
"TARGET_POWERPC64"
[(set (match_dup 2) (match_dup 4))
(set (match_dup 3) (match_dup 5))]
"
{
operands[2] = operand_subword_force (operands[0], WORDS_BIG_ENDIAN == 0,
TImode);
operands[3] = operand_subword_force (operands[0], WORDS_BIG_ENDIAN != 0,
TImode);
if (GET_CODE (operands[1]) == CONST_DOUBLE)
{
operands[4] = GEN_INT (CONST_DOUBLE_HIGH (operands[1]));
operands[5] = GEN_INT (CONST_DOUBLE_LOW (operands[1]));
}
else if (GET_CODE (operands[1]) == CONST_INT)
{
operands[4] = GEN_INT (- (INTVAL (operands[1]) < 0));
operands[5] = operands[1];
}
else
FAIL;
}")
(define_insn "*movdi_internal64" (define_insn "*movdi_internal64"
[(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,m,r,r,r,r,*f,*f,m,r,*h,*h") [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,m,r,r,r,r,*f,*f,m,r,*h,*h")
(match_operand:DI 1 "input_operand" "r,m,r,I,L,nF,R,f,m,f,*h,r,0"))] (match_operand:DI 1 "input_operand" "r,m,r,I,L,nF,R,f,m,f,*h,r,0"))]
...@@ -8638,9 +8612,9 @@ ...@@ -8638,9 +8612,9 @@
;; giving the SCRATCH mq. ;; giving the SCRATCH mq.
(define_insn "*movti_power" (define_insn "*movti_power"
[(set (match_operand:TI 0 "reg_or_mem_operand" "=Q,m,????r,????r,????r") [(set (match_operand:TI 0 "reg_or_mem_operand" "=Q,m,????r,????r,????r,r")
(match_operand:TI 1 "reg_or_mem_operand" "r,r,r,Q,m")) (match_operand:TI 1 "input_operand" "r,r,r,Q,m,n"))
(clobber (match_scratch:SI 2 "=q,q#X,X,X,X"))] (clobber (match_scratch:SI 2 "=q,q#X,X,X,X,X"))]
"TARGET_POWER && ! TARGET_POWERPC64 "TARGET_POWER && ! TARGET_POWERPC64
&& (gpc_reg_operand (operands[0], TImode) || gpc_reg_operand (operands[1], TImode))" && (gpc_reg_operand (operands[0], TImode) || gpc_reg_operand (operands[1], TImode))"
"* "*
...@@ -8664,14 +8638,15 @@ ...@@ -8664,14 +8638,15 @@
return \"{lsi|lswi} %0,%P1,16\"; return \"{lsi|lswi} %0,%P1,16\";
/* ... fall through ... */ /* ... fall through ... */
case 4: case 4:
case 5:
return \"#\"; return \"#\";
} }
}" }"
[(set_attr "type" "store,store,*,load,load")]) [(set_attr "type" "store,store,*,load,load,*")])
(define_insn "*movti_string" (define_insn "*movti_string"
[(set (match_operand:TI 0 "reg_or_mem_operand" "=Q,o<>,????r,????r,????r") [(set (match_operand:TI 0 "reg_or_mem_operand" "=Q,o<>,????r,????r,????r,r")
(match_operand:TI 1 "reg_or_mem_operand" "r,r,r,Q,m"))] (match_operand:TI 1 "input_operand" "r,r,r,Q,m,n"))]
"! TARGET_POWER && ! TARGET_POWERPC64 "! TARGET_POWER && ! TARGET_POWERPC64
&& (gpc_reg_operand (operands[0], TImode) || gpc_reg_operand (operands[1], TImode))" && (gpc_reg_operand (operands[0], TImode) || gpc_reg_operand (operands[1], TImode))"
"* "*
...@@ -8694,10 +8669,11 @@ ...@@ -8694,10 +8669,11 @@
return \"{lsi|lswi} %0,%P1,16\"; return \"{lsi|lswi} %0,%P1,16\";
/* ... fall through ... */ /* ... fall through ... */
case 4: case 4:
case 5:
return \"#\"; return \"#\";
} }
}" }"
[(set_attr "type" "store,store,*,load,load")]) [(set_attr "type" "store,store,*,load,load,*")])
(define_insn "*movti_ppc64" (define_insn "*movti_ppc64"
[(set (match_operand:TI 0 "nonimmediate_operand" "=r,o<>,r") [(set (match_operand:TI 0 "nonimmediate_operand" "=r,o<>,r")
...@@ -8708,6 +8684,32 @@ ...@@ -8708,6 +8684,32 @@
[(set_attr "type" "*,load,store")]) [(set_attr "type" "*,load,store")])
(define_split (define_split
[(set (match_operand:TI 0 "gpc_reg_operand" "")
(match_operand:TI 1 "const_double_operand" ""))]
"TARGET_POWERPC64"
[(set (match_dup 2) (match_dup 4))
(set (match_dup 3) (match_dup 5))]
"
{
operands[2] = operand_subword_force (operands[0], WORDS_BIG_ENDIAN == 0,
TImode);
operands[3] = operand_subword_force (operands[0], WORDS_BIG_ENDIAN != 0,
TImode);
if (GET_CODE (operands[1]) == CONST_DOUBLE)
{
operands[4] = GEN_INT (CONST_DOUBLE_HIGH (operands[1]));
operands[5] = GEN_INT (CONST_DOUBLE_LOW (operands[1]));
}
else if (GET_CODE (operands[1]) == CONST_INT)
{
operands[4] = GEN_INT (- (INTVAL (operands[1]) < 0));
operands[5] = operands[1];
}
else
FAIL;
}")
(define_split
[(set (match_operand:TI 0 "nonimmediate_operand" "") [(set (match_operand:TI 0 "nonimmediate_operand" "")
(match_operand:TI 1 "input_operand" ""))] (match_operand:TI 1 "input_operand" ""))]
"reload_completed "reload_completed
......
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