This is an archive of the discontinued LLVM Phabricator instance.

[RISCV] Account for LMUL in memory op costs
ClosedPublic

Authored by reames on Apr 3 2023, 1:43 PM.

Details

Summary

Generally, the cost of a memory op will scale with the number of vector registers accessed. Machines might exist which have a narrow memory access than vector register width, but machines with a wider memory access width than vector register width seem unlikely.

I noticed this because we were preferring wide loads + deinterleaves on examples where the cost of a short gather (actually a strided load) would be better. Touching 8 vector registers instead of doing a 4 element gather is not a good tradeoff.

Diff Detail

Event Timeline

reames created this revision.Apr 3 2023, 1:43 PM
Herald added a project: Restricted Project. · View Herald TranscriptApr 3 2023, 1:43 PM
reames requested review of this revision.Apr 3 2023, 1:43 PM
Herald added a project: Restricted Project. · View Herald TranscriptApr 3 2023, 1:43 PM
luke added inline comments.Apr 4 2023, 7:24 AM
llvm/test/Transforms/LoopVectorize/RISCV/strided-accesses.ll
34

Does the gather/scatter lowering pass kick in and transform these to vlse32s?

reames added inline comments.Apr 4 2023, 12:14 PM
llvm/test/Transforms/LoopVectorize/RISCV/strided-accesses.ll
34

Yes

reames edited the summary of this revision. (Show Details)Apr 4 2023, 12:15 PM
luke accepted this revision.Apr 4 2023, 12:46 PM

LGTM

This revision is now accepted and ready to land.Apr 4 2023, 12:46 PM
This revision was landed with ongoing or failed builds.Apr 5 2023, 7:59 AM
This revision was automatically updated to reflect the committed changes.

Hi. This looks like it hits an assertion error when we build runtimes for riscv at https://luci-milo.appspot.com/ui/p/fuchsia/builders/toolchain.ci/clang-linux-x64/b8784627898450547345/overview:

