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

    <tr>
        <th>Summary</th>
        <td>
            self-referenced non-escaping alloca and store to it aren't eliminated
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    https://godbolt.org/z/3v5b6eM7P
```cpp
// -O3 -g0 -fno-exceptions -emit-llvm
struct X {
    char * p;
    char s[8] = {0};
    X() : p(s) {}
};

bool use(X const& s);

bool foo(X const& s)
{
    (void)X(); // <-- dead code
 return use(s);
}

bool bar(const X& s)
{
    (void)X(); // <-- dead code
    return s.p[0] == '\0';
}
```

https://godbolt.org/z/GWc8dsc9b
```llvm
%struct.X = type { ptr, [8 x i8] }

declare i1 @use(ptr)

define i1 @foo(ptr %0) {
  %2 = alloca %struct.X
  %3 = getelementptr inbounds %struct.X, ptr %2, i64 0, i32 1
  store ptr %3, ptr %2
  store i64 0, ptr %3
; everything above is dead code
  %4 = call i1 @use(ptr %0)
 ret i1 %4
}

define i1 @bar(ptr %0) {
  %2 = alloca %struct.X
 %3 = getelementptr inbounds %struct.X, ptr %2, i64 0, i32 1
  store ptr %3, ptr %2
  store i64 0, ptr %3
; everything above is dead code
 %4 = load ptr, ptr %0
  %5 = load i8, ptr %4
  %6 = icmp eq i8 %5, 0
  ret i1 %6
}
```

https://github.com/llvm/llvm-project/issues/58002 related

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUVcuO4zYQ_Jr2pSGDbop6HHRYz8A5BEFyy1wpqm1zQYuKSDs7-fpAlPyaHSDIIpcAhiXTVa3q6qKoQ7CHnrkBtQX1utLnePRj87P_6h2_r1rfvTfHGIcA8gvQDmh38F3rXVz78QC0-wtoJy-qLfiX8jcQryC-QCHmjxmGZSURMftVYnYQmO17n_E3w0O0vg-Y8cnGzLnLaYaHOJ5NxDeEcjuvICKaox4R6AsOID8uB1DbCtQrgnydWALK1yfUG1AFVCPIiU9VSD_K7YSbJT4Q5u_We4fnwEDVGxrfhwhU4ET8DLj3_hPgUvpBCFB18bYDqhdJILe4-APyJcuwY92h8R0vpJHjeewXJc-Pv4m_62j1CFQlFVPT_6EOxKuUsB5AbcXid7KcSlAvYrp8L-4ah0et_xSpn343VRdM3X6ocQ8JkJpzsn5LU4_vA08TxSGOQC84JQK_oZ1j8exUx8bpkdFuEHIxO5to9TNqb_sraJ7vEKcIKnFNz-IMkKIkQjvnjcYHbQ8QmSAHjuz4xH2citm-9ee-C08UesHlQTTd2yJHkW4k4eZaMEQ_8hUnnzhPiBv7Bp1blFvkC4_v8Wj7A-rWXxht-H7qQCpPwo127qNjVzPuUU0IUvmnCX1ydE7qDzv6fzX05qfzuruG9ebCvX11B9nqAZM_YIqEseY0IP-Btkq8CXsrdJ9I8QPb0sbjuV0bfwLapZ03X7Jh9F_ZRKCdDeHMAWinKiEIR3Y6cjcXW3WN7GpZ6xU3m6KshFKyEqtjU1Ep952g2mwqRbnuCkMFVWXRiZL2plrZhgRJIYUiojoXa67qekMbynUlqVQacsEnbd16kjO9NlZJSFNsNnW5crplF9KJRtTzn5j-BKLpgBub1EJ7PgTIhbMhhnuVaKPjJrDbZyPveeTecIe97zMORg9psHMgdd8teYgebUQ9cg9URmRnT7afXFidR_fx7PwXjqZe_g4AAP__Rm0WLw">