Skip to content

[DirectX] DXILBitcodeWriter is trying to encode unsupported TargetExtTyID #151764

@farzonl

Description

@farzonl

After #151751 merges These bugs that were origionally Type asserts because we were trying to cast Loads to CallInst become Bytecode encoding bugs
Ie before it was:

Assertion: (isa<To>(Val) && "cast<Ty>() argument of incompatible type!")
Function: cast
File: Casting.h:578

And now it is llvm_unreachable("These should never be used!!!"); Because we are trying to encode the TargetExtTyID.

#151751 is improving things, by fixing the DXIL ForwardHandle pass, but that is exposing some changes needed in the bitcode writer. Which we will handle as a seperate issue. Until this change merges this issue is not exposed even though it exists.

(lldb) frame select 4
frame #4: 0x0000000105433288 clang-dxc`llvm::dxil::DXILBitcodeWriter::writeTypeTable(this=0x000000016fdf3d98) at DXILBitcodeWriter.cpp:1025:7
   1022     case Type::X86_AMXTyID:
   1023     case Type::TokenTyID:
   1024     case Type::TargetExtTyID:
-> 1025       llvm_unreachable("These should never be used!!!");
   1026       break;
   1027     case Type::VoidTyID:
   1028       Code = bitc::TYPE_CODE_VOID;
(lldb) expr T->dump()
target("dx.RawBuffer", i32, 1, 0)

Crash Stack

