Skip to content

enzyme crashes with clang21.1.7 but fine with clang19.1.7 #2634

@minansys

Description

@minansys
libc.so.6!abort (Unknown Source:0)
libLLVM.so.21.1!llvm::llvm_unreachable_internal(const char * msg, const char * file, unsigned int line) (\home\mixu\software\llvm-project-21.1.7\llvm\lib\Support\ErrorHandling.cpp:244)
libLLVM.so.21.1!operator()(const struct {...} * const __closure, const IP & I) (\home\mixu\software\llvm-project-21.1.7\llvm\lib\Target\NVPTX\NVPTXLowerArgs.cpp:312)
libLLVM.so.21.1!convertToParamAS(llvm::Use * OldUse, llvm::Value * Param, bool HasCvtaParam, bool IsGridConstant) (\home\mixu\software\llvm-project-21.1.7\llvm\lib\Target\NVPTX\NVPTXLowerArgs.cpp:317)
libLLVM.so.21.1!handleByValParam(const llvm::NVPTXTargetMachine & TM, llvm::Argument * Arg) (\home\mixu\software\llvm-project-21.1.7\llvm\lib\Target\NVPTX\NVPTXLowerArgs.cpp:557)
libLLVM.so.21.1!runOnKernelFunction(const llvm::NVPTXTargetMachine & TM, llvm::Function & F) (\home\mixu\software\llvm-project-21.1.7\llvm\lib\Target\NVPTX\NVPTXLowerArgs.cpp:671)
libLLVM.so.21.1!processFunction(llvm::Function & F, llvm::NVPTXTargetMachine & TM) (\home\mixu\software\llvm-project-21.1.7\llvm\lib\Target\NVPTX\NVPTXLowerArgs.cpp:695)
libLLVM.so.21.1!(anonymous namespace)::NVPTXLowerArgsLegacyPass::runOnFunction((anonymous namespace)::NVPTXLowerArgsLegacyPass * const this, llvm::Function & F) (\home\mixu\software\llvm-project-21.1.7\llvm\lib\Target\NVPTX\NVPTXLowerArgs.cpp:701)
libLLVM.so.21.1!llvm::FPPassManager::runOnFunction(llvm::FPPassManager * const this, llvm::Function & F) (\home\mixu\software\llvm-project-21.1.7\llvm\lib\IR\LegacyPassManager.cpp:1398)
libLLVM.so.21.1!llvm::FPPassManager::runOnModule(llvm::FPPassManager * const this, llvm::Module & M) (\home\mixu\software\llvm-project-21.1.7\llvm\lib\IR\LegacyPassManager.cpp:1444)
libLLVM.so.21.1!(anonymous namespace)::MPPassManager::runOnModule((anonymous namespace)::MPPassManager * const this, llvm::Module & M) (\home\mixu\software\llvm-project-21.1.7\llvm\lib\IR\LegacyPassManager.cpp:1513)
libLLVM.so.21.1!llvm::legacy::PassManagerImpl::run(llvm::legacy::PassManagerImpl * const this, llvm::Module & M) (\home\mixu\software\llvm-project-21.1.7\llvm\lib\IR\LegacyPassManager.cpp:531)
libLLVM.so.21.1!llvm::legacy::PassManager::run(llvm::legacy::PassManager * const this, llvm::Module & M) (\home\mixu\software\llvm-project-21.1.7\llvm\lib\IR\LegacyPassManager.cpp:1640)
libclang-cpp.so.21.1!(anonymous namespace)::EmitAssemblyHelper::RunCodegenPipeline((anonymous namespace)::EmitAssemblyHelper * const this, clang::BackendAction Action, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream> > & OS, std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile> > & DwoOS) (\home\mixu\software\llvm-project-21.1.7\clang\lib\CodeGen\BackendUtil.cpp:1260)
libclang-cpp.so.21.1!(anonymous namespace)::EmitAssemblyHelper::emitAssembly((anonymous namespace)::EmitAssemblyHelper * const this, clang::BackendAction Action, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream> > OS, clang::BackendConsumer * BC) (\home\mixu\software\llvm-project-21.1.7\clang\lib\CodeGen\BackendUtil.cpp:1284)
libclang-cpp.so.21.1!clang::emitBackendOutput(clang::CompilerInstance & CI, clang::CodeGenOptions & CGOpts, llvm::StringRef TDesc, llvm::Module * M, clang::BackendAction Action, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream> > OS, clang::BackendConsumer * BC) (\home\mixu\software\llvm-project-21.1.7\clang\lib\CodeGen\BackendUtil.cpp:1449)
libclang-cpp.so.21.1!clang::BackendConsumer::HandleTranslationUnit(clang::BackendConsumer * const this, clang::ASTContext & C) (\home\mixu\software\llvm-project-21.1.7\clang\lib\CodeGen\CodeGenAction.cpp:316)
libclang-cpp.so.21.1!clang::MultiplexConsumer::HandleTranslationUnit(clang::MultiplexConsumer * const this, clang::ASTContext & Ctx) (\home\mixu\software\llvm-project-21.1.7\clang\lib\Frontend\MultiplexConsumer.cpp:339)
libclang-cpp.so.21.1!clang::ParseAST(clang::Sema & S, bool PrintStats, bool SkipFunctionBodies) (\home\mixu\software\llvm-project-21.1.7\clang\lib\Parse\ParseAST.cpp:183)
libclang-cpp.so.21.1!clang::ASTFrontendAction::ExecuteAction(clang::ASTFrontendAction * const this) (\home\mixu\software\llvm-project-21.1.7\clang\lib\Frontend\FrontendAction.cpp:1341)
libclang-cpp.so.21.1!clang::CodeGenAction::ExecuteAction(clang::CodeGenAction * const this) (\home\mixu\software\llvm-project-21.1.7\clang\lib\CodeGen\CodeGenAction.cpp:1111)
libclang-cpp.so.21.1!clang::FrontendAction::Execute(clang::FrontendAction * const this) (\home\mixu\software\llvm-project-21.1.7\clang\lib\Frontend\FrontendAction.cpp:1221)
libclang-cpp.so.21.1!clang::CompilerInstance::ExecuteAction(clang::CompilerInstance * const this, clang::FrontendAction & Act) (\home\mixu\software\llvm-project-21.1.7\clang\lib\Frontend\CompilerInstance.cpp:1055)
libclang-cpp.so.21.1!clang::ExecuteCompilerInvocation(clang::CompilerInstance * Clang) (\home\mixu\software\llvm-project-21.1.7\clang\lib\FrontendTool\ExecuteCompilerInvocation.cpp:299)
cc1_main(llvm::ArrayRef<char const*> Argv, const char * Argv0, void * MainAddr) (\home\mixu\software\llvm-project-21.1.7\clang\tools\driver\cc1_main.cpp:297)
ExecuteCC1Tool(llvm::SmallVectorImpl<char const*> & ArgV, const llvm::ToolContext & ToolContext) (\home\mixu\software\llvm-project-21.1.7\clang\tools\driver\driver.cpp:223)
clang_main(int Argc, char ** Argv, const llvm::ToolContext & ToolContext) (\home\mixu\software\llvm-project-21.1.7\clang\tools\driver\driver.cpp:264)
main(int argc, char ** argv) (\home\mixu\software\llvm-project-21.1.7\build\tools\clang\tools\driver\clang-driver.cpp:17)

