// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110359 // { dg-do compile } // { dg-options "-fdump-tree-original" } double pow(in double x, in ulong p) { import gcc.builtins : __builtin_expect; if (__builtin_expect(p == 0, false)) return 1; if (__builtin_expect(p == 1, false)) return x; double s = x; double v = 1; for (ulong i = p; i > 1; i >>= 1) { v = (i & 0x1) ? s * v : v; s = s * s; } return v * s; } // { dg-final { scan-tree-dump "if \\(__builtin_expect \\(p == 0, 0\\) != 0\\)" "original" } } // { dg-final { scan-tree-dump "if \\(__builtin_expect \\(p == 1, 0\\) != 0\\)" "original" } }