FAILED: libcxx/src/CMakeFiles/cxx_shared.dir/locale.cpp.obj 
/b/s/w/ir/cache/goma/client/gomacc /b/s/w/ir/x/w/staging/llvm_build/./bin/clang++ --target=riscv64-unknown-fuchsia --sysroot=/b/s/w/ir/x/w/sdk/arch/riscv64/sysroot -DLIBCXX_BUILDING_LIBCXXABI -D_GLIBCXX_ASSERTIONS -D_LIBCPP_BUILDING_LIBRARY -D_LIBCPP_DISABLE_NEW_DELETE_DEFINITIONS -D_LIBCPP_ENABLE_ASSERTIONS -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -D_LIBCPP_REMOVE_TRANSITIVE_INCLUDES -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/b/s/w/ir/x/w/llvm-llvm-project/libcxx/src -I/b/s/w/ir/x/w/staging/llvm_build/include/c++/v1 -I/b/s/w/ir/x/w/staging/llvm_build/include/riscv64-unknown-fuchsia/c++/v1 -I/b/s/w/ir/x/w/llvm-llvm-project/libcxxabi/include --target=riscv64-unknown-fuchsia -I/b/s/w/ir/x/w/sdk/pkg/sync/include -I/b/s/w/ir/x/w/sdk/pkg/fdio/include -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -ffunction-sections -fdata-sections -ffile-prefix-map=/b/s/w/ir/x/w/staging/llvm_build/runtimes/runtimes-riscv64-unknown-fuchsia-bins=../staging/llvm_build/runtimes/runtimes-riscv64-unknown-fuchsia-bins -ffile-prefix-map=/b/s/w/ir/x/w/llvm-llvm-project/= -no-canonical-prefixes -O2 -g -DNDEBUG -std=c++20 -fPIC -UNDEBUG -faligned-allocation -nostdinc++ -fvisibility-inlines-hidden -fvisibility=hidden -Wall -Wextra -Wnewline-eof -Wshadow -Wwrite-strings -Wno-unused-parameter -Wno-long-long -Werror=return-type -Wextra-semi -Wundef -Wunused-template -Wformat-nonliteral -Wno-user-defined-literals -Wno-covered-switch-default -Wno-suggest-override -Wno-error -MD -MT libcxx/src/CMakeFiles/cxx_shared.dir/locale.cpp.obj -MF libcxx/src/CMakeFiles/cxx_shared.dir/locale.cpp.obj.d -o libcxx/src/CMakeFiles/cxx_shared.dir/locale.cpp.obj -c /b/s/w/ir/x/w/llvm-llvm-project/libcxx/src/locale.cpp
Unknown type!
UNREACHABLE executed at llvm/lib/CodeGen/ValueTypes.cpp:577!
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.	Program arguments: /b/s/w/ir/x/w/staging/llvm_build/./bin/clang++ --target=riscv64-unknown-fuchsia --sysroot=/b/s/w/ir/x/w/sdk/arch/riscv64/sysroot -DLIBCXX_BUILDING_LIBCXXABI -D_GLIBCXX_ASSERTIONS -D_LIBCPP_BUILDING_LIBRARY -D_LIBCPP_DISABLE_NEW_DELETE_DEFINITIONS -D_LIBCPP_ENABLE_ASSERTIONS -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -D_LIBCPP_REMOVE_TRANSITIVE_INCLUDES -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/b/s/w/ir/x/w/llvm-llvm-project/libcxx/src -I/b/s/w/ir/x/w/staging/llvm_build/include/c++/v1 -I/b/s/w/ir/x/w/staging/llvm_build/include/riscv64-unknown-fuchsia/c++/v1 -I/b/s/w/ir/x/w/llvm-llvm-project/libcxxabi/include --target=riscv64-unknown-fuchsia -I/b/s/w/ir/x/w/sdk/pkg/sync/include -I/b/s/w/ir/x/w/sdk/pkg/fdio/include -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -ffunction-sections -fdata-sections -ffile-prefix-map=/b/s/w/ir/x/w/staging/llvm_build/runtimes/runtimes-riscv64-unknown-fuchsia-bins=../staging/llvm_build/runtimes/runtimes-riscv64-unknown-fuchsia-bins -ffile-prefix-map=/b/s/w/ir/x/w/llvm-llvm-project/= -no-canonical-prefixes -O2 -g -DNDEBUG -std=c++20 -fPIC -UNDEBUG -faligned-allocation -nostdinc++ -fvisibility-inlines-hidden -fvisibility=hidden -Wall -Wextra -Wnewline-eof -Wshadow -Wwrite-strings -Wno-unused-parameter -Wno-long-long -Werror=return-type -Wextra-semi -Wundef -Wunused-template -Wformat-nonliteral -Wno-user-defined-literals -Wno-covered-switch-default -Wno-suggest-override -Wno-error -MD -MT libcxx/src/CMakeFiles/cxx_shared.dir/locale.cpp.obj -MF libcxx/src/CMakeFiles/cxx_shared.dir/locale.cpp.obj.d -o libcxx/src/CMakeFiles/cxx_shared.dir/locale.cpp.obj -c /b/s/w/ir/x/w/llvm-llvm-project/libcxx/src/locale.cpp
1.	<eof> parser at end of file
2.	Optimizer
#0 0x0000559e282156e8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/b/s/w/ir/x/w/staging/llvm_build/./bin/clang+++0x7ea86e8)
clang++: error: clang frontend command failed with exit code 134 (use -v to see invocation)

Would you be able to take a look and send a fix or revert?

reames added a comment.Apr 5 2023, 5:05 PM

Would you be able to take a look and send a fix or revert?

I looked at the log above and couldn't figure out to extract a stack trace, much less a small reproducer. Please feel free to revert, but I'm going to need a reproducer or more detail to investigate.

