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