RISC-V: Fix for combine bug with shift and AND operations.
commitb8408bbc21d0d82d7b54d27ec618fb250c8ae826
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 2 Apr 2018 22:37:21 +0000 (2 22:37 +0000)
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 2 Apr 2018 22:37:21 +0000 (2 22:37 +0000)
tree2b4c1d1ef35215676c1927b0b1a197e2a919dce6
parent5cdc52d125e66199cd0dafc7f9481bd50aed4818
RISC-V: Fix for combine bug with shift and AND operations.

PR rtl-optimization/84660
gcc/
* config/riscv/riscv.h (SHIFT_COUNT_TRUNCATED): Set to zero.
* config/riscv/riscv.md (<optab>si3): Use QImode shift count.
(<optab>di3, <optab>si3_extend): Likewise.
(<optab>si3_mask, <optab>si3_mask_1): New.
(<optab>di3_mask, <optab>di3_mask_1): New.
(<optab>si3_extend_mask, <optab>si3_extend_mask_1): New.
(lshrsi3_zero_extend_1): Use VOIDmode shift count.
* config/riscv/sync.md (atomic_test_and_set): Emit QImode shift count.
gcc/testsuite/
* gcc.target/riscv/pr84660.c: New.
* gcc.target/riscv/shift-and-1.c: New.
* gcc.target/riscv/shift-and-2.c: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@259019 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/ChangeLog
gcc/config/riscv/riscv.h
gcc/config/riscv/riscv.md
gcc/config/riscv/sync.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/riscv/pr84660.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/shift-and-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/shift-and-2.c [new file with mode: 0644]