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

    <tr>
        <th>Summary</th>
        <td>
            [GVN] GVN hoists the load before `llvm.lifetime.start`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            miscompilation,
            llvm:GVN,
            generated by fuzzer
      </td>
    </tr>

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

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

<pre>
    Reproducer: https://godbolt.org/z/z7nYed6YG
```
; bin/opt -passes=gvn test.ll -S

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-unknown-linux-gnu"

define void @_ZN25test1877_855b7795214cd9f48dump_var17h084eb43ce28d2178E() {
start:
 ret void
}

define void @_ZN25test1877_855b7795214cd9f43fn417he5e8bfc10c7f64e7E(i8 %0, ptr %_24.i.i.i.i.i.i, ptr %_20.i.i.i.i.i.i, ptr %_25.i.i.i.i.i.i) {
bb2:
 %_15.i.i.i = alloca [48 x i8], align 16
  %_6.i.i.i = alloca [128 x i8], align 16
  %_71.i.i.i.i.i.i.i = alloca [16 x i8], align 8
 %_65.i.i.i.i.i.i.i = alloca [16 x i8], align 8
  %_59.i.i.i.i.i.i.i = alloca [16 x i8], align 16
  %_28.i.i.i.i.i.i = alloca [128 x i8], align 16
 %_25.i95.i.i.i.i.i = alloca [20 x i8], align 4
  %_23.i.i.i.i.i.i = alloca [128 x i8], align 16
  %_18.i.i.i.i.i.i = alloca [16 x i8], align 8
 %_0.i.i.i.i.i.i = alloca [16 x i8], align 16
  %_25.i.i.i.i.i.i1 = alloca [48 x i8], align 8
  %_24.i.i.i.i.i.i2 = alloca [128 x i8], align 16
 %_20.i.i.i.i.i.i3 = alloca [48 x i8], align 16
  %_11.i.i.i.i.i.i = alloca [80 x i8], align 16
  %_6.i.i.i.i.i.i = alloca [80 x i8], align 16
 %_4.i.i.i.i.i.i = alloca [32 x i8], align 16
  %_1.i.i.i.i.i.i = alloca [16 x i8], align 16
  call void @llvm.lifetime.start.p0(i64 48, ptr %_25.i.i.i.i.i.i1)
  call void @llvm.lifetime.start.p0(i64 128, ptr %_24.i.i.i.i.i.i2)
  call void @llvm.lifetime.start.p0(i64 48, ptr %_20.i.i.i.i.i.i3)
  call void @llvm.lifetime.start.p0(i64 80, ptr %_11.i.i.i.i.i.i)
  call void @llvm.lifetime.start.p0(i64 80, ptr %_6.i.i.i.i.i.i)
  call void @llvm.lifetime.start.p0(i64 32, ptr %_4.i.i.i.i.i.i)
  %1 = getelementptr i8, ptr %_6.i.i.i.i.i.i, i64 32
  br label %bb3.i.i.i.i.i.i

bb3.i.i.i.i.i.i:                                  ; preds = %bb3.i.i.i.i.i.i, %bb2
  switch i16 1, label %_ZN25test1877_855b7795214cd9f43fn717h4e35940ffac1f080E.exit.i.i [
    i16 1, label %bb4.i.i.i.i.i
    i16 0, label %bb3.i.i.i.i.i.i
 ]

bb4.i.i.i.i.i:                                    ; preds = %bb3.i.i.i.i.i.i
  %2 = getelementptr i8, ptr %_24.i.i.i.i.i.i, i64 42
  %3 = getelementptr i8, ptr %_24.i.i.i.i.i.i, i64 12
  %4 = getelementptr i8, ptr %_24.i.i.i.i.i.i, i64 48
  %5 = getelementptr i8, ptr %_24.i.i.i.i.i.i, i64 58
  store i16 0, ptr %_24.i.i.i.i.i.i2, align 2
  store i8 0, ptr %_6.i.i.i.i.i.i, align 4
  %6 = getelementptr i8, ptr %_24.i.i.i.i.i.i, i64 96
  %_13.i.i.i.i.i.i = getelementptr i8, ptr %_24.i.i.i.i.i.i, i64 112
 %7 = getelementptr i8, ptr %_24.i.i.i.i.i.i, i64 32
  store i8 0, ptr %_4.i.i.i.i.i.i, align 4
  store i32 0, ptr %_4.i.i.i.i.i.i, align 8
 store i128 0, ptr %_6.i.i.i.i.i.i, align 16
  store i64 0, ptr %_24.i.i.i.i.i.i2, align 16
  %8 = getelementptr i8, ptr %_24.i.i.i.i.i.i, i64 104
  store ptr null, ptr %_24.i.i.i.i.i.i2, align 8
  store i128 0, ptr %_20.i.i.i.i.i.i3, align 16
  %9 = getelementptr i8, ptr %_20.i.i.i.i.i.i, i64 16
  store i128 0, ptr %_20.i.i.i.i.i.i3, align 16
 %10 = getelementptr i8, ptr %_20.i.i.i.i.i.i, i64 32
  store i128 0, ptr %_20.i.i.i.i.i.i3, align 16
  store ptr null, ptr %_6.i.i.i.i.i.i, align 16
  %11 = getelementptr i8, ptr %_24.i.i.i.i.i.i, i64 40
  store i8 0, ptr %_24.i.i.i.i.i.i2, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr null, ptr null, i64 0, i1 false)
  %12 = getelementptr i8, ptr %_24.i.i.i.i.i.i, i64 16
  %13 = getelementptr i8, ptr %_24.i.i.i.i.i.i, i64 8
  store i16 0, ptr %_24.i.i.i.i.i.i2, align 2
  store i128 0, ptr %_4.i.i.i.i.i.i, align 16
 store ptr null, ptr %_4.i.i.i.i.i.i, align 16
  store i8 0, ptr %_6.i.i.i.i.i.i, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr null, ptr null, i64 0, i1 false)
  store ptr null, ptr %1, align 16
  store i64 0, ptr %_25.i.i.i.i.i.i1, align 8
  %14 = getelementptr i8, ptr %_25.i.i.i.i.i.i, i64 8
  store i64 0, ptr %_25.i.i.i.i.i.i1, align 8
  %15 = getelementptr i8, ptr %_25.i.i.i.i.i.i, i64 16
  store i64 0, ptr %_25.i.i.i.i.i.i1, align 8
  %16 = getelementptr i8, ptr %_25.i.i.i.i.i.i, i64 24
  store i64 0, ptr %_25.i.i.i.i.i.i1, align 8
  %17 = getelementptr i8, ptr %_25.i.i.i.i.i.i, i64 32
  store i64 0, ptr %_25.i.i.i.i.i.i1, align 8
  %18 = getelementptr i8, ptr %_25.i.i.i.i.i.i, i64 40
  store i64 0, ptr %_25.i.i.i.i.i.i1, align 8
  %19 = mul i8 %0, %0
  store i8 0, ptr %_4.i.i.i.i.i.i, align 4
  %20 = load ptr, ptr %_6.i.i.i.i.i.i, align 16
 store ptr %20, ptr %_24.i.i.i.i.i.i2, align 16
  %21 = load i8, ptr %_6.i.i.i.i.i.i, align 4
  store i8 %21, ptr %_24.i.i.i.i.i.i2, align 4
 store i32 0, ptr %_24.i.i.i.i.i.i2, align 8
  store i128 0, ptr %_24.i.i.i.i.i.i2, align 16
  store ptr null, ptr %_24.i.i.i.i.i.i2, align 16
  %22 = getelementptr i8, ptr %_24.i.i.i.i.i.i, i64 64
  call void @llvm.memcpy.p0.p0.i64(ptr null, ptr null, i64 0, i1 false)
  call void @llvm.memset.p0.i64(ptr null, i8 0, i64 0, i1 false)
  store ptr null, ptr %_6.i.i.i.i.i.i, align 16
  %23 = load i128, ptr %_6.i.i.i.i.i.i, align 16
 %24 = getelementptr i8, ptr %_24.i.i.i.i.i.i, i64 56
  %25 = load i8, ptr %_6.i.i.i.i.i.i, align 8
  %26 = mul i8 %25, -70
  store i8 0, ptr %_24.i.i.i.i.i.i2, align 8
  store ptr null, ptr %_4.i.i.i.i.i.i, align 16
 store i16 0, ptr %_24.i.i.i.i.i.i2, align 2
  store i128 0, ptr %_6.i.i.i.i.i.i, align 16
  %27 = xor i128 %23, 1
  store i128 0, ptr %_24.i.i.i.i.i.i2, align 16
  store i128 0, ptr %_4.i.i.i.i.i.i, align 16
 %28 = shl i8 %0, 1
  store ptr null, ptr %_6.i.i.i.i.i.i, align 16
  store i8 0, ptr %_6.i.i.i.i.i.i, align 4
  store i32 0, ptr %_6.i.i.i.i.i.i, align 8
  store i32 0, ptr %_24.i.i.i.i.i.i2, align 4
  call void @llvm.memset.p0.i64(ptr null, i8 0, i64 0, i1 false)
  store i32 0, ptr %_11.i.i.i.i.i.i, align 16
  store ptr null, ptr %_24.i.i.i.i.i.i2, align 16
  call void @llvm.memcpy.p0.p0.i64(ptr null, ptr null, i64 0, i1 false)
 store i64 0, ptr %_24.i.i.i.i.i.i2, align 16
  store i128 0, ptr %_11.i.i.i.i.i.i, align 16
  call fastcc void @_ZN25test1877_855b7795214cd9f48dump_var17h084eb43ce28d2178E()
  call fastcc void @_ZN25test1877_855b7795214cd9f48dump_var17h084eb43ce28d2178E()
  call fastcc void @_ZN25test1877_855b7795214cd9f48dump_var17h084eb43ce28d2178E()
 call fastcc void @_ZN25test1877_855b7795214cd9f48dump_var17h084eb43ce28d2178E()
  call void @llvm.lifetime.end.p0(i64 48, ptr %_25.i.i.i.i.i.i1)
  call void @llvm.lifetime.end.p0(i64 128, ptr %_24.i.i.i.i.i.i2)
  call void @llvm.lifetime.end.p0(i64 48, ptr %_20.i.i.i.i.i.i3)
  call void @llvm.lifetime.end.p0(i64 80, ptr %_11.i.i.i.i.i.i)
  call void @llvm.lifetime.end.p0(i64 80, ptr %_6.i.i.i.i.i.i)
  call void @llvm.lifetime.end.p0(i64 32, ptr %_4.i.i.i.i.i.i)
  call void @llvm.lifetime.end.p0(i64 16, ptr %_1.i.i.i.i.i.i)
  call void @llvm.lifetime.start.p0(i64 128, ptr %_28.i.i.i.i.i.i)
  call void @llvm.lifetime.start.p0(i64 20, ptr %_25.i95.i.i.i.i.i)
  call void @llvm.lifetime.start.p0(i64 128, ptr %_23.i.i.i.i.i.i)
  call void @llvm.lifetime.start.p0(i64 16, ptr %_18.i.i.i.i.i.i)
  call void @llvm.lifetime.start.p0(i64 16, ptr %_0.i.i.i.i.i.i)
  store i128 0, ptr %_0.i.i.i.i.i.i, align 16
  call void @llvm.lifetime.start.p0(i64 16, ptr %_71.i.i.i.i.i.i.i)
  call void @llvm.lifetime.start.p0(i64 16, ptr %_65.i.i.i.i.i.i.i)
  call void @llvm.lifetime.start.p0(i64 16, ptr %_59.i.i.i.i.i.i.i)
  br label %_ZN25test1877_855b7795214cd9f43fn717h4e35940ffac1f080E.exit.i.i

_ZN25test1877_855b7795214cd9f43fn717h4e35940ffac1f080E.exit.i.i: ; preds = %bb4.i.i.i.i.i, %bb3.i.i.i.i.i.i
  call void @llvm.lifetime.start.p0(i64 48, ptr %_15.i.i.i)
  %29 = getelementptr i8, ptr %_15.i.i.i, i64 42
  %30 = load i16, ptr %29, align 2
  store i16 %30, ptr %_6.i.i.i, align 2
  ret void
}

define void @_ZN25test1877_855b7795214cd9f44main17h00e36494eb335294E() {
start:
  call void @_ZN25test1877_855b7795214cd9f43fn417he5e8bfc10c7f64e7E(i8 0, ptr null, ptr null, ptr null)
  ret void
}
```

