<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">