Skip to content

[Flang][OpenMP] Allocatables in a nested series of BLOCK with a do loop wrapping the inner BLOCK prompts a crash with HLFIR flow when used inside of a !$omp target #82368

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
agozillon opened this issue Feb 20, 2024 · 2 comments
Labels
crash Prefer [crash-on-valid] or [crash-on-invalid] llvm:transforms

Comments

@agozillon
Copy link
Contributor

The below small test will crash for device compilation on AMDGPU instruction selection currently for the new-ish HLFIR flow, but passes using the -flang-deprecated-no-hlfir option:

PROGRAM main
    integer, allocatable :: a
    allocate(a)

!$omp target map(tofrom:a)
   sub_call : BLOCK
      do i = 1, 10
        BLOCK
           a = 1
        END BLOCK
     end do
    END BLOCK sub_call
!$omp end target
END PROGRAM main

The crash dump:

LLVM ERROR: Cannot select: t382: ch = stackrestore t381, t352
  t352: i64,ch = stacksave t351
In function: __omp_offloading_fd00_4b20113__QQmain_l42
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper --host-triple=x86_64-unknown-linux-gnu --linker-path=/work/agozillo/git/flang-dev/llvm-main-project/build/bin/ld.lld -- -z relro --hash-style=gnu --eh-frame-hdr -m elf_x86_64 -pie -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o a.out /lib/x86_64-linux-gnu/Scrt1.o /lib/x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o -L/home/agozillo/git/flang-dev/llvm-main-project/flang/build_flang_runtime -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib64 -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib64 -L/lib -L/usr/lib -L/home/agozillo/git/flang-dev/llvm-main-project/build/lib -L/home/agozillo/git/flang-dev/llvm-main-project/build/lib -L/home/agozillo/git/flang-dev/llvm-main-project/flang/build_flang_runtime -L/home/agozillo/git/flang-dev/llvm-main-project/build/projects/openmp/libomptarget -L/home/agozillo/git/flang-dev/llvm-main-project/build/projects/openmp/ -L/home/agozillo/git/flang-dev/llvm-main-project/build/projects/openmp/libomptarget/DeviceRTL -L/etc/alternatives/rocm/lib -L/home/agozillo/git/flang-dev/llvm-main-project/build/runtimes/runtimes-bins/openmp/runtime/src/ -L/home/agozillo/git/trunk17.0/llvm-project/build/lib/ -L/home/agozillo/git/flang-dev/installed/lib -L. /tmp/block-construct-test-08876c.o -L/work/agozillo/git/flang-dev/llvm-main-project/build/lib --whole-archive -lFortran_main --no-whole-archive -lFortranRuntime -lFortranDecimal -lm -lomp -lomptarget -lomptarget.devicertl -lcgpu -lmgpu -L/work/agozillo/git/flang-dev/llvm-main-project/build/lib -lgcc --as-needed -lgcc_s --no-as-needed -lpthread -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o /lib/x86_64-linux-gnu/crtn.o
1.      Running pass 'CallGraph Pass Manager' on module 'ld-temp.o'.
2.      Running pass 'AMDGPU DAG->DAG Pattern Instruction Selection' on function '@__omp_offloading_fd00_4b20113__QQmain_l42'
 #0 0x000055bbdb47bd6f llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1524d6f)
 #1 0x000055bbdb479554 SignalHandler(int) Signals.cpp:0:0
 #2 0x00007f17ac933420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #3 0x00007f17ac3d000b raise /build/glibc-BHL3KM/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
 #4 0x00007f17ac3af859 abort /build/glibc-BHL3KM/glibc-2.31/stdlib/abort.c:81:7
 #5 0x000055bbda1e9d54 llvm::ConvertUTF8toUTF32(unsigned char const**, unsigned char const*, unsigned int**, unsigned int*, llvm::ConversionFlags) (.cold) ConvertUTF.cpp:0:0
 #6 0x000055bbdbe4849d llvm::SelectionDAGISel::CannotYetSelect(llvm::SDNode*) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1ef149d)
 #7 0x000055bbdbe4b20a llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1ef420a)
 #8 0x000055bbda9a5c51 AMDGPUDAGToDAGISel::SelectSTACKRESTORE(llvm::SDNode*) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0xa4ec51)
 #9 0x000055bbda9a71fb AMDGPUDAGToDAGISel::Select(llvm::SDNode*) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0xa501fb)
#10 0x000055bbdbe453f0 llvm::SelectionDAGISel::DoInstructionSelection() (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1eee3f0)
#11 0x000055bbdbe52e1e llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1efbe1e)
#12 0x000055bbdbe561bd llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1eff1bd)
#13 0x000055bbdbe57bf6 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (.part.0) SelectionDAGISel.cpp:0:0
#14 0x000055bbda9b24f9 AMDGPUDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0xa5b4f9)
#15 0x000055bbdb5df5a1 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#16 0x000055bbdadb4511 llvm::FPPassManager::runOnFunction(llvm::Function&) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0xe5d511)
#17 0x000055bbdb095957 (anonymous namespace)::CGPassManager::runOnModule(llvm::Module&) CallGraphSCCPass.cpp:0:0
#18 0x000055bbdadb5002 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0xe5e002)
#19 0x000055bbdba67dd5 codegen(llvm::lto::Config const&, llvm::TargetMachine*, std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>, unsigned int, llvm::Module&, llvm::ModuleSummaryIndex const&) LTOBackend.cpp:0:0
#20 0x000055bbdba683fd llvm::lto::backend(llvm::lto::Config const&, std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>, unsigned int, llvm::Module&, llvm::ModuleSummaryIndex&) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1b113fd)
#21 0x000055bbdba5e7fa llvm::lto::LTO::runRegularLTO(std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1b077fa)
#22 0x000055bbdba5ed60 llvm::lto::LTO::run(std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>, std::function<llvm::Expected<std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>> (unsigned int, llvm::StringRef, llvm::Twine const&)>) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1b07d60)
#23 0x000055bbda2ab22a llvm::Error (anonymous namespace)::linkAndWrapDeviceFiles(llvm::SmallVectorImpl<llvm::SmallVector<llvm::object::OffloadFile, 3u>>&, llvm::opt::InputArgList const&, char**, int)::'lambda'(auto&)::operator()<llvm::SmallVector<llvm::object::OffloadFile, 3u>>(auto&) const ClangLinkerWrapper.cpp:0:0
#24 0x000055bbda2ad3c4 (anonymous namespace)::linkAndWrapDeviceFiles(llvm::SmallVectorImpl<llvm::SmallVector<llvm::object::OffloadFile, 3u>>&, llvm::opt::InputArgList const&, char**, int) ClangLinkerWrapper.cpp:0:0
#25 0x000055bbda1efbda main (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x298bda)
#26 0x00007f17ac3b1083 __libc_start_main /build/glibc-BHL3KM/glibc-2.31/csu/../csu/libc-start.c:342:3
#27 0x000055bbda28ee7e _start (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x337e7e)
 #0 0x000055bbdb47bd6f llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1524d6f)
 #1 0x000055bbdb479554 SignalHandler(int) Signals.cpp:0:0
 #2 0x00007f17ac933420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #3 0x00007f17ac3d000b raise /build/glibc-BHL3KM/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
 #4 0x00007f17ac3af859 abort /build/glibc-BHL3KM/glibc-2.31/stdlib/abort.c:81:7
 #5 0x000055bbda1e9d54 llvm::ConvertUTF8toUTF32(unsigned char const**, unsigned char const*, unsigned int**, unsigned int*, llvm::ConversionFlags) (.cold) ConvertUTF.cpp:0:0
 #6 0x000055bbdbe4849d llvm::SelectionDAGISel::CannotYetSelect(llvm::SDNode*) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1ef149d)
 #7 0x000055bbdbe4b20a llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1ef420a)
 #8 0x000055bbda9a5c51 AMDGPUDAGToDAGISel::SelectSTACKRESTORE(llvm::SDNode*) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0xa4ec51)
 #9 0x000055bbda9a71fb AMDGPUDAGToDAGISel::Select(llvm::SDNode*) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0xa501fb)
#10 0x000055bbdbe453f0 llvm::SelectionDAGISel::DoInstructionSelection() (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1eee3f0)
#11 0x000055bbdbe52e1e llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1efbe1e)
#12 0x000055bbdbe561bd llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1eff1bd)
#13 0x000055bbdbe57bf6 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (.part.0) SelectionDAGISel.cpp:0:0
#14 0x000055bbda9b24f9 AMDGPUDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0xa5b4f9)
#15 0x000055bbdb5df5a1 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#16 0x000055bbdadb4511 llvm::FPPassManager::runOnFunction(llvm::Function&) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0xe5d511)
#17 0x000055bbdb095957 (anonymous namespace)::CGPassManager::runOnModule(llvm::Module&) CallGraphSCCPass.cpp:0:0
#18 0x000055bbdadb5002 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0xe5e002)
#19 0x000055bbdba67dd5 codegen(llvm::lto::Config const&, llvm::TargetMachine*, std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>, unsigned int, llvm::Module&, llvm::ModuleSummaryIndex const&) LTOBackend.cpp:0:0
#20 0x000055bbdba683fd llvm::lto::backend(llvm::lto::Config const&, std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>, unsigned int, llvm::Module&, llvm::ModuleSummaryIndex&) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1b113fd)
#21 0x000055bbdba5e7fa llvm::lto::LTO::runRegularLTO(std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1b077fa)
#22 0x000055bbdba5ed60 llvm::lto::LTO::run(std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>, std::function<llvm::Expected<std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream>>> (unsigned int, llvm::Twine const&)>> (unsigned int, llvm::StringRef, llvm::Twine const&)>) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1b07d60)
#23 0x000055bbda2ab22a llvm::Error (anonymous namespace)::linkAndWrapDeviceFiles(llvm::SmallVectorImpl<llvm::SmallVector<llvm::object::OffloadFile, 3u>>&, llvm::opt::InputArgList const&, char**, int)::'lambda'(auto&)::operator()<llvm::SmallVector<llvm::object::OffloadFile, 3u>>(auto&) const ClangLinkerWrapper.cpp:0:0
#24 0x000055bbda2ad3c4 (anonymous namespace)::linkAndWrapDeviceFiles(llvm::SmallVectorImpl<llvm::SmallVector<llvm::object::OffloadFile, 3u>>&, llvm::opt::InputArgList const&, char**, int) ClangLinkerWrapper.cpp:0:0
#25 0x000055bbda1efbda main (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x298bda)
#26 0x00007f17ac3b1083 __libc_start_main /build/glibc-BHL3KM/glibc-2.31/csu/../csu/libc-start.c:342:3
#27 0x000055bbda28ee7e _start (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x337e7e)

This seems unrelated to the other allocatable issue I posted here: #74603 in the sense that it's not alloca related and that switching the kernel to optnone or bumping the optimisation level will not fix the issue, it still however seems to have the same root cause of incompatible code with AMDGPU ISEL

@github-actions github-actions bot added the flang Flang issues not falling into any other category label Feb 20, 2024
@EugeneZelenko EugeneZelenko added backend:AMDGPU crash Prefer [crash-on-valid] or [crash-on-invalid] llvm:SelectionDAG SelectionDAGISel as well and removed flang Flang issues not falling into any other category labels Feb 20, 2024
@llvmbot
Copy link
Member

llvmbot commented Feb 20, 2024

@llvm/issue-subscribers-backend-amdgpu

Author: None (agozillon)

The below small test will crash for device compilation on AMDGPU instruction selection currently for the new-ish HLFIR flow, but passes using the `-flang-deprecated-no-hlfir` option:
PROGRAM main
    integer, allocatable :: a
    allocate(a)

!$omp target map(tofrom:a)
   sub_call : BLOCK
      do i = 1, 10
        BLOCK
           a = 1
        END BLOCK
     end do
    END BLOCK sub_call
!$omp end target
END PROGRAM main

The crash dump:

LLVM ERROR: Cannot select: t382: ch = stackrestore t381, t352
  t352: i64,ch = stacksave t351
In function: __omp_offloading_fd00_4b20113__QQmain_l42
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper --host-triple=x86_64-unknown-linux-gnu --linker-path=/work/agozillo/git/flang-dev/llvm-main-project/build/bin/ld.lld -- -z relro --hash-style=gnu --eh-frame-hdr -m elf_x86_64 -pie -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o a.out /lib/x86_64-linux-gnu/Scrt1.o /lib/x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o -L/home/agozillo/git/flang-dev/llvm-main-project/flang/build_flang_runtime -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib64 -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib64 -L/lib -L/usr/lib -L/home/agozillo/git/flang-dev/llvm-main-project/build/lib -L/home/agozillo/git/flang-dev/llvm-main-project/build/lib -L/home/agozillo/git/flang-dev/llvm-main-project/flang/build_flang_runtime -L/home/agozillo/git/flang-dev/llvm-main-project/build/projects/openmp/libomptarget -L/home/agozillo/git/flang-dev/llvm-main-project/build/projects/openmp/ -L/home/agozillo/git/flang-dev/llvm-main-project/build/projects/openmp/libomptarget/DeviceRTL -L/etc/alternatives/rocm/lib -L/home/agozillo/git/flang-dev/llvm-main-project/build/runtimes/runtimes-bins/openmp/runtime/src/ -L/home/agozillo/git/trunk17.0/llvm-project/build/lib/ -L/home/agozillo/git/flang-dev/installed/lib -L. /tmp/block-construct-test-08876c.o -L/work/agozillo/git/flang-dev/llvm-main-project/build/lib --whole-archive -lFortran_main --no-whole-archive -lFortranRuntime -lFortranDecimal -lm -lomp -lomptarget -lomptarget.devicertl -lcgpu -lmgpu -L/work/agozillo/git/flang-dev/llvm-main-project/build/lib -lgcc --as-needed -lgcc_s --no-as-needed -lpthread -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o /lib/x86_64-linux-gnu/crtn.o
1.      Running pass 'CallGraph Pass Manager' on module 'ld-temp.o'.
2.      Running pass 'AMDGPU DAG-&gt;DAG Pattern Instruction Selection' on function '@<!-- -->__omp_offloading_fd00_4b20113__QQmain_l42'
 #<!-- -->0 0x000055bbdb47bd6f llvm::sys::PrintStackTrace(llvm::raw_ostream&amp;, int) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1524d6f)
 #<!-- -->1 0x000055bbdb479554 SignalHandler(int) Signals.cpp:0:0
 #<!-- -->2 0x00007f17ac933420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #<!-- -->3 0x00007f17ac3d000b raise /build/glibc-BHL3KM/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
 #<!-- -->4 0x00007f17ac3af859 abort /build/glibc-BHL3KM/glibc-2.31/stdlib/abort.c:81:7
 #<!-- -->5 0x000055bbda1e9d54 llvm::ConvertUTF8toUTF32(unsigned char const**, unsigned char const*, unsigned int**, unsigned int*, llvm::ConversionFlags) (.cold) ConvertUTF.cpp:0:0
 #<!-- -->6 0x000055bbdbe4849d llvm::SelectionDAGISel::CannotYetSelect(llvm::SDNode*) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1ef149d)
 #<!-- -->7 0x000055bbdbe4b20a llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1ef420a)
 #<!-- -->8 0x000055bbda9a5c51 AMDGPUDAGToDAGISel::SelectSTACKRESTORE(llvm::SDNode*) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0xa4ec51)
 #<!-- -->9 0x000055bbda9a71fb AMDGPUDAGToDAGISel::Select(llvm::SDNode*) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0xa501fb)
#<!-- -->10 0x000055bbdbe453f0 llvm::SelectionDAGISel::DoInstructionSelection() (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1eee3f0)
#<!-- -->11 0x000055bbdbe52e1e llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1efbe1e)
#<!-- -->12 0x000055bbdbe561bd llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&amp;) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1eff1bd)
#<!-- -->13 0x000055bbdbe57bf6 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&amp;) (.part.0) SelectionDAGISel.cpp:0:0
#<!-- -->14 0x000055bbda9b24f9 AMDGPUDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&amp;) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0xa5b4f9)
#<!-- -->15 0x000055bbdb5df5a1 llvm::MachineFunctionPass::runOnFunction(llvm::Function&amp;) (.part.0) MachineFunctionPass.cpp:0:0
#<!-- -->16 0x000055bbdadb4511 llvm::FPPassManager::runOnFunction(llvm::Function&amp;) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0xe5d511)
#<!-- -->17 0x000055bbdb095957 (anonymous namespace)::CGPassManager::runOnModule(llvm::Module&amp;) CallGraphSCCPass.cpp:0:0
#<!-- -->18 0x000055bbdadb5002 llvm::legacy::PassManagerImpl::run(llvm::Module&amp;) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0xe5e002)
#<!-- -->19 0x000055bbdba67dd5 codegen(llvm::lto::Config const&amp;, llvm::TargetMachine*, std::function&lt;llvm::Expected&lt;std::unique_ptr&lt;llvm::CachedFileStream, std::default_delete&lt;llvm::CachedFileStream&gt;&gt;&gt; (unsigned int, llvm::Twine const&amp;)&gt;, unsigned int, llvm::Module&amp;, llvm::ModuleSummaryIndex const&amp;) LTOBackend.cpp:0:0
#<!-- -->20 0x000055bbdba683fd llvm::lto::backend(llvm::lto::Config const&amp;, std::function&lt;llvm::Expected&lt;std::unique_ptr&lt;llvm::CachedFileStream, std::default_delete&lt;llvm::CachedFileStream&gt;&gt;&gt; (unsigned int, llvm::Twine const&amp;)&gt;, unsigned int, llvm::Module&amp;, llvm::ModuleSummaryIndex&amp;) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1b113fd)
#<!-- -->21 0x000055bbdba5e7fa llvm::lto::LTO::runRegularLTO(std::function&lt;llvm::Expected&lt;std::unique_ptr&lt;llvm::CachedFileStream, std::default_delete&lt;llvm::CachedFileStream&gt;&gt;&gt; (unsigned int, llvm::Twine const&amp;)&gt;) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1b077fa)
#<!-- -->22 0x000055bbdba5ed60 llvm::lto::LTO::run(std::function&lt;llvm::Expected&lt;std::unique_ptr&lt;llvm::CachedFileStream, std::default_delete&lt;llvm::CachedFileStream&gt;&gt;&gt; (unsigned int, llvm::Twine const&amp;)&gt;, std::function&lt;llvm::Expected&lt;std::function&lt;llvm::Expected&lt;std::unique_ptr&lt;llvm::CachedFileStream, std::default_delete&lt;llvm::CachedFileStream&gt;&gt;&gt; (unsigned int, llvm::Twine const&amp;)&gt;&gt; (unsigned int, llvm::StringRef, llvm::Twine const&amp;)&gt;) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1b07d60)
#<!-- -->23 0x000055bbda2ab22a llvm::Error (anonymous namespace)::linkAndWrapDeviceFiles(llvm::SmallVectorImpl&lt;llvm::SmallVector&lt;llvm::object::OffloadFile, 3u&gt;&gt;&amp;, llvm::opt::InputArgList const&amp;, char**, int)::'lambda'(auto&amp;)::operator()&lt;llvm::SmallVector&lt;llvm::object::OffloadFile, 3u&gt;&gt;(auto&amp;) const ClangLinkerWrapper.cpp:0:0
#<!-- -->24 0x000055bbda2ad3c4 (anonymous namespace)::linkAndWrapDeviceFiles(llvm::SmallVectorImpl&lt;llvm::SmallVector&lt;llvm::object::OffloadFile, 3u&gt;&gt;&amp;, llvm::opt::InputArgList const&amp;, char**, int) ClangLinkerWrapper.cpp:0:0
#<!-- -->25 0x000055bbda1efbda main (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x298bda)
#<!-- -->26 0x00007f17ac3b1083 __libc_start_main /build/glibc-BHL3KM/glibc-2.31/csu/../csu/libc-start.c:342:3
#<!-- -->27 0x000055bbda28ee7e _start (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x337e7e)
 #<!-- -->0 0x000055bbdb47bd6f llvm::sys::PrintStackTrace(llvm::raw_ostream&amp;, int) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1524d6f)
 #<!-- -->1 0x000055bbdb479554 SignalHandler(int) Signals.cpp:0:0
 #<!-- -->2 0x00007f17ac933420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #<!-- -->3 0x00007f17ac3d000b raise /build/glibc-BHL3KM/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
 #<!-- -->4 0x00007f17ac3af859 abort /build/glibc-BHL3KM/glibc-2.31/stdlib/abort.c:81:7
 #<!-- -->5 0x000055bbda1e9d54 llvm::ConvertUTF8toUTF32(unsigned char const**, unsigned char const*, unsigned int**, unsigned int*, llvm::ConversionFlags) (.cold) ConvertUTF.cpp:0:0
 #<!-- -->6 0x000055bbdbe4849d llvm::SelectionDAGISel::CannotYetSelect(llvm::SDNode*) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1ef149d)
 #<!-- -->7 0x000055bbdbe4b20a llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1ef420a)
 #<!-- -->8 0x000055bbda9a5c51 AMDGPUDAGToDAGISel::SelectSTACKRESTORE(llvm::SDNode*) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0xa4ec51)
 #<!-- -->9 0x000055bbda9a71fb AMDGPUDAGToDAGISel::Select(llvm::SDNode*) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0xa501fb)
