diff options
author | bonzini <bonzini@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-05-12 09:43:48 +0000 |
---|---|---|
committer | bonzini <bonzini@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-05-12 09:43:48 +0000 |
commit | 74f4459c661b0597a1cb1080a1e6c34db40f921d (patch) | |
tree | 06c940a96a184a178bfadd53e04213225655a68d /gcc/config/h8300/h8300.md | |
parent | 58b52637eb213c90766269829beb56b15f621af8 (diff) | |
download | gcc-74f4459c661b0597a1cb1080a1e6c34db40f921d.tar.gz |
Merge cond-optab branch.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@147425 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/h8300/h8300.md')
-rw-r--r-- | gcc/config/h8300/h8300.md | 495 |
1 files changed, 252 insertions, 243 deletions
diff --git a/gcc/config/h8300/h8300.md b/gcc/config/h8300/h8300.md index 61f876c8399..c05e8c6966f 100644 --- a/gcc/config/h8300/h8300.md +++ b/gcc/config/h8300/h8300.md @@ -961,28 +961,33 @@ ;; ---------------------------------------------------------------------- (define_insn "" - [(set (cc0) (zero_extract:HI (match_operand:QI 0 "bit_memory_operand" "r,U") - (const_int 1) - (match_operand 1 "const_int_operand" "n,n")))] + [(set (cc0) (compare + (zero_extract:QI (match_operand:QI 0 "bit_memory_operand" "r,U") + (const_int 1) + (match_operand 1 "const_int_operand" "n,n")) + (const_int 0)))] "TARGET_H8300" "btst %Z1,%Y0" [(set_attr "length" "2,4") (set_attr "cc" "set_zn,set_zn")]) (define_insn "" - [(set (cc0) (zero_extract:HI (match_operand:HI 0 "register_operand" "r") - (const_int 1) - (match_operand 1 "const_int_operand" "n")))] + [(set (cc0) (compare + (zero_extract:HI (match_operand:HI 0 "register_operand" "r") + (const_int 1) + (match_operand 1 "const_int_operand" "n")) + (const_int 0)))] "TARGET_H8300" "btst %Z1,%Y0" [(set_attr "length" "2") (set_attr "cc" "set_zn")]) (define_insn_and_split "*tst_extzv_1_n" - [(set (cc0) - (zero_extract:SI (match_operand:QI 0 "general_operand_src" "r,U,mn>") - (const_int 1) - (match_operand 1 "const_int_operand" "n,n,n"))) + [(set (cc0) (compare + (zero_extract:SI (match_operand:QI 0 "general_operand_src" "r,U,mn>") + (const_int 1) + (match_operand 1 "const_int_operand" "n,n,n")) + (const_int 0))) (clobber (match_scratch:QI 2 "=X,X,&r"))] "(TARGET_H8300H || TARGET_H8300S)" "@ @@ -993,18 +998,20 @@ && !OK_FOR_U (operands[0])" [(set (match_dup 2) (match_dup 0)) - (parallel [(set (cc0) (zero_extract:SI (match_dup 2) - (const_int 1) - (match_dup 1))) + (parallel [(set (cc0) (compare (zero_extract:SI (match_dup 2) + (const_int 1) + (match_dup 1)) + (const_int 0))) (clobber (scratch:QI))])] "" [(set_attr "length" "2,8,10") (set_attr "cc" "set_zn,set_zn,set_zn")]) (define_insn "" - [(set (cc0) (zero_extract:SI (match_operand:SI 0 "register_operand" "r") - (const_int 1) - (match_operand 1 "const_int_operand" "n")))] + [(set (cc0) (compare (zero_extract:SI (match_operand:SI 0 "register_operand" "r") + (const_int 1) + (match_operand 1 "const_int_operand" "n")) + (const_int 0)))] "(TARGET_H8300H || TARGET_H8300S) && INTVAL (operands[1]) <= 15" "btst %Z1,%Y0" @@ -1012,10 +1019,10 @@ (set_attr "cc" "set_zn")]) (define_insn_and_split "*tstsi_upper_bit" - [(set (cc0) - (zero_extract:SI (match_operand:SI 0 "register_operand" "r") - (const_int 1) - (match_operand 1 "const_int_operand" "n"))) + [(set (cc0) (compare (zero_extract:SI (match_operand:SI 0 "register_operand" "r") + (const_int 1) + (match_operand 1 "const_int_operand" "n")) + (const_int 0))) (clobber (match_scratch:SI 2 "=&r"))] "(TARGET_H8300H || TARGET_H8300S) && INTVAL (operands[1]) >= 16" @@ -1026,18 +1033,18 @@ (const_int -65536)) (lshiftrt:SI (match_dup 0) (const_int 16)))) - (set (cc0) - (zero_extract:SI (match_dup 2) - (const_int 1) - (match_dup 3)))] + (set (cc0) (compare (zero_extract:SI (match_dup 2) + (const_int 1) + (match_dup 3)) + (const_int 0)))] "operands[3] = GEN_INT (INTVAL (operands[1]) - 16);") (define_insn "*tstsi_variable_bit" - [(set (cc0) - (zero_extract:SI (match_operand:SI 0 "register_operand" "r") - (const_int 1) - (and:SI (match_operand:SI 1 "register_operand" "r") - (const_int 7))))] + [(set (cc0) (compare (zero_extract:SI (match_operand:SI 0 "register_operand" "r") + (const_int 1) + (and:SI (match_operand:SI 1 "register_operand" "r") + (const_int 7))) + (const_int 0)))] "TARGET_H8300H || TARGET_H8300S" "btst %w1,%w0" [(set_attr "length" "2") @@ -1045,10 +1052,12 @@ (define_insn_and_split "*tstsi_variable_bit_qi" [(set (cc0) - (zero_extract:SI (zero_extend:SI (match_operand:QI 0 "general_operand_src" "r,U,mn>")) - (const_int 1) - (and:SI (match_operand:SI 1 "register_operand" "r,r,r") - (const_int 7)))) + (compare + (zero_extract:SI (zero_extend:SI (match_operand:QI 0 "general_operand_src" "r,U,mn>")) + (const_int 1) + (and:SI (match_operand:SI 1 "register_operand" "r,r,r") + (const_int 7))) + (const_int 0))) (clobber (match_scratch:QI 2 "=X,X,&r"))] "(TARGET_H8300H || TARGET_H8300S)" "@ @@ -1059,55 +1068,59 @@ && !OK_FOR_U (operands[0])" [(set (match_dup 2) (match_dup 0)) - (parallel [(set (cc0) (zero_extract:SI (zero_extend:SI (match_dup 2)) - (const_int 1) - (and:SI (match_dup 1) - (const_int 7)))) + (parallel [(set (cc0) (compare (zero_extract:SI (zero_extend:SI (match_dup 2)) + (const_int 1) + (and:SI (match_dup 1) + (const_int 7))) + (const_int 0))) (clobber (scratch:QI))])] "" [(set_attr "length" "2,8,10") (set_attr "cc" "set_zn,set_zn,set_zn")]) -(define_insn "tstqi" - [(set (cc0) (match_operand:QI 0 "register_operand" "r"))] +(define_insn "*tstqi" + [(set (cc0) (compare (match_operand:QI 0 "register_operand" "r") + (const_int 0)))] "" "mov.b %X0,%X0" [(set_attr "length" "2") (set_attr "cc" "set_znv")]) -(define_insn "tsthi" - [(set (cc0) (match_operand:HI 0 "register_operand" "r"))] +(define_insn "*tsthi" + [(set (cc0) (compare (match_operand:HI 0 "register_operand" "r") + (const_int 0)))] "" "mov.w %T0,%T0" [(set_attr "length" "2") (set_attr "cc" "set_znv")]) (define_insn "*tsthi_upper" - [(set (cc0) - (and:HI (match_operand:HI 0 "register_operand" "r") - (const_int -256)))] + [(set (cc0) (compare (and:HI (match_operand:HI 0 "register_operand" "r") + (const_int -256)) + (const_int 0)))] "" "mov.b %t0,%t0" [(set_attr "length" "2") (set_attr "cc" "set_znv")]) -(define_insn "tstsi" - [(set (cc0) (match_operand:SI 0 "register_operand" "r"))] +(define_insn "*tstsi" + [(set (cc0) (compare (match_operand:SI 0 "register_operand" "r") + (const_int 0)))] "TARGET_H8300H || TARGET_H8300S" "mov.l %S0,%S0" [(set_attr "length" "2") (set_attr "cc" "set_znv")]) (define_insn "*tstsi_upper" - [(set (cc0) - (and:SI (match_operand:SI 0 "register_operand" "r") - (const_int -65536)))] + [(set (cc0) (compare (and:SI (match_operand:SI 0 "register_operand" "r") + (const_int -65536)) + (const_int 0)))] "" "mov.w %e0,%e0" [(set_attr "length" "2") (set_attr "cc" "set_znv")]) -(define_insn "cmpqi" +(define_insn "*cmpqi" [(set (cc0) (compare (match_operand:QI 0 "h8300_dst_operand" "rQ") (match_operand:QI 1 "h8300_src_operand" "rQi")))] @@ -1116,19 +1129,6 @@ [(set_attr "length_table" "addb") (set_attr "cc" "compare")]) -(define_expand "cmphi" - [(set (cc0) - (compare (match_operand:HI 0 "h8300_dst_operand" "") - (match_operand:HI 1 "h8300_src_operand" "")))] - "" - " -{ - /* Force operand1 into a register if we're compiling - for the H8/300. */ - if (GET_CODE (operands[1]) != REG && TARGET_H8300) - operands[1] = force_reg (HImode, operands[1]); -}") - (define_insn "*cmphi_h8300_znvc" [(set (cc0) (compare (match_operand:HI 0 "register_operand" "r") @@ -2155,55 +2155,37 @@ ;; Conditional jump instructions -(define_expand "ble" - [(match_operand 0 "" "")] - "" - "h8300_expand_branch (LE, operands[0]); DONE;") - -(define_expand "bleu" - [(match_operand 0 "" "")] +(define_expand "cbranchqi4" + [(use (match_operator 0 "ordered_comparison_operator" + [(match_operand:QI 1 "h8300_dst_operand" "") + (match_operand:QI 2 "h8300_src_operand" "")])) + (use (match_operand 3 ""))] "" - "h8300_expand_branch (LEU, operands[0]); DONE;") + "h8300_expand_branch (operands); DONE;") -(define_expand "bge" - [(match_operand 0 "" "")] +(define_expand "cbranchhi4" + [(use (match_operator 0 "ordered_comparison_operator" + [(match_operand:HI 1 "h8300_dst_operand" "") + (match_operand:HI 2 "h8300_src_operand" "")])) + (use (match_operand 3 ""))] "" - "h8300_expand_branch (GE, operands[0]); DONE;") - -(define_expand "bgeu" - [(match_operand 0 "" "")] - "" - "h8300_expand_branch (GEU, operands[0]); DONE;") - -(define_expand "blt" - [(match_operand 0 "" "")] - "" - "h8300_expand_branch (LT, operands[0]); DONE;") - -(define_expand "bltu" - [(match_operand 0 "" "")] - "" - "h8300_expand_branch (LTU, operands[0]); DONE;") - -(define_expand "bgt" - [(match_operand 0 "" "")] - "" - "h8300_expand_branch (GT, operands[0]); DONE;") - -(define_expand "bgtu" - [(match_operand 0 "" "")] - "" - "h8300_expand_branch (GTU, operands[0]); DONE;") - -(define_expand "beq" - [(match_operand 0 "" "")] - "" - "h8300_expand_branch (EQ, operands[0]); DONE;") + " +{ + /* Force operand1 into a register if we're compiling + for the H8/300. */ + if ((GET_CODE (operands[2]) != REG && operands[2] != const0_rtx) + && TARGET_H8300) + operands[2] = force_reg (HImode, operands[2]); + h8300_expand_branch (operands); DONE; +}") -(define_expand "bne" - [(match_operand 0 "" "")] - "" - "h8300_expand_branch (NE, operands[0]); DONE;") +(define_expand "cbranchsi4" + [(use (match_operator 0 "ordered_comparison_operator" + [(match_operand:SI 1 "h8300_dst_operand" "") + (match_operand:SI 2 "h8300_src_operand" "")])) + (use (match_operand 3 ""))] + "TARGET_H8300H || TARGET_H8300S" + "h8300_expand_branch (operands); DONE;") (define_insn "branch_true" [(set (pc) @@ -3019,8 +3001,8 @@ (clobber (match_operand:QI 3 "register_operand" ""))] "epilogue_completed && find_regno_note (insn, REG_DEAD, REGNO (operands[1]))" - [(set (cc0) - (match_dup 1)) + [(set (cc0) (compare (match_dup 1) + (const_int 0))) (set (pc) (if_then_else (le (cc0) (const_int 0)) (label_ref (match_dup 5)) @@ -3032,8 +3014,8 @@ (clobber (scratch:QI))]) (set (match_dup 1) (plus:QI (match_dup 1) (const_int -1))) - (set (cc0) - (match_dup 1)) + (set (cc0) (compare (match_dup 1) + (const_int 0))) (set (pc) (if_then_else (ne (cc0) (const_int 0)) (label_ref (match_dup 4)) @@ -3052,8 +3034,8 @@ && !find_regno_note (insn, REG_DEAD, REGNO (operands[1]))" [(set (match_dup 3) (match_dup 1)) - (set (cc0) - (match_dup 3)) + (set (cc0) (compare (match_dup 3) + (const_int 0))) (set (pc) (if_then_else (le (cc0) (const_int 0)) (label_ref (match_dup 5)) @@ -3065,8 +3047,8 @@ (clobber (scratch:QI))]) (set (match_dup 3) (plus:QI (match_dup 3) (const_int -1))) - (set (cc0) - (match_dup 3)) + (set (cc0) (compare (match_dup 3) + (const_int 0))) (set (pc) (if_then_else (ne (cc0) (const_int 0)) (label_ref (match_dup 4)) @@ -3413,17 +3395,29 @@ [(set_attr "cc" "none_0hit") (set_attr "length_table" "bitfield")]) -(define_expand "seq" - [(set (match_operand:HI 0 "register_operand" "") - (eq:HI (cc0) (const_int 0)))] +(define_expand "cstoreqi4" + [(use (match_operator 1 "eqne_operator" + [(match_operand:QI 2 "h8300_dst_operand" "") + (match_operand:QI 3 "h8300_src_operand" "")])) + (clobber (match_operand:HI 0 "register_operand"))] "TARGET_H8300SX" - "") + "h8300_expand_store (operands); DONE;") -(define_expand "sne" - [(set (match_operand:HI 0 "register_operand" "") - (ne:HI (cc0) (const_int 0)))] +(define_expand "cstorehi4" + [(use (match_operator 1 "eqne_operator" + [(match_operand:HI 2 "h8300_dst_operand" "") + (match_operand:HI 3 "h8300_src_operand" "")])) + (clobber (match_operand:HI 0 "register_operand"))] "TARGET_H8300SX" - "") + "h8300_expand_store (operands); DONE;") + +(define_expand "cstoresi4" + [(use (match_operator 1 "eqne_operator" + [(match_operand:SI 2 "h8300_dst_operand" "") + (match_operand:SI 3 "h8300_src_operand" "")])) + (clobber (match_operand:HI 0 "register_operand"))] + "TARGET_H8300SX" + "h8300_expand_store (operands); DONE;") (define_insn "*bstzhireg" [(set (match_operand:HI 0 "register_operand" "=r") @@ -3451,13 +3445,7 @@ [(set (cc0) (match_dup 5)) (set (zero_extract:QI (match_dup 0) (const_int 1) (match_dup 1)) (match_op_dup:QI 2 [(cc0) (const_int 0)]))] - " -{ - if (operands[4] == const0_rtx && GET_CODE (operands[3]) == REG) - operands[5] = operands[3]; - else - operands[5] = gen_rtx_COMPARE (VOIDmode, operands[3], operands[4]); -}" + "operands[5] = gen_rtx_COMPARE (VOIDmode, operands[3], operands[4]);" [(set_attr "cc" "set_znv,compare")]) (define_insn "*bstz" @@ -3499,13 +3487,7 @@ (if_then_else:QI (match_op_dup 1 [(cc0) (const_int 0)]) (ior:QI (match_dup 4) (match_dup 5)) (match_dup 4)))] - " -{ - if (operands[3] == const0_rtx && GET_CODE (operands[2]) == REG) - operands[6] = operands[2]; - else - operands[6] = gen_rtx_COMPARE (VOIDmode, operands[2], operands[3]); -}" + "operands[6] = gen_rtx_COMPARE (VOIDmode, operands[2], operands[3]);" [(set_attr "cc" "set_znv,compare")]) (define_insn "*condbset" @@ -3541,13 +3523,7 @@ (if_then_else:QI (match_op_dup 1 [(cc0) (const_int 0)]) (and:QI (match_dup 4) (match_dup 5)) (match_dup 4)))] - " -{ - if (operands[3] == const0_rtx && GET_CODE (operands[2]) == REG) - operands[6] = operands[2]; - else - operands[6] = gen_rtx_COMPARE (VOIDmode, operands[2], operands[3]); -}" + "operands[6] = gen_rtx_COMPARE (VOIDmode, operands[2], operands[3]);" [(set_attr "cc" "set_znv,compare")]) (define_insn "*condbclr" @@ -3587,13 +3563,7 @@ (ashift:QI (const_int 1) (match_operand:QI 5 "register_operand" "r,r"))) (match_dup 4)))] - " -{ - if (operands[3] == const0_rtx && GET_CODE (operands[2]) == REG) - operands[6] = operands[2]; - else - operands[6] = gen_rtx_COMPARE (VOIDmode, operands[2], operands[3]); -}" + "operands[6] = gen_rtx_COMPARE (VOIDmode, operands[2], operands[3]);" [(set_attr "cc" "set_znv,compare")]) (define_insn "*condbsetreg" @@ -3634,13 +3604,7 @@ (ashift:QI (const_int 1) (match_operand:QI 5 "register_operand" "r,r"))) (match_dup 4)))] - " -{ - if (operands[3] == const0_rtx && GET_CODE (operands[2]) == REG) - operands[6] = operands[2]; - else - operands[6] = gen_rtx_COMPARE (VOIDmode, operands[2], operands[3]); -}" + "operands[6] = gen_rtx_COMPARE (VOIDmode, operands[2], operands[3]);" [(set_attr "cc" "set_znv,compare")]) (define_insn "*condbclrreg" @@ -3878,10 +3842,10 @@ "(TARGET_H8300H || TARGET_H8300S)" "#" "&& reload_completed" - [(set (cc0) - (zero_extract:SI (match_dup 1) - (const_int 1) - (const_int 0))) + [(set (cc0) (compare (zero_extract:SI (match_dup 1) + (const_int 1) + (const_int 0)) + (const_int 0))) (set (pc) (if_then_else (eq (cc0) (const_int 0)) @@ -3901,10 +3865,10 @@ "(TARGET_H8300H || TARGET_H8300S)" "#" "&& reload_completed" - [(set (cc0) - (zero_extract:SI (match_dup 1) - (const_int 1) - (const_int 0))) + [(set (cc0) (compare (zero_extract:SI (match_dup 1) + (const_int 1) + (const_int 0)) + (const_int 0))) (set (pc) (if_then_else (ne (cc0) (const_int 0)) @@ -4398,8 +4362,8 @@ "" "#" "" - [(set (cc0) - (match_dup 0)) + [(set (cc0) (compare (match_dup 0) + (const_int 0))) (set (pc) (if_then_else (ge (cc0) (const_int 0)) @@ -4418,8 +4382,8 @@ "" "#" "" - [(set (cc0) - (match_dup 0)) + [(set (cc0) (compare (match_dup 0) + (const_int 0))) (set (pc) (if_then_else (lt (cc0) (const_int 0)) @@ -4852,8 +4816,8 @@ [(set (match_operand:HI 0 "register_operand" "") (plus:HI (match_dup 0) (match_operand 1 "incdec_operand" ""))) - (set (cc0) - (match_dup 0)) + (set (cc0) (compare (match_dup 0) + (const_int 0))) (set (pc) (if_then_else (match_operator 3 "eqne_operator" [(cc0) (const_int 0)]) @@ -4864,8 +4828,8 @@ (unspec:HI [(match_dup 0) (match_dup 1)] UNSPEC_INCDEC)) - (set (cc0) - (match_dup 0)) + (set (cc0) (compare (match_dup 0) + (const_int 0))) (set (pc) (if_then_else (match_op_dup 3 [(cc0) (const_int 0)]) (label_ref (match_dup 2)) @@ -4878,8 +4842,8 @@ [(set (match_operand:SI 0 "register_operand" "") (plus:SI (match_dup 0) (match_operand 1 "incdec_operand" ""))) - (set (cc0) - (match_dup 0)) + (set (cc0) (compare (match_dup 0) + (const_int 0))) (set (pc) (if_then_else (match_operator 3 "eqne_operator" [(cc0) (const_int 0)]) @@ -4890,8 +4854,8 @@ (unspec:SI [(match_dup 0) (match_dup 1)] UNSPEC_INCDEC)) - (set (cc0) - (match_dup 0)) + (set (cc0) (compare (match_dup 0) + (const_int 0))) (set (pc) (if_then_else (match_op_dup 3 [(cc0) (const_int 0)]) (label_ref (match_dup 2)) @@ -4900,9 +4864,10 @@ (define_peephole2 [(parallel [(set (cc0) - (zero_extract:SI (match_operand:QI 0 "register_operand" "") - (const_int 1) - (const_int 7))) + (compare (zero_extract:SI (match_operand:QI 0 "register_operand" "") + (const_int 1) + (const_int 7)) + (const_int 0))) (clobber (scratch:QI))]) (set (pc) (if_then_else (match_operator 1 "eqne_operator" @@ -4910,8 +4875,8 @@ (label_ref (match_operand 2 "" "")) (pc)))] "(TARGET_H8300H || TARGET_H8300S)" - [(set (cc0) - (match_dup 0)) + [(set (cc0) (compare (match_dup 0) + (const_int 0))) (set (pc) (if_then_else (match_op_dup 3 [(cc0) (const_int 0)]) (label_ref (match_dup 2)) @@ -5032,6 +4997,45 @@ "operands[3] = gen_lowpart (HImode, operands[0]); operands[4] = gen_lowpart (HImode, operands[1]);") +;; Convert a memory comparison to a move if there is a scratch register. + +(define_peephole2 + [(match_scratch:QI 1 "r") + (set (cc0) + (compare (match_operand:QI 0 "memory_operand" "") + (const_int 0)))] + "" + [(set (match_dup 1) + (match_dup 0)) + (set (cc0) (compare (match_dup 1) + (const_int 0)))] + "") + +(define_peephole2 + [(match_scratch:HI 1 "r") + (set (cc0) + (compare (match_operand:HI 0 "memory_operand" "") + (const_int 0)))] + "(TARGET_H8300H || TARGET_H8300S)" + [(set (match_dup 1) + (match_dup 0)) + (set (cc0) (compare (match_dup 1) + (const_int 0)))] + "") + +(define_peephole2 + [(match_scratch:SI 1 "r") + (set (cc0) + (compare (match_operand:SI 0 "memory_operand" "") + (const_int 0)))] + "(TARGET_H8300H || TARGET_H8300S)" + [(set (match_dup 1) + (match_dup 0)) + (set (cc0) (compare (match_dup 1) + (const_int 0)))] + "") + + ;; (compare (reg:HI) (const_int)) takes 4 bytes, so we try to achieve ;; the equivalent with shorter sequences. Here is the summary. Cases ;; are grouped for each define_peephole2. @@ -5073,13 +5077,14 @@ (label_ref (match_operand 2 "" "")) (pc)))] "(TARGET_H8300H || TARGET_H8300S) + && INTVAL (operands[1]) != 0 && peep2_reg_dead_p (1, operands[0])" [(set (match_dup 0) (unspec:HI [(match_dup 0) (match_dup 4)] UNSPEC_INCDEC)) - (set (cc0) - (match_dup 0)) + (set (cc0) (compare (match_dup 0) + (const_int 0))) (set (pc) (if_then_else (match_op_dup 3 [(cc0) (const_int 0)]) (label_ref (match_dup 2)) @@ -5113,8 +5118,8 @@ (ashiftrt:HI (match_dup 0) (match_dup 4))) (clobber (scratch:QI))]) - (set (cc0) - (match_dup 0)) + (set (cc0) (compare (match_dup 0) + (const_int 0))) (set (pc) (if_then_else (match_dup 2) (label_ref (match_dup 3)) @@ -5148,8 +5153,8 @@ (ashiftrt:HI (match_dup 0) (match_dup 4))) (clobber (scratch:QI))]) - (set (cc0) - (match_dup 0)) + (set (cc0) (compare (match_dup 0) + (const_int 0))) (set (pc) (if_then_else (match_dup 5) (label_ref (match_dup 3)) @@ -5182,9 +5187,9 @@ (label_ref (match_operand 2 "" "")) (pc)))] "TARGET_H8300H || TARGET_H8300S" - [(set (cc0) - (and:HI (match_dup 0) - (const_int -256))) + [(set (cc0) (compare (and:HI (match_dup 0) + (const_int -256)) + (const_int 0))) (set (pc) (if_then_else (match_dup 1) (label_ref (match_dup 2)) @@ -5211,9 +5216,9 @@ (label_ref (match_operand 2 "" "")) (pc)))] "TARGET_H8300H || TARGET_H8300S" - [(set (cc0) - (and:HI (match_dup 0) - (const_int -256))) + [(set (cc0) (compare (and:HI (match_dup 0) + (const_int -256)) + (const_int 0))) (set (pc) (if_then_else (match_dup 3) (label_ref (match_dup 2)) @@ -5307,13 +5312,14 @@ (label_ref (match_operand 2 "" "")) (pc)))] "(TARGET_H8300H || TARGET_H8300S) + && INTVAL (operands[1]) != 0 && peep2_reg_dead_p (1, operands[0])" [(set (match_dup 0) (unspec:SI [(match_dup 0) (match_dup 4)] UNSPEC_INCDEC)) - (set (cc0) - (match_dup 0)) + (set (cc0) (compare (match_dup 0) + (const_int 0))) (set (pc) (if_then_else (match_op_dup 3 [(cc0) (const_int 0)]) (label_ref (match_dup 2)) @@ -5348,8 +5354,8 @@ [(set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4))) - (set (cc0) - (match_dup 0)) + (set (cc0) (compare (match_dup 0) + (const_int 0))) (set (pc) (if_then_else (match_op_dup 3 [(cc0) (const_int 0)]) (label_ref (match_dup 2)) @@ -5381,13 +5387,14 @@ && ((INTVAL (operands[1]) & 0x00ff) == INTVAL (operands[1]) || (INTVAL (operands[1]) & 0xff00) == INTVAL (operands[1]) || INTVAL (operands[1]) == 0x0000ffff) + && INTVAL (operands[1]) != 0 && INTVAL (operands[1]) != 1 && INTVAL (operands[1]) != 2" [(set (match_dup 0) (xor:SI (match_dup 0) (match_dup 1))) - (set (cc0) - (match_dup 0)) + (set (cc0) (compare (match_dup 0) + (const_int 0))) (set (pc) (if_then_else (match_op_dup 3 [(cc0) (const_int 0)]) (label_ref (match_dup 2)) @@ -5425,8 +5432,8 @@ (match_dup 4))) (set (match_dup 0) (not:SI (match_dup 0))) - (set (cc0) - (match_dup 0)) + (set (cc0) (compare (match_dup 0) + (const_int 0))) (set (pc) (if_then_else (match_op_dup 3 [(cc0) (const_int 0)]) (label_ref (match_dup 2)) @@ -5464,8 +5471,8 @@ (unspec:SI [(match_dup 0) (const_int -1)] UNSPEC_INCDEC)) - (set (cc0) - (match_dup 0)) + (set (cc0) (compare (match_dup 0) + (const_int 0))) (set (pc) (if_then_else (match_op_dup 3 [(cc0) (const_int 0)]) (label_ref (match_dup 2)) @@ -5507,8 +5514,8 @@ (ashiftrt:SI (match_dup 4) (match_dup 5))) (clobber (scratch:QI))]) - (set (cc0) - (match_dup 4)) + (set (cc0) (compare (match_dup 4) + (const_int 0))) (set (pc) (if_then_else (match_dup 2) (label_ref (match_dup 3)) @@ -5550,8 +5557,8 @@ (ashiftrt:SI (match_dup 4) (match_dup 5))) (clobber (scratch:QI))]) - (set (cc0) - (match_dup 4)) + (set (cc0) (compare (match_dup 4) + (const_int 0))) (set (pc) (if_then_else (match_dup 6) (label_ref (match_dup 3)) @@ -5591,8 +5598,8 @@ (ashiftrt:SI (match_dup 0) (match_dup 4))) (clobber (scratch:QI))]) - (set (cc0) - (match_dup 0)) + (set (cc0) (compare (match_dup 0) + (const_int 0))) (set (pc) (if_then_else (match_dup 2) (label_ref (match_dup 3)) @@ -5626,8 +5633,8 @@ (ashiftrt:SI (match_dup 0) (match_dup 4))) (clobber (scratch:QI))]) - (set (cc0) - (match_dup 0)) + (set (cc0) (compare (match_dup 0) + (const_int 0))) (set (pc) (if_then_else (match_dup 5) (label_ref (match_dup 3)) @@ -5672,8 +5679,8 @@ [(set (match_dup 0) (and:SI (match_dup 0) (match_dup 4))) - (set (cc0) - (match_dup 0)) + (set (cc0) (compare (match_dup 0) + (const_int 0))) (set (pc) (if_then_else (match_dup 2) (label_ref (match_dup 3)) @@ -5712,8 +5719,8 @@ [(set (match_dup 0) (and:SI (match_dup 0) (match_dup 4))) - (set (cc0) - (match_dup 0)) + (set (cc0) (compare (match_dup 0) + (const_int 0))) (set (pc) (if_then_else (match_dup 5) (label_ref (match_dup 3)) @@ -5746,9 +5753,9 @@ (label_ref (match_operand 2 "" "")) (pc)))] "TARGET_H8300H || TARGET_H8300S" - [(set (cc0) - (and:SI (match_dup 0) - (const_int -65536))) + [(set (cc0) (compare (and:SI (match_dup 0) + (const_int -65536)) + (const_int 0))) (set (pc) (if_then_else (match_dup 1) (label_ref (match_dup 2)) @@ -5775,9 +5782,9 @@ (label_ref (match_operand 2 "" "")) (pc)))] "TARGET_H8300H || TARGET_H8300S" - [(set (cc0) - (and:SI (match_dup 0) - (const_int -65536))) + [(set (cc0) (compare (and:SI (match_dup 0) + (const_int -65536)) + (const_int 0))) (set (pc) (if_then_else (match_dup 3) (label_ref (match_dup 2)) @@ -5814,6 +5821,7 @@ (label_ref (match_operand 2 "" "")) (pc)))] "(TARGET_H8300H || TARGET_H8300S) + && INTVAL (operands[1]) != 0 && !peep2_reg_dead_p (1, operands[0]) && !same_cmp_following_p (insn)" [(set (match_dup 4) @@ -5822,8 +5830,8 @@ (unspec:SI [(match_dup 4) (match_dup 5)] UNSPEC_INCDEC)) - (set (cc0) - (match_dup 4)) + (set (cc0) (compare (match_dup 4) + (const_int 0))) (set (pc) (if_then_else (match_op_dup 3 [(cc0) (const_int 0)]) (label_ref (match_dup 2)) @@ -5836,8 +5844,8 @@ [(set (match_operand:HI 0 "register_operand" "") (and:HI (match_dup 0) (match_operand:HI 1 "const_int_qi_operand" ""))) - (set (cc0) - (match_dup 0)) + (set (cc0) (compare (match_dup 0) + (const_int 0))) (set (pc) (if_then_else (match_operator 3 "eqne_operator" [(cc0) (const_int 0)]) @@ -5847,8 +5855,8 @@ [(set (match_dup 4) (and:QI (match_dup 4) (match_dup 5))) - (set (cc0) - (match_dup 4)) + (set (cc0) (compare (match_dup 4) + (const_int 0))) (set (pc) (if_then_else (match_op_dup 3 [(cc0) (const_int 0)]) (label_ref (match_dup 2)) @@ -5860,8 +5868,8 @@ [(set (match_operand:SI 0 "register_operand" "") (and:SI (match_dup 0) (match_operand:SI 1 "const_int_qi_operand" ""))) - (set (cc0) - (match_dup 0)) + (set (cc0) (compare (match_dup 0) + (const_int 0))) (set (pc) (if_then_else (match_operator 3 "eqne_operator" [(cc0) (const_int 0)]) @@ -5871,8 +5879,8 @@ [(set (match_dup 4) (and:QI (match_dup 4) (match_dup 5))) - (set (cc0) - (match_dup 4)) + (set (cc0) (compare (match_dup 4) + (const_int 0))) (set (pc) (if_then_else (match_op_dup 3 [(cc0) (const_int 0)]) (label_ref (match_dup 2)) @@ -5884,8 +5892,8 @@ [(set (match_operand:SI 0 "register_operand" "") (and:SI (match_dup 0) (match_operand:SI 1 "const_int_hi_operand" ""))) - (set (cc0) - (match_dup 0)) + (set (cc0) (compare (match_dup 0) + (const_int 0))) (set (pc) (if_then_else (match_operator 3 "eqne_operator" [(cc0) (const_int 0)]) @@ -5895,8 +5903,8 @@ [(set (match_dup 4) (and:HI (match_dup 4) (match_dup 5))) - (set (cc0) - (match_dup 4)) + (set (cc0) (compare (match_dup 4) + (const_int 0))) (set (pc) (if_then_else (match_op_dup 3 [(cc0) (const_int 0)]) (label_ref (match_dup 2)) @@ -5911,8 +5919,8 @@ (set (match_dup 0) (xor:SI (match_dup 0) (match_operand:SI 2 "const_int_qi_operand" ""))) - (set (cc0) - (match_dup 0)) + (set (cc0) (compare (match_dup 0) + (const_int 0))) (set (pc) (if_then_else (match_operator 4 "eqne_operator" [(cc0) (const_int 0)]) @@ -5926,8 +5934,8 @@ (set (match_dup 5) (xor:QI (match_dup 5) (match_dup 7))) - (set (cc0) - (match_dup 5)) + (set (cc0) (compare (match_dup 5) + (const_int 0))) (set (pc) (if_then_else (match_op_dup 4 [(cc0) (const_int 0)]) (label_ref (match_dup 3)) @@ -6088,7 +6096,8 @@ (match_operand 2 "h8300_src_operand" "")))] "TARGET_H8300SX && peep2_reg_dead_p (2, operands[0]) - && !reg_overlap_mentioned_p (operands[0], operands[2])" + && !reg_overlap_mentioned_p (operands[0], operands[2]) + && operands[2] != const0_rtx" [(set (cc0) (compare (match_dup 1) (match_dup 2)))]) |