1 /* { dg-do compile } */
2 /* { dg-options "-march=rv64gc_zba -mabi=lp64" } */
3 /* { dg-skip-if "" { *-*-* } { "-O0" "-Og" } } */
4
5 long long sub1(unsigned long long a, unsigned long long b)
6 {
7 b = (b << 32) >> 31;
8 unsigned int x = a + b;
9 return x;
10 }
11
12 long long sub2(unsigned long long a, unsigned long long b)
13 {
14 return (unsigned int)(a + (b << 1));
15 }
16
17 long long sub3(unsigned long long a, unsigned long long b)
18 {
19 return (a + (b << 1)) & ~0u;
20 }
21
22 /* { dg-final { scan-assembler-times "sh1add" 3 } } */
23 /* { dg-final { scan-assembler-times "zext.w\t" 3 } } */