This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Enhance ifcombine to recover non short circuit branches


Hi,

The patch enhances ifcombine pass to recover some non short circuit
branches. Basically, it will do the following transformation:

Case 1:
  if (cond1)
    if (cond2)
==>
  if (cond1 && cond2)

Case 2:
  if (cond1)
    goto L1
  if (cond2)
    goto L1
==>
  if (cond1 || cond2)
    goto L1

Case 3:
  if (cond1)
    goto L1
  else
    goto L2
L1:
  if (cond2)
    goto L2
==>
  if (invert (cond1) || cond2)
    goto L2

Case 4:
  if (cond1)
    goto L1
  if (cond2)
    goto L2
L1:
==>
  if (invert (cond1) && cond2)
    goto L2

Bootstrap on X86-64 and ARM.

Two new FAILs in regression tests:
gcc.dg/uninit-pred-8_b.c
gcc.dg/uninit-pred-9_b.c
uninit pass should be enhanced to handle more complex conditions. Will
submit a bug to track it and fix it later.

Is it OK for trunk?

Thanks!
-Zhenqiang

ChangeLog:
2013-10-16  Zhenqiang Chen  <zhenqiang.chen@linaro.org>

        * fold-const.c (simple_operand_p_2): Make it global.
        * tree.h (simple_operand_p_2): Declare it.
        * tree-ssa-ifcombine.c: Include rtl.h and tm_p.h.
        (bb_has_overhead_p, generate_condition_node,
        ifcombine_ccmp): New functions.
        (ifcombine_fold_ifandif): New function, extracted from
        ifcombine_ifandif.
        (ifcombine_ifandif): Call ifcombine_ccmp.
        (tree_ssa_ifcombine_bb): Skip optimized bb.

testsuite/ChangeLog
2013-10-16  Zhenqiang Chen  <zhenqiang.chen@linaro.org>

        * gcc.dg/tree-ssa/ssa-ifcombine-ccmp-1.c: New test case.
        * gcc.dg/tree-ssa/ssa-ifcombine-ccmp-2.c: New test case.
        * gcc.dg/tree-ssa/ssa-ifcombine-ccmp-3.c: New test case.
        * gcc.dg/tree-ssa/ssa-ifcombine-ccmp-4.c: New test case.
        * gcc.dg/tree-ssa/ssa-ifcombine-ccmp-5.c: New test case.
        * gcc.dg/tree-ssa/ssa-ifcombine-ccmp-6.c: New test case.
        * gcc.dg/tree-ssa/ssa-dom-thread-3.c: Updated.

Attachment: ifcombine.patch
Description: Binary data


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]