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]

Re: [PATCH] x86: emit tzcnt unconditionally


On Mon, May 7, 2012 at 7:43 AM, Jakub Jelinek <jakub@redhat.com> wrote:

>> Index: i386.md
>> ===================================================================
>> --- i386.md ? (revision 187217)
>> +++ i386.md ? (working copy)
>> @@ -12112,9 +12112,22 @@
>> ? ? (set (match_operand:SWI48 0 "register_operand" "=r")
>> ? ? ? (ctz:SWI48 (match_dup 1)))]
>> ? ?""
>> - ?"bsf{<imodesuffix>}\t{%1, %0|%0, %1}"
>> +{
>> + ?if (optimize_function_for_size_p (cfun))
>> + ? ?return "bsf{<imodesuffix>}\t{%1, %0|%0, %1}";
>> + ?else if (TARGET_BMI)
>> + ? ?return "tzcnt{<imodesuffix>}\t{%1, %0|%0, %1}";
>> + ?else
>> + ? ?/* tzcnt expands to rep;bsf and we can use it even if !TARGET_BMI. ?*/
>> + ? ?return "rep; bsf{<imodesuffix>}\t{%1, %0|%0, %1}";
>> +}
>
> Shouldn't that be done only for generic tuning? ?If somebody uses
> -mtune=native, then emitting rep; bsf is overkill, the code is intended
> to be run on a CPU without (or with TARGET_BMI with) tzcnt insn support.

Yes, this is a good idea.

Something like attached patch?

Thanks,
Uros.

Attachment: p.diff.txt
Description: Text document


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