[PATCH, AARCH64] : Fix target/59744 - invalid use of CMN
Richard Earnshaw
rearnsha@arm.com
Fri Jan 10 17:39:00 GMT 2014
On 10/01/14 17:37, Andrew Pinski wrote:
> On Fri, Jan 10, 2014 at 7:14 AM, Richard Earnshaw <rearnsha@arm.com> wrote:
>> It's incorrect to use CMN to compare with a negated operand if the
>> following condition is an inequality. This is because of boundary
>> conditions when the negated operations overflow (or when zero), since
>> the flags are then not the swapped version of the comparison.
>
> I think the functions in the testcase need noclone attribute also.
>
Why?
R.
> Thanks,
> Andrew
>
>>
>> This patch restricts the pattern to CC_Zmode (a new mode for the
>> comparison flags).
>>
>> gcc:
>> PR target/59744
>> * aarch64-modes.def (CC_Zmode): New flags mode.
>> * aarch64.c (aarch64_select_cc_mode): Only allow NEG when the
>> condition represents an equality.
>> (aarch64_get_condition_code0): Handle CC_Zmode.
>> * aarch64.md (compare_neg<mode>): Restrict to equality
>> operations.
>>
>> testsuite:
>> PR target/59744
>> * gcc.target/aarch64/cmn-neg.c: Use equality comparisons.
>> * gcc.target/aarch64/cmn-neg2.c: New test.
>>
>> Committed to trunk.
>>
>> R.
>
More information about the Gcc-patches
mailing list