<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/145398>145398</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Failure to recognize that `int` and `int[1]` cannot alias
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            missed-optimization,
            TBAA
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          Kmeakin
      </td>
    </tr>
</table>

<pre>
    Thanks to C's strict aliasing rules, `s->x` and `a->xs[0]` cannot alias.
Therefore the second load of `s->x` in `src` is unnecessary.

https://godbolt.org/z/dcEPvE3ef
```c
typedef struct Singleton {
    int x;
} Singleton;

typedef struct Array {
    int xs[1];
} Array;

int src(Singleton* s, Array* a) {
    s->x = 0;
 a->xs[0] = 1;
    return s->x;
}

int tgt(Singleton* s, Array* a) {
 s->x = 0;
    a->xs[0] = 1;
    return 0;
}
```

```asm
src:
 mov     w8, #1
        str     wzr, [x0]
        str     w8, [x1]
 ldr     w0, [x0]
        ret

tgt:
        mov     w8, #1
        str wzr, [x0]
        mov     w0, wzr
        str     w8, [x1]
 ret
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyMVMFuozAQ_ZrhMkpkDAQ4cCBNuexlpe0PGOMQb40d2Sbb5OtXJm7Sdltto0hoPG_evHmYYc7JUQvRQLGFYpew2R-MbX5Mgj1LnfRmODdPB6afHXqDD0BLh85byT0yJZmTekQ7K-GAPiBsiFtB9vgCG4JMD-GALQcOii2BYhcSnGltYvkaSPt0EFbsjRXoDwKd4EYPqAwb0OzfU0q9xJYvgcNZa8GFc8yeAxGQ9uD90UHWAu2AdqMZeqP82tgRaHcB2g388efpMRP7AN-Q658Daf35KAaxD7PN3OMvqUclvNEI5RZIi4gotccXyEII5e4OiUf_cLTWsvPH-mBEGoy48SywG0cAhQFpdeenLS72XpG0RQa0fkN8NQgh2yG5EuF715dUGlOIaIWfrY51NyV3AX703xfwSXfE7wkg73q_vo6rjlvI3ASkDZ5k4RwncwoU-KdarhzN0ki6WOHtNXmxS7bYvizX7hNE9QpII0ANMUO-KLXCxxc9-igm_v6r6Ws9t9Kla8B9R2uU8upRMjTZUGc1S0STlgUpSZXnZXJoOCFZ2W-qjFVFUfflftjnJa1Zvx84L9MikQ0ltCAbmqV1kZNy3fckZWRIK15XdZbXkBMxManWSp2m8CUl0rlZNGleZHWVKNYL5ZbtQekknRPDyhy9nOSFeRnuDgX6AJQ-bds2BMUusU3gWvXz6CAnSjrv7uxeeiWajkk1h41g0ApuRi0vYT0wHxaA1P7NgglR_KY-LJdktqr5sBGkP8z9mpsJaBd6xsfqaM1vwT3QbhnPAe3ihKeG_g0AAP__k8Fveg">