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