diff options
Diffstat (limited to 'gcc/config/rs6000/rs6000.md')
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index a27e1c6f6cc..355a507780a 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -14854,14 +14854,31 @@ ;; Define PPE fused compare and branch -;; There is no cmplwib<cond> fused instruction!!! -;; If op 3 is a reg then no problem - if op3 is short then use -;; something else - checked in predicate rs6000_fused_cbranch_operator +;; There is no cmplwib... fused instruction!!! + (define_insn "*cmpwb" [(set (pc) (if_then_else (match_operator 1 "rs6000_fused_cbranch_operator" [(match_operand:GPR 2 "gpc_reg_operand" "r") - (match_operand:GPR 3 "reg_or_short_operand" "rI")]) + (match_operand:GPR 3 "gpc_reg_operand" "r")]) + (label_ref (match_operand 0 "" "")) + (pc)))] + "(rs6000_cpu == PROCESSOR_PPE42) && optimize_size" + "* +{ + return output_fused_cbranch (operands, \"%l0\", insn); +}" + [(set_attr "type" "fused_branch")]) + + +;; Keep this separate from above to prevent reload from forming +;; illegal immediaate values + +(define_insn "*cmpwib" + [(set (pc) + (if_then_else (match_operator 1 "rs6000_fused_cbranch_operator" + [(match_operand:GPR 2 "gpc_reg_operand" "r") + (match_operand:SI 3 "u5bit_cint_operand" "I")]) (label_ref (match_operand 0 "" "")) (pc)))] "(rs6000_cpu == PROCESSOR_PPE42) && optimize_size" |