RISC-V: Eliminate extension after for *w instructions
[official-gcc.git] / gcc / testsuite / gcc.target / riscv / sign-extend.c
blob6f8401948330d7772dce2fe5ae1399696896a534
1 /* { dg-do compile { target { riscv64*-*-* } } } */
2 /* { dg-options "-march=rv64gc -mabi=lp64" } */
3 /* { dg-skip-if "" { *-*-* } { "-O0" } } */
5 unsigned
6 foo1 (unsigned x, unsigned y, unsigned z)
8 return x & (y - z);
11 int
12 foo2 (int x, int y, int z)
14 return x & (y - z);
17 unsigned
18 foo3 (unsigned x, unsigned y, unsigned z)
20 return x & (y * z);
23 int
24 foo4 (int x, int y, int z)
26 return x & (y * z);
29 unsigned
30 foo5 (unsigned x, unsigned y)
32 return x & (y / x);
35 int
36 foo6 (int x, int y)
38 return x & (y / x);
41 unsigned
42 foo7 (unsigned x, unsigned y)
44 return x & (y % x);
47 int
48 foo8 (int x, int y)
50 return x & (y % x);
53 int
54 foo9 (int x)
56 return x & (-x);
59 unsigned
60 foo10 (unsigned x, unsigned y)
62 return x & (y + x);
66 unsigned
67 foo11 (unsigned x)
69 return x & (15 + x);
72 /* { dg-final { scan-assembler-times "subw" 2 } } */
73 /* { dg-final { scan-assembler-times "addw" 1 } } */
74 /* { dg-final { scan-assembler-times "addiw" 1 } } */
75 /* { dg-final { scan-assembler-times "mulw" 2 } } */
76 /* { dg-final { scan-assembler-times "divw" 1 } } */
77 /* { dg-final { scan-assembler-times "divuw" 1 } } */
78 /* { dg-final { scan-assembler-times "remw" 1 } } */
79 /* { dg-final { scan-assembler-times "remuw" 1 } } */
80 /* { dg-final { scan-assembler-times "negw" 1 } } */
81 /* { dg-final { scan-assembler-not "sext.w" } } */