setnbc[r] is like setbc[r], but it writes -1 instead of 1 to the GPR. 2020-05-06 Segher Boessenkool <seg...@kernel.crashing.org>
* config/rs6000/rs6000.md (*setnbc_<un>signed_<GPR:mode>): New define_insn. (*setnbcr_<un>signed_<GPR:mode>): New define_insn. (*neg_eq_<mode>): Avoid for TARGET_FUTURE; add missing && 1. (*neg_ne_<mode>): Likewise. --- gcc/config/rs6000/rs6000.md | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index e8dc576779a..c02c2e1de72 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -5157,6 +5157,25 @@ (define_insn "*setbcr_<un>signed_<GPR:mode>" "setbcr %0,%j1" [(set_attr "type" "isel")]) +; Set Negative Boolean Condition (Reverse) +(define_insn "*setnbc_<un>signed_<GPR:mode>" + [(set (match_operand:GPR 0 "gpc_reg_operand" "=r") + (neg:GPR (match_operator:GPR 1 "scc_comparison_operator" + [(match_operand:CCEITHER 2 "cc_reg_operand" "y") + (const_int 0)])))] + "TARGET_FUTURE" + "setnbc %0,%j1" + [(set_attr "type" "isel")]) + +(define_insn "*setnbcr_<un>signed_<GPR:mode>" + [(set (match_operand:GPR 0 "gpc_reg_operand" "=r") + (neg:GPR (match_operator:GPR 1 "scc_rev_comparison_operator" + [(match_operand:CCEITHER 2 "cc_reg_operand" "y") + (const_int 0)])))] + "TARGET_FUTURE" + "setnbcr %0,%j1" + [(set_attr "type" "isel")]) + ;; Floating point conditional move (define_expand "mov<mode>cc" [(set (match_operand:SFDF 0 "gpc_reg_operand") @@ -12062,9 +12081,9 @@ (define_insn_and_split "*neg_eq_<mode>" (clobber (match_scratch:P 3 "=r")) (clobber (match_scratch:P 4 "=r")) (clobber (reg:P CA_REGNO))] - "" + "!TARGET_FUTURE" "#" - "" + "&& 1" [(parallel [(set (match_dup 4) (plus:P (match_dup 3) (const_int -1))) @@ -12094,9 +12113,9 @@ (define_insn_and_split "*neg_ne_<mode>" (clobber (match_scratch:P 3 "=r")) (clobber (match_scratch:P 4 "=r")) (clobber (reg:P CA_REGNO))] - "" + "!TARGET_FUTURE" "#" - "" + "&& 1" [(parallel [(set (match_dup 4) (neg:P (match_dup 3))) (set (reg:P CA_REGNO) -- 2.17.1