Skip to content

[DirectX] createTypedBufferLoad trys to replace a vector load with a scalar float extractValue instruction in DXILResourceAccess.cpp #136409

@farzonl

Description

@farzonl

if we need to replace the load and the types are different we cant use replaceAllUsesWith.

Location of Assert

Type differences

expr V->dump()
  %32 = extractvalue { float, i1 } %31, 0
(lldb) expr *V->getType()
(llvm::Type) $1 = {
  Context = 0x000000013f8229c0
  ID = FloatTyID
  SubclassData = 0
  NumContainedTys = 0
  ContainedTys = nullptr
}

(lldb) expr LI->dump()
  %33 = load <1 x float>, ptr %30, align 4
(lldb) expr *LI->getType()
(llvm::Type) $2 = {
  Context = 0x000000013f8229c0
  ID = FixedVectorTyID
  SubclassData = 0
  NumContainedTys = 1
  ContainedTys = 0x000000012904ad10

Crash Dump

* thread #1, queue = 'com.apple.main-thread', stop reason = instruction step into
  * frame #0: 0x0000000102054088 clang-dxc`llvm::Value::replaceAllUsesWith(this=0x0000000128850150, New=0x000000016fdf3ea8) at Value.cpp:533
    frame #1: 0x0000000100110174 clang-dxc`createTypedBufferLoad(II=0x0000000128850150, LI=0x000000012883b2d0, Offset=0x0000000000000000, RTI=0x0000000129013408) at DXILResourceAccess.cpp:146:7
    frame #2: 0x000000010010ef38 clang-dxc`createLoadIntrinsic(II=0x0000000128850150, LI=0x000000012883b2d0, Offset=0x0000000000000000, RTI=0x0000000129013408) at DXILResourceAccess.cpp:167:12
    frame #3: 0x000000010010e0a4 clang-dxc`replaceAccess(II=0x0000000128850150, RTI=0x0000000129013408) at DXILResourceAccess.cpp:224:7
    frame #4: 0x000000010010d9c8 clang-dxc`transformResourcePointers(F=0x0000000128804ac8, DRTM=0x0000000128814740) at DXILResourceAccess.cpp:249:5
    frame #5: 0x0000000100110b04 clang-dxc`(anonymous namespace)::DXILResourceAccessLegacy::runOnFunction(this=0x000000012883e150, F=0x0000000128804ac8) at DXILResourceAccess.cpp:278:12
    frame #6: 0x0000000101f5feb4 clang-dxc`llvm::FPPassManager::runOnFunction(this=0x0000000128859e70, F=0x0000000128804ac8) at LegacyPassManager.cpp:1406:27
    frame #7: 0x0000000101f66a48 clang-dxc`llvm::FPPassManager::runOnModule(this=0x0000000128859e70, M=0x000000012ee0d2e0) at LegacyPassManager.cpp:1452:16
    frame #8: 0x0000000101f60774 clang-dxc`(anonymous namespace)::MPPassManager::runOnModule(this=0x000000012880e360, M=0x000000012ee0d2e0) at LegacyPassManager.cpp:1521:27
    frame #9: 0x0000000101f602e8 clang-dxc`llvm::legacy::PassManagerImpl::run(this=0x0000000129010600, M=0x000000012ee0d2e0) at LegacyPassManager.cpp:539:44
    frame #10: 0x0000000101f66e50 clang-dxc`llvm::legacy::PassManager::run(this=0x000000016fdf47e8, M=0x000000012ee0d2e0) at LegacyPassManager.cpp:1648:14
    frame #11: 0x0000000103b41860 clang-dxc`(anonymous namespace)::EmitAssemblyHelper::RunCodegenPipeline(this=0x000000016fdf4c60, Action=Backend_EmitAssembly, OS=llvm::raw_pwrite_stream @ 0x000000012ee0cfb0, DwoOS=nullptr) at BackendUtil.cpp:1244:19
    frame #12: 0x0000000103b32000 clang-dxc`(anonymous namespace)::EmitAssemblyHelper::emitAssembly(this=0x000000016fdf4c60, Action=Backend_EmitAssembly, OS=llvm::raw_pwrite_stream @ 0x000000012ee0cfb0, BC=0x000000012ee0d160) at BackendUtil.cpp:1268:3
    frame #13: 0x0000000103b3151c clang-dxc`clang::emitBackendOutput(CI=0x000000013f8235b0, CGOpts=0x000000014002be18, 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=0x000000012ee0d2e0, Action=Backend_EmitAssembly, VFS=IntrusiveRefCntPtr<llvm::vfs::FileSystem> @ 0x000000016fdf4f68, OS=nullptr, BC=0x000000012ee0d160) at BackendUtil.cpp:1433:13
    frame #14: 0x00000001042aac7c clang-dxc`clang::BackendConsumer::HandleTranslationUnit(this=0x000000012ee0d160, C=0x000000012f01c600) at CodeGenAction.cpp:316:3
    frame #15: 0x0000000106aca0b8 clang-dxc`clang::ParseAST(S=0x000000012f03d800, PrintStats=false, SkipFunctionBodies=false) at ParseAST.cpp:184:13
    frame #16: 0x0000000104e2175c clang-dxc`clang::ASTFrontendAction::ExecuteAction(this=0x000000013f829060) at FrontendAction.cpp:1345:3
    frame #17: 0x00000001042b06f0 clang-dxc`clang::CodeGenAction::ExecuteAction(this=0x000000013f829060) at CodeGenAction.cpp:1111:30
    frame #18: 0x0000000104e20fd4 clang-dxc`clang::FrontendAction::Execute(this=0x000000013f829060) at FrontendAction.cpp:1227:3
    frame #19: 0x0000000104d3ac18 clang-dxc`clang::CompilerInstance::ExecuteAction(this=0x000000013f8235b0, Act=0x000000013f829060) at CompilerInstance.cpp:1056:33
    frame #20: 0x0000000104f5dbf4 clang-dxc`clang::ExecuteCompilerInvocation(Clang=0x000000013f8235b0) at ExecuteCompilerInvocation.cpp:300:25
    frame #21: 0x0000000100014a60 clang-dxc`cc1_main(Argv=ArrayRef<const char *> @ 0x000000016fdf5ea8, Argv0="/Users/farzonlotfi/Projects/llvm_debug_build/bin/clang-20", MainAddr=0x0000000100004980) at cc1_main.cpp:294:15
    frame #22: 0x0000000100006328 clang-dxc`ExecuteCC1Tool(ArgV=0x000000016fdf9698, ToolContext=0x000000016fdfe648) at driver.cpp:218:12
    frame #23: 0x00000001000133dc clang-dxc`clang_main(int, char**, llvm::ToolContext const&)::$_0::operator()(this=0x000000016fdfa1d8, ArgV=0x000000016fdf9698) const at driver.cpp:364:16
    frame #24: 0x00000001000133ac clang-dxc`int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<clang_main(int, char**, llvm::ToolContext const&)::$_0>(callable=6171894232, params=0x000000016fdf9698) at STLFunctionalExtras.h:46:12
    frame #25: 0x0000000104a43890 clang-dxc`llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::operator()(this=0x000000016fdfa860, params=0x000000016fdf9698) const at STLFunctionalExtras.h:69:12
    frame #26: 0x0000000104a43850 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=0x000000016fdf95f8) const at Job.cpp:435:34
    frame #27: 0x0000000104a4381c 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=6171891192) at STLFunctionalExtras.h:46:12
    frame #28: 0x00000001011764b4 clang-dxc`llvm::function_ref<void ()>::operator()(this=0x000000016fdf9598) const at STLFunctionalExtras.h:69:12
    frame #29: 0x00000001030a683c clang-dxc`llvm::CrashRecoveryContext::RunSafely(this=0x000000016fdf9638, Fn=function_ref<void ()> @ 0x000000016fdf9598) at CrashRecoveryContext.cpp:426:3
    frame #30: 0x0000000104a3fd40 clang-dxc`clang::driver::CC1Command::Execute(this=0x000000013f823800, Redirects=ArrayRef<std::__1::optional<llvm::StringRef> > @ 0x000000016fdf9680, ErrMsg="", ExecutionFailed=0x000000016fdf9b8f) const at Job.cpp:435:12
    frame #31: 0x00000001049d5754 clang-dxc`clang::driver::Compilation::ExecuteCommand(this=0x000000013f822320, C=0x000000013f823800, FailingCommand=0x000000016fdf9ca8, LogOnly=false) const at Compilation.cpp:196:15
    frame #32: 0x00000001049d59e0 clang-dxc`clang::driver::Compilation::ExecuteJobs(this=0x000000013f822320, Jobs=0x000000013f8223a0, FailingCommands=0x000000016fdfa538, LogOnly=false) const at Compilation.cpp:251:19
    frame #33: 0x00000001049f3f5c clang-dxc`clang::driver::Driver::ExecuteCompilation(this=0x000000016fdfa588, C=0x000000013f822320, FailingCommands=0x000000016fdfa538) at Driver.cpp:2220:5
    frame #34: 0x0000000100005aa4 clang-dxc`clang_main(Argc=15, Argv=0x000000016fdfed88, ToolContext=0x000000016fdfe648) at driver.cpp:402:21
    frame #35: 0x00000001000401c0 clang-dxc`main(argc=15, argv=0x000000016fdfed88) at clang-driver.cpp:17:10
    frame #36: 0x0000000185c86b4c dyld`start + 6000

LLVMIR

if.then.i240.i:                                   ; preds = %land.lhs.true.i237.i
  %elt.min.i241.i = tail call i32 @llvm.umin.i32(i32 %add.i195.i, i32 %27)
  %30 = tail call noundef nonnull align 4 dereferenceable(4) ptr @llvm.dx.resource.getpointer.p0.tdx.TypedBuffer_f32_1_0_0t(target("dx.TypedBuffer", float, 1, 0, 0) %_ZL4matB_h.i.i, i32 %elt.min.i241.i)
  %31 = call { float, i1 } @llvm.dx.resource.load.typedbuffer.f32.tdx.TypedBuffer_f32_1_0_0t(target("dx.TypedBuffer", float, 1, 0, 0) %_ZL4matB_h.i.i, i32 %elt.min.i241.i)
  %32 = extractvalue { float, i1 } %31, 0
  %33 = load <1 x float>, ptr %30, align 4
  %vecins.i243.i = shufflevector <1 x float> %33, <1 x float> poison, <4 x i32> <i32 0, i32 poison, i32 poison, i32 poison>
  %add5.i244.i = add i32 %add.i195.i, %13
  %elt.min6.i245.i = tail call i32 @llvm.umin.i32(i32 %add5.i244.i, i32 %27)
  %34 = tail call noundef nonnull align 4 dereferenceable(4) ptr @llvm.dx.resource.getpointer.p0.tdx.TypedBuffer_f32_1_0_0t(target("dx.TypedBuffer", float, 1, 0, 0) %_ZL4matB_h.i.i, i32 %elt.min6.i245.i)
  %35 = load float, ptr %34, align 4, !tbaa !5
  %vecins8.i247.i = insertelement <4 x float> %vecins.i243.i, float %35, i64 1
  %add9.i248.i.reass = add i32 %add.i195.i, %invariant.op
  %elt.min10.i249.i = tail call i32 @llvm.umin.i32(i32 %add9.i248.i.reass, i32 %27)
  %36 = tail call noundef nonnull align 4 dereferenceable(4) ptr @llvm.dx.resource.getpointer.p0.tdx.TypedBuffer_f32_1_0_0t(target("dx.TypedBuffer", float, 1, 0, 0) %_ZL4matB_h.i.i, i32 %elt.min10.i249.i)
  %37 = load float, ptr %36, align 4, !tbaa !5
  %vecins12.i251.i = insertelement <4 x float> %vecins8.i247.i, float %37, i64 2
  %add13.i252.i.reass = add i32 %add.i195.i, %invariant.op35
  %elt.min14.i253.i = tail call i32 @llvm.umin.i32(i32 %add13.i252.i.reass, i32 %27)
  %38 = tail call noundef nonnull align 4 dereferenceable(4) ptr @llvm.dx.resource.getpointer.p0.tdx.TypedBuffer_f32_1_0_0t(target("dx.TypedBuffer", float, 1, 0, 0) %_ZL4matB_h.i.i, i32 %elt.min14.i253.i)
  %39 = load float, ptr %38, align 4, !tbaa !5
  %vecins16.i255.i = insertelement <4 x float> %vecins12.i251.i, float %39, i64 3
  br label %_Z9ReadInputjjj.exit256.i

Metadata

Metadata

Assignees

Type

No type

Projects

Status

Closed

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions