On Tue, Mar 27, 2012 at 8:01 AM, Bin.Cheng <amker.ch...@gmail.com> wrote:
> On Mon, Mar 26, 2012 at 3:27 PM, Richard Guenther
> <richard.guent...@gmail.com> wrote:
>> On Sun, Mar 25, 2012 at 2:42 PM, Bin.Cheng <amker.ch...@gmail.com> wrote:
>>> Hi,
>>> In tree-complex.c's function expand_complex_comparison, gcc just
>>> expand comparison on complex
>>> operands into comparisons on inner type, like:
>>>
>>>  D.5375_17 = REALPART_EXPR <g2>;
>>>  D.5376_18 = IMAGPART_EXPR <g2>;
>>>  g2.1_5 = COMPLEX_EXPR <D.5375_17, D.5376_18>;
>>>  D.5377_19 = REALPART_EXPR <g3>;
>>>  D.5378_20 = IMAGPART_EXPR <g3>;
>>>  g3.2_6 = COMPLEX_EXPR <D.5377_19, D.5378_20>;
>>>  D.5379_21 = D.5375_17 == D.5377_19;
>>>  D.5380_22 = D.5376_18 == D.5378_20;
>>>  D.5381_23 = D.5379_21 & D.5380_22;
>>>  if (D.5381_23 == 1)
>>>    goto <bb 3>;
>>>  else
>>>    goto <bb 4>;
>>>
>>> So is it possible to do shortcut operation for the "&" on the
>>> real/imag part of complex data?
>>
>> Sure.  Does the RTL expander not do that for your target?
>
> Yes, expand_gimple_cond decides how to expand such codes.
> And, it depends on BRANCH_COST whether codes will be expanded into
> shortcut operations. true for X86, false for arm at least.
> I am wondering, should we take a more general strategy, rather than just
> branch cost heuristic decision.
> The new strategy should compare the cost of operation and branch, e.g.,
> On target has no hard float instructions, comparison of float point should be
> shortcuted, since the helper function is very expensive.
>
> Any idea? Thanks

For the particluar case a better lowering from tree-complex.c is desired
(I can imagine even using vector instructions ..).  It probably was just easiest
to not to have to alter the CFG at this point.

Richard.

> --
> Best Regards.

Reply via email to