RISC-V: Eliminate extension after for *w instructions
[official-gcc.git] / gcc / testsuite / gcc.target / riscv / shift-and-2.c
blobee9925b749859950bd90de07aa63680bd3d8a5f2
1 /* { dg-do compile { target { riscv64*-*-* } } } */
2 /* { dg-options "-march=rv64gc -mabi=lp64" } */
3 /* { dg-skip-if "" { *-*-* } { "-O0" } } */
5 /* Test for <optab>si3_mask_1. */
6 extern int k;
7 void
8 sub2 (int i, long j)
10 k = i << (j & 0x1f);
13 /* Test for <optab>si3_extend_mask. */
14 int
15 sub3 (short mask)
17 return 1 << ((int)mask & 0x1f);
20 /* Test for <optab>si3_extend_mask_1. */
21 int
22 sub4 (int i, int j)
24 return i << (j & 0x1f);
27 /* Test for <optab>di3_mask. */
28 long
29 sub5 (long i, int j)
31 char k = j & 0x3f;
32 return i << k;
35 /* Test for <optab>di3_mask_1. */
36 long
37 sub6 (long i, long j)
39 return i << (j & 0x3f);
42 /* Test for <optab>si3_extend. */
43 int
44 sub7 (int i, int j) {
45 return (i << 10) & j;
48 /* Test for <optab>si3_extend. */
49 unsigned
50 sub8 (unsigned i, unsigned j) {
51 return (i << 10) & j;
54 /* Test for <optab>si3_extend. */
55 unsigned
56 sub9 (unsigned i, unsigned j) {
57 return (i >> 10) & j;
60 /* { dg-final { scan-assembler-not "andi" } } */
61 /* { dg-final { scan-assembler-not "sext.w" } } */