rs6000: Cleanup of various jump patterns

This cleans up formatting of many jump patterns.  Mostly it is writing
output statements as brace blocks, and deleting default arguments.  It
also makes indentation a little bit more consistent, and uses b%T0
(instead of bctr/blr alternatives) in two more places.


	* config/rs6000/rs6000.md (conditional branch): Clean up formatting.
	Remove empty default arguments.  Use a brace block as output
	statement.
	(conditional return): Ditto.
	(jump): Ditto.
	(indirect_jump): Ditto.  Use b%T0 instead of bctr/blr.
	(tablejump, tablejumpsi, tablejumpdi, *tablejump<mode>_internal1):
	Ditto.
	(group_ending_nop): Ditto.
	(doloop_end): Ditto.
	(ctr<mode>, ctr<mode>_internal1, ctr<mode>_internal2): Ditto.
	(splitters for those): Ditto.

From-SVN: r253532
This commit is contained in:
Segher Boessenkool 2017-10-09 00:38:25 +02:00 committed by Segher Boessenkool
parent 0c791c5938
commit 0a22eb91b3
2 changed files with 100 additions and 89 deletions

View file

@ -1,3 +1,18 @@
2017-10-08 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/rs6000.md (conditional branch): Clean up formatting.
Remove empty default arguments. Use a brace block as output
statement.
(conditional return): Ditto.
(jump): Ditto.
(indirect_jump): Ditto. Use b%T0 instead of bctr/blr.
(tablejump, tablejumpsi, tablejumpdi, *tablejump<mode>_internal1):
Ditto.
(group_ending_nop): Ditto.
(doloop_end): Ditto.
(ctr<mode>, ctr<mode>_internal1, ctr<mode>_internal2): Ditto.
(splitters for those): Ditto.
2017-10-08 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/rs6000-string.c (expand_strncmp_align_check): Invert

View file

