Commit 187bd6cd by Segher Boessenkool Committed by Segher Boessenkool

rs6000: Improve *lt0 patterns

The rs6000 port currently has an *lt0_disi define_insn, setting the DI
result to whether the SI argument is negative or not.  It turns out the
generic optimisers cannot always figure out in the other cases either
that this is just a shift for us.  This patch adds patterns for all
four SI/DI combinations.


	* config/rs6000/rs6000.md (*lt0_disi): Delete.
	(*lt0_<mode>di, *lt0_<mode>si): New.

From-SVN: r254374
parent b15a4bc9
2017-11-03 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/rs6000.md (*lt0_disi): Delete.
(*lt0_<mode>di, *lt0_<mode>si): New.
2017-11-03 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/rs6000.md (move_from_CR_ov_bit): Change condition to
TARGET_PAIRED_FLOAT.
......@@ -3829,11 +3829,19 @@
; Special case for less-than-0. We can do it with just one machine
; instruction, but the generic optimizers do not realise it is cheap.
(define_insn "*lt0_disi"
[(set (match_operand:DI 0 "gpc_reg_operand" "=r")
(lt:DI (match_operand:SI 1 "gpc_reg_operand" "r")
(define_insn "*lt0_<mode>di"
[(set (match_operand:GPR 0 "gpc_reg_operand" "=r")
(lt:GPR (match_operand:DI 1 "gpc_reg_operand" "r")
(const_int 0)))]
"TARGET_POWERPC64"
"srdi %0,%1,63"
[(set_attr "type" "shift")])
(define_insn "*lt0_<mode>si"
[(set (match_operand:GPR 0 "gpc_reg_operand" "=r")
(lt:GPR (match_operand:SI 1 "gpc_reg_operand" "r")
(const_int 0)))]
""
"rlwinm %0,%1,1,31,31"
[(set_attr "type" "shift")])
......
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