[PATCH] rs6000: Allow any CC mode in movcc
Segher Boessenkool
segher@kernel.crashing.org
Sun Nov 10 13:37:00 GMT 2019
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.
Tested on powerpc64-linux {-m32,-m64}. Committing to trunk.
Segher
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.
---
gcc/config/rs6000/rs6000.md | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 1944abf..0cdfdef 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -7220,13 +7220,15 @@ (define_expand "movcc"
""
"")
-(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
--
1.8.3.1
More information about the Gcc-patches
mailing list