@ -12598,31 +12598,27 @@
(define_insn ""
[(set (pc)
(if_then_else (match_operator 1 "branch_comparison_operator"
[(match_operand 2
"cc_reg_operand" "y")
[(match_operand 2 "cc_reg_operand" "y")
(const_int 0)])
(label_ref (match_operand 0 "" ""))
(label_ref (match_operand 0))
(pc)))]
""
"*
{
return output_cbranch (operands[1], \"%l0\", 0, insn);
}"
return output_cbranch (operands[1], "%l0", 0, insn);
}
[(set_attr "type" "branch")])
(define_insn ""
[(set (pc)
(if_then_else (match_operator 0 "branch_comparison_operator"
[(match_operand 1
"cc_reg_operand" "y")
[(match_operand 1 "cc_reg_operand" "y")
(const_int 0)])
(any_return)
(pc)))]
"<return_pred>"
"*
{
return output_cbranch (operands[0], NULL, 0, insn);
}"
}
[(set_attr "type" "jmpreg")
(set_attr "length" "4")])
@ -12743,7 +12739,7 @@
(define_insn "jump"
[(set (pc)
(label_ref (match_operand 0 "" "")))]
(label_ref (match_operand 0)))]
""
"b %l0"
[(set_attr "type" "branch")])
@ -12755,66 +12751,64 @@
[(set_attr "type" "jmpreg")])
(define_expand "indirect_jump"
[(set (pc) (match_operand 0 "register_operand" ""))])
[(set (pc) (match_operand 0 "register_operand"))])
(define_insn "*indirect_jump<mode>"
[(set (pc) (match_operand:P 0 "register_operand" "c,*l"))]
[(set (pc)
(match_operand:P 0 "register_operand" "c,*l"))]
""
"@
bctr
blr"
"b%T0"
[(set_attr "type" "jmpreg")])
;; Table jump for switch statements:
(define_expand "tablejump"
[(use (match_operand 0 "" ""))
(use (label_ref (match_operand 1 "" "")))]
[(use (match_operand 0))
(use (label_ref (match_operand 1)))]
""
"
{
if (TARGET_32BIT)
emit_jump_insn (gen_tablejumpsi (operands[0], operands[1]));
else
emit_jump_insn (gen_tablejumpdi (operands[0], operands[1]));
DONE;
}")
})
(define_expand "tablejumpsi"
[(set (match_dup 3)
(plus:SI (match_operand:SI 0 "" "")
(plus:SI (match_operand:SI 0)
(match_dup 2)))
(parallel [(set (pc) (match_dup 3))
(use (label_ref (match_operand 1 "" "")))])]
(parallel [(set (pc)
(match_dup 3))
(use (label_ref (match_operand 1)))])]
"TARGET_32BIT"
"
{ operands[0] = force_reg (SImode, operands[0]);
{
operands[0] = force_reg (SImode, operands[0]);
operands[2] = force_reg (SImode, gen_rtx_LABEL_REF (SImode, operands[1]));
operands[3] = gen_reg_rtx (SImode);
}")
})
(define_expand "tablejumpdi"
[(set (match_dup 4)
(sign_extend:DI (match_operand:SI 0 "lwa_operand" "")))
(sign_extend:DI (match_operand:SI 0 "lwa_operand")))
(set (match_dup 3)
(plus:DI (match_dup 4)
(match_dup 2)))
(parallel [(set (pc) (match_dup 3))
(use (label_ref (match_operand 1 "" "")))])]
(parallel [(set (pc)
(match_dup 3))
(use (label_ref (match_operand 1)))])]
"TARGET_64BIT"
"
{ operands[2] = force_reg (DImode, gen_rtx_LABEL_REF (DImode, operands[1]));
{
operands[2] = force_reg (DImode, gen_rtx_LABEL_REF (DImode, operands[1]));
operands[3] = gen_reg_rtx (DImode);
operands[4] = gen_reg_rtx (DImode);
}")
})
(define_insn "*tablejump<mode>_internal1"
[(set (pc)
(match_operand:P 0 "register_operand" "c,*l"))
(use (label_ref (match_operand 1 "" "")))]
(use (label_ref (match_operand 1)))]
""
"@
bctr
blr"
"b%T0"
[(set_attr "type" "jmpreg")])
(define_insn "nop"
@ -12825,21 +12819,19 @@
(define_insn "group_ending_nop"
[(unspec [(const_int 0)] UNSPEC_GRP_END_NOP)]
""
"*
{
if (rs6000_cpu_attr == CPU_POWER6)
return \"ori 1,1,0\";
return \"ori 2,2,0\";
}")
return "ori 1,1,0";
return "ori 2,2,0";
})
;; Define the subtract-one-and-jump insns, starting with the template
;; so loop.c knows what to generate.
(define_expand "doloop_end"
[(use (match_operand 0 "" "")) ; loop pseudo
(use (match_operand 1 "" ""))] ; label
[(use (match_operand 0)) ; loop pseudo
(use (match_operand 1))] ; label
""
"
{
if (TARGET_64BIT)
{
@ -12854,19 +12846,19 @@
emit_jump_insn (gen_ctrsi (operands[0], operands[1]));
}
DONE;
}")
})
(define_expand "ctr<mode>"
[(parallel [(set (pc)
(if_then_else (ne (match_operand:P 0 "register_operand" "")
(if_then_else (ne (match_operand:P 0 "register_operand")
(const_int 1))
(label_ref (match_operand 1 "" ""))
(label_ref (match_operand 1))
(pc)))
(set (match_dup 0)
(plus:P (match_dup 0)
(const_int -1)))
(clobber (match_scratch:CC 2 ""))
(clobber (match_scratch:P 3 ""))])]
(clobber (match_scratch:CC 2))
(clobber (match_scratch:P 3))])]
""
"")
@ -12882,23 +12874,22 @@
[(set (pc)
(if_then_else (ne (match_operand:P 1 "register_operand" "c,*b,*b,*b")
(const_int 1))
(label_ref (match_operand 0 "" ""))
(label_ref (match_operand 0))
(pc)))
(set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*wi*c*l")
(plus:P (match_dup 1)
(const_int -1)))
(const_int -1)))
(clobber (match_scratch:CC 3 "=X,&x,&x,&x"))
(clobber (match_scratch:P 4 "=X,X,&r,r"))]
""
"*
{
if (which_alternative != 0)
return \"#\";
return "#";
else if (get_attr_length (insn) == 4)
return \"bdnz %l0\";
return "bdnz %l0";
else
return \"bdz $+8\;b %l0\";
}"
return "bdz $+8\;b %l0";
}
[(set_attr "type" "branch")
(set_attr "length" "*,16,20,20")])
@ -12908,23 +12899,22 @@
[(set (pc)
(if_then_else (eq (match_operand:P 1 "register_operand" "c,*b,*b,*b")
(const_int 1))
(label_ref (match_operand 0 "" ""))
(label_ref (match_operand 0))
(pc)))
(set (match_operand:P 2 "nonimmediate_operand" "=1,*r,m,*d*wi*c*l")
(plus:P (match_dup 1)
(const_int -1)))
(const_int -1)))
(clobber (match_scratch:CC 3 "=X,&x,&x,&x"))
(clobber (match_scratch:P 4 "=X,X,&r,r"))]
""
"*
{
if (which_alternative != 0)
return \"#\";
return "#";
else if (get_attr_length (insn) == 4)
return \"bdz %l0\";
return "bdz %l0";
else
return \"bdnz $+8\;b %l0\";
}"
return "bdnz $+8\;b %l0";
}
[(set_attr "type" "branch")
(set_attr "length" "*,16,20,20")])
@ -12933,14 +12923,15 @@
(define_split
[(set (pc)
(if_then_else (match_operator 2 "comparison_operator"
[(match_operand:P 1 "gpc_reg_operand" "")
[(match_operand:P 1 "gpc_reg_operand")
(const_int 1)])
(match_operand 5 "" "")
(match_operand 6 "" "")))
(set (match_operand:P 0 "int_reg_operand" "")
(plus:P (match_dup 1) (const_int -1)))
(clobber (match_scratch:CC 3 ""))
(clobber (match_scratch:P 4 ""))]
(match_operand 5)
(match_operand 6)))
(set (match_operand:P 0 "int_reg_operand")
(plus:P (match_dup 1)
(const_int -1)))
(clobber (match_scratch:CC 3))
(clobber (match_scratch:P 4))]
"reload_completed"
[(set (match_dup 3)
(compare:CC (match_dup 1)
@ -12948,25 +12939,28 @@
(set (match_dup 0)
(plus:P (match_dup 1)
(const_int -1)))
(set (pc) (if_then_else (match_dup 7)
(match_dup 5)
(match_dup 6)))]
"
{ operands[7] = gen_rtx_fmt_ee (GET_CODE (operands[2]), VOIDmode,
operands[3], const0_rtx); }")
(set (pc)
(if_then_else (match_dup 7)
(match_dup 5)
(match_dup 6)))]
{
operands[7] = gen_rtx_fmt_ee (GET_CODE (operands[2]), VOIDmode, operands[3],
const0_rtx);
})
(define_split
[(set (pc)
(if_then_else (match_operator 2 "comparison_operator"
[(match_operand:P 1 "gpc_reg_operand" "")
[(match_operand:P 1 "gpc_reg_operand")
(const_int 1)])
(match_operand 5 "" "")
(match_operand 6 "" "")))
(set (match_operand:P 0 "nonimmediate_operand" "")
(plus:P (match_dup 1) (const_int -1)))
(clobber (match_scratch:CC 3 ""))
(clobber (match_scratch:P 4 ""))]
"reload_completed && ! gpc_reg_operand (operands[0], SImode)"
(match_operand 5)
(match_operand 6)))
(set (match_operand:P 0 "nonimmediate_operand")
(plus:P (match_dup 1)
(const_int -1)))
(clobber (match_scratch:CC 3))
(clobber (match_scratch:P 4))]
"reload_completed && !gpc_reg_operand (operands[0], SImode)"
[(set (match_dup 3)
(compare:CC (match_dup 1)
(const_int 1)))
@ -12975,12 +12969,14 @@
(const_int -1)))
(set (match_dup 0)
(match_dup 4))
(set (pc) (if_then_else (match_dup 7)
(match_dup 5)
(match_dup 6)))]
"
{ operands[7] = gen_rtx_fmt_ee (GET_CODE (operands[2]), VOIDmode,
operands[3], const0_rtx); }")
(set (pc)
(if_then_else (match_dup 7)
(match_dup 5)
(match_dup 6)))]
{
operands[7] = gen_rtx_fmt_ee (GET_CODE (operands[2]), VOIDmode, operands[3],
const0_rtx);
})
(define_insn "trap"
[(trap_if (const_int 1) (const_int 0))]