Skip to content

[HLSL][GlobalOpt] Target extension type not allowed to have a zeroinitializer #137713

Open
@farzonl

Description

@farzonl

Crashing IR

target("dx.RawBuffer", i16, 1, 0), ptr @_ZL3src, align 4, !tbaa !11

IR more context

if.then.i:                                        ; preds = %entry
  %agg.tmp1.i.sroa.0.0.copyload = load <4 x i32>, ptr addrspace(2) @dimSizes, align 16
  %agg.tmp1.i.sroa.4.0.copyload = load <4 x i32>, ptr addrspace(2) getelementptr inbounds nuw (i8, ptr addrspace(2) @dimSizes, i32 16), align 16, !tbaa !10
  %vecext.i = extractelement <4 x i32> %agg.tmp1.i.sroa.4.0.copyload, i64 3
  %vecins3.i = shufflevector <4 x i32> <i32 poison, i32 poison, i32 poison, i32 1>, <4 x i32> %agg.tmp1.i.sroa.4.0.copyload, <4 x i32> <i32 poison, i32 poison, i32 7, i32 3>
  %vecext5.i = extractelement <4 x i32> %agg.tmp1.i.sroa.4.0.copyload, i64 2
  %mul.i = mul i32 %vecext5.i, %vecext.i
  %vecext11.i = extractelement <4 x i32> %agg.tmp1.i.sroa.4.0.copyload, i64 1
  %mul14.i = mul i32 %mul.i, %vecext11.i
  %3 = insertelement <4 x i32> %vecins3.i, i32 %mul14.i, i64 0
  %vecins16.i = insertelement <4 x i32> %3, i32 %mul.i, i64 1
  %vecext18.i = extractelement <4 x i32> %agg.tmp1.i.sroa.4.0.copyload, i64 0
  %mul21.i = mul i32 %mul14.i, %vecext18.i
  %vecext25.i = extractelement <4 x i32> %agg.tmp1.i.sroa.0.0.copyload, i64 3
  %mul28.i = mul i32 %mul21.i, %vecext25.i
  %vecext32.i = extractelement <4 x i32> %agg.tmp1.i.sroa.0.0.copyload, i64 2
  %mul35.i = mul i32 %mul28.i, %vecext32.i
  %vecext39.i = extractelement <4 x i32> %agg.tmp1.i.sroa.0.0.copyload, i64 1
  %mul42.i = mul i32 %mul35.i, %vecext39.i
  %4 = insertelement <4 x i32> poison, i32 %mul42.i, i64 0
  %5 = insertelement <4 x i32> %4, i32 %mul35.i, i64 1
  %6 = insertelement <4 x i32> %5, i32 %mul28.i, i64 2
  %vecins44.i = insertelement <4 x i32> %6, i32 %mul21.i, i64 3
  %splat.splatinsert.i = insertelement <4 x i32> poison, i32 %add.i, i64 0
  %splat.splat.i = shufflevector <4 x i32> %splat.splatinsert.i, <4 x i32> poison, <4 x i32> zeroinitializer
  %div.i = udiv <4 x i32> %splat.splat.i, %vecins44.i
  %rem.i = urem <4 x i32> %div.i, %agg.tmp1.i.sroa.0.0.copyload
  %div6.i = udiv <4 x i32> %splat.splat.i, %vecins16.i
  %rem8.i = urem <4 x i32> %div6.i, %agg.tmp1.i.sroa.4.0.copyload
  %agg.tmp4.i.sroa.0.0.copyload = load <4 x i32>, ptr addrspace(2) @outputStrides, align 16
  %agg.tmp4.i.sroa.4.0.copyload = load <4 x i32>, ptr addrspace(2) getelementptr inbounds nuw (i8, ptr addrspace(2) @outputStrides, i32 16), align 16, !tbaa !10
  %agg.tmp8.i.sroa.0.0.copyload = load <4 x i32>, ptr addrspace(2) @inputStrides, align 16
  %agg.tmp8.i.sroa.4.0.copyload = load <4 x i32>, ptr addrspace(2) getelementptr inbounds nuw (i8, ptr addrspace(2) @inputStrides, i32 16), align 16, !tbaa !10
  %hlsl.dot.i27 = tail call i32 @llvm.dx.udot.v4i32(<4 x i32> %rem.i, <4 x i32> %agg.tmp4.i.sroa.0.0.copyload)
  %hlsl.dot4.i30 = tail call i32 @llvm.dx.udot.v4i32(<4 x i32> %rem8.i, <4 x i32> %agg.tmp4.i.sroa.4.0.copyload)
  %add.i31 = add i32 %hlsl.dot4.i30, %hlsl.dot.i27
  %hlsl.dot.i = tail call i32 @llvm.dx.udot.v4i32(<4 x i32> %rem.i, <4 x i32> %agg.tmp8.i.sroa.0.0.copyload)
  %hlsl.dot4.i = tail call i32 @llvm.dx.udot.v4i32(<4 x i32> %rem8.i, <4 x i32> %agg.tmp8.i.sroa.4.0.copyload)
  %add.i24 = add i32 %hlsl.dot4.i, %hlsl.dot.i
  %7 = load target("dx.RawBuffer", i16, 1, 0), ptr @_ZL3src, align 4, !tbaa !11
  %8 = tail call noundef nonnull align 2 dereferenceable(2) ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_i16_1_0t(target("dx.RawBuffer", i16, 1, 0) %7, i32 %add.i24)
  %9 = load i16, ptr %8, align 2, !tbaa !13
  %10 = tail call i16 @llvm.abs.i16(i16 %9, i1 false)
  %11 = tail call noundef nonnull align 2 dereferenceable(2) ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_i16_1_0t(target("dx.RawBuffer", i16, 1, 0) %_ZL4dest_h.i.i, i32 %add.i31)
  store i16 %10, ptr %11, align 2, !tbaa !13
  br label %_Z6CSMainDv3_j.exit

Assert

Assertion failed: (Ty->hasProperty(TargetExtType::HasZeroInit) && "Target extension type not allowed to have a zeroinitializer"), function get, file Constants.cpp, line 1847.
Process 34436 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = hit program assert
    frame #4: 0x0000000101d21d20 clang-dxc`llvm::ConstantTargetNone::get(Ty=0x000000011c866030) at Constants.cpp:1846:3
   1843 //
   1844
   1845 ConstantTargetNone *ConstantTargetNone::get(TargetExtType *Ty) {
-> 1846   assert(Ty->hasProperty(TargetExtType::HasZeroInit) &&
   1847          "Target extension type not allowed to have a zeroinitializer");
   1848   std::unique_ptr<ConstantTargetNone> &Entry =
   1849       Ty->getContext().pImpl->CTNConstants[Ty];

Stack Trace

* thread #1, queue = 'com.apple.main-thread', stop reason = hit program assert
    frame #0: 0x00000001842b4388 libsystem_kernel.dylib`__pthread_kill + 8
    frame #1: 0x00000001842ed88c libsystem_pthread.dylib`pthread_kill + 296
    frame #2: 0x00000001841f6c60 libsystem_c.dylib`abort + 124
    frame #3: 0x00000001841f5eec libsystem_c.dylib`__assert_rtn + 284
  * frame #4: 0x0000000101d21d20 clang-dxc`llvm::ConstantTargetNone::get(Ty=0x000000011c866030) at Constants.cpp:1846:3
    frame #5: 0x0000000101d218d4 clang-dxc`llvm::Constant::getNullValue(Ty=0x000000011c866030) at Constants.cpp:396:12
    frame #6: 0x0000000100bb0e88 clang-dxc`llvm::ConstantFoldLoadFromUniformValue(C=0x000000011c342dd0, Ty=0x000000011c866030, DL=0x000000012be0f628) at ConstantFolding.cpp:774:12
    frame #7: 0x00000001022c59dc clang-dxc`CleanupConstantGlobalUsers(GV=0x000000011c344a80, DL=0x000000012be0f628) at GlobalOpt.cpp:308:27
    frame #8: 0x00000001022c46e4 clang-dxc`processInternalGlobal(GV=0x000000011c344a80, GS=0x000000016fdf18f8, GetTTI=function_ref<llvm::TargetTransformInfo &(llvm::Function &)> @ 0x000000016fdf1858, GetTLI=function_ref<llvm::TargetLibraryInfo &(llvm::Function &)> @ 0x000000016fdf1848, LookupDomTree=function_ref<llvm::DominatorTree &(llvm::Function &)> @ 0x000000016fdf1838) at GlobalOpt.cpp:1544:16
    frame #9: 0x00000001022c2c64 clang-dxc`processGlobal(GV=0x000000011c344a80, GetTTI=function_ref<llvm::TargetTransformInfo &(llvm::Function &)> @ 0x000000016fdf1968, GetTLI=function_ref<llvm::TargetLibraryInfo &(llvm::Function &)> @ 0x000000016fdf1958, LookupDomTree=function_ref<llvm::DominatorTree &(llvm::Function &)> @ 0x000000016fdf1948) at GlobalOpt.cpp:1674:10
    frame #10: 0x00000001022c1018 clang-dxc`OptimizeGlobalVars(M=0x000000012be0f510, GetTTI=function_ref<llvm::TargetTransformInfo &(llvm::Function &)> @ 0x000000016fdf1ac0, GetTLI=function_ref<llvm::TargetLibraryInfo &(llvm::Function &)> @ 0x000000016fdf1ab0, LookupDomTree=function_ref<llvm::DominatorTree &(llvm::Function &)> @ 0x000000016fdf1aa0, NotDiscardableComdats=0x000000016fdf1d90) at GlobalOpt.cpp:2244:16
    frame #11: 0x00000001022c031c clang-dxc`optimizeGlobalsInModule(M=0x000000012be0f510, DL=0x000000012be0f628, GetTLI=function_ref<llvm::TargetLibraryInfo &(llvm::Function &)> @ 0x000000016fdf1e50, GetTTI=function_ref<llvm::TargetTransformInfo &(llvm::Function &)> @ 0x000000016fdf1e40, GetBFI=function_ref<llvm::BlockFrequencyInfo &(llvm::Function &)> @ 0x000000016fdf1e30, LookupDomTree=function_ref<llvm::DominatorTree &(llvm::Function &)> @ 0x000000016fdf1e20, ChangedCFGCallback=function_ref<void (llvm::Function &)> @ 0x000000016fdf1e10, DeleteFnCallback=function_ref<void (llvm::Function &)> @ 0x000000016fdf1e00) at GlobalOpt.cpp:2875:20
    frame #12: 0x00000001022bfe8c clang-dxc`llvm::GlobalOptPass::run(this=0x000000012be2a758, M=0x000000012be0f510, AM=0x000000016fdf2c60) at GlobalOpt.cpp:2930:10
    frame #13: 0x0000000105d967d8 clang-dxc`llvm::detail::PassModel<llvm::Module, llvm::GlobalOptPass, llvm::AnalysisManager<llvm::Module>>::run(this=0x000000012be2a750, IR=0x000000012be0f510, AM=0x000000016fdf2c60) at PassManagerInternal.h:91:17
    frame #14: 0x0000000101ffcf9c clang-dxc`llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(this=0x000000016fdf29a0, IR=0x000000012be0f510, AM=0x000000016fdf2c60) at PassManagerImpl.h:81:38
    frame #15: 0x0000000103b5eaec clang-dxc`(anonymous namespace)::EmitAssemblyHelper::RunOptimizationPipeline(this=0x000000016fdf4d50, Action=Backend_EmitAssembly, OS=llvm::raw_pwrite_stream @ 0x000000012be0f190, ThinLinkOS=nullptr, BC=0x000000012be0f390) at BackendUtil.cpp:1194:9
    frame #16: 0x0000000103b4f658 clang-dxc`(anonymous namespace)::EmitAssemblyHelper::emitAssembly(this=0x000000016fdf4d50, Action=Backend_EmitAssembly, OS=llvm::raw_pwrite_stream @ 0x000000012be0f190, BC=0x000000012be0f390) at BackendUtil.cpp:1267:3
    frame #17: 0x0000000103b4eb88 clang-dxc`clang::emitBackendOutput(CI=0x000000012d005a60, CGOpts=0x000000012d808218, TDesc=(Data = "e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:32-f64:64-n8:16:32:64", Length = 78), M=0x000000012be0f510, Action=Backend_EmitAssembly, VFS=IntrusiveRefCntPtr<llvm::vfs::FileSystem> @ 0x000000016fdf5058, OS=nullptr, BC=0x000000012be0f390) at BackendUtil.cpp:1433:13
    frame #18: 0x00000001042ca204 clang-dxc`clang::BackendConsumer::HandleTranslationUnit(this=0x000000012be0f390, C=0x000000012c01cc00) at CodeGenAction.cpp:316:3
    frame #19: 0x0000000106af43cc clang-dxc`clang::ParseAST(S=0x000000012c03de00, PrintStats=false, SkipFunctionBodies=false) at ParseAST.cpp:184:13
    frame #20: 0x0000000104e43de8 clang-dxc`clang::ASTFrontendAction::ExecuteAction(this=0x000000012d0097a0) at FrontendAction.cpp:1343:3
    frame #21: 0x00000001042cfc78 clang-dxc`clang::CodeGenAction::ExecuteAction(this=0x000000012d0097a0) at CodeGenAction.cpp:1111:30
    frame #22: 0x0000000104e43660 clang-dxc`clang::FrontendAction::Execute(this=0x000000012d0097a0) at FrontendAction.cpp:1225:3
    frame #23: 0x0000000104d5acac clang-dxc`clang::CompilerInstance::ExecuteAction(this=0x000000012d005a60, Act=0x000000012d0097a0) at CompilerInstance.cpp:1058:33
    frame #24: 0x0000000104f80450 clang-dxc`clang::ExecuteCompilerInvocation(Clang=0x000000012d005a60) at ExecuteCompilerInvocation.cpp:300:25
    frame #25: 0x0000000100013b20 clang-dxc`cc1_main(Argv=ArrayRef<const char *> @ 0x000000016fdf5f98, Argv0="/Users/farzonlotfi/Projects/llvm_debug_build/bin/clang-20", MainAddr=0x00000001000039e8) at cc1_main.cpp:294:15
    frame #26: 0x0000000100005390 clang-dxc`ExecuteCC1Tool(ArgV=0x000000016fdf9788, ToolContext=0x000000016fdfe738) at driver.cpp:223:12
    frame #27: 0x000000010001249c clang-dxc`clang_main(int, char**, llvm::ToolContext const&)::$_0::operator()(this=0x000000016fdfa2c8, ArgV=0x000000016fdf9788) const at driver.cpp:369:16
    frame #28: 0x000000010001246c clang-dxc`int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<clang_main(int, char**, llvm::ToolContext const&)::$_0>(callable=6171894472, params=0x000000016fdf9788) at STLFunctionalExtras.h:46:12
    frame #29: 0x0000000104a63a18 clang-dxc`llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::operator()(this=0x000000016fdfa950, params=0x000000016fdf9788) const at STLFunctionalExtras.h:69:12
    frame #30: 0x0000000104a639d8 clang-dxc`clang::driver::CC1Command::Execute(llvm::ArrayRef<std::__1::optional<llvm::StringRef>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>*, bool*) const::$_0::operator()(this=0x000000016fdf96e8) const at Job.cpp:435:34
    frame #31: 0x0000000104a639a4 clang-dxc`void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::__1::optional<llvm::StringRef>>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>*, bool*) const::$_0>(callable=6171891432) at STLFunctionalExtras.h:46:12
    frame #32: 0x00000001011718e4 clang-dxc`llvm::function_ref<void ()>::operator()(this=0x000000016fdf9688) const at STLFunctionalExtras.h:69:12
    frame #33: 0x00000001030becfc clang-dxc`llvm::CrashRecoveryContext::RunSafely(this=0x000000016fdf9728, Fn=function_ref<void ()> @ 0x000000016fdf9688) at CrashRecoveryContext.cpp:426:3
    frame #34: 0x0000000104a5fec8 clang-dxc`clang::driver::CC1Command::Execute(this=0x000000012d005d40, Redirects=ArrayRef<std::__1::optional<llvm::StringRef> > @ 0x000000016fdf9770, ErrMsg="", ExecutionFailed=0x000000016fdf9c7f) const at Job.cpp:435:12
    frame #35: 0x00000001049f57f4 clang-dxc`clang::driver::Compilation::ExecuteCommand(this=0x000000012d004740, C=0x000000012d005d40, FailingCommand=0x000000016fdf9d98, LogOnly=false) const at Compilation.cpp:196:15
    frame #36: 0x00000001049f5a80 clang-dxc`clang::driver::Compilation::ExecuteJobs(this=0x000000012d004740, Jobs=0x000000012d0047c0, FailingCommands=0x000000016fdfa628, LogOnly=false) const at Compilation.cpp:251:19
    frame #37: 0x0000000104a140a4 clang-dxc`clang::driver::Driver::ExecuteCompilation(this=0x000000016fdfa678, C=0x000000012d004740, FailingCommands=0x000000016fdfa628) at Driver.cpp:2225:5
    frame #38: 0x0000000100004b0c clang-dxc`clang_main(Argc=16, Argv=0x000000016fdfee78, ToolContext=0x000000016fdfe738) at driver.cpp:407:21
    frame #39: 0x000000010003f22c clang-dxc`main(argc=16, argv=0x000000016fdfee78) at clang-driver.cpp:17:10
    frame #40: 0x0000000183f4eb4c dyld`start + 6000

Metadata

Metadata

Assignees

No one assigned

    Labels

    HLSLHLSL Language Supportclang:HLSL:DXClang HLSL DX(IL|BC) support

    Type

    Projects

    Status

    Ready

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions