1 /* { dg-do compile { target { { i?86-*-* x86_64-*-* } && { ! ia32 } } } } */
2 /* { dg-options "-fdump-rtl-ce1 -O2" } */
3
4 typedef unsigned long long uint64_t;
5
6 static uint64_t umulh(uint64_t a, uint64_t b)
7 {
8 return (unsigned __int128)a*b >> 64;
9 }
10
11 uint64_t f(uint64_t a, uint64_t b, int c)
12 {
13 if (c)
14 a = umulh(a, (b-umulh(a,b))<<44) << 1;
15 return a;
16 }
17
18 /* { dg-final { scan-rtl-dump "0 true changes made" "ce1" } } */
19 /* { dg-final { scan-assembler-not "cmov" } } */