[PATCH] D114889: [GlobalOpt] Simplify CleanupConstantGlobalUsers()
Axel Y. Rivera via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 16 15:53:19 PST 2021
ayrivera added inline comments.
================
Comment at: llvm/lib/Transforms/IPO/GlobalOpt.cpp:309
+ if (Init->isNullValue()) {
+ LI->replaceAllUsesWith(Constant::getNullValue(LI->getType()));
+ EraseFromParent(LI);
----------------
Hi,
I have a small test case that crashes in this line when it tries to create a null value for a x86_mmx load instruction:
```
test> opt -S -globalopt simple.ll
Cannot create a null constant of that type!
UNREACHABLE executed at llvm/llvm/lib/IR/Constants.cpp:384!
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace.
Stack dump:
0. Program arguments: opt -S -globalopt simple.ll
#0 0x00000000038d2aed llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) llvm/lib/Support/Unix/Signals.inc:565:0
#1 0x00000000038d2ba4 PrintStackTraceSignalHandler(void*) llvm/lib/Support/Unix/Signals.inc:632:0
#2 0x00000000038d0b69 llvm::sys::RunSignalHandlers() llvm/lib/Support/Signals.cpp:96:0
#3 0x00000000038d2531 SignalHandler(int) llvm/lib/Support/Unix/Signals.inc:407:0
#4 0x00007fbeb4870dd0 __restore_rt sigaction.c:0:0
#5 0x00007fbeb336170f raise (/lib64/libc.so.6+0x3770f)
#6 0x00007fbeb334bb25 abort (/lib64/libc.so.6+0x21b25)
#7 0x000000000381316e bindingsErrorHandler(void*, char const*, bool) llvm/lib/Support/ErrorHandling.cpp:218:0
#8 0x0000000002ba65ab llvm::Constant::getNullValue(llvm::Type*) llvm/lib/IR/Constants.cpp:384:0
#9 0x0000000002f4c4cd CleanupConstantGlobalUsers(llvm::GlobalVariable*, llvm::DataLayout const&) llvm/lib/Transforms/IPO/GlobalOpt.cpp:309:0
#10 0x0000000002f51b41 processInternalGlobal(llvm::GlobalVariable*, llvm::GlobalStatus const&, llvm::function_ref<llvm::TargetTransformInfo& (llvm::Function&)>, llvm::function_ref<llvm::TargetLibraryInfo& (llvm::Function&)>, llvm::function_ref<llvm::DominatorTree& (llvm::Function&)>) llvm/lib/Transforms/IPO/GlobalOpt.cpp:1556:0
#11 0x0000000002f520f3 processGlobal(llvm::GlobalValue&, llvm::function_ref<llvm::TargetTransformInfo& (llvm::Function&)>, llvm::function_ref<llvm::TargetLibraryInfo& (llvm::Function&)>, llvm::function_ref<llvm::DominatorTree& (llvm::Function&)>) llvm/lib/Transforms/IPO/GlobalOpt.cpp:1670:0
#12 0x0000000002f53bf7 OptimizeGlobalVars(llvm::Module&, llvm::function_ref<llvm::TargetTransformInfo& (llvm::Function&)>, llvm::function_ref<llvm::TargetLibraryInfo& (llvm::Function&)>, llvm::function_ref<llvm::DominatorTree& (llvm::Function&)>, llvm::SmallPtrSetImpl<llvm::Comdat const*>&) llvm/lib/Transforms/IPO/GlobalOpt.cpp:2065:0
#13 0x0000000002f560e5 optimizeGlobalsInModule(llvm::Module&, llvm::DataLayout const&, llvm::function_ref<llvm::TargetLibraryInfo& (llvm::Function&)>, llvm::function_ref<llvm::TargetTransformInfo& (llvm::Function&)>, llvm::function_ref<llvm::BlockFrequencyInfo& (llvm::Function&)>, llvm::function_ref<llvm::DominatorTree& (llvm::Function&)>) llvm/lib/Transforms/IPO/GlobalOpt.cpp:2639:0
#14 0x0000000002f5632a llvm::GlobalOptPass::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm/lib/Transforms/IPO/GlobalOpt.cpp:2678:0
#15 0x0000000003cd2e24 llvm::detail::PassModel<llvm::Module, llvm::GlobalOptPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module> >::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm/include/llvm/IR/PassManagerInternal.h:89:0
#16 0x0000000002d7811d llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module> >::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm/include/llvm/IR/PassManager.h:525:0
#17 0x00000000019c0c20 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::StringRef>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool) llvm/tools/opt/NewPMDriver.cpp:487:0
#18 0x00000000019f0e19 main llvm/tools/opt/opt.cpp:818:0
#19 0x00007fbeb334d6a3 __libc_start_main (/lib64/libc.so.6+0x236a3)
#20 0x00000000019ba76e _start (bin/opt+0x19ba76e)
Aborted (core dumped)
```
It seems that calling getNullValue for a X86_MMX type is not supported. From my understanding, this type doesn't supports LLVM::Constant (https://llvm.org/docs/LangRef.html#x86-mmx-type). I attached a simple test case that reproduce the issue with the following command:
```
opt -S -globalopt simple.ll
```
{F21062390}
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D114889/new/
https://reviews.llvm.org/D114889
More information about the llvm-commits
mailing list