rs6000: Allow any CC mode in movcc

Sometimes combine wants to do a move in CCFPmode, but we don't currently
handle moves in any CC mode other than CCmode.  Fix that oversight.


	* config/rs6000/rs6000.md (CC_any): New mode iterator.
	(*movcc_internal1): Rename to...
	(*movcc_<mode> for CC_any): ... this.  Support moves of all CC modes.

From-SVN: r278017
This commit is contained in:
Segher Boessenkool 2019-11-10 12:53:31 +01:00 committed by Segher Boessenkool
parent 6cf67b62c8
commit 7964e40de3
2 changed files with 15 additions and 7 deletions

View file

@ -1,3 +1,9 @@
2019-11-10 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/rs6000.md (CC_any): New mode iterator.
(*movcc_internal1): Rename to...
(*movcc_<mode> for CC_any): ... this. Support moves of all CC modes.
2019-11-09 Jan Hubicka <hubicka@ucw.cz>
* cgraph.h (struct cgraph_node): Add ipcp_clone flag.

View file

@ -7220,13 +7220,15 @@
""
"")
(define_insn "*movcc_internal1"
[(set (match_operand:CC 0 "nonimmediate_operand"
"=y,x,?y,y,r,r,r,r, r,*c*l,r,m")
(match_operand:CC 1 "general_operand"
" y,r, r,O,x,y,r,I,*h, r,m,r"))]
"register_operand (operands[0], CCmode)
|| register_operand (operands[1], CCmode)"
(define_mode_iterator CC_any [CC CCUNS CCEQ CCFP])
(define_insn "*movcc_<mode>"
[(set (match_operand:CC_any 0 "nonimmediate_operand"
"=y,x,?y,y,r,r,r,r, r,*c*l,r,m")
(match_operand:CC_any 1 "general_operand"
" y,r, r,O,x,y,r,I,*h, r,m,r"))]
"register_operand (operands[0], <MODE>mode)
|| register_operand (operands[1], <MODE>mode)"
"@
mcrf %0,%1
mtcrf 128,%1