Commit be6388e1 by Hariharan Sandanagobalane Committed by Hariharan Sandanagobalane

picochip.md (movhicc): Use expand to check whether movhicc is available and split it after reload.

        * config/picochip/picochip.md (movhicc): Use expand to check whether
        movhicc is available and split it after reload.

From-SVN: r164523
parent 736fe2d5
2010-09-22 Hariharan Sandanagobalane <hariharan@picochip.com>
* config/picochip/picochip.md (movhicc): Use expand to check whether
movhicc is available and split it after reload.
2010-09-22 Richard Guenther <rguenther@suse.de> 2010-09-22 Richard Guenther <rguenther@suse.de>
* tree-ssanames.c (release_dead_ssa_names): Do not remove * tree-ssanames.c (release_dead_ssa_names): Do not remove
...@@ -622,7 +622,7 @@ ...@@ -622,7 +622,7 @@
; Match a branch instruction, created from a tstport/cbranch split. ; Match a branch instruction, created from a tstport/cbranch split.
; We use a "use" clause so GCC doesnt try to use this pattern generally. ; We use a "use" clause so GCC doesnt try to use this pattern generally.
(define_insn "*branch" (define_insn "branch"
[(set (pc) [(set (pc)
(if_then_else (if_then_else
(match_operator 2 "comparison_operator" (match_operator 2 "comparison_operator"
...@@ -2511,22 +2511,38 @@ ...@@ -2511,22 +2511,38 @@
;;============================================================================ ;;============================================================================
;; Define expand seems to consider the resulting two instructions to be ;; Define expand seems to consider the resulting two instructions to be
;; independent. It was moving the actual copy instruction further down ;; independent. With a split, guarded by reload, it works correctly.
;; with a call instruction in between. The call was clobbering the CC
;; and hence the cond_copy was wrong. With a split, it works correctly.
(define_expand "movhicc" (define_expand "movhicc"
[(set (reg:CC CC_REGNUM) (match_operand 1 "comparison_operator" "")) [(set (match_operand:HI 0 "register_operand" "=r,r")
(parallel [(set (match_operand:HI 0 "register_operand" "=r,r") (if_then_else:HI (match_operand:HI 1 "" "")
(if_then_else:HI (match_op_dup:HI 1 [(reg:CC CC_REGNUM) (const_int 0)]) (match_operand:HI 2 "register_operand" "0,0")
(match_operand:HI 2 "picochip_register_or_immediate_operand" "0,0") (match_operand:HI 3 "picochip_register_or_immediate_operand" "r,i")))]
(match_operand:HI 3 "picochip_register_or_immediate_operand" "r,i")))
(use (match_dup 4))])]
"" ""
{if (!picochip_check_conditional_copy (operands)) {if (!picochip_check_conditional_copy (operands))
FAIL; FAIL;
operands[4] = GEN_INT(GET_CODE(operands[1])); operands[4] = GEN_INT(GET_CODE(operands[1]));
}) })
(define_insn_and_split "*checked_movhicc"
[(set (match_operand:HI 0 "register_operand" "=r,r")
(if_then_else:HI (match_operator 1 "picochip_peephole_comparison_operator"
[(match_operand:HI 4 "register_operand" "r,r")
(match_operand:HI 5 "picochip_comparison_operand" "r,i")])
(match_operand:HI 2 "register_operand" "0,0")
(match_operand:HI 3 "picochip_register_or_immediate_operand" "r,i")))]
""
"#"
"reload_completed"
[(set (reg:CC CC_REGNUM) (match_dup 1))
(parallel [(set (match_operand:HI 0 "register_operand" "=r,r")
(if_then_else:HI (match_op_dup:HI 1 [(reg:CC CC_REGNUM) (const_int 0)])
(match_operand:HI 2 "picochip_register_or_immediate_operand" "0,0")
(match_operand:HI 3 "picochip_register_or_immediate_operand" "r,i")))
(use (match_dup 6))])]
"{
operands[6] = GEN_INT(GET_CODE(operands[0]));
}")
;; We dont do any checks here. But this pattern is used only when movhicc ;; We dont do any checks here. But this pattern is used only when movhicc
;; was checked. Put a "use" clause to make sure. ;; was checked. Put a "use" clause to make sure.
(define_insn "*conditional_copy" (define_insn "*conditional_copy"
...@@ -2534,7 +2550,7 @@ ...@@ -2534,7 +2550,7 @@
(if_then_else:HI (if_then_else:HI
(match_operator:HI 4 "picochip_peephole_comparison_operator" (match_operator:HI 4 "picochip_peephole_comparison_operator"
[(reg:CC CC_REGNUM) (const_int 0)]) [(reg:CC CC_REGNUM) (const_int 0)])
(match_operand:HI 1 "picochip_register_or_immediate_operand" "0,0") (match_operand:HI 1 "register_operand" "0,0")
(match_operand:HI 2 "picochip_register_or_immediate_operand" "r,i"))) (match_operand:HI 2 "picochip_register_or_immediate_operand" "r,i")))
(use (match_operand:HI 3 "const_int_operand" ""))] (use (match_operand:HI 3 "const_int_operand" ""))]
"" ""
......
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