x86: Change CTZ_DEFINED_VALUE_AT_ZERO to return 0/2
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 26 Jun 2020 21:56:40 +0000 (14:56 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Tue, 25 Aug 2020 21:30:38 +0000 (14:30 -0700)
commit4f73bf20d9c0ad1cd143db39d73f70841dcc1471
treeabb14f1c1e05a81e0137e53ad7448c7293605fa8
parent050fc8b27a852007f8bb667999e1c8cfd31f90e1
x86: Change CTZ_DEFINED_VALUE_AT_ZERO to return 0/2

Change CTZ_DEFINED_VALUE_AT_ZERO/CTZ_DEFINED_VALUE_AT_ZERO to return 0/2
to enable table-based clz/ctz optimization:

 -- Macro: CLZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE)
 -- Macro: CTZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE)
     A C expression that indicates whether the architecture defines a
     value for 'clz' or 'ctz' with a zero operand.  A result of '0'
     indicates the value is undefined.  If the value is defined for only
     the RTL expression, the macro should evaluate to '1'; if the value
     applies also to the corresponding optab entry (which is normally
     the case if it expands directly into the corresponding RTL), then
     the macro should evaluate to '2'.  In the cases where the value is
     defined, VALUE should be set to this value.

gcc/

PR target/95863
* config/i386/i386.h (CTZ_DEFINED_VALUE_AT_ZERO): Return 0/2.
(CLZ_DEFINED_VALUE_AT_ZERO): Likewise.

gcc/testsuite/

PR target/95863
* gcc.target/i386/pr95863-1.c: New test.
* gcc.target/i386/pr95863-2.c: Likewise.
gcc/config/i386/i386.h
gcc/testsuite/gcc.target/i386/pr95863-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr95863-2.c [new file with mode: 0644]