rs6000: clz/ctz/ffs improvement (PR78683)
authorSegher Boessenkool <segher@kernel.crashing.org>
Fri, 9 Dec 2016 19:31:06 +0000 (20:31 +0100)
committerSegher Boessenkool <segher@gcc.gnu.org>
Fri, 9 Dec 2016 19:31:06 +0000 (20:31 +0100)
commitbb0f9c0249ee6a1b53e6ae8bdd9d3543991c7291
tree025154146b8b80c430204be6d22a894a97eea00f
parent59ab1319cb6664c39d8cf7f05bcf1ec0a625ecdb
rs6000: clz/ctz/ffs improvement (PR78683)

On CPUs that implement popcnt[wd] but not cnttz[wd] we can do better for
the ctz sequences than we do today.

CL[TZ]_DEFINED_VALUE_AT_ZERO can return 2, since we always return the
same fixed value (only dependent on TARGET_* options).

PR target/78683
* config/rs6000/rs6000.h (CLZ_DEFINED_VALUE_AT_ZERO): Use
GET_MODE_BITSIZE.  Return 2.
(CTZ_DEFINED_VALUE_AT_ZERO): Use GET_MODE_BITSIZE.  Return 2.  Handle
TARGET_POPCNTD the same as TARGET_CTZ.
* config/rs6000/rs6000.md (ctz<mode>2): Reimplement.
(ffs<mode>2): Reimplement.

From-SVN: r243499
gcc/ChangeLog
gcc/config/rs6000/rs6000.h
gcc/config/rs6000/rs6000.md