https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85740
--- Comment #5 from Thomas Koenig <tkoenig at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #1)
> These functions are not functional equivalent.
>
> In the b.c, it records the max location but it is the last element which
> contains that value. While in c.c, the first element which contains the
> value is recorded.
I do not understand.
The only difference between the files is
$ diff -u -b b.c c.c
--- b.c 2018-05-10 22:22:06.276904322 +0200
+++ c.c 2018-05-10 22:21:50.028801008 +0200
@@ -14,7 +14,7 @@
nm = -1;
for (i=0; i<n; i++)
{
- if (__builtin_expect (a[i] > m, 0))
+ if (a[i] > m)
{
m = a[i];
nm = i;
Does this change the semantics of the comparison? If it does, it
would be a bug in __builtin_expect.