craig.topper added a comment.EditedApr 5 2023, 5:10 PM

Would you be able to take a look and send a fix or revert?

I looked at the log above and couldn't figure out to extract a stack trace, much less a small reproducer. Please feel free to revert, but I'm going to need a reproducer or more detail to investigate.

I'm guessing we tried to pass a struct or array type through getTypeLegalizationCost? I think getMemoryOpCost can get called with those types.

nathanchance added a subscriber: nathanchance.EditedApr 5 2023, 5:24 PM

I saw the same crash while building the Linux kernel.

C reproducer:

struct timespec64 {
  long tv_sec;
  long tv_nsec;
} timespec64_add(struct timespec64), timens_add_boottime_ns_offsets;
static void timens_add_boottime() {
  timespec64_add(timens_add_boottime_ns_offsets);
}
void posix_get_boottime_timespec() { timens_add_boottime(); }
$ clang --target=riscv64-linux-gnu -O2 -c -o /dev/null posix-timers.i
Unknown type!
UNREACHABLE executed at /mnt/nvme/tmp/cvise.OAg6OWEXsa/src/llvm/lib/CodeGen/ValueTypes.cpp:577!
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: clang --target=riscv64-linux-gnu -O2 -c -o /dev/null posix-timers.i
1.      <eof> parser at end of file
2.      Optimizer
 #0 0x00005644427b6628 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x526e628)
 #1 0x00005644427b451e llvm::sys::RunSignalHandlers() (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x526c51e)
 #2 0x00005644427405f6 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007fb4361f9f50 (/usr/lib/libc.so.6+0x38f50)
 #4 0x00007fb4362488ec (/usr/lib/libc.so.6+0x878ec)
 #5 0x00007fb4361f9ea8 raise (/usr/lib/libc.so.6+0x38ea8)
 #6 0x00007fb4361e353d abort (/usr/lib/libc.so.6+0x2253d)
 #7 0x00005644427460c0 llvm::install_out_of_memory_new_handler() (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x51fe0c0)
 #8 0x00005644421302c5 (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x4be82c5)
 #9 0x000056444212f9b0 llvm::EVT::getEVT(llvm::Type*, bool) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x4be79b0)
