<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/107305>107305</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
LoadStoreVectorizer hits assert, miscompiles with asserts disabled in corner case
</td>
</tr>
<tr>
<th>Labels</th>
<td>
vectorization
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
akshayrdeodhar
</td>
</tr>
</table>
<pre>
Miscompilation (assertions disabled): https://godbolt.org/z/8hPsxfneP
Crash (assertions enabled): https://godbolt.org/z/4vM9eqoqG
IR Input:
```
define void @shrink_after_gep(i32 addrspace(3)* %p) {
entry:
%a.ascast = addrspacecast i32 addrspace(3)* %p to i32*
%b.ascast = addrspacecast i32 addrspace(3)* %p to i32*
%gep1 = getelementptr inbounds i32, i32* %a.ascast, i64 8589934592 ;0x2000000000000000
%gep2 = getelementptr inbounds i32, i32* %b.ascast, i64 17179869185 ;0x4000000000000001
%tmp1 = load i32, i32* %gep1, align 8
%tmp2 = load i32, i32* %gep2, align 8
unreachable
}
```
`stripAndAccumulateInBoundsConstantOffsets` truncates the offset to the lower 32 bits, upon which the difference between offsets becomes 1. However, the addresses are not really consecutive.
```
Stack dump:
0. Program arguments: /home/ce/llvm-install/bin/opt -o /tmp/compiler-explorer-compiler202484-1060-14c40xj.p8sq/output.s -S -passes=load-store-vectorizer <source>
1. Running pass "function(load-store-vectorizer)" on module "<source>"
2. Running pass "load-store-vectorizer" on function "shrink_after_gep"
#0 0x000055be4aba7dd0 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/ce/llvm-install/bin/opt+0x5587dd0)
#1 0x000055be4aba4def llvm::sys::RunSignalHandlers() (/home/ce/llvm-install/bin/opt+0x5584def)
#2 0x000055be4aba4f45 SignalHandler(int) Signals.cpp:0:0
#3 0x00007ff54339f520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x00007ff5433f39fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
#5 0x00007ff54339f476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
#6 0x00007ff5433857f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
#7 0x00007ff54338571b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
#8 0x00007ff543396e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#9 0x000055be49a95cb7 (anonymous namespace)::Vectorizer::getConstantOffset(llvm::Value*, llvm::Value*, llvm::Instruction*, unsigned int) LoadStoreVectorizer.cpp:0:0
#10 0x000055be49a9a659 (anonymous namespace)::Vectorizer::gatherChains(llvm::ArrayRef<llvm::Instruction*>) LoadStoreVectorizer.cpp:0:0
#11 0x000055be49a9bf75 (anonymous namespace)::Vectorizer::run() LoadStoreVectorizer.cpp:0:0
#12 0x000055be49a9e380 llvm::LoadStoreVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/ce/llvm-install/bin/opt+0x447e380)
#13 0x000055be469d5df6 llvm::detail::PassModel<llvm::Function, llvm::LoadStoreVectorizerPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/ce/llvm-install/bin/opt+0x13b5df6)
#14 0x000055be4a989f2f llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/ce/llvm-install/bin/opt+0x5369f2f)
#15 0x000055be469d5e96 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/ce/llvm-install/bin/opt+0x13b5e96)
#16 0x000055be4a988cf7 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/ce/llvm-install/bin/opt+0x5368cf7)
#17 0x000055be469d4d96 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/ce/llvm-install/bin/opt+0x13b4d96)
#18 0x000055be4a9871e5 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/ce/llvm-install/bin/opt+0x53671e5)
#19 0x000055be4648ffe4 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::ArrayRef<std::function<void (llvm::PassBuilder&)>>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool) (/home/ce/llvm-install/bin/opt+0xe6ffe4)
#20 0x000055be464805ad optMain (/home/ce/llvm-install/bin/opt+0xe605ad)
#21 0x00007ff543386d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#22 0x00007ff543386e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#23 0x000055be464740b5 _start (/home/ce/llvm-install/bin/opt+0xe540b5)
Compiler returned: -1
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcWV1z4ygW_TX4hbILoe8HPzjOeie1k5pUZ6pfXUhcSUwjUAPKx_z6LWS7Y8tKttW9u7U7KSexgHvuPZfDBUnMWlErgDWKb1B8u2C9a7RZsy-2Ya-Gg-YNM4tC89f1vbClbjshmRNaYUQzZi0Yf2ExF5YVEjiiOQo3uHGusyjcILpDdFdrXmjpVtrUiO7-RHSXNQ_2pVLwgMgtIpvD361hthnhgpoDGz3d5_BVf_37OezdJ3ynut55u7NmlJDjZ7jkUAkF-EkLjlFEbGOE-rJnlQOzr6FDNBMhxYxzYztWAqJZ6IOiG4xo3CGaY5TeHKBAOfP6zRv2A9iK2ZJZh1F4-wYytHwEi532_YiesBCNi38TlG-toQsGnBocSGhBuc4ZLFShe8XtwWB7tDvnMbQmEc7iLM_DKM4pRuENeaHk8ufSF53lqxj5CtIgzbMkD7L44Cy69BWcOXPtkZjUjF9De96-hUlRK5xdGtKPDem1Ya8MsLLxSj1qK72dFNm3RuuM6DaKb8qyb3vJHNypmyEPW62sY8r9VlUWnEUJwc70qmQOLHYNYD10-On0V1I_g8EhxYVw1kfWd1rh50aUzdDPRVWBAVUCLsA9A6gjgMUFlLoFi4MV_kU_wxMYb--NvIbAWrCYGcBKO2yASfmKS60slL0TT7DCHyymR8fKL5j3bTdadGSFSP5gdG1Yi5mpey8Dv6IxortGt4Dozkt3J-VTuxQ-FVIiuiuEQnSnO4eX2g91bedHDuUIzBJeOqkNmOWphRIaZdEyIAlZBlEZkZc_Vl1mv3qQ3nW9W1m8fMTLzpcai8JbP91L67SB5ROUThvxJxiMwq3VvSkBhX87pxF4Gp96pYSqscfAiNKqV6UvWohmk2jDYqRYK9xq3kvwNhcOKD33Qad8vAM8oJ78-3HX5esCGyMaEkxe_LKJ4wIiVrCUc4J92v2UhRv7ag9fHoxQbpjQ382hrLwNMux5r60zwFpEk2GpKDfUQpp954QiekNe4jjz7n2GRlEGoygjDtVUlJ969ShqxeQvTHEJxg4R_Egg3sNEIHQcSBXF-MKl3yIO7A_NdlV2Xv9k-B3BhUe4tKriKAzzKqbkGKwUBaK7lyzZJ9FSCtW_LGvVHzrKldWrZAg1ojGdylh0iVyFeVXizjUGGN9_EVLOc5MneVVOuInHBKI0wbUdmM8lEqXJhIfk0kMWp1WIWaGNm4dPs7QKJ_DTK_ygmI0cFBPI2Sg3CeTJPOQwh3wqJ_m5CnOWx2WRDicmpdVrq3uLFWvhuP_nh6Xx-a1QDNc1uMtN5mJJf2ayB39KoFv8r1rvlHWmPxa9oa9Xw3GSn-rAr5rxR1-u3oJ4b1X4xU5G9FgS57PpMdeA2TZMKHvBbGMMe_0EFQq371LwVXh21MEo6qJK47lRm14dK9ZM53TkHMLsvIxPoD0wa8-dvg3efdvBksuJ3igmX62w90yx2oe8nTDyuUt-oOZGUeqDHqndcwvPuSU5j3mVnEXFwTEhj7sUs_Zec5DTsV2weS8nP0TZf_53chmEhU_SRC6ji_0rz_KKnm-kQ_4-iugvkJw4TDzrieTEY6H5gv3zQvuPJfUvMBleqdd7nJ-MZKTUrKzSs6juh8Pz7_oUgU_yhrPOaTPN72Awi93R5CeE5oOe4JaOhBbxmUI7kdl-Z0Z-gPJ7Ovnv5zEIC5-giTxmI42kAcTfsfCmsvf_lpQ4TDzbiaRcHA6TKKsqiM5iMv2gjAfRgRTq8kbu0Rmhan84mlDWFbvfmanB3bOyGXA2U72_isIw83qnKn3XdvJ6lNbyt-FWfCfkBMhPdb9DZ_IEOORE9rVQ15X1bbx1_ND27S4_3B6eFZ6n0WPd9EJyfzc46HaiXuvO7Z3Wx2V-YPEPofhHoz6DEZUAcxpX-J7Z_2drDRKvoWupUTKSGokZx7pz90yo-U689YSTYHSDlvB85j0yzXk-cbCkdIwMEcH7vTfeW8eM27dvRL7bF0RTvi4PsVEakSLGBy-zMxV745GP7fGRFzbgeqPA6xQvg9FzuQVfhzwPc7aAdZDSOMqChOaLZh1CxSqW8RTyJCpyVoVZSWJGUkriEkKyEGtKaERyElFCU5KvIs5jXlRhDgWLqyhGEYGWCbnysa-0qRfC2h7WAUlDEi8kK0Da4f0CpaeHVuxw4KAovl2Y9UC66GuLIiKFdfYNygknYT1xYseNcBYf3hR4hbentxNg8bNwzbHr7c0EFgqX2igwuGQWFr2R69H7BOGavliVuj1OxGk-OqP_gNIhuhuYWUR3R3JPa_rPAAAA__-pMorC">