[llvm-bugs] [Bug 52273] New: ICE in LoopVectorizePass fails for -O1 -fopenmp-simd: Assertion `!verifyFunction(*L->getHeader()->getParent(), &dbgs())' failed.
via llvm-bugs
llvm-bugs at lists.llvm.org
Sat Oct 23 09:30:01 PDT 2021
https://bugs.llvm.org/show_bug.cgi?id=52273
Bug ID: 52273
Summary: ICE in LoopVectorizePass fails for -O1 -fopenmp-simd:
Assertion
`!verifyFunction(*L->getHeader()->getParent(),
&dbgs())' failed.
Product: libraries
Version: trunk
Hardware: PC
OS: Linux
Status: NEW
Severity: enhancement
Priority: P
Component: Loop Optimizer
Assignee: unassignedbugs at nondot.org
Reporter: Vsevolod.Livinskij at frtk.ru
CC: llvm-bugs at lists.llvm.org
I've attached C++ and LLVM IR reproducers.
LLVM IR reproducer:
@b = external local_unnamed_addr global i64, align 8
@e = external local_unnamed_addr global [0 x i16], align 2
define void @_Z1ojPA2_xPA2_A5_A20_j(i32 %0, i1 %1, [20 x i32]* %2)
local_unnamed_addr {
for.cond1.preheader:
br label %for.cond5
for.cond5.loopexit: ; preds = %omp.inner.for.cond
br label %for.cond5
for.cond5: ; preds =
%for.cond5.loopexit, %for.cond1.preheader
br i1 %1, label %for.cond10.preheader, label %omp.inner.for.cond.preheader
omp.inner.for.cond.preheader: ; preds = %for.cond5
br label %omp.inner.for.cond
for.cond10.preheader: ; preds = %for.cond5
ret void
omp.inner.for.cond: ; preds = %omp.inner.for.inc,
%omp.inner.for.cond.preheader
%.omp.iv.0 = phi i32 [ %add51, %omp.inner.for.inc ], [ 0,
%omp.inner.for.cond.preheader ]
%exitcond.not = icmp eq i32 %.omp.iv.0, %0
br i1 %exitcond.not, label %for.cond5.loopexit, label %omp.inner.for.body
omp.inner.for.body: ; preds = %omp.inner.for.cond
%idxprom27 = sext i32 %.omp.iv.0 to i64
%arrayidx28 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64
%idxprom27
br i1 %1, label %omp.inner.for.inc, label %cond.false
cond.false: ; preds = %omp.inner.for.body
%3 = load i32, i32* %arrayidx28, align 4, !tbaa !0
%extract.t = trunc i32 %3 to i16
br label %omp.inner.for.inc
omp.inner.for.inc: ; preds = %cond.false,
%omp.inner.for.body
%cond.off0 = phi i16 [ %extract.t, %cond.false ], [ 0, %omp.inner.for.body ]
store i16 %cond.off0, i16* getelementptr inbounds ([0 x i16], [0 x i16]* @e,
i64 0, i64 undef), align 2
%4 = load i32, i32* %arrayidx28, align 4, !tbaa !0
%conv50 = zext i32 %4 to i64
store i64 %conv50, i64* @b, align 8, !tbaa !4
%add51 = add i32 %.omp.iv.0, 1
br label %omp.inner.for.cond, !llvm.loop !6
}
!0 = !{!1, !1, i64 0}
!1 = !{!"int", !2, i64 0}
!2 = !{!"omnipotent char", !3, i64 0}
!3 = !{!"Simple C++ TBAA"}
!4 = !{!5, !5, i64 0}
!5 = !{!"long long", !2, i64 0}
!6 = distinct !{!6, !7, !9}
!7 = !{!"llvm.loop.parallel_accesses", !8}
!8 = distinct !{}
!9 = !{!"llvm.loop.vectorize.enable", i1 true}
Error:
>$ clang++ -c -O1 foo.ll
Instruction does not dominate all uses!
%40 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 %39
%arrayidx28.lcssa = phi i32* [ %arrayidx28, %omp.inner.for.inc ], [ %40,
%middle.block ]
clang++:
/testing/llvm/llvm_src_main/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:10494:
bool llvm::LoopVectorizePass::processLoop(llvm::Loop*): Assert
ion `!verifyFunction(*L->getHeader()->getParent(), &dbgs())' failed.
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash
backtrace, preprocessed source, and associated run script.
Stack dump:
0. Program arguments: clang++ -c -O1 foo.ll
1. Optimizer
#0 0x00005615eab69234 PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
#1 0x00005615eab67034 llvm::sys::CleanupOnSignal(unsigned long)
(/testing/llvm/bin_main/bin/clang-14+0x2447034)
#2 0x00005615eaaaefe8 CrashRecoverySignalHandler(int)
CrashRecoveryContext.cpp:0:0
#3 0x00007f2ccc63d3c0 __restore_rt
(/lib/x86_64-linux-gnu/libpthread.so.0+0x153c0)
#4 0x00007f2ccc0ed18b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4618b)
#5 0x00007f2ccc0cc859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x25859)
#6 0x00007f2ccc0cc729 (/lib/x86_64-linux-gnu/libc.so.6+0x25729)
#7 0x00007f2ccc0ddf36 (/lib/x86_64-linux-gnu/libc.so.6+0x36f36)
#8 0x00005615ead9bc53 llvm::LoopVectorizePass::processLoop(llvm::Loop*)
(/testing/llvm/bin_main/bin/clang-14+0x267bc53)
#9 0x00005615ead9cf00 llvm::LoopVectorizePass::runImpl(llvm::Function&,
llvm::ScalarEvolution&, llvm::LoopInfo&, llvm::TargetTransformInfo&,
llvm::Domina
torTree&, llvm::BlockFrequencyInfo&, llvm::TargetLibraryInfo*,
llvm::DemandedBits&, llvm::AAResults&, llvm::AssumptionCache&,
std::function<llvm::LoopAcce
ssInfo const& (llvm::Loop&)>&, llvm::OptimizationRemarkEmitter&,
llvm::ProfileSummaryInfo*) (/testing/llvm/bin_main/bin/clang-14+0x267cf00)
#10 0x00005615ead9d6d9 llvm::LoopVectorizePass::run(llvm::Function&,
llvm::AnalysisManager<llvm::Function>&)
(/testing/llvm/bin_main/bin/clang-14+0x267d6d
9)
#11 0x00005615ec103be6 llvm::detail::PassModel<llvm::Function,
llvm::LoopVectorizePass, llvm::PreservedAnalyses,
llvm::AnalysisManager<llvm::Function> >::
run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&)
(/testing/llvm/bin_main/bin/clang-14+0x39e3be6)
#12 0x00005615ea3629c6 llvm::PassManager<llvm::Function,
llvm::AnalysisManager<llvm::Function> >::run(llvm::Function&,
llvm::AnalysisManager<llvm::Functio
n>&) (/testing/llvm/bin_main/bin/clang-14+0x1c429c6)
#13 0x00005615eae98206 llvm::detail::PassModel<llvm::Function,
llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function> >,
llvm::PreservedA
nalyses, llvm::AnalysisManager<llvm::Function> >::run(llvm::Function&,
llvm::AnalysisManager<llvm::Function>&)
(/testing/llvm/bin_main/bin/clang-14+0x2778
206)
#14 0x00005615ea3613c9 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&,
llvm::AnalysisManager<llvm::Module>&)
(/testing/llvm/bin_main/bin/clang-14+0x1c413c9)
#15 0x00005615eae99106 llvm::detail::PassModel<llvm::Module,
llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses,
llvm::AnalysisManager<llvm::Module> >::run(llvm::Module&,
llvm::AnalysisManager<llvm::Module>&)
(/testing/llvm/bin_main/bin/clang-14+0x2779106)
#16 0x00005615ea35ef7f llvm::PassManager<llvm::Module,
llvm::AnalysisManager<llvm::Module> >::run(llvm::Module&,
llvm::AnalysisManager<llvm::Module>&)
(/testing/llvm/bin_main/bin/clang-14+0x1c3ef7f)
#17 0x00005615eaea8c40 (anonymous
namespace)::EmitAssemblyHelper::RunOptimizationPipeline(clang::BackendAction,
std::unique_ptr<llvm::raw_pwrite_stream,
std::default_delete<llvm::raw_pwrite_stream> >&,
std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>
>&) (.constprop.0) BackendUtil.cpp:0:0
#18 0x00005615eaeac472 clang::EmitBackendOutput(clang::DiagnosticsEngine&,
clang::HeaderSearchOptions const&, clang::CodeGenOptions const&,
clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef,
llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream,
std::default_delete<llvm::raw_pwrite_stream> >)
(/testing/llvm/bin_main/bin/clang-14+0x278c472)
#19 0x00005615ebd1ee63 clang::CodeGenAction::ExecuteAction()
(/testing/llvm/bin_main/bin/clang-14+0x35fee63)
#20 0x00005615eb5cec69 clang::FrontendAction::Execute()
(/testing/llvm/bin_main/bin/clang-14+0x2eaec69)
#21 0x00005615eb55dace
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)
(/testing/llvm/bin_main/bin/clang-14+0x2e3dace)
#22 0x00005615eb6aefe3
clang::ExecuteCompilerInvocation(clang::CompilerInstance*)
(/testing/llvm/bin_main/bin/clang-14+0x2f8efe3)
#23 0x00005615e962e7a7 cc1_main(llvm::ArrayRef<char const*>, char const*,
void*) (/testing/llvm/bin_main/bin/clang-14+0xf0e7a7)
#24 0x00005615e962adf8 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&)
driver.cpp:0:0
#25 0x00005615eb3ebde9 void llvm::function_ref<void
()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef>
>, std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#26 0x00005615eaaaf16c
llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>)
(/testing/llvm/bin_main/bin/clang-14+0x238f16c)
#27 0x00005615eb3ec4fd
clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef>
>, std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >*, bool*) const (.part.0) Job.cpp:0:0
#28 0x00005615eb3bdfbb
clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&,
clang::driver::Command const*&) const
(/testing/llvm/bin_main/bin/clang-14+0x2c9dfbb)
#29 0x00005615eb3beac9
clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&,
llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) const
(/testing/llvm/bin_main/bin/clang-14+0x2c9eac9)
#30 0x00005615eb3c8569
clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&,
llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&)
(/testing/llvm/bin_main/bin/clang-14+0x2ca8569)
#31 0x00005615e95a5bc6 main (/testing/llvm/bin_main/bin/clang-14+0xe85bc6)
#32 0x00007f2ccc0ce0b3 __libc_start_main
(/lib/x86_64-linux-gnu/libc.so.6+0x270b3)
#33 0x00005615e962a96e _start (/testing/llvm/bin_main/bin/clang-14+0xf0a96e)
clang-14: error: clang frontend command failed with exit code 134 (use -v to
see invocation)
clang version 14.0.0 (https://github.com/llvm/llvm-project.git
710596a1e15188171edd5c6fffe6b7fe483ca594)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /testing/llvm/bin_main/bin
C++ reproducer:
long long b;
char a, f, l;
extern int c[];
extern short e[];
long m;
int n;
void o(unsigned p, long long q[][2], unsigned r[][2][5][20]) {
for (long d = 0; b ; d++)
for (char g = 0; g < q[3][d];) {
for (unsigned h = 0; h < l; h++)
for (int i = 0; i < (int)m; i = m)
a = 0;
#pragma omp simd
for (int j = 0; j < 20; j += p) {
c[j] = 0 > r[3][d][p][j];
e[p * j] = n ? n : r[3][d][p][j];
b = r[3][d][p][j];
}
for (short k = 0; k < f; k = 3)
;
}
}
>$ clang++ -c -O1 -fopenmp-simd func.cpp
Instruction does not dominate all uses!
%55 = getelementptr inbounds [2 x [5 x [20 x i32]]], [2 x [5 x [20 x i32]]]*
%r, i64 3, i64 %d.0107, i64 %idxprom, i64 %54
%arrayidx28.lcssa = phi i32* [ %arrayidx28, %cond.end ], [ %55, %middle.block
]
clang++:
/testing/llvm/llvm_src_main/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:10494:
bool llvm::LoopVectorizePass::processLoop(llvm::Loop*): Assert
ion `!verifyFunction(*L->getHeader()->getParent(), &dbgs())' failed.
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash
backtrace, preprocessed source, and associated run script.
Stack dump:
0. Program arguments: clang++ -c -O1 -fopenmp-simd func.cpp
1. <eof> parser at end of file
2. Optimizer
#0 0x0000561fc497a234 PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
#1 0x0000561fc4978034 llvm::sys::CleanupOnSignal(unsigned long)
(/testing/llvm/bin_main/bin/clang-14+0x2447034)
#2 0x0000561fc48bffe8 CrashRecoverySignalHandler(int)
CrashRecoveryContext.cpp:0:0
#3 0x00007f8c814b53c0 __restore_rt
(/lib/x86_64-linux-gnu/libpthread.so.0+0x153c0)
#4 0x00007f8c80f6518b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4618b)
#5 0x00007f8c80f44859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x25859)
#6 0x00007f8c80f44729 (/lib/x86_64-linux-gnu/libc.so.6+0x25729)
#7 0x00007f8c80f55f36 (/lib/x86_64-linux-gnu/libc.so.6+0x36f36)
#8 0x0000561fc4bacc53 llvm::LoopVectorizePass::processLoop(llvm::Loop*)
(/testing/llvm/bin_main/bin/clang-14+0x267bc53)
#9 0x0000561fc4badf00 llvm::LoopVectorizePass::runImpl(llvm::Function&,
llvm::ScalarEvolution&, llvm::LoopInfo&, llvm::TargetTransformInfo&,
llvm::Domina
torTree&, llvm::BlockFrequencyInfo&, llvm::TargetLibraryInfo*,
llvm::DemandedBits&, llvm::AAResults&, llvm::AssumptionCache&,
std::function<llvm::LoopAcce
ssInfo const& (llvm::Loop&)>&, llvm::OptimizationRemarkEmitter&,
llvm::ProfileSummaryInfo*) (/testing/llvm/bin_main/bin/clang-14+0x267cf00)
#10 0x0000561fc4bae6d9 llvm::LoopVectorizePass::run(llvm::Function&,
llvm::AnalysisManager<llvm::Function>&)
(/testing/llvm/bin_main/bin/clang-14+0x267d6d
9)
#11 0x0000561fc5f14be6 llvm::detail::PassModel<llvm::Function,
llvm::LoopVectorizePass, llvm::PreservedAnalyses,
llvm::AnalysisManager<llvm::Function> >::
run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&)
(/testing/llvm/bin_main/bin/clang-14+0x39e3be6)
#12 0x0000561fc41739c6 llvm::PassManager<llvm::Function,
llvm::AnalysisManager<llvm::Function> >::run(llvm::Function&,
llvm::AnalysisManager<llvm::Functio
n>&) (/testing/llvm/bin_main/bin/clang-14+0x1c429c6)
#13 0x0000561fc4ca9206 llvm::detail::PassModel<llvm::Function,
llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function> >,
llvm::PreservedA
nalyses, llvm::AnalysisManager<llvm::Function> >::run(llvm::Function&,
llvm::AnalysisManager<llvm::Function>&)
(/testing/llvm/bin_main/bin/clang-14+0x2778
206)
#14 0x0000561fc41723c9 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&,
llvm::AnalysisManager<llvm::Module>&) (/testing/llvm/bin_main/bin/clang-14+0x
1c413c9)
#15 0x0000561fc4caa106 llvm::detail::PassModel<llvm::Module,
llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses,
llvm::AnalysisManager<llvm::Modul
e> >::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&)
(/testing/llvm/bin_main/bin/clang-14+0x2779106)
#16 0x0000561fc416ff7f llvm::PassManager<llvm::Module,
llvm::AnalysisManager<llvm::Module> >::run(llvm::Module&,
llvm::AnalysisManager<llvm::Module>&) (/t
esting/llvm/bin_main/bin/clang-14+0x1c3ef7f)
#17 0x0000561fc4cb9c40 (anonymous
namespace)::EmitAssemblyHelper::RunOptimizationPipeline(clang::BackendAction,
std::unique_ptr<llvm::raw_pwrite_stream, s
td::default_delete<llvm::raw_pwrite_stream> >&,
std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>
>&) (.constprop.0) Backend
Util.cpp:0:0
#18 0x0000561fc4cbd472 clang::EmitBackendOutput(clang::DiagnosticsEngine&,
clang::HeaderSearchOptions const&, clang::CodeGenOptions const&,
clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef,
llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream,
std::default_delete<llvm::raw_pwrite_stream> >)
(/testing/llvm/bin_main/bin/clang-14+0x278c472)
#19 0x0000561fc5b309e3
clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&)
(/testing/llvm/bin_main/bin/clang-14+0x35ff9e3)
#20 0x0000561fc6c85da9 clang::ParseAST(clang::Sema&, bool, bool)
(/testing/llvm/bin_main/bin/clang-14+0x4754da9)
#21 0x0000561fc5b2f398 clang::CodeGenAction::ExecuteAction()
(/testing/llvm/bin_main/bin/clang-14+0x35fe398)
#22 0x0000561fc53dfc69 clang::FrontendAction::Execute()
(/testing/llvm/bin_main/bin/clang-14+0x2eaec69)
#23 0x0000561fc536eace
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)
(/testing/llvm/bin_main/bin/clang-14+0x2e3dace)
#24 0x0000561fc54bffe3
clang::ExecuteCompilerInvocation(clang::CompilerInstance*)
(/testing/llvm/bin_main/bin/clang-14+0x2f8efe3)
#25 0x0000561fc343f7a7 cc1_main(llvm::ArrayRef<char const*>, char const*,
void*) (/testing/llvm/bin_main/bin/clang-14+0xf0e7a7)
#26 0x0000561fc343bdf8 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&)
driver.cpp:0:0
#27 0x0000561fc51fcde9 void llvm::function_ref<void
()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef>
>, std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#28 0x0000561fc48c016c
llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>)
(/testing/llvm/bin_main/bin/clang-14+0x238f16c)
#29 0x0000561fc51fd4fd
clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef>
>, std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >*, bool*) const (.part.0) Job.cpp:0:0
#30 0x0000561fc51cefbb
clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&,
clang::driver::Command const*&) const
(/testing/llvm/bin_main/bin/clang-14+0x2c9dfbb)
#31 0x0000561fc51cfac9
clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&,
llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) const
(/testing/llvm/bin_main/bin/clang-14+0x2c9eac9)
#32 0x0000561fc51d9569
clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&,
llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&)
(/testing/llvm/bin_main/bin/clang-14+0x2ca8569)
#33 0x0000561fc33b6bc6 main (/testing/llvm/bin_main/bin/clang-14+0xe85bc6)
#34 0x00007f8c80f460b3 __libc_start_main
(/lib/x86_64-linux-gnu/libc.so.6+0x270b3)
#35 0x0000561fc343b96e _start (/testing/llvm/bin_main/bin/clang-14+0xf0a96e)
clang-14: error: clang frontend command failed with exit code 134 (use -v to
see invocation)
clang version 14.0.0 (https://github.com/llvm/llvm-project.git
710596a1e15188171edd5c6fffe6b7fe483ca594)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /testing/llvm/bin_main/bin
clang-14: note: diagnostic msg:
********************
PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang-14: note: diagnostic msg: /tmp/func-4a3f7c.cpp
clang-14: note: diagnostic msg: /tmp/func-4a3f7c.sh
clang-14: note: diagnostic msg:
********************
LLVM version:
clang version 14.0.0 (https://github.com/llvm/llvm-project.git
710596a1e15188171edd5c6fffe6b7fe483ca594)
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20211023/6aacd5b8/attachment-0001.html>
More information about the llvm-bugs
mailing list