here is the debugging info

Image
Unsupported instruction
UNREACHABLE executed at /home/mixu/software/llvm-project-21.1.7/llvm/lib/Target/NVPTX/NVPTXLowerArgs.cpp:312!
  %6 = atomicrmw fadd ptr %"value.i'ipg_unwrap.i", double %5 monotonic, align 8
  %6 = atomicrmw fadd ptr %"value.i'ipg_unwrap.i", double %5 monotonic, align 8
; Function Attrs: mustprogress nofree noinline norecurse nounwind willreturn memory(readwrite, inaccessiblemem: none)
define ptx_kernel void @_ZN8Cromwell8Patterns35one_dimensional_kernel_cuda_reverseINS_11CommonModel11CellZoneUDF23priv_CM_CzUDF_ScaTraTbl24OperationScalarPopulatorEEEvjT_S6_(i32 noundef %size, ptr noundef readnone byval(%"struct.Cromwell::CommonModel::CellZoneUDF::priv_CM_CzUDF_ScaTraTbl::OperationScalarPopulator") align 8 captures(none) %operation, ptr noundef byval(%"struct.Cromwell::CommonModel::CellZoneUDF::priv_CM_CzUDF_ScaTraTbl::OperationScalarPopulator") align 8 captures(none) %d_operation) local_unnamed_addr #11 comdat {
entry:
  %0 = call ptr addrspace(101) @llvm.nvvm.internal.addrspace.wrap.p101.p0(ptr %d_operation)
  %1 = call ptr addrspace(101) @llvm.nvvm.internal.addrspace.wrap.p101.p0(ptr %operation)
  %2 = tail call noundef i32 @llvm.nvvm.read.ptx.sreg.tid.x() #142
  %3 = tail call noundef i32 @llvm.nvvm.read.ptx.sreg.ntid.x() #142
  %4 = tail call noundef i32 @llvm.nvvm.read.ptx.sreg.ctaid.x() #142
  %mul.i = mul i32 %3, %4
  %add.i = add i32 %mul.i, %2
  %cmp.not.i = icmp ult i32 %add.i, %size
  br i1 %cmp.not.i, label %if.end.i, label %diffe_ZN8Cromwell8Patterns34one_dimensional_kernel_cuda_deviceINS_11CommonModel11CellZoneUDF23priv_CM_CzUDF_ScaTraTbl24OperationScalarPopulatorEEEvjPv.exit

if.end.i:                                         ; preds = %entry
  %conv.i.i = zext i32 %add.i to i64
  %"'ipl.i" = load ptr, ptr %d_operation, align 8, !tbaa !15, !alias.scope !22, !noalias !25
  %"'ipl.i1" = addrspacecast ptr %"'ipl.i" to ptr addrspace(1)
  %"'ipl.i2" = addrspacecast ptr addrspace(1) %"'ipl.i1" to ptr
  %"arrayidx.i.i'ipg_unwrap.i" = getelementptr inbounds nuw double, ptr %"'ipl.i2", i64 %conv.i.i
  %5 = load double, ptr %"arrayidx.i.i'ipg_unwrap.i", align 8, !tbaa !27, !alias.scope !29, !noalias !32
  store double 0.000000e+00, ptr %"arrayidx.i.i'ipg_unwrap.i", align 8, !tbaa !27, !alias.scope !29, !noalias !32
  %"value.i'ipg_unwrap.i3" = getelementptr inbounds i8, ptr addrspace(101) %0, i64 16
  %"value.i'ipg_unwrap.i" = getelementptr inbounds nuw i8, ptr %d_operation, i64 16
  %"value.i'ipg_unwrap.i3.gen" = addrspacecast ptr addrspace(101) %"value.i'ipg_unwrap.i3" to ptr
  %6 = atomicrmw fadd ptr %"value.i'ipg_unwrap.i", double %5 monotonic, align 8
  br label %diffe_ZN8Cromwell8Patterns34one_dimensional_kernel_cuda_deviceINS_11CommonModel11CellZoneUDF23priv_CM_CzUDF_ScaTraTbl24OperationScalarPopulatorEEEvjPv.exit

diffe_ZN8Cromwell8Patterns34one_dimensional_kernel_cuda_deviceINS_11CommonModel11CellZoneUDF23priv_CM_CzUDF_ScaTraTbl24OperationScalarPopulatorEEEvjPv.exit: ; preds = %entry, %if.end.i
  ret void
}

  %"value.i'ipg_unwrap.i" = getelementptr inbounds nuw i8, ptr %d_operation, i64 16
  %"value.i'ipg_unwrap.i3" = getelementptr inbounds i8, ptr addrspace(101) %0, i64 16
  %6 = atomicrmw fadd ptr %"value.i'ipg_unwrap.i", double %5 monotonic, align 8
ptr
  %"value.i'ipg_unwrap.i" = getelementptr inbounds nuw i8, ptr %d_operation, i64 16