#<!-- -->10 0x000055bbdbe453f0 llvm::SelectionDAGISel::DoInstructionSelection() (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1eee3f0)
#<!-- -->11 0x000055bbdbe52e1e llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1efbe1e)
#<!-- -->12 0x000055bbdbe561bd llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&amp;) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1eff1bd)
#<!-- -->13 0x000055bbdbe57bf6 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&amp;) (.part.0) SelectionDAGISel.cpp:0:0
#<!-- -->14 0x000055bbda9b24f9 AMDGPUDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&amp;) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0xa5b4f9)
#<!-- -->15 0x000055bbdb5df5a1 llvm::MachineFunctionPass::runOnFunction(llvm::Function&amp;) (.part.0) MachineFunctionPass.cpp:0:0
#<!-- -->16 0x000055bbdadb4511 llvm::FPPassManager::runOnFunction(llvm::Function&amp;) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0xe5d511)
#<!-- -->17 0x000055bbdb095957 (anonymous namespace)::CGPassManager::runOnModule(llvm::Module&amp;) CallGraphSCCPass.cpp:0:0
#<!-- -->18 0x000055bbdadb5002 llvm::legacy::PassManagerImpl::run(llvm::Module&amp;) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0xe5e002)
#<!-- -->19 0x000055bbdba67dd5 codegen(llvm::lto::Config const&amp;, llvm::TargetMachine*, std::function&lt;llvm::Expected&lt;std::unique_ptr&lt;llvm::CachedFileStream, std::default_delete&lt;llvm::CachedFileStream&gt;&gt;&gt; (unsigned int, llvm::Twine const&amp;)&gt;, unsigned int, llvm::Module&amp;, llvm::ModuleSummaryIndex const&amp;) LTOBackend.cpp:0:0
#<!-- -->20 0x000055bbdba683fd llvm::lto::backend(llvm::lto::Config const&amp;, std::function&lt;llvm::Expected&lt;std::unique_ptr&lt;llvm::CachedFileStream, std::default_delete&lt;llvm::CachedFileStream&gt;&gt;&gt; (unsigned int, llvm::Twine const&amp;)&gt;, unsigned int, llvm::Module&amp;, llvm::ModuleSummaryIndex&amp;) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1b113fd)
#<!-- -->21 0x000055bbdba5e7fa llvm::lto::LTO::runRegularLTO(std::function&lt;llvm::Expected&lt;std::unique_ptr&lt;llvm::CachedFileStream, std::default_delete&lt;llvm::CachedFileStream&gt;&gt;&gt; (unsigned int, llvm::Twine const&amp;)&gt;) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1b077fa)
#<!-- -->22 0x000055bbdba5ed60 llvm::lto::LTO::run(std::function&lt;llvm::Expected&lt;std::unique_ptr&lt;llvm::CachedFileStream, std::default_delete&lt;llvm::CachedFileStream&gt;&gt;&gt; (unsigned int, llvm::Twine const&amp;)&gt;, std::function&lt;llvm::Expected&lt;std::function&lt;llvm::Expected&lt;std::unique_ptr&lt;llvm::CachedFileStream, std::default_delete&lt;llvm::CachedFileStream&gt;&gt;&gt; (unsigned int, llvm::Twine const&amp;)&gt;&gt; (unsigned int, llvm::StringRef, llvm::Twine const&amp;)&gt;) (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x1b07d60)
#<!-- -->23 0x000055bbda2ab22a llvm::Error (anonymous namespace)::linkAndWrapDeviceFiles(llvm::SmallVectorImpl&lt;llvm::SmallVector&lt;llvm::object::OffloadFile, 3u&gt;&gt;&amp;, llvm::opt::InputArgList const&amp;, char**, int)::'lambda'(auto&amp;)::operator()&lt;llvm::SmallVector&lt;llvm::object::OffloadFile, 3u&gt;&gt;(auto&amp;) const ClangLinkerWrapper.cpp:0:0
#<!-- -->24 0x000055bbda2ad3c4 (anonymous namespace)::linkAndWrapDeviceFiles(llvm::SmallVectorImpl&lt;llvm::SmallVector&lt;llvm::object::OffloadFile, 3u&gt;&gt;&amp;, llvm::opt::InputArgList const&amp;, char**, int) ClangLinkerWrapper.cpp:0:0
#<!-- -->25 0x000055bbda1efbda main (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x298bda)
#<!-- -->26 0x00007f17ac3b1083 __libc_start_main /build/glibc-BHL3KM/glibc-2.31/csu/../csu/libc-start.c:342:3
#<!-- -->27 0x000055bbda28ee7e _start (/work/agozillo/git/flang-dev/llvm-main-project/build/bin/clang-linker-wrapper+0x337e7e)

This seems unrelated to the other allocatable issue I posted here: #74603 in the sense that it's not alloca related and that switching the kernel to optnone or bumping the optimisation level will not fix the issue, it still however seems to have the same root cause of incompatible code with AMDGPU ISEL

agozillon added a commit to agozillon/llvm-project that referenced this issue Jun 27, 2024
…s space when generating intrinsics

This PR aims to factor in the allocation address space provided by an architectures data layout when generating the intrinsic instructions, this allows them to be lowered later with the address spaces in tow. This aligns the intrinsic creation with the LLVM IRBuilder's https://github.com/llvm/llvm-project/blob/main/llvm/include/llvm/IR/IRBuilder.h#L1053

This is also necessary for the below example to compile for OpenMP AMD GPU and not ICE the compiler in ISEL as AMD's stackrestore and stacksave are expected to have the appropriate allocation address space for AMD GPU.

program main
    integer(4), allocatable :: test
    allocate(test)

!$omp target map(tofrom:test)
    do i = 1, 10
      test = test + 50
    end do
!$omp end target

  deallocate(test)
end program

The PR also fixes the issue I opened a while ago which hits the same error when compiling for AMDGPU: llvm#82368

Although, you have to have the appropriate GPU LIBC and Fortran offload runtime (both compiled for AMDGPU) added to the linker for the command or it will reach another ISEL error and ICE weirdly. But with the pre-requisites it works fine with this PR.
agozillon added a commit that referenced this issue Jul 3, 2024
…s space when generating intrinsics (#96836)

This PR aims to factor in the allocation address space provided by an
architectures data layout when generating the intrinsic instructions,
this allows them to be lowered later with the address spaces in tow.
This aligns the intrinsic creation with the LLVM IRBuilder's
https://github.com/llvm/llvm-project/blob/main/llvm/include/llvm/IR/IRBuilder.h#L1053

This is also necessary for the below example to compile for OpenMP AMD
GPU and not ICE the compiler in ISEL as AMD's stackrestore and stacksave
are expected to have the appropriate allocation address space for AMD
GPU.

program main
    integer(4), allocatable :: test
    allocate(test)

!$omp target map(tofrom:test)
    do i = 1, 10
      test = test + 50
    end do
!$omp end target

  deallocate(test)
end program

The PR also fixes the issue I opened a while ago which hits the same
error when compiling for AMDGPU:
#82368

Although, you have to have the appropriate GPU LIBC and Fortran offload
runtime (both compiled for AMDGPU) added to the linker for the command
or it will reach another ISEL error and ICE weirdly. But with the
pre-requisites it works fine with this PR.
@agozillon
Copy link
Contributor Author

This should now be fixed after the landing of: #96836

If it re-emerges again in Flang, it's possible we're adding stackreclaim/stacksave without the appropriate allocation address space in some other manner than the stack reclaim pass and we should address it similarly, by making sure the operations take into account the allocation address space.

kbluck pushed a commit to kbluck/llvm-project that referenced this issue Jul 6, 2024
…s space when generating intrinsics (llvm#96836)

This PR aims to factor in the allocation address space provided by an
architectures data layout when generating the intrinsic instructions,
this allows them to be lowered later with the address spaces in tow.
This aligns the intrinsic creation with the LLVM IRBuilder's
https://github.com/llvm/llvm-project/blob/main/llvm/include/llvm/IR/IRBuilder.h#L1053

This is also necessary for the below example to compile for OpenMP AMD
GPU and not ICE the compiler in ISEL as AMD's stackrestore and stacksave
are expected to have the appropriate allocation address space for AMD
GPU.

program main
    integer(4), allocatable :: test
    allocate(test)

!$omp target map(tofrom:test)
    do i = 1, 10
      test = test + 50
    end do
!$omp end target

  deallocate(test)
end program

The PR also fixes the issue I opened a while ago which hits the same
error when compiling for AMDGPU:
llvm#82368

Although, you have to have the appropriate GPU LIBC and Fortran offload
runtime (both compiled for AMDGPU) added to the linker for the command
or it will reach another ISEL error and ICE weirdly. But with the
pre-requisites it works fine with this PR.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
crash Prefer [crash-on-valid] or [crash-on-invalid] llvm:transforms
Projects
None yet
Development

No branches or pull requests

3 participants