#10 0x0000564440c1d2a2 llvm::TargetLoweringBase::getValueType(llvm::DataLayout const&, llvm::Type*, bool) const AArch64ISelLowering.cpp:0:0
#11 0x00005644415b50f1 llvm::BasicTTIImplBase<llvm::RISCVTTIImpl>::getTypeLegalizationCost(llvm::Type*) const RISCVTargetMachine.cpp:0:0
#12 0x00005644415e437e llvm::RISCVTTIImpl::getMemoryOpCost(unsigned int, llvm::Type*, llvm::MaybeAlign, unsigned int, llvm::TargetTransformInfo::TargetCostKind, llvm::TargetTransformInfo::OperandValueInfo, llvm::Instruction const*) RISCVTargetTransformInfo.cpp:0:0
#13 0x00005644415b3a02 llvm::TargetTransformInfoImplCRTPBase<llvm::RISCVTTIImpl>::getInstructionCost(llvm::User const*, llvm::ArrayRef<llvm::Value const*>, llvm::TargetTransformInfo::TargetCostKind) RISCVTargetMachine.cpp:0:0
#14 0x0000564441c362bd llvm::TargetTransformInfo::getInstructionCost(llvm::User const*, llvm::ArrayRef<llvm::Value const*>, llvm::TargetTransformInfo::TargetCostKind) const (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x46ee2bd)
#15 0x0000564441a4592b llvm::TargetTransformInfo::getInstructionCost(llvm::User const*, llvm::TargetTransformInfo::TargetCostKind) const CodeMetrics.cpp:0:0
#16 0x0000564441a4561a llvm::CodeMetrics::analyzeBasicBlock(llvm::BasicBlock const*, llvm::TargetTransformInfo const&, llvm::SmallPtrSetImpl<llvm::Value const*> const&, bool) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x44fd61a)
#17 0x0000564443d06f1b llvm::FunctionSpecializer::analyzeFunction(llvm::Function*) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x67bef1b)
#18 0x0000564443d0547d llvm::FunctionSpecializer::getSpecializationCost(llvm::Function*) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x67bd47d)
#19 0x0000564443d03e75 llvm::FunctionSpecializer::run() (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x67bbe75)
#20 0x0000564443ce7242 llvm::IPSCCPPass::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x679f242)
#21 0x00005644439f413d llvm::detail::PassModel<llvm::Module, llvm::IPSCCPPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) PassBuilder.cpp:0:0
#22 0x0000564442315904 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x4dcd904)
#23 0x0000564442efc1a8 (anonymous namespace)::EmitAssemblyHelper::RunOptimizationPipeline(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>&, std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOu
tputFile>>&) BackendUtil.cpp:0:0
#24 0x0000564442ef35a1 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCnt
Ptr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x59ab5a1)
#25 0x000056444336ad6b clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) CodeGenAction.cpp:0:0
#26 0x0000564444070b96 clang::ParseAST(clang::Sema&, bool, bool) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x6b28b96)
#27 0x00005644432a22bf clang::FrontendAction::Execute() (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x5d5a2bf)
#28 0x000056444321305d clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x5ccb05d)
#29 0x0000564443363d74 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x5e1bd74)
#30 0x0000564440bcba81 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x3683a81)
#31 0x0000564440bc765e ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#32 0x000056444308c009 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::$_0>(long) Job.cpp:0:0
#33 0x0000564442740376 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x51f8376)
#34 0x000056444308b5a2 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x5b435a2
)
#35 0x0000564443048a09 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x5b00a09)
#36 0x0000564443048cb7 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x5b00cb7)
#37 0x0000564443067eba clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x5b1feba)
#38 0x0000564440bc69e1 clang_main(int, char**, llvm::ToolContext const&) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x367e9e1)
#39 0x0000564440bd8141 main (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x3690141)
#40 0x00007fb4361e4790 (/usr/lib/libc.so.6+0x23790)
#41 0x00007fb4361e484a __libc_start_main (/usr/lib/libc.so.6+0x2384a)
#42 0x0000564440bc3aa5 _start (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/clang-17+0x367baa5)
clang: error: clang frontend command failed with exit code 134 (use -v to see invocation)

LLVM IR reproducer from llvm-reduce (EDIT: I screwed this reduction up initially, irrelevant now but figured I would correct it for posterity):

target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
target triple = "riscv64-unknown-linux-gnu"

define void @posix_get_boottime_timespec() {
entry:
  call void @timens_add_boottime()
  ret void
}

define internal void @timens_add_boottime() {
entry:
  %0 = load [2 x i64], ptr null, align 8
  %call = call [2 x i64] @timespec64_add([2 x i64] %0)
  ret void
}

declare [2 x i64] @timespec64_add([2 x i64])
$ opt -O3 -disable-output reduced.ll
Unknown type!
UNREACHABLE executed at /mnt/nvme/tmp/cvise.OAg6OWEXsa/src/llvm/lib/CodeGen/ValueTypes.cpp:577!
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: opt -O3 -disable-output reduced.ll
 #0 0x000055bef01ea288 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x49c0288)
 #1 0x000055bef01e810e llvm::sys::RunSignalHandlers() (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x49be10e)
 #2 0x000055bef01eaa38 SignalHandler(int) Signals.cpp:0:0
 #3 0x00007f3250842f50 (/usr/lib/libc.so.6+0x38f50)
 #4 0x00007f32508918ec (/usr/lib/libc.so.6+0x878ec)
 #5 0x00007f3250842ea8 raise (/usr/lib/libc.so.6+0x38ea8)
 #6 0x00007f325082c53d abort (/usr/lib/libc.so.6+0x2253d)
 #7 0x000055bef0160dc0 llvm::install_out_of_memory_new_handler() (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x4936dc0)
 #8 0x000055beefa6d185 (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x4243185)
 #9 0x000055beefa6c7f0 llvm::EVT::getEVT(llvm::Type*, bool) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x42427f0)
#10 0x000055beee4d26f2 llvm::TargetLoweringBase::getValueType(llvm::DataLayout const&, llvm::Type*, bool) const AArch64ISelLowering.cpp:0:0
#11 0x000055beeecf4fa1 llvm::BasicTTIImplBase<llvm::RISCVTTIImpl>::getTypeLegalizationCost(llvm::Type*) const RISCVTargetMachine.cpp:0:0
#12 0x000055beeed24bae llvm::RISCVTTIImpl::getMemoryOpCost(unsigned int, llvm::Type*, llvm::MaybeAlign, unsigned int, llvm::TargetTransformInfo::TargetCostKind, llvm::TargetTransformInfo::OperandValueInfo, llvm::Instruction const*) RISCVTargetTransformInfo.cpp:0:0
#13 0x000055beeecf38b2 llvm::TargetTransformInfoImplCRTPBase<llvm::RISCVTTIImpl>::getInstructionCost(llvm::User const*, llvm::ArrayRef<llvm::Value const*>, llvm::TargetTransformInfo::TargetCostKind) RISCVTargetMachine.cpp:0:0
#14 0x000055beef487b0d llvm::TargetTransformInfo::getInstructionCost(llvm::User const*, llvm::ArrayRef<llvm::Value const*>, llvm::TargetTransformInfo::TargetCostKind) const (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x3c5db0d)
#15 0x000055beef24430b llvm::TargetTransformInfo::getInstructionCost(llvm::User const*, llvm::TargetTransformInfo::TargetCostKind) const CodeMetrics.cpp:0:0
#16 0x000055beef243ffa llvm::CodeMetrics::analyzeBasicBlock(llvm::BasicBlock const*, llvm::TargetTransformInfo const&, llvm::SmallPtrSetImpl<llvm::Value const*> const&, bool) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x3a19ffa)
#17 0x000055bef07eb42b llvm::FunctionSpecializer::analyzeFunction(llvm::Function*) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x4fc142b)
#18 0x000055bef07e998d llvm::FunctionSpecializer::getSpecializationCost(llvm::Function*) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x4fbf98d)
#19 0x000055bef07e8385 llvm::FunctionSpecializer::run() (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x4fbe385)
#20 0x000055bef07d3522 llvm::IPSCCPPass::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x4fa9522)
#21 0x000055bef03eb2ad llvm::detail::PassModel<llvm::Module, llvm::IPSCCPPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) PassBuilder.cpp:0:0
#22 0x000055beefc9a674 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x4470674)
#23 0x000055beee394deb llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::opt_tool::Output
Kind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool) (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x2b6adeb)
#24 0x000055beee3a4289 main (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x2b7a289)
#25 0x00007f325082d790 (/usr/lib/libc.so.6+0x23790)
#26 0x00007f325082d84a __libc_start_main (/usr/lib/libc.so.6+0x2384a)
#27 0x000055beee38cf25 _start (/mnt/nvme/tmp/cvise.OAg6OWEXsa/install/llvm-bad/bin/opt+0x2b62f25) 
reames added a comment.Apr 5 2023, 5:27 PM

Assuming @craig.topper 's theory is correct (this seems to be confirmed by @nathanchance's stack trace), this should be fixed with 27b6ddbf6.

reames added a comment.Apr 5 2023, 5:50 PM

Reduced @nathanchance's example, and confirmed @craig.topper's theory. Fix landed as described above and test case added in ff90848.