ptr %d_operation
; Function Attrs: mustprogress nofree noinline norecurse nounwind willreturn memory(readwrite, inaccessiblemem: none)
define ptx_kernel void @_ZN8Cromwell8Patterns35one_dimensional_kernel_cuda_reverseINS_11CommonModel11CellZoneUDF23priv_CM_CzUDF_ScaTraTbl24OperationScalarPopulatorEEEvjT_S6_(i32 noundef %size, ptr noundef readnone byval(%"struct.Cromwell::CommonModel::CellZoneUDF::priv_CM_CzUDF_ScaTraTbl::OperationScalarPopulator") align 8 captures(none) %operation, ptr noundef byval(%"struct.Cromwell::CommonModel::CellZoneUDF::priv_CM_CzUDF_ScaTraTbl::OperationScalarPopulator") align 8 captures(none) %d_operation) local_unnamed_addr #11 comdat {
entry:
  %0 = call ptr addrspace(101) @llvm.nvvm.internal.addrspace.wrap.p101.p0(ptr %d_operation)
  %1 = call ptr addrspace(101) @llvm.nvvm.internal.addrspace.wrap.p101.p0(ptr %operation)
  %2 = tail call noundef i32 @llvm.nvvm.read.ptx.sreg.tid.x() #142
  %3 = tail call noundef i32 @llvm.nvvm.read.ptx.sreg.ntid.x() #142
  %4 = tail call noundef i32 @llvm.nvvm.read.ptx.sreg.ctaid.x() #142
  %mul.i = mul i32 %3, %4
  %add.i = add i32 %mul.i, %2
  %cmp.not.i = icmp ult i32 %add.i, %size
  br i1 %cmp.not.i, label %if.end.i, label %diffe_ZN8Cromwell8Patterns34one_dimensional_kernel_cuda_deviceINS_11CommonModel11CellZoneUDF23priv_CM_CzUDF_ScaTraTbl24OperationScalarPopulatorEEEvjPv.exit

if.end.i:                                         ; preds = %entry
  %conv.i.i = zext i32 %add.i to i64
  %"'ipl.i" = load ptr, ptr %d_operation, align 8, !tbaa !15, !alias.scope !22, !noalias !25
  %"'ipl.i1" = addrspacecast ptr %"'ipl.i" to ptr addrspace(1)
  %"'ipl.i2" = addrspacecast ptr addrspace(1) %"'ipl.i1" to ptr
  %"arrayidx.i.i'ipg_unwrap.i" = getelementptr inbounds nuw double, ptr %"'ipl.i2", i64 %conv.i.i
  %5 = load double, ptr %"arrayidx.i.i'ipg_unwrap.i", align 8, !tbaa !27, !alias.scope !29, !noalias !32
  store double 0.000000e+00, ptr %"arrayidx.i.i'ipg_unwrap.i", align 8, !tbaa !27, !alias.scope !29, !noalias !32
  %"value.i'ipg_unwrap.i3" = getelementptr inbounds i8, ptr addrspace(101) %0, i64 16
  %"value.i'ipg_unwrap.i" = getelementptr inbounds nuw i8, ptr %d_operation, i64 16
  %"value.i'ipg_unwrap.i3.gen" = addrspacecast ptr addrspace(101) %"value.i'ipg_unwrap.i3" to ptr
  %6 = atomicrmw fadd ptr %"value.i'ipg_unwrap.i", double %5 monotonic, align 8
  br label %diffe_ZN8Cromwell8Patterns34one_dimensional_kernel_cuda_deviceINS_11CommonModel11CellZoneUDF23priv_CM_CzUDF_ScaTraTbl24OperationScalarPopulatorEEEvjPv.exit

diffe_ZN8Cromwell8Patterns34one_dimensional_kernel_cuda_deviceINS_11CommonModel11CellZoneUDF23priv_CM_CzUDF_ScaTraTbl24OperationScalarPopulatorEEEvjPv.exit: ; preds = %entry, %if.end.i
  ret void
}
Image

ways to reproduce the unsupport of atomicrw without enzyme

https://fwd.gymni.ch/fr7UB8

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions