arc: Update ctz/clz patterns
commitb70c7c06aaa2ef55a29e6516a710e57f7218ab53
authorClaudiu Zissulescu <claziss@synopsys.com>
Mon, 10 May 2021 06:03:41 +0000 (10 09:03 +0300)
committerClaudiu Zissulescu <claziss@synopsys.com>
Mon, 10 May 2021 06:32:59 +0000 (10 09:32 +0300)
tree09836b79ef1fd591d55655fe1316008811231af7
parent3b9eb2f8a8655bf1cc6bf14e732999c877ee4fff
arc: Update ctz/clz patterns

ARCv2 ISA introduces special clz/ctz instructions. This patch is
adding support for them when available.

Corner case:
mov            r0,0x0 : (w0) r0 <= 0x00000000 *
ffs            r1,r0 : (w0) r1 <= 0x0000001f *
fls            r2,r0 : (w0) r2 <= 0x00000000 *

gcc/
2021-05-10  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arc.h (CLZ_DEFINED_VALUE_AT_ZERO): Define.
(CTZ_DEFINED_VALUE_AT_ZERO): Likewise.
* config/arc/arc.md (clrsbsi2): Cleanup pattern.
(norm_f): Likewise.
(ffs): Likewise.
(ffs_f): Likewise.
(clzsi2): Use fls instruction when available.
(arc_clzsi2): Likewise.

Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
gcc/config/arc/arc.h
gcc/config/arc/arc.md