(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
  * frame #0: 0x000000018cb79388 libsystem_kernel.dylib`__pthread_kill + 8
    frame #1: 0x000000018cbb288c libsystem_pthread.dylib`pthread_kill + 296
    frame #2: 0x000000018cabbc60 libsystem_c.dylib`abort + 124
    frame #3: 0x000000010319bc10 clang-dxc`llvm::llvm_unreachable_internal(msg="These should never be used!!!", file="/Users/farzonlotfi/Projects/llvm-project/llvm/lib/Target/DirectX/DXILWriter/DXILBitcodeWriter.cpp", line=1025) at ErrorHandling.cpp:244:3
    frame #4: 0x0000000105433288 clang-dxc`llvm::dxil::DXILBitcodeWriter::writeTypeTable(this=0x000000016fdf3d98) at DXILBitcodeWriter.cpp:1025:7
    frame #5: 0x0000000105430abc clang-dxc`llvm::dxil::DXILBitcodeWriter::write(this=0x000000016fdf3d98) at DXILBitcodeWriter.cpp:2888:3
    frame #6: 0x0000000105430780 clang-dxc`llvm::dxil::BitcodeWriter::writeModule(this=0x000000016fdf40f0, M=0x0000000126e0f6c0) at DXILBitcodeWriter.cpp:436:16
    frame #7: 0x0000000105430628 clang-dxc`llvm::dxil::WriteDXILToFile(M=0x0000000126e0f6c0, Out=0x000000016fdf43c0) at DXILBitcodeWriter.cpp:406:10
    frame #8: 0x000000010546ab18 clang-dxc`(anonymous namespace)::EmbedDXILPass::runOnModule(this=0x000000011ca1ce40, M=0x0000000126e0f6c0) at DXILWriterPass.cpp:125:5
    frame #9: 0x0000000102003bd0 clang-dxc`(anonymous namespace)::MPPassManager::runOnModule(this=0x000000011ca1d850, M=0x0000000126e0f6c0) at LegacyPassManager.cpp:1513:27
    frame #10: 0x0000000102003754 clang-dxc`llvm::legacy::PassManagerImpl::run(this=0x000000011e02e200, M=0x0000000126e0f6c0) at LegacyPassManager.cpp:531:44
    frame #11: 0x000000010200a2ac clang-dxc`llvm::legacy::PassManager::run(this=0x000000016fdf47f8, M=0x0000000126e0f6c0) at LegacyPassManager.cpp:1640:14
    frame #12: 0x0000000103c67294 clang-dxc`(anonymous namespace)::EmitAssemblyHelper::RunCodegenPipeline(this=0x000000016fdf4c70, Action=Backend_EmitObj, OS=llvm::raw_pwrite_stream @ 0x0000000126e0f340, DwoOS=nullptr) at BackendUtil.cpp:1254:19
    frame #13: 0x0000000103c57a34 clang-dxc`(anonymous namespace)::EmitAssemblyHelper::emitAssembly(this=0x000000016fdf4c70, Action=Backend_EmitObj, OS=llvm::raw_pwrite_stream @ 0x0000000126e0f340, BC=0x0000000126e0f490) at BackendUtil.cpp:1278:3
    frame #14: 0x0000000103c56f28 clang-dxc`clang::emitBackendOutput(CI=0x0000000126f29060, CGOpts=0x000000012781e018, 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=0x0000000126e0f6c0, Action=Backend_EmitObj, VFS=IntrusiveRefCntPtr<llvm::vfs::FileSystem> @ 0x000000016fdf4f78, OS=nullptr, BC=0x0000000126e0f490) at BackendUtil.cpp:1443:13
    frame #15: 0x00000001043e9244 clang-dxc`clang::BackendConsumer::HandleTranslationUnit(this=0x0000000126e0f490, C=0x000000012701ce00) at CodeGenAction.cpp:316:3
    frame #16: 0x0000000106ca45d4 clang-dxc`clang::ParseAST(S=0x000000012703f000, PrintStats=false, SkipFunctionBodies=false) at ParseAST.cpp:183:13
    frame #17: 0x0000000104f9e2f8 clang-dxc`clang::ASTFrontendAction::ExecuteAction(this=0x0000000126f2afc0) at FrontendAction.cpp:1342:3
    frame #18: 0x00000001043eed68 clang-dxc`clang::CodeGenAction::ExecuteAction(this=0x0000000126f2afc0) at CodeGenAction.cpp:1113:30
    frame #19: 0x0000000104f9db68 clang-dxc`clang::FrontendAction::Execute(this=0x0000000126f2afc0) at FrontendAction.cpp:1222:3
    frame #20: 0x0000000104eb452c clang-dxc`clang::CompilerInstance::ExecuteAction(this=0x0000000126f29060, Act=0x0000000126f2afc0) at CompilerInstance.cpp:1061:33
    frame #21: 0x00000001050e1be8 clang-dxc`clang::ExecuteCompilerInvocation(Clang=0x0000000126f29060) at ExecuteCompilerInvocation.cpp:299:25
    frame #22: 0x0000000100012b98 clang-dxc`cc1_main(Argv=ArrayRef<const char *> @ 0x000000016fdf5e78, Argv0="/Users/farzonlotfi/Projects/llvm_debug_build/bin/clang-20", MainAddr=0x0000000100003684) at cc1_main.cpp:297:15
    frame #23: 0x0000000100005018 clang-dxc`ExecuteCC1Tool(ArgV=0x000000016fdf9758, ToolContext=0x000000016fdfe6f8) at driver.cpp:223:12
    frame #24: 0x0000000100011590 clang-dxc`clang_main(int, char**, llvm::ToolContext const&)::$_0::operator()(this=0x000000016fdfa290, ArgV=0x000000016fdf9758) const at driver.cpp:368:16
    frame #25: 0x0000000100011560 clang-dxc`int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<clang_main(int, char**, llvm::ToolContext const&)::$_0>(callable=6171894416, params=0x000000016fdf9758) at STLFunctionalExtras.h:46:12
    frame #26: 0x0000000104bb1ea8 clang-dxc`llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::operator()(this=0x000000016fdfa918, params=0x000000016fdf9758) const at STLFunctionalExtras.h:69:12
    frame #27: 0x0000000104bb1e68 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=0x000000016fdf96b8) const at Job.cpp:436:34
    frame #28: 0x0000000104bb1e34 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=6171891384) at STLFunctionalExtras.h:46:12
    frame #29: 0x00000001011f7984 clang-dxc`llvm::function_ref<void ()>::operator()(this=0x000000016fdf9658) const at STLFunctionalExtras.h:69:12
    frame #30: 0x0000000103184630 clang-dxc`llvm::CrashRecoveryContext::RunSafely(this=0x000000016fdf96f8, Fn=function_ref<void ()> @ 0x000000016fdf9658) at CrashRecoveryContext.cpp:426:3
    frame #31: 0x0000000104bae37c clang-dxc`clang::driver::CC1Command::Execute(this=0x0000000126f24000, Redirects=ArrayRef<std::__1::optional<llvm::StringRef> > @ 0x000000016fdf9740, ErrMsg="", ExecutionFailed=0x000000016fdf9c4f) const at Job.cpp:436:12
    frame #32: 0x0000000104b41b58 clang-dxc`clang::driver::Compilation::ExecuteCommand(this=0x0000000126f22930, C=0x0000000126f24000, FailingCommand=0x000000016fdf9d68, LogOnly=false) const at Compilation.cpp:196:15
    frame #33: 0x0000000104b41de4 clang-dxc`clang::driver::Compilation::ExecuteJobs(this=0x0000000126f22930, Jobs=0x0000000126f229b0, FailingCommands=0x000000016fdfa5f0, LogOnly=false) const at Compilation.cpp:251:19
    frame #34: 0x0000000104b60084 clang-dxc`clang::driver::Driver::ExecuteCompilation(this=0x000000016fdfa640, C=0x0000000126f22930, FailingCommands=0x000000016fdfa5f0) at Driver.cpp:2239:5
    frame #35: 0x0000000100004794 clang-dxc`clang_main(Argc=19, Argv=0x000000016fdfee38, ToolContext=0x000000016fdfe6f8) at driver.cpp:406:21
    frame #36: 0x000000010003f5fc clang-dxc`main(argc=19, argv=0x000000016fdfee38) at clang-driver.cpp:17:10
    frame #37: 0x000000018c812b98 dyld`start + 6076

Module Dump

(lldb) expr M->dump()
; ModuleID = '../DirectML/Product/Shaders/Generated/Quantize_256_8_float16_native_accum32_int8_packed32.hlsl'
source_filename = "../DirectML/Product/Shaders/Generated/Quantize_256_8_float16_native_accum32_int8_packed32.hlsl"
target datalayout = "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"
target triple = "dxil-ms-dx"

%"class.hlsl::RWStructuredBuffer.0" = type { target("dx.RawBuffer", i32, 1, 0) }
%"RWStructuredBuffer<half>" = type { half }
%"RWStructuredBuffer<int32_t>" = type { i32 }
%CBuffer.Constants = type { [2 x <4 x i32>], [2 x <4 x i32>], [2 x <4 x i32>], [2 x <4 x i32>], [2 x <4 x i32>], [2 x <4 x i32>], i32, i32, i32, i32 }
%dx.types.Handle = type { ptr }
%dx.types.CBufRet.i32 = type { i32, i32, i32, i32 }
%dx.types.ResRet.f16 = type { half, half, half, half, i32 }
%dx.types.ResRet.i32 = type { i32, i32, i32, i32, i32 }

@_ZL6output = internal unnamed_addr global %"class.hlsl::RWStructuredBuffer.0" poison, align 4
@input = external constant %"RWStructuredBuffer<half>"
@scale = external constant %"RWStructuredBuffer<half>"
@output = external constant %"RWStructuredBuffer<int32_t>"
@Constants = external constant %CBuffer.Constants

; Function Attrs: noinline nounwind memory(readwrite, inaccessiblemem: none)
define void @CSMain() local_unnamed_addr #0 {
entry:
  %agg.tmp22.i63.sroa.0 = alloca target("dx.RawBuffer", i32, 1, 0), align 8
  %0 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 0, i32 0, i1 false) #1
  %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 1, i32 1, i1 false) #1
  %2 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 2, i32 2, i1 false) #1
  %3 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 0, i1 false) #1
  %4 = call i32 @dx.op.threadId.i32(i32 93, i32 0) #2
  %.load110130 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %3, i32 12) #1
  %.extract111 = extractvalue %dx.types.CBufRet.i32 %.load110130, 3
  %add.i = add i32 %.extract111, %4
  %.load132 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %3, i32 12) #1
  %.extract = extractvalue %dx.types.CBufRet.i32 %.load132, 0
  %cmp.i = icmp ult i32 %add.i, %.extract
  br i1 %cmp.i, label %if.then.i, label %_Z6CSMainDv3_j.exit

if.then.i:                                        ; preds = %entry
  %rem.i = and i32 %add.i, 3
  %.load107131 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %3, i32 12) #1
  %.extract108 = extractvalue %dx.types.CBufRet.i32 %.load107131, 2
  %cmp2.not.i = icmp eq i32 %rem.i, %.extract108
  br i1 %cmp2.not.i, label %if.end.i, label %_Z6CSMainDv3_j.exit

if.end.i:                                         ; preds = %if.then.i
  %agg.tmp.i.sroa.4.0.copyload.load137 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %3, i32 1) #1
  %agg.tmp.i.sroa.4.0.copyload.extract = extractvalue %dx.types.CBufRet.i32 %agg.tmp.i.sroa.4.0.copyload.load137, 0
  %agg.tmp.i.sroa.4.0.copyload.extract86 = extractvalue %dx.types.CBufRet.i32 %agg.tmp.i.sroa.4.0.copyload.load137, 1
  %agg.tmp.i.sroa.4.0.copyload.extract87 = extractvalue %dx.types.CBufRet.i32 %agg.tmp.i.sroa.4.0.copyload.load137, 2
  %agg.tmp.i.sroa.4.0.copyload.extract88 = extractvalue %dx.types.CBufRet.i32 %agg.tmp.i.sroa.4.0.copyload.load137, 3
  %mul.i67 = mul i32 %agg.tmp.i.sroa.4.0.copyload.extract87, %agg.tmp.i.sroa.4.0.copyload.extract88
  %mul14.i = mul i32 %mul.i67, %agg.tmp.i.sroa.4.0.copyload.extract86
  %div6.i.i0 = udiv i32 %add.i, %mul14.i
  %div6.i.i1 = udiv i32 %add.i, %mul.i67
  %div6.i.i2 = udiv i32 %add.i, %agg.tmp.i.sroa.4.0.copyload.extract88
  %div6.i.i3 = udiv i32 %add.i, 1
  %rem8.i.i0 = urem i32 %div6.i.i0, %agg.tmp.i.sroa.4.0.copyload.extract
  %rem8.i.i1 = urem i32 %div6.i.i1, %agg.tmp.i.sroa.4.0.copyload.extract86
  %rem8.i.i2 = urem i32 %div6.i.i2, %agg.tmp.i.sroa.4.0.copyload.extract87
  %rem8.i.i3 = urem i32 %div6.i.i3, %agg.tmp.i.sroa.4.0.copyload.extract88
  %mul21.i = mul i32 %mul14.i, %agg.tmp.i.sroa.4.0.copyload.extract
  %agg.tmp.i.sroa.0.0.copyload.load138 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %3, i32 0) #1
  %agg.tmp.i.sroa.0.0.copyload.extract = extractvalue %dx.types.CBufRet.i32 %agg.tmp.i.sroa.0.0.copyload.load138, 0
  %agg.tmp.i.sroa.0.0.copyload.extract82 = extractvalue %dx.types.CBufRet.i32 %agg.tmp.i.sroa.0.0.copyload.load138, 1
  %agg.tmp.i.sroa.0.0.copyload.extract83 = extractvalue %dx.types.CBufRet.i32 %agg.tmp.i.sroa.0.0.copyload.load138, 2
  %agg.tmp.i.sroa.0.0.copyload.extract84 = extractvalue %dx.types.CBufRet.i32 %agg.tmp.i.sroa.0.0.copyload.load138, 3
  %mul28.i = mul i32 %mul21.i, %agg.tmp.i.sroa.0.0.copyload.extract84
  %mul35.i = mul i32 %mul28.i, %agg.tmp.i.sroa.0.0.copyload.extract83
  %mul42.i = mul i32 %mul35.i, %agg.tmp.i.sroa.0.0.copyload.extract82
  %div.i.i0 = udiv i32 %add.i, %mul42.i
  %div.i.i1 = udiv i32 %add.i, %mul35.i
  %div.i.i2 = udiv i32 %add.i, %mul28.i
  %div.i.i3 = udiv i32 %add.i, %mul21.i
  %rem.i25.i0 = urem i32 %div.i.i0, %agg.tmp.i.sroa.0.0.copyload.extract
  %rem.i25.i1 = urem i32 %div.i.i1, %agg.tmp.i.sroa.0.0.copyload.extract82
  %rem.i25.i2 = urem i32 %div.i.i2, %agg.tmp.i.sroa.0.0.copyload.extract83
  %rem.i25.i3 = urem i32 %div.i.i3, %agg.tmp.i.sroa.0.0.copyload.extract84
  %agg.tmp4.i.sroa.0.0.copyload.load136 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %3, i32 2) #1
  %agg.tmp4.i.sroa.0.0.copyload.extract = extractvalue %dx.types.CBufRet.i32 %agg.tmp4.i.sroa.0.0.copyload.load136, 0
  %agg.tmp4.i.sroa.0.0.copyload.extract90 = extractvalue %dx.types.CBufRet.i32 %agg.tmp4.i.sroa.0.0.copyload.load136, 1
  %agg.tmp4.i.sroa.0.0.copyload.extract91 = extractvalue %dx.types.CBufRet.i32 %agg.tmp4.i.sroa.0.0.copyload.load136, 2
  %agg.tmp4.i.sroa.0.0.copyload.extract92 = extractvalue %dx.types.CBufRet.i32 %agg.tmp4.i.sroa.0.0.copyload.load136, 3
  %agg.tmp4.i.sroa.4.0.copyload.load135 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %3, i32 3) #1
  %agg.tmp4.i.sroa.4.0.copyload.extract = extractvalue %dx.types.CBufRet.i32 %agg.tmp4.i.sroa.4.0.copyload.load135, 0
  %agg.tmp4.i.sroa.4.0.copyload.extract94 = extractvalue %dx.types.CBufRet.i32 %agg.tmp4.i.sroa.4.0.copyload.load135, 1
  %agg.tmp4.i.sroa.4.0.copyload.extract95 = extractvalue %dx.types.CBufRet.i32 %agg.tmp4.i.sroa.4.0.copyload.load135, 2
  %agg.tmp4.i.sroa.4.0.copyload.extract96 = extractvalue %dx.types.CBufRet.i32 %agg.tmp4.i.sroa.4.0.copyload.load135, 3
  %div.i41.i0 = udiv i32 %agg.tmp.i.sroa.0.0.copyload.extract, %agg.tmp4.i.sroa.0.0.copyload.extract
  %div.i41.i1 = udiv i32 %agg.tmp.i.sroa.0.0.copyload.extract82, %agg.tmp4.i.sroa.0.0.copyload.extract90
  %div.i41.i2 = udiv i32 %agg.tmp.i.sroa.0.0.copyload.extract83, %agg.tmp4.i.sroa.0.0.copyload.extract91
  %div.i41.i3 = udiv i32 %agg.tmp.i.sroa.0.0.copyload.extract84, %agg.tmp4.i.sroa.0.0.copyload.extract92
  %div5.i44.i0 = udiv i32 %agg.tmp.i.sroa.4.0.copyload.extract, %agg.tmp4.i.sroa.4.0.copyload.extract
  %div5.i44.i1 = udiv i32 %agg.tmp.i.sroa.4.0.copyload.extract86, %agg.tmp4.i.sroa.4.0.copyload.extract94
  %div5.i44.i2 = udiv i32 %agg.tmp.i.sroa.4.0.copyload.extract87, %agg.tmp4.i.sroa.4.0.copyload.extract95
  %div5.i44.i3 = udiv i32 %agg.tmp.i.sroa.4.0.copyload.extract88, %agg.tmp4.i.sroa.4.0.copyload.extract96
  %div.i32.i0 = udiv i32 %rem.i25.i0, %div.i41.i0
  %div.i32.i1 = udiv i32 %rem.i25.i1, %div.i41.i1
  %div.i32.i2 = udiv i32 %rem.i25.i2, %div.i41.i2
  %div.i32.i3 = udiv i32 %rem.i25.i3, %div.i41.i3
  %div5.i.i0 = udiv i32 %rem8.i.i0, %div5.i44.i0
  %div5.i.i1 = udiv i32 %rem8.i.i1, %div5.i44.i1
  %div5.i.i2 = udiv i32 %rem8.i.i2, %div5.i44.i2
  %div5.i.i3 = udiv i32 %rem8.i.i3, %div5.i44.i3
  %agg.tmp11.i.sroa.0.0.copyload.load134 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %3, i32 6) #1
  %agg.tmp11.i.sroa.0.0.copyload.extract = extractvalue %dx.types.CBufRet.i32 %agg.tmp11.i.sroa.0.0.copyload.load134, 0
  %agg.tmp11.i.sroa.0.0.copyload.extract98 = extractvalue %dx.types.CBufRet.i32 %agg.tmp11.i.sroa.0.0.copyload.load134, 1
  %agg.tmp11.i.sroa.0.0.copyload.extract99 = extractvalue %dx.types.CBufRet.i32 %agg.tmp11.i.sroa.0.0.copyload.load134, 2
  %agg.tmp11.i.sroa.0.0.copyload.extract100 = extractvalue %dx.types.CBufRet.i32 %agg.tmp11.i.sroa.0.0.copyload.load134, 3
  %agg.tmp11.i.sroa.4.0.copyload.load133 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %3, i32 7) #1
  %agg.tmp11.i.sroa.4.0.copyload.extract = extractvalue %dx.types.CBufRet.i32 %agg.tmp11.i.sroa.4.0.copyload.load133, 0
  %agg.tmp11.i.sroa.4.0.copyload.extract102 = extractvalue %dx.types.CBufRet.i32 %agg.tmp11.i.sroa.4.0.copyload.load133, 1
  %agg.tmp11.i.sroa.4.0.copyload.extract103 = extractvalue %dx.types.CBufRet.i32 %agg.tmp11.i.sroa.4.0.copyload.load133, 2
  %agg.tmp11.i.sroa.4.0.copyload.extract104 = extractvalue %dx.types.CBufRet.i32 %agg.tmp11.i.sroa.4.0.copyload.load133, 3
  %5 = mul i32 %div.i32.i0, %agg.tmp11.i.sroa.0.0.copyload.extract
  %dx.mad79124 = call i32 @dx.op.tertiary.i32(i32 49, i32 %div.i32.i1, i32 %agg.tmp11.i.sroa.0.0.copyload.extract98, i32 %5) #2
  %dx.mad80123 = call i32 @dx.op.tertiary.i32(i32 49, i32 %div.i32.i2, i32 %agg.tmp11.i.sroa.0.0.copyload.extract99, i32 %dx.mad79124) #2
  %dx.mad81122 = call i32 @dx.op.tertiary.i32(i32 49, i32 %div.i32.i3, i32 %agg.tmp11.i.sroa.0.0.copyload.extract100, i32 %dx.mad80123) #2
  %6 = mul i32 %div5.i.i0, %agg.tmp11.i.sroa.4.0.copyload.extract
  %dx.mad127 = call i32 @dx.op.tertiary.i32(i32 49, i32 %div5.i.i1, i32 %agg.tmp11.i.sroa.4.0.copyload.extract102, i32 %6) #2
  %dx.mad77126 = call i32 @dx.op.tertiary.i32(i32 49, i32 %div5.i.i2, i32 %agg.tmp11.i.sroa.4.0.copyload.extract103, i32 %dx.mad127) #2
  %dx.mad78125 = call i32 @dx.op.tertiary.i32(i32 49, i32 %div5.i.i3, i32 %agg.tmp11.i.sroa.4.0.copyload.extract104, i32 %dx.mad77126) #2
  %add.i62 = add i32 %dx.mad78125, %dx.mad81122
  %7 = call %dx.types.ResRet.f16 @dx.op.rawBufferLoad.f16(i32 139, %dx.types.Handle %0, i32 %add.i, i32 0, i8 1, i32 2)
  %8 = extractvalue %dx.types.ResRet.f16 %7, 0
  %9 = call %dx.types.ResRet.f16 @dx.op.rawBufferLoad.f16(i32 139, %dx.types.Handle %1, i32 %add.i62, i32 0, i8 1, i32 2)
  %10 = extractvalue %dx.types.ResRet.f16 %9, 0
  %conv.i = fpext reassoc nnan ninf nsz arcp afn half %8 to float
  %conv18.i = fpext reassoc nnan ninf nsz arcp afn half %10 to float
  %div.i.i = fdiv reassoc nnan ninf nsz arcp afn float %conv.i, %conv18.i
  %elt.roundeven.i.i121 = call float @dx.op.unary.f32(i32 26, float %div.i.i) #2
  %dx.max128 = call float @dx.op.binary.f32(i32 35, float %elt.roundeven.i.i121, float -1.280000e+02) #2
  %dx.min129 = call float @dx.op.binary.f32(i32 36, float %dx.max128, float 1.270000e+02) #2
  %conv21.i = fptosi float %dx.min129 to i32
  %11 = bitcast ptr @_ZL6output to ptr
  %12 = load i32, ptr %11, align 4
  %13 = bitcast ptr %agg.tmp22.i63.sroa.0 to ptr
  store target("dx.RawBuffer", i32, 1, 0) undef, ptr %13, align 4
  %14 = bitcast ptr %agg.tmp22.i63.sroa.0 to ptr
  store i32 %12, ptr %14, align 4
  %div9.i = lshr i32 %add.i, 2
  %rem.i64 = shl i32 %add.i, 3
  %mul.i = and i32 %rem.i64, 24
  %shl.i = shl nuw i32 255, %mul.i
  %15 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %2, i32 %div9.i, i32 0, i8 1, i32 4)
  %16 = extractvalue %dx.types.ResRet.i32 %15, 0
  %shl2.i = shl i32 %conv21.i, %mul.i
  %xor.i = xor i32 %16, %shl2.i
  %and.i = and i32 %xor.i, %shl.i
  %xor3.i = xor i32 %and.i, %16
  call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %2, i32 %div9.i, i32 0, i32 %xor3.i, i32 undef, i32 undef, i32 undef, i8 1, i32 4)
  %17 = bitcast ptr %agg.tmp22.i63.sroa.0 to ptr
  store target("dx.RawBuffer", i32, 1, 0) undef, ptr %17, align 4
  br label %_Z6CSMainDv3_j.exit

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

declare float @dx.op.unary.f32(i32 %0, float %1)

declare i32 @dx.op.threadId.i32(i32 %0, i32 %1)

declare %dx.types.Handle @dx.op.createHandle(i32 %0, i8 %1, i32 %2, i32 %3, i1 %4)

declare %dx.types.ResRet.f16 @dx.op.rawBufferLoad.f16(i32 %0, %dx.types.Handle %1, i32 %2, i32 %3, i8 %4, i32 %5)

declare %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 %0, %dx.types.Handle %1, i32 %2, i32 %3, i8 %4, i32 %5)

declare void @dx.op.rawBufferStore.i32(i32 %0, %dx.types.Handle %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, i8 %8, i32 %9)

declare i32 @dx.op.tertiary.i32(i32 %0, i32 %1, i32 %2, i32 %3)

declare float @dx.op.binary.f32(i32 %0, float %1, float %2)

declare %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 %0, %dx.types.Handle %1, i32 %2)

attributes #0 = { noinline nounwind memory(readwrite, inaccessiblemem: none) }
attributes #1 = { memory(read) }
attributes #2 = { memory(none) }

!dx.valver = !{!0}
!llvm.ident = !{!1}
!dx.shaderModel = !{!2}
!dx.version = !{!3}
!dx.resources = !{!4}
!dx.entryPoints = !{!12}
!llvm.module.flags = !{!15, !16, !17}

!0 = !{i32 1, i32 8}
!1 = !{!"clang version 22.0.0git ([email protected]:llvm/llvm-project.git 1e78354d88979fd524f2b4626249c978b2d5ebaa)"}
!2 = !{!"cs", i32 6, i32 2}
!3 = !{i32 1, i32 2}
!4 = !{null, !5, !10, null}
!5 = !{!6, !7, !8}
!6 = !{i32 0, ptr @input, !"input", i32 0, i32 0, i32 1, i32 12, i1 false, i1 false, i1 false, !3}
!7 = !{i32 1, ptr @scale, !"scale", i32 0, i32 1, i32 1, i32 12, i1 false, i1 false, i1 false, !3}
!8 = !{i32 2, ptr @output, !"output", i32 0, i32 2, i32 1, i32 12, i1 false, i1 false, i1 false, !9}
!9 = !{i32 1, i32 4}
!10 = !{!11}
!11 = !{i32 0, ptr @Constants, !"Constants", i32 0, i32 0, i32 1, i32 208, null}
!12 = !{ptr @CSMain, !"CSMain", null, !4, !13}
!13 = !{i32 0, i64 8388656, i32 4, !14}
!14 = !{i32 256, i32 1, i32 1}
!15 = !{i32 1, !"wchar_size", i32 4}
!16 = !{i32 1, !"dx.nativelowprec", i32 1}
!17 = !{i32 2, !"frame-pointer", i32 2}
  Evaluated this expression after applying Fix-It(s):
    M.dump()

Metadata

Metadata

Assignees

Type

Projects

Status

Closed

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions