[Openmp-commits] [clang] [llvm] [openmp] [Clang][OpenMP] Implement Loop splitting `#pragma omp split` directive (PR #183261)

Michael Kruse via Openmp-commits openmp-commits at lists.llvm.org
Fri Apr 3 04:56:55 PDT 2026


Meinersbur wrote:

I started a quick fix by using
```
// RUN: %libomp-cxx-compile -fopenmp-version=60  && %libomp-run | FileCheck %s --match-full-lines
```
in the new tests. However, this gets me two compiler crashes:
```
********************
Failed Tests (2):
  libomp :: transform/split/nonconstant_count.c
  libomp :: transform/split/unsigned_iv.c
```

<details>
<pre>
FAIL: libomp :: transform/split/unsigned_iv.c (1 of 15)
******************** TEST 'libomp :: transform/split/unsigned_iv.c' FAILED ********************
Exit Code: 1

Command Output (stdout):
--
# RUN: at line 1
/home/meinersbur/src/llvm/main/release/./bin/clang -fopenmp   -I /home/meinersbur/src/llvm/main/release/runtimes/runtimes-bins/openmp/runtime/src -I /home/meinersbur/src/llvm/main/_src/openmp/runtime/test -L /home/meinersbur/src/llvm/main/release/runtimes/runtimes-bins/openmp/runtime/src  -fno-omit-frame-pointer -I /home/meinersbur/src/llvm/main/_src/openmp/runtime/test/ompt /c/Users/meinersbur/src/llvm/main/_src/openmp/runtime/test/transform/split/unsigned_iv.c -o /home/meinersbur/src/llvm/main/release/runtimes/runtimes-bins/openmp/runtime/test/transform/split/Output/unsigned_iv.c.tmp -lm -latomic && /home/meinersbur/src/llvm/main/release/runtimes/runtimes-bins/openmp/runtime/test/transform/split/Output/unsigned_iv.c.tmp | tee /home/meinersbur/src/llvm/main/release/runtimes/runtimes-bins/openmp/runtime/test/transform/split/Output/unsigned_iv.c.tmp.out | /home/meinersbur/src/llvm/main/release/./bin/FileCheck /c/Users/meinersbur/src/llvm/main/_src/openmp/runtime/test/transform/split/unsigned_iv.c --match-full-lines
# executed command: /home/meinersbur/src/llvm/main/release/./bin/clang -fopenmp -I /home/meinersbur/src/llvm/main/release/runtimes/runtimes-bins/openmp/runtime/src -I /home/meinersbur/src/llvm/main/_src/openmp/runtime/test -L /home/meinersbur/src/llvm/main/release/runtimes/runtimes-bins/openmp/runtime/src -fno-omit-frame-pointer -I /home/meinersbur/src/llvm/main/_src/openmp/runtime/test/ompt /c/Users/meinersbur/src/llvm/main/_src/openmp/runtime/test/transform/split/unsigned_iv.c -o /home/meinersbur/src/llvm/main/release/runtimes/runtimes-bins/openmp/runtime/test/transform/split/Output/unsigned_iv.c.tmp -lm -latomic
# .---command stderr------------
# | /c/Users/meinersbur/src/llvm/main/_src/openmp/runtime/test/transform/split/unsigned_iv.c:8:19: error: unexpected OpenMP clause 'counts' in directive '#pragma omp split'
# |     8 | #pragma omp split counts(3, omp_fill)
# |       |                   ^
# | 1 error generated.
# `-----------------------------
# error: command failed with exit status: 1

--

********************
FAIL: libomp :: transform/split/nonconstant_count.c (14 of 15)
******************** TEST 'libomp :: transform/split/nonconstant_count.c' FAILED ********************
Exit Code: -6

Command Output (stdout):
--
# RUN: at line 1
/home/meinersbur/src/llvm/main/release/./bin/clang++ -fopenmp   -I /home/meinersbur/src/llvm/main/release/runtimes/runtimes-bins/openmp/runtime/src -I /home/meinersbur/src/llvm/main/_src/openmp/runtime/test -L /home/meinersbur/src/llvm/main/release/runtimes/runtimes-bins/openmp/runtime/src  -fno-omit-frame-pointer -I /home/meinersbur/src/llvm/main/_src/openmp/runtime/test/ompt -std=c++17 /c/Users/meinersbur/src/llvm/main/_src/openmp/runtime/test/transform/split/nonconstant_count.c -o /home/meinersbur/src/llvm/main/release/runtimes/runtimes-bins/openmp/runtime/test/transform/split/Output/nonconstant_count.c.tmp -lm -latomic -fopenmp-version=60  && /home/meinersbur/src/llvm/main/release/runtimes/runtimes-bins/openmp/runtime/test/transform/split/Output/nonconstant_count.c.tmp | tee /home/meinersbur/src/llvm/main/release/runtimes/runtimes-bins/openmp/runtime/test/transform/split/Output/nonconstant_count.c.tmp.out | /home/meinersbur/src/llvm/main/release/./bin/FileCheck /c/Users/meinersbur/src/llvm/main/_src/openmp/runtime/test/transform/split/nonconstant_count.c --match-full-lines
# executed command: /home/meinersbur/src/llvm/main/release/./bin/clang++ -fopenmp -I /home/meinersbur/src/llvm/main/release/runtimes/runtimes-bins/openmp/runtime/src -I /home/meinersbur/src/llvm/main/_src/openmp/runtime/test -L /home/meinersbur/src/llvm/main/release/runtimes/runtimes-bins/openmp/runtime/src -fno-omit-frame-pointer -I /home/meinersbur/src/llvm/main/_src/openmp/runtime/test/ompt -std=c++17 /c/Users/meinersbur/src/llvm/main/_src/openmp/runtime/test/transform/split/nonconstant_count.c -o /home/meinersbur/src/llvm/main/release/runtimes/runtimes-bins/openmp/runtime/test/transform/split/Output/nonconstant_count.c.tmp -lm -latomic -fopenmp-version=60
# .---command stderr------------
# | clang++: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated [-Wdeprecated]
# | clang-23: ../_src/clang/lib/CodeGen/CGStmt.cpp:59: void clang::CodeGen::CodeGenFunction::EmitStmt(const clang::Stmt*, llvm::ArrayRef<const clang::Attr*>): Assertion `S && "Null statement?"' failed.
# | PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
# | Stack dump:
# | 0.  Program arguments: /home/meinersbur/src/llvm/main/release/bin/clang-23 -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -dumpdir /home/meinersbur/src/llvm/main/release/runtimes/runtimes-bins/openmp/runtime/test/transform/split/Output/nonconstant_count.c.tmp- -disable-free -clear-ast-before-backend -main-file-name nonconstant_count.c -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fdebug-compilation-dir=/home/meinersbur/src/llvm/main/release/runtimes/runtimes-bins/openmp/runtime/test/transform/split -fcoverage-compilation-dir=/home/meinersbur/src/llvm/main/release/runtimes/runtimes-bins/openmp/runtime/test/transform/split -resource-dir /home/meinersbur/src/llvm/main/release/lib/clang/23 -I /home/meinersbur/src/llvm/main/release/runtimes/runtimes-bins/openmp/runtime/src -I /home/meinersbur/src/llvm/main/_src/openmp/runtime/test -I /home/meinersbur/src/llvm/main/_src/openmp/runtime/test/ompt -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/x86_64-linux-gnu/c++/13 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/backward -internal-isystem /home/meinersbur/src/llvm/main/release/lib/clang/23/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -std=c++17 -fdeprecated-macro -ferror-limit 19 -fopenmp -fopenmp-version=60 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fcxx-exceptions -fexceptions -faddrsig -fdwarf2-cfi-asm -o /tmp/meinersbur/lit-tmp-y2gjc07i/nonconstant_count-b156c4.o -x c++ /c/Users/meinersbur/src/llvm/main/_src/openmp/runtime/test/transform/split/nonconstant_count.c
# | 1.  <eof> parser at end of file
# | 2.  Per-file LLVM IR generation
# | 3.  /c/Users/meinersbur/src/llvm/main/_src/openmp/runtime/test/transform/split/nonconstant_count.c:6:5: Generating code for declaration 'main'
# |  #0 0x00007ff1d0e26852 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/meinersbur/src/llvm/main/release/bin/../lib/libLLVMSupport.so.23.0git+0x2e2852)
# |  #1 0x00007ff1d0e2347c llvm::sys::RunSignalHandlers() (/home/meinersbur/src/llvm/main/release/bin/../lib/libLLVMSupport.so.23.0git+0x2df47c)
# |  #2 0x00007ff1d0e235dc SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
# |  #3 0x00007ff1d0e2369c SignalHandlerTerminate(int, siginfo_t*, void*) Signals.cpp:0:0
# |  #4 0x00007ff1d06e5330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
# |  #5 0x00007ff1d073eb2c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
# |  #6 0x00007ff1d073eb2c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
# |  #7 0x00007ff1d073eb2c pthread_kill ./nptl/pthread_kill.c:89:10
# |  #8 0x00007ff1d06e527e raise ./signal/../sysdeps/posix/raise.c:27:6
# |  #9 0x00007ff1d06c88ff abort ./stdlib/abort.c:81:7
# | #10 0x00007ff1d06c881b _nl_load_domain ./intl/loadmsgcat.c:1177:9
# | #11 0x00007ff1d06db517 (/lib/x86_64-linux-gnu/libc.so.6+0x3b517)
# | #12 0x00007ff1d5671766 clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) (/home/meinersbur/src/llvm/main/release/bin/../lib/libclangCodeGen.so.23.0git+0x73a766)
# | #13 0x00007ff1d56b69e1 clang::CodeGen::CodeGenFunction::EmitOMPSplitDirective(clang::OMPSplitDirective const&) (/home/meinersbur/src/llvm/main/release/bin/../lib/libclangCodeGen.so.23.0git+0x77f9e1)
# | #14 0x00007ff1d567935b clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope(clang::CompoundStmt const&, bool, clang::CodeGen::AggValueSlot) (/home/meinersbur/src/llvm/main/release/bin/../lib/libclangCodeGen.so.23.0git+0x74235b)
# | #15 0x00007ff1d56f4ce3 clang::CodeGen::CodeGenFunction::EmitFunctionBody(clang::Stmt const*) (/home/meinersbur/src/llvm/main/release/bin/../lib/libclangCodeGen.so.23.0git+0x7bdce3)
# | #16 0x00007ff1d570b66c clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl, llvm::Function*, clang::CodeGen::CGFunctionInfo const&) (/home/meinersbur/src/llvm/main/release/bin/../lib/libclangCodeGen.so.23.0git+0x7d466c)
# | #17 0x00007ff1d5772512 clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl, llvm::GlobalValue*) (/home/meinersbur/src/llvm/main/release/bin/../lib/libclangCodeGen.so.23.0git+0x83b512)
# | #18 0x00007ff1d576d985 clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) (/home/meinersbur/src/llvm/main/release/bin/../lib/libclangCodeGen.so.23.0git+0x836985)
# | #19 0x00007ff1d57799ce clang::CodeGen::CodeGenModule::EmitDeferred() (/home/meinersbur/src/llvm/main/release/bin/../lib/libclangCodeGen.so.23.0git+0x8429ce)
# | #20 0x00007ff1d577c589 clang::CodeGen::CodeGenModule::Release() (/home/meinersbur/src/llvm/main/release/bin/../lib/libclangCodeGen.so.23.0git+0x845589)
# | #21 0x00007ff1d58282a1 (anonymous namespace)::CodeGeneratorImpl::HandleTranslationUnit(clang::ASTContext&) ModuleBuilder.cpp:0:0
# | #22 0x00007ff1d56ed8f5 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/home/meinersbur/src/llvm/main/release/bin/../lib/libclangCodeGen.so.23.0git+0x7b68f5)
# | #23 0x00007ff1cd6a4c9c clang::ParseAST(clang::Sema&, bool, bool) (/home/meinersbur/src/llvm/main/release/bin/../lib/../lib/libclangParse.so.23.0git+0x79c9c)
# | #24 0x00007ff1d34407e7 clang::FrontendAction::Execute() (/home/meinersbur/src/llvm/main/release/bin/../lib/libclangFrontend.so.23.0git+0x1cf7e7)
# | #25 0x00007ff1d33ba66d clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/home/meinersbur/src/llvm/main/release/bin/../lib/libclangFrontend.so.23.0git+0x14966d)
# | #26 0x00007ff1d63f6c63 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/home/meinersbur/src/llvm/main/release/bin/../lib/libclangFrontendTool.so.23.0git+0x6c63)
# | #27 0x00007ff1d896db6b cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/home/meinersbur/src/llvm/main/release/bin/clang-23+0x1bb6b)
# | #28 0x00007ff1d8962857 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>) driver.cpp:0:0
# | #29 0x00007ff1d8967685 clang_main(int, char**, llvm::ToolContext const&) (/home/meinersbur/src/llvm/main/release/bin/clang-23+0x15685)
# | #30 0x00007ff1d897bd70 main (/home/meinersbur/src/llvm/main/release/bin/clang-23+0x29d70)
# | #31 0x00007ff1d06ca1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
# | #32 0x00007ff1d06ca28b call_init ./csu/../csu/libc-start.c:128:20
# | #33 0x00007ff1d06ca28b __libc_start_main ./csu/../csu/libc-start.c:347:5
# | #34 0x00007ff1d8961dc5 _start (/home/meinersbur/src/llvm/main/release/bin/clang-23+0xfdc5)
# | clang++: error: unable to execute command: Aborted (core dumped)
# | clang++: error: clang frontend command failed with exit code -2 (use -v to see invocation)
# | clang version 23.0.0git (git at github.com:llvm/llvm-project.git a2d3783b451c0c19a5eb09b1ab9a1c66d81ab6ca)
# | Target: x86_64-unknown-linux-gnu
# | Thread model: posix
# | InstalledDir: /home/meinersbur/src/llvm/main/release/bin
# | Build config: +assertions
# | clang++: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated [-Wdeprecated]
# | clang++: note: diagnostic msg:
# | ********************
# |
# | PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
# | Preprocessed source(s) and associated run script(s) are located at:
# | clang++: note: diagnostic msg: /tmp/meinersbur/lit-tmp-y2gjc07i/nonconstant_count-52fddf.cpp
# | clang++: note: diagnostic msg: /tmp/meinersbur/lit-tmp-y2gjc07i/nonconstant_count-52fddf.sh
# | clang++: note: diagnostic msg:
# |
# | ********************
# `-----------------------------
# error: command failed with exit status: -6
</pre>
<details>

The pre-merge CI does not test openmp (see discussion in #174955). @ronlieb was a bit quicker than me with reverting.

@amitamd7 Please create an new PR

https://github.com/llvm/llvm-project/pull/183261


More information about the Openmp-commits mailing list