[Patch,microblaze]: Optimized usage of pcmp conditional instruction.
Michael Eager
eager@eagerm.com
Wed Feb 25 23:31:00 GMT 2015
On 02/25/15 02:19, Ajit Kumar Agarwal wrote:
> Hello All:
>
> Please find the patch for the optimized usage of pcmp instructions in microblaze. No regressions is seen
> In deja GNU tests. There are many testcases that are already there in deja GNU to check the generation of
> pcmpne/pcmpeq instructions and are used to check the validity.
>
> commit b74acf44ce4286649e5be7cff7518d814cb2491f
> Author: Ajit Kumar Agarwal <ajitkum@xhdspdgnu.(none)>
> Date: Wed Feb 25 15:33:02 2015 +0530
>
> [Patch,microblaze]: Optimized usage of pcmp conditional instruction.
>
> The changes are made in the patch for optimized usage of pcmpne/pcmpeq
> instructions. The xor with register to register is replaced with pcmpeq
> /pcmpne instructions and for immediate check still the xori will be used.
> The purpose of the change is to acheive the aggressive usage of pcmpne
> /pcmpeq instructions instead of xor being used for comparison.
>
> ChangeLog:
> 2015-02-25 Ajit Agarwal <ajitkum@xilinx.com>
>
> * config/microblaze/microblaze.md (cbranchsi4): Added immediate
> constraints.
> (cbranchsi4_reg): New.
> * config/microblaze/microblaze.c
> (microblaze_expand_conditional_branch_reg): New.
> * config/microblaze/microblaze-protos.h
> (microblaze_expand_conditional_branch_reg): New prototype.
+ if (cmp_op1 == const0_rtx)
+ {
+ comp_reg = cmp_op0;
+ condition = gen_rtx_fmt_ee (signed_condition (code),
+ SImode, comp_reg, const0_rtx);
+ emit_jump_insn (gen_condjump (condition, label1));
+ }
+
+ else if (code == EQ || code == NE)
+ {
+ if (code == NE)
+ {
+ emit_insn (gen_sne_internal_pat (comp_reg, cmp_op0,
+ cmp_op1));
+ condition = gen_rtx_NE (SImode, comp_reg, const0_rtx);
+ }
+ else
+ {
+ emit_insn (gen_seq_internal_pat (comp_reg,
+ cmp_op0, cmp_op1));
+ condition = gen_rtx_EQ (SImode, comp_reg, const0_rtx);
+ }
+ emit_jump_insn (gen_condjump (condition, label1));
+ }
+ else
+ {
...
No blank line between end brace of if and else.
Replace with
+ else if (code == EQ)
+ {
+ emit_insn (gen_seq_internal_pat (comp_reg, cmp_op0, cmp_op1));
+ condition = gen_rtx_EQ (SImode, comp_reg, const0_rtx);
+ emit_jump_insn (gen_condjump (condition, label1));
+ }
+ else if (code == NE)
+ {
+ emit_insn (gen_sne_internal_pat (comp_reg, cmp_op0, cmp_op1));
+ condition = gen_rtx_NE (SImode, comp_reg, const0_rtx);
+ emit_jump_insn (gen_condjump (condition, label1));
+ }
+ else
+ {
...
--
Michael Eager eager@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306 650-325-8077
More information about the Gcc-patches
mailing list