Commit ace4317a by Jim Wilson

RISC-V: Fix splitter for 32-bit AND on 64-bit target.

Fixes github.com/riscv/riscv-gcc issue #161.  We were accidentally using
BITS_PER_WORD to compute shift counts when we should have been using the
bitsize of the operand modes.  This was wrong when we had an SImode shift
and a 64-bit target.

	Andrew Waterman  <andrew@sifive.com>
	gcc/
	* config/riscv/riscv.md (lshrsi3_zero_extend_3+1): Use operands[1]
	bitsize	instead of BITS_PER_WORD.
	gcc/testsuite/
	* gcc.target/riscv/shift-shift-2.c: Add one more test.

From-SVN: r273230
parent ce79110f
2019-07-08 Andrew Waterman <andrew@sifive.com>
Jim Wilson <jimw@sifive.com>
* config/riscv/riscv.md (lshrsi3_zero_extend_3+1): Use operands[1]
bitsize instead of BITS_PER_WORD.
gcc/testsuite/
2019-07-08 Martin Liska <mliska@suse.cz>
* collect2.c (defined): Revert to before r254460.
......
......@@ -1776,7 +1776,8 @@
(set (match_dup 0)
(lshiftrt:GPR (match_dup 0) (match_dup 2)))]
{
operands[2] = GEN_INT (BITS_PER_WORD
/* Op2 is a VOIDmode constant, so get the mode size from op1. */
operands[2] = GEN_INT (GET_MODE_BITSIZE (GET_MODE (operands[1]))
- exact_log2 (INTVAL (operands[2]) + 1));
})
......
2019-07-08 Jim Wilson <jimw@sifive.com>
* gcc.target/riscv/shift-shift-2.c: Add one more test.
2019-07-08 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/65143
......
......@@ -25,5 +25,17 @@ sub4 (unsigned long i)
{
return (i << 52) >> 52;
}
/* { dg-final { scan-assembler-times "slli" 4 } } */
/* { dg-final { scan-assembler-times "srli" 4 } } */
unsigned int
sub5 (unsigned int i)
{
unsigned int j;
j = i >> 24;
j = j * (1 << 24);
j = i - j;
return j;
}
/* { dg-final { scan-assembler-times "slli" 5 } } */
/* { dg-final { scan-assembler-times "srli" 5 } } */
/* { dg-final { scan-assembler-times "slliw" 1 } } */
/* { dg-final { scan-assembler-times "srliw" 1 } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment