<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/138208>138208</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Codegenprepare creates invalid IR
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
aeubanks
</td>
</tr>
</table>
<pre>
```
$ cat a.ll
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-grtev4-linux-gnu"
declare void @g(ptr)
define void @f(ptr %arg) {
bb:
%getelementptr = getelementptr i8, ptr %arg, i64 -64
%getelementptr1 = getelementptr i8, ptr %arg, i64 -56
call void @g(ptr %getelementptr)
br label %bb3
bb3:
%load = load ptr, ptr %getelementptr, align 8
%load4 = load i32, ptr %getelementptr1, align 8
%load5 = load ptr, ptr %getelementptr, align 8
%add = add i32 1, 0
%icmp = icmp eq i32 %add, 0
br i1 %icmp, label %bb7, label %bb7
bb7:
ret void
}
$ opt -p 'require<profile-summary>,codegenprepare' a.ll -cgpp-huge-func=0 -disable-output
Instruction does not dominate all uses!
%sunkaddr1 = getelementptr i8, ptr %arg, i64 -64
%load = load ptr, ptr %sunkaddr1, align 8
LLVM ERROR: Broken module found, compilation aborted!
```
seems like the GEP we create [here](https://github.com/llvm/llvm-project/blob/a76936f1c01c7cadbce8ea6553af758d0f614b6a/llvm/lib/CodeGen/CodeGenPrepare.cpp#L6059) is getting inserted right before `%load5` to use in that load, but then we end up reusing that one [here](https://github.com/llvm/llvm-project/blob/a76936f1c01c7cadbce8ea6553af758d0f614b6a/llvm/lib/CodeGen/CodeGenPrepare.cpp#L5909 for `%load` in a later iteration
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMVU1v4zYT_jX0ZSCDIvXlgw6OHS8WyIt3kQK9FqQ0ktnQpJYf2c2_L0jbcZJFUaSnAoI05Mw8mueZoSS8V7NB7El9R-r9SsRwtK4XGKUwT34l7fjSk4ZeLrolrIJBBBBrrQndBuFmDDCKILR4sTEA4XsgjGFxInyLxcJaSviWs3xLy_L9MllNlW-FejVK1hG-LVlXTB29WCZvNdf0pip-S2GM3eoITi0arzX87Jo_mqqYXcDnqtDKxJ_FbOI5g9DtiIMWDuHZqhFIRWfCuiU4wjZX_6TMzT2d3UBYLdxM2AZIe0foVkrCUzgkz4wBNZ7QhBzK9_B-R3WE7eAtzA5UU0HRVAniI0L5GYi6yVUMQuuPnH4BPpMEkA60kKhTgJT8TDwZN0raijGXkY2c-_r6D5g7EFrNBrq3udUtWXH2d8nlh-xLcv1v3yzGc9HpqTiDjE8vyGo4LdmbDfyeI85Jr2FJGlVeo9P2G6HaX9YX4dqLcA5D7kHab_dnbzo7dglQLEBY6_B7VA4J3y3OTkpj4ePpJNwL4feE7QY74oxmcbgIh4S1-chBMczLUhzjjMUUzUD4nkIxKi-kxsLGsMQAQOj2q_HBxSEoa2C06MHYAKM9KSMCQpqQ6NETVl718tE8iXH83MSdh_afhuQV-n2bHh5-_x_cPz7-_5HwLdw5-4QGTnaMGmGy0eRWDPa0KC0yDyGtCziei373UaJbj3jyoNUTQjgifLn_Bj8QBoeJLqnvjuiQ1HvCumMIi09dYgfCDrMKxyjXgz0RdtD6-fooFmf_xCEQdpDaSsIOom02vJnKgZZDO4hRDtihaOqai6mtu5FOTVnJRrzBUSlvZ0f8guZmfTu3dD0sC2H8oaH1Jn1MlE-qB2VmUMZjYgpOzccAEifrEBLXy6EgDYVgUwtBGQhHEbLuSTAZQ1LAJPpoRogLOIw-weY4a_7jetQbuoHJujd8E11lQIAWAR2ogC5PxGrs-bjhG7HCvmyrpuRt2dSrY9-JZtNMI5Nd244Vq2SNouwkLYWQm4mzleoZZTWtackYbWi15pwlLx047aSUG1JRPAml16n2tXXzSnkfsS95x2i3ykff578mYwZ_QPamP0u9X7k-Kybj7ElFtfLB32CCChr73bvTfZlTD8o8C61G-Pq4ik73n25NrsITdriU-dyzvwIAAP__ocJkkw">