Generated with https://github.com/cbeuw/rustlantis + llubi.

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzUWklv4zoS_jX0hbBBFqnt4IPSeelbH-YBD-i5BFoomzOyZEhUlv71A0petFtLcpjuJJYl1lcrq0okvTyXh0SIPTKeEECogo8_n-8IABnPG69QxzTbX25u_DT83P9LnLM0LAKRIebio1LnHDEXwQuCl0Ma-mmsdml2QPDyR_9ayW8Rmr9_IuIik1x-iIvYE_ZlguAlPSu8PXt5LnLEng9vCVYiV7s4xtu_9UDiKi87CIVDT3mx95kWCiP2jBGA2J4Qc8X2DBZBzGVQ_tFfafOrvjJ5-WcrbxcUbMRcCvY2ssnlKilvmVdyk2__1sMA7nKoTJ5jcZXhwzZfTb4tkv8m6XuyjWVSfGwPSVGRIOKGIpKJwG-pDDHi5PXfv8DQGlLbsl5tw_AtyzGA8iB0Im6Hxen8-uZl1DoSmwufs0CAHQK17L-QFsTByHpCxM2VlylteOLiTKgSXzO0nhewZVHCqXUUhrD9KKAksCKTC0tzlDZGYBAEP_BZZfr6FfhO3v83npDBJ0bzyVUN34eLEnoUvYwqjevFcRp4GBlP3MYfWNrIeNaQXiwPCaamJiqpzF4iCuNUFq1L1CU3u9T2VU7TWEZbEhvObOKa2GCP0Q7rfHWCYwxSA-kS8ztjtoxx5dhRqcdMTVaYquElOiGo7k5qxjjMtHNDaDYvmikd0djucVF3Jswk1ZR8hJLBuMDLPBR4cXxLT3H8dtrFMhJKnsSuzG27M9Hpx-SY28OZhCJwZsKV-Xwom8F8vJZ4Td_Ph7MbubYZDWvRzHVgDOpgvA8MgVFNtINQIhYnkSg9XtojYvzAF3AN4Gc49nwR64G-38g5VWFr32QufvhPdxvnTIT5pWp3kOFHdbeSIX-XKjhiSU1M9aObQA-rqEWtIxfMcDiJIi-gEbHJXzvxIVU1OYynkgHuwfZ93lD1Ooq0RrVNgvXkuliGz7TLBMtcnAoPndrtCsrJAVcEthCB3hD4Uhluad1YiGBUCLlKM3F3ymAGuWY6qFPZeGwqduqtuVBUp5aYuxV7gfkr-yMwrIUIbMwMHYq6GS4kDCbRlD66ugimmftSiy5UJp_o2Hv1s5ealdRV1GOTIo4nMW_GYlvRTv3pyuw8lrnTx5cym2s468pAFnJuhtBsnYeNPB4WWuTH1Wwg6ZCRqH_g225FPolTcP7cnYn-0W-wYLfVuV7folhSHHlxLuqleWkarxlkaR7_ghTacfxAJqikHfb6KNm8fP2dDhtUgE5OYO1eufOiQycUVeOhOxfwnVCKe_muVnhCYe1lDHwl4wn1s5dxM_ktYDyhRvUybqawBYyrQnMqYlxbRSo_FzYEuhGtakiceqGmmZzM75OpBJlZ5oHeuT54l-lpYOwKYhJPXuti2o3P0pbggX4LepCaZZaWFJN_Y-rsRc2F6oe8xuD8TPy4gQBWi5zW0sMosaZd-sZj3NkbMwP3NnvBbM1eMPSorbWisVlYkr-2aXjssipTf6RZRV16UQ-kXzDNZjYxmneVv_NjI43SVYG54J10ICeNhtHcPDaSEtZO3o4Q7ZW1L0uK35LRFr6hDsXcA-VLFSIvV0HwdRtX_6_I3yxy_8qrSMKvWwBvgK1e_h4TbfbidwNs5dL3CNbche8G1IRl78nGNxsazoR6sJFhr4ODTntf3ytcLx5bqW3TdCuVbaKRPrCh3NlZoVq4rdUUob0dvVal9hb1Wrz2rvUVr75fs3J7pNrFWAvC3L5NDd502cBGx9JNv-u5hdpSGzxeZb1TdfZKSP2loe4HcIbaXLMi7Ml6bYrVx0X4yZOJrm1EMJM7XPiMGeDw4RMqTcuuOYxC2h1T_7UzoGn9CBJxf4pEZJ4SIX6X6tg-zCTVsfB3QXpC8BL4onhH8JIVuYq9RMkcI3jCcVz4coeIuwn3LHSY423EnlocHOpwwjfHvUeF7XPPcSxTsMAzbSJIaBAAwaLAC-yN3AMBgzAwqElNznc-ixzHiJgPdhjavok4ESdPxrsyINPssJF5Xog9ZeAYsClnX345vnWSeZCezjL2lEwTBLpyIQBNiZj7859ft1uHm-r-J46KP39Edjn0le318K1fHHI9C2Su8jtrJVVcnhXTWMYz_vnPL3xM9RisjqKKWF9EOiSR2TeFkEk2RRbvR2xdSlt9bM9Z-h8RKAQvpdI5gpeL3m97-F8AAAD__2Ml5TU">