<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/124759>124759</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
LoopVectorizer `assert(AddressSpace == AS && with addrspacecast` is hit
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
coldav
</td>
</tr>
</table>
<pre>
The following code produces an assert in RuntimeCheckingPtrGroup::addPointer()
`
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-unknown-elf"
define void @__mux_host_0(ptr addrspace(1) %_arg_resultPtr, ptr addrspace(1) %add.ptr.i.sroa_idx.i.i.i.i) {
loopIR.i.preheader:
%0 = alloca i8, i64 0, align 128
%_arg_localAccessor = addrspacecast ptr %0 to ptr addrspace(3)
%arrayidx.ascast.i.i.i.i.i.i = addrspacecast ptr %0 to ptr addrspace(4)
br label %loopIR2.i
loopIR2.i: ; preds = %loopIR2.i, %loopIR.i.preheader
%1 = phi i64 [ 0, %loopIR.i.preheader ], [ %3, %loopIR2.i ]
store i32 0, ptr addrspace(4) %arrayidx.ascast.i.i.i.i.i.i, align 4
store float 0.000000e+00, ptr addrspace(1) %add.ptr.i.sroa_idx.i.i.i.i, align 4
%2 = load i64, ptr addrspace(3) %_arg_localAccessor, align 4
store i64 0, ptr addrspace(1) %_arg_resultPtr, align 4
%3 = add i64 %1, 1
br i1 false, label %loopIR2.i, label %exitIR.i
exitIR.i: ; preds = %loopIR2.i
ret void
}
`
This crashes with `opt --passes loop-vectorize /tmp/reduced.ll -S -o -` as follows:
`
./bin/opt --passes loop-vectorize /tmp/reduced.ll -S -o -
opt: /home/colin/llvm-project/llvm/lib/Analysis/LoopAccessAnalysis.cpp:423: bool llvm::RuntimeCheckingPtrGroup::addPointer(unsigned int, const llvm::SCEV*, const llvm::SCEV*, unsigned int, bool, llvm::ScalarEvolution&): Assertion `AddressSpace == AS && "all pointers in a checking group must be in the same address space"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: ./bin/opt --passes loop-vectorize /tmp/reduced.ll -S -o -
1. Running pass "function(loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>)" on module "/tmp/reduced.ll"
2. Running pass "loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>" on function "__mux_host_0"
#0 0x00005a58a99c2ddc llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/colin/llvm-project/llvm/lib/Support/Unix/Signals.inc:798:22
#1 0x00005a58a99c31fd PrintStackTraceSignalHandler(void*) /home/colin/llvm-project/llvm/lib/Support/Unix/Signals.inc:874:1
#2 0x00005a58a99c0663 llvm::sys::RunSignalHandlers() /home/colin/llvm-project/llvm/lib/Support/Signals.cpp:105:20
#3 0x00005a58a99c2674 SignalHandler(int) /home/colin/llvm-project/llvm/lib/Support/Unix/Signals.inc:415:1
#4 0x00007c96b3242520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#5 0x00007c96b32969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#6 0x00007c96b32969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#7 0x00007c96b32969fc pthread_kill ./nptl/pthread_kill.c:89:10
#8 0x00007c96b3242476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
#9 0x00007c96b32287f3 abort ./stdlib/abort.c:81:7
#10 0x00007c96b322871b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#11 0x00007c96b3239e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#12 0x00005a58a8936a8b llvm::RuntimeCheckingPtrGroup::addPointer(unsigned int, llvm::SCEV const*, llvm::SCEV const*, unsigned int, bool, llvm::ScalarEvolution&) /home/colin/llvm-project/llvm/lib/Analysis/LoopAccessAnalysis.cpp:429:37
#13 0x00005a58a8936a20 llvm::RuntimeCheckingPtrGroup::addPointer(unsigned int, llvm::RuntimePointerChecking const&) /home/colin/llvm-project/llvm/lib/Analysis/LoopAccessAnalysis.cpp:413:20
#14 0x00005a58a8936f8d llvm::RuntimePointerChecking::groupChecks(llvm::EquivalenceClasses<llvm::PointerIntPair<llvm::Value*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value*>, llvm::PointerIntPairInfo<llvm::Value*, 1u, llvm::PointerLikeTypeTraits<llvm::Value*>>>, std::less<llvm::PointerIntPair<llvm::Value*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value*>, llvm::PointerIntPairInfo<llvm::Value*, 1u, llvm::PointerLikeTypeTraits<llvm::Value*>>>>>&, bool) /home/colin/llvm-project/llvm/lib/Analysis/LoopAccessAnalysis.cpp:554:11
#15 0x00005a58a893678d llvm::RuntimePointerChecking::generateChecks(llvm::EquivalenceClasses<llvm::PointerIntPair<llvm::Value*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value*>, llvm::PointerIntPairInfo<llvm::Value*, 1u, llvm::PointerLikeTypeTraits<llvm::Value*>>>, std::less<llvm::PointerIntPair<llvm::Value*, 1u, bool, llvm::PointerLikeTypeTraits<llvm::Value*>, llvm::PointerIntPairInfo<llvm::Value*, 1u, llvm::PointerLikeTypeTraits<llvm::Value*>>>>>&, bool) /home/colin/llvm-project/llvm/lib/Analysis/LoopAccessAnalysis.cpp:389:26
#16 0x00005a58a893a016 (anonymous namespace)::AccessAnalysis::canCheckPtrAtRT(llvm::RuntimePointerChecking&, llvm::ScalarEvolution*, llvm::Loop*, llvm::DenseMap<llvm::Value*, llvm::SCEV const*, llvm::DenseMapInfo<llvm::Value*, void>, llvm::detail::DenseMapPair<llvm::Value*, llvm::SCEV const*>> const&, llvm::Value*&, bool) /home/colin/llvm-project/llvm/lib/Analysis/LoopAccessAnalysis.cpp:1243:3
#17 0x00005a58a8940750 llvm::LoopAccessInfo::analyzeLoop(llvm::AAResults*, llvm::LoopInfo const*, llvm::TargetLibraryInfo const*, llvm::DominatorTree*) /home/colin/llvm-project/llvm/lib/Analysis/LoopAccessAnalysis.cpp:2638:31
#18 0x00005a58a89422b3 llvm::LoopAccessInfo::LoopAccessInfo(llvm::Loop*, llvm::ScalarEvolution*, llvm::TargetTransformInfo const*, llvm::TargetLibraryInfo const*, llvm::AAResults*, llvm::DominatorTree*, llvm::LoopInfo*) /home/colin/llvm-project/llvm/lib/Analysis/LoopAccessAnalysis.cpp:3028:15
#19 0x00005a58a894ae40 std::_MakeUniq<llvm::LoopAccessInfo>::__single_object std::make_unique<llvm::LoopAccessInfo, llvm::Loop*, llvm::ScalarEvolution*, llvm::TargetTransformInfo*&, llvm::TargetLibraryInfo const*&, llvm::AAResults*, llvm::DominatorTree*, llvm::LoopInfo*>(llvm::Loop*&&, llvm::ScalarEvolution*&&, llvm::TargetTransformInfo*&, llvm::TargetLibraryInfo const*&, llvm::AAResults*&&, llvm::DominatorTree*&&, llvm::LoopInfo*&&) /usr/include/c++/11/bits/unique_ptr.h:962:30
#20 0x00005a58a8942883 llvm::LoopAccessInfoManager::getInfo(llvm::Loop&) /home/colin/llvm-project/llvm/lib/Analysis/LoopAccessAnalysis.cpp:3084:41
#21 0x00005a58a831900e llvm::LoopVectorizationLegality::canVectorizeMemory() /home/colin/llvm-project/llvm/lib/Transforms/Vectorize/LoopVectorizationLegality.cpp:1208:7
#22 0x00005a58a831bc45 llvm::LoopVectorizationLegality::canVectorize(bool) /home/colin/llvm-project/llvm/lib/Transforms/Vectorize/LoopVectorizationLegality.cpp:1840:7
#23 0x00005a58a800b8b5 llvm::LoopVectorizePass::processLoop(llvm::Loop*) /home/colin/llvm-project/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:10349:7
#24 0x00005a58a800dde6 llvm::LoopVectorizePass::runImpl(llvm::Function&) /home/colin/llvm-project/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:10779:27
#25 0x00005a58a800e133 llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /home/colin/llvm-project/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:10816:39
#26 0x00005a58a65ef71b llvm::detail::PassModel<llvm::Function, llvm::LoopVectorizePass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /home/colin/llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:92:3
#27 0x00005a58a96e6133 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /home/colin/llvm-project/llvm/include/llvm/IR/PassManagerImpl.h:85:18
#28 0x00005a58a4a21a65 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/colin/llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:92:3
#29 0x00005a58a96e513e llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /home/colin/llvm-project/llvm/lib/IR/PassManager.cpp:129:23
#30 0x00005a58a4a21995 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /home/colin/llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:92:3
#31 0x00005a58a96e5d5f llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) /home/colin/llvm-project/llvm/include/llvm/IR/PassManagerImpl.h:85:18
#32 0x00005a58a476e632 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/colin/llvm-project/llvm/tools/opt/NewPMDriver.cpp:541:10
#33 0x00005a58a473c69f optMain /home/colin/llvm-project/llvm/tools/opt/optdriver.cpp:739:27
#34 0x00005a58a4739e81 main /home/colin/llvm-project/llvm/tools/opt/opt.cpp:25:64
#35 0x00007c96b3229d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#36 0x00007c96b3229e40 call_init ./csu/../csu/libc-start.c:128:20
#37 0x00007c96b3229e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#38 0x00005a58a4739d65 _start (./bin/opt+0xb93d65)
`
I've done some debugging and in `RuntimeCheckingPtrGroup::addPointer()` II can see the first two elements if RTCheck have the same dependency set but different address spaces.
I did try removing the dependency set being equal continuing the loop here https://github.com/llvm/llvm-project/blob/main/llvm/lib/Analysis/LoopAccessAnalysis.cpp#L1219
`
// Only need to check pointers between two different dependency sets.
if (RtCheck.Pointers[i].DependencySetId ==
RtCheck.Pointers[j].DependencySetId)
continue;
`
This does seem to fix the issue but I was wary on whether this was just another symptom rather than the proper fix.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsW1tT67qS_jXiRZWULV9iP_AQYGWGmsUcCjjrNSXbnUQbWfKSZCDn109Jci42CZdsmJnaZwMFsS196sunVktuqNZsKQDOUXKBkqsz2pqVVOel5BV9OitktT5_WAFeSM7lMxNLXMoKcKNk1ZagMRWYag3KYCbwXSsMq-FyBeUjE8tbo_5DybZB0RRFU1pVt5IJAwqRDJEcBVOUBiiYGqqWYHBFDeV0LVuDUXSFESEwqlE0hVFDJgGKphFxv-xl2L-0n9LY_Rqx7YeQZCiahiQbLbKg-yTcrXTTPY1H97YZITs5jGINh40ML1k6T-NRKx6FfBbbv8AXvhMKphUsmAD8JFmFURzM53X7Ml9JbeYBIlljFKZVpXRDS0AkCxHJMSLJnKrlXIFuubk1CpFLfKwlrapxY9SYjbWSdM6qlzHz367B5AIFUy5lc303ZuNGwQpoBcoaPZhiCxA4ZSjnsqSYZXYslsY4sB8oZ0uBrQ2C6VYs25BPyxK0lsp33shVUm2cpA7XyFdSR961TnCl6NqKS7XttpHafn8SNO5AcaEwpwVw29LrTMbMu2F3GU3xB79QdIEbBZXu3L2HSS531z27dkYNXZdmxZwtUXLh7XmwD0bJlXuYXNgGUa8hsdZIrhyuNlIBZhHxYIfM8I5hdz6N9xAXXFKDg3HgvgCRi-DgAB-hXB8fkYQ4S3BJK2uKQ7DRPud75Dos7padH588A5miDcG8d0gS2kbhhkMsxAvKNdibB_i0fxdemLHe9CTbXkXTt8hjh1FgXEywHSdX22j3sGIal4rqFWj8zMwKozSQjcGjUWMjqcYWZvQEpZGK_QswIjNTN4jMFNiQW405x6N7PJJ4hNIAU93FZu1n_HagMSKzgglEZqeiB1PZGKcpma1kDYjMSskdJOdP9ahR8g8oTXdp_7ACkdlUUL7WTCMy-yll4129uTkuG7sexCSywIWUHLvObon4-PrRCrdqVZgJY91VSqHNHtL95Y9fiEzfeTREseI45-8al5RT9eNJ8tYwKRBJbSSKpnjqFj0mhXXftKoUaH1vWWrJYPkwvceudWpXEco5brzw2i6UFJedjnhpNcR1qw0uwD4zK8Ca1uCID1rjjvwEkQleUMahGqNgevvzx_T-B9ZtUTODKS7aJVbQSGVsAF0Z0zhCkBkisyUzq7YYl7Le81Xfg0zrFqzLMBXWHiVvK3CyOK7igpaPRtES7Nj3hpaPuGrrxnMuGPtweqvkUtEaU7VsaxDGSoC_godhN8BdK4Q1msWwdl20ovR-yfp4KLoUcuQMzoE-wWghVQnVSAq-RtGFkLumg0co-mFdTAiWAteyam0uYI3_Sj6fAJAjon2pPE6YjbIWvZ9kEL_gRgEOXmyAT2iS0TwvSVWVe2TWa-0_3ComjHPig_KBdddI0ee51EYBrR1_L_3kyD8ZBO7bxnIRkdk_BXuxN9hSUK7HTJQomk5ym4htBQ8HgkfhosIDKT3Af1JRcRcCXGy18_iLRcsmNoEMO8nIQLIgTaNDJr1rRU9A7ZPck0XbyOTDZRgk1lxBJ1Q09HM6ifHQPt_htjhM9mwTd2JMyjwtIhKThATY6d2hdckzZ6J9GS1F6x-UYy3Hqc1BXlyXbcIYJX3APM0XJZ7PG7NSQKv5I-N8zuqGgw0u1M0FG11EYzgis_1mYyetdeQk7cDTj4DbCSoofxN24vYQG19MDsHu93kTK8v3sbKhQeNJipfaucDB-I-IzMbuaq0raGzQbqR23lKUaXDAZGK3Nx1u3scl2WQRYVrYtcLhmMr7y93yctkd1sTmEiQKg1fdwwLPBZ_bnG9eyZoy7wgmnJb2dq2XJfVYYTixwuQdWthHi3LI08-xxnXpdpAkCntTNMujlGbFlyQV_ZzBJxJd5vDGoxOTim9Jsiy7oo0bo1d2IsEX26nD6JpuoDbm-S41w2gTHK2a8VDNRVa9K6J_5nIxd0v31sQfv1v2RDmIEi65S19QdLl73GFdC3NLmeo9-kV5Cx0xwvYwHbruP9kjPKwbeFCUGX0YxeYCB7p2I1-LhXxn9FNH9T_kEmtT-acc9L-pFTpbpDs9voPVSeLSkLBjdTJk9eTjrAYBihr4m9h_E_v_AbEjl_OQtCN2OiA2DUKXDlAhxbqWrcaC1tDtgXMveh_X3yupcAS_NWpq7h56ND8yO7ymb6zLg6XeqvTq5hUIDTe0OeqZD2URG5Q3fex2PEOOVGAo432UN3l6TB7n_b2ler_lrv83kyMksV3Mo44ckz454mCSBAOHeBhvN5epWMB_gffVHgem0zt3XqgPutX2P-KaB_da4CcrFFXrN9pdyZoJaqR6UAAnbUw_YiCSRnb7EW3WhWxgIUKK6B0LDe7tG-kgw9-bFt5AD4oKvZCq_gJTHvfVayMf8uS3WT8K_DulpLN-PrA-hTjYrSTzG_oI_xTsd28uDl3yo2s810wsOcxlYaXbodT0EeatYL9beAvn_Uh1gh93U_5jTky_3o823h1iaPqh8P261Xdr-XrE17q-btNjbrrbKrVauX21O461REbkwv3MwtCdq9pRZ54d88ao8crutFP3arTbEJFgGCKy7HiIuKGCLv3bQ5s5miMh4pu2clGQxW5H14neOxfMojAPAhiI_qs7N3XHQT9hSTkz621KsHkKN1BLtT7pUG7LFSv6FrBT4-Dw28UsyHbHKIQMlCnKODlNGUSy05bg01XJ4mBPlf5RQhAUWXFMFbilukvRGiWtz18tzds5_S3qwPYMNYrzPR3igQ5VBen7OqhWXNcN78k_276FOGFafFKHyST3p3teiWSgBITRcG4fVuK4Ar3Q1k3PbVS4PNCp2zN8s-KZr9roDv1Ib9uQJrCYhMWRrNjqfSMr4IfFfxWH-wY7yR6bRf3_2NC7daO7cX2HyMzZw49z3Z13-2WD7DJv0su88xTSPrH2MD5g1b-c2erGmyxzr0Oyzma9XDymJKRp8gWc_DZb_7V9dJTa-YDaSRjtJxU37p3vg9zIZjGnFW2MVIc19x0-pXfX5cTIOVR1m264paFTs_8y2LIxzz_Hxo1elx80zgnaHyPT_6JJTyfS4K11CkmVLD4wbw_Z9S9kroOxsf8ePZ6kkEZkT1TVOirdsgY4E_2KhHujmFjeweIQFY9s3G5ouXI4751A-GRu2EpK_o_WNK2ZMX4A5E89PqLOVCm6tnd7R8_WJrxdMvE6Xu_ab48KtuUw0aWvRt03o8W6aBmvQG3KmF6vArIxc2O3Fu7Ka_FfTFRvtfoFii0YqE27zRH45_5-nIJ2ZO3LiRCZ_Tc8395cKfa0jYNJHG5eqlvmRX3mRWWaL7BszA1l4sQxZWOq_REn0X5SHsWDEXPIQlz_qeE2p3-Jr3T24wzKJUhe5QGezzkryrk2VJl5STmfb1_Pl7p9XTrQVSYc6uSmcdJVTPsh0-GQEAfYdWCCmeEo_qOFHjloXw7gjtA2r2uH9RMesafEIfkPIkdub9SdzUXZ0AtVmmAPaSdGryzNlRUUeVSlyX5lOgqm14hMngBXUgDWsgZcQdEul0wsu0I5jNLgc3XvaYCvr3FJBdbgS-wWTGmDzbPE4GtbNGYLfPfgAPGKPsGuKrCCBkQFolxjDQYXrcEVWyxAgTD9kkE97lTAFauwUWusoJZPVnSLNgQC-wB-t5TjUgrDRLtpyaVs8AoUfL6ssODSZizWhZ8_DyLRz5CEO3dgPyz-h-BrLAAqbKQvpNwVVxZgngGEM-bOLn1dnWGshRHJ7owz8rhzkUbJBUPJ1fhq2-MezHXVVXXafgd6_HGgx6Zi3X11BgUUXfQLgSsJ2tKgtqos2Iuzt6vFdJ69xs9U42eq1lgK_LwCswKFje1pH_zRaoOpkO6uXteNkTVWtGtEfS1po2QDyoJ3fDirzqMqj3J6BufhJMqCSTKJg7PVeZou0jzJIcwnZRQHabJIK0LjJM5oQYHGZ-ycBCQJQpKFcZwl-ThbxFEYxFBkQQlFmaM4gJoyPraeHku1PHO6nIckniT5mSuq1u4_TQgR8Ow1RYSg5OpMnTvuFO1SozjgTBu9gzHMcDjv7c6VnXn-f08Qyd4uwXV11r1_N7CzkGm8YuasVfz89HrZTrWnc_I_AQAA__-yLPnX">