Nitish Srivastava via llvm-dev
2017-Sep-05 20:26 UTC
[llvm-dev] How to change the metadata at an IR Node
Hi, I am trying to change the debugLoc atached to an IR node in the Loop Strength Reduction pass. I have the following code: llvm::MDString* name = MDString::get(Ctx, "foo" ); llvm::MDNode *node = llvm::MDNode::get(Ctx, name); I->setDebugLoc(DILocation::get(Ctx,I->getDebugLoc().getLine(),I->getDebugLoc().getCol(),node, nullptr)); // here I is the IR instruction I want to tag with "foo" metadata However, when I run the opt tool, I get the following error: clang-3.9: /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/include/llvm/Support/Casting.h:238: typename llvm::cast_retty<X, Y*>::ret_type llvm::cast(Y*) [with X llvm::DILocalScope; Y = llvm::Metadata; typename llvm::cast_retty<X, Y*>::ret_type = llvm::DILocalScope*]: Assertion `isa<X>(Val) && "cast<Ty>() argument of incompatible type!"' failed. #0 0x0000000002034e94 llvm::sys::PrintStackTrace(llvm::raw_ostream&) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/lib/Support/Unix/Signals.inc:402:0 #1 0x0000000002035258 PrintStackTraceSignalHandler(void*) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/lib/Support/Unix/Signals.inc:470:0 #2 0x000000000203356c llvm::sys::RunSignalHandlers() /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/lib/Support/Signals.cpp:44:0 #3 0x00000000020347e0 SignalHandler(int) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/lib/Support/Unix/Signals.inc:256:0 #4 0x00000039f120f7e0 __restore_rt (/lib64/libpthread.so.0+0x39f120f7e0) #5 0x00000039f0632495 __GI_raise (/lib64/libc.so.6+0x39f0632495) #6 0x00000039f0633c75 __GI_abort (/lib64/libc.so.6+0x39f0633c75) #7 0x00000039f062b60e __assert_fail_base (/lib64/libc.so.6+0x39f062b60e) #8 0x00000039f062b6d0 __GI___assert_perror_fail (/lib64/libc.so.6+0x39f062b6d0) #9 0x0000000001763b63 llvm::cast_retty<llvm::DILocalScope, llvm::Metadata*>::ret_type llvm::cast<llvm::DILocalScope, llvm::Metadata>(llvm::Metadata*) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/include/llvm/Support/Casting.h:240:0 #10 0x00000000017632fe llvm::DILocation::getScope() const /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/include/llvm/IR/DebugInfoMetadata.h:1235:0 #11 0x0000000001ae53b3 llvm::DILocation::getInlinedAtScope() const /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/include/llvm/IR/DebugInfoMetadata.h:1252:0 #12 0x0000000001bbaaaa (anonymous namespace)::Verifier::visitFunction(llvm::Function const&) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/lib/IR/Verifier.cpp:2069:0 #13 0x0000000001bc8a18 llvm::InstVisitor<(anonymous namespace)::Verifier, void>::visit(llvm::Function&) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/include/llvm/IR/InstVisitor.h:103:0 #14 0x0000000001bafd6d (anonymous namespace)::Verifier::verify(llvm::Function const&) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/lib/IR/Verifier.cpp:303:0 #15 0x0000000001bc8541 (anonymous namespace)::VerifierLegacyPass::runOnFunction(llvm::Function&) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/lib/IR/Verifier.cpp:4332:0 #16 0x0000000001b439ab llvm::FPPassManager::runOnFunction(llvm::Function&) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/lib/IR/LegacyPassManager.cpp:1526:0 #17 0x0000000001b43b22 llvm::FPPassManager::runOnModule(llvm::Module&) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/lib/IR/LegacyPassManager.cpp:1547:0 #18 0x0000000001b43e6f (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/lib/IR/LegacyPassManager.cpp:1603:0 #19 0x0000000001b44521 llvm::legacy::PassManagerImpl::run(llvm::Module&) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/lib/IR/LegacyPassManager.cpp:1706:0 #20 0x0000000001b4472d llvm::legacy::PassManager::run(llvm::Module&) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/lib/IR/LegacyPassManager.cpp:1738:0 #21 0x0000000002269a96 (anonymous namespace)::EmitAssemblyHelper::EmitAssembly(clang::BackendAction, llvm::raw_pwrite_stream*) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tools/clang/lib/CodeGen/BackendUtil.cpp:765:0 #22 0x0000000002269b6f clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::DataLayout const&, llvm::Module*, clang::BackendAction, llvm::raw_pwrite_stream*) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tools/clang/lib/CodeGen/BackendUtil.cpp:782:0 #23 0x0000000002bb809d clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tools/clang/lib/CodeGen/CodeGenAction.cpp:180:0 #24 0x00000000036247a7 clang::ParseAST(clang::Sema&, bool, bool) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tools/clang/lib/Parse/ParseAST.cpp:169:0 #25 0x00000000027932d5 clang::ASTFrontendAction::ExecuteAction() /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tools/clang/lib/Frontend/FrontendAction.cpp:557:0 #26 0x0000000002bb71df clang::CodeGenAction::ExecuteAction() /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tools/clang/lib/CodeGen/CodeGenAction.cpp:851:0 #27 0x0000000002792d7b clang::FrontendAction::Execute() /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tools/clang/lib/Frontend/FrontendAction.cpp:461:0 #28 0x00000000027433d4 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tools/clang/lib/Frontend/CompilerInstance.cpp:877:0 #29 0x00000000028ae585 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tools/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:241:0 #30 0x000000000148d854 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tools/clang/tools/driver/cc1_main.cpp:116:0 #31 0x0000000001483b89 ExecuteCC1Tool(llvm::ArrayRef<char const*>, llvm::StringRef) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tools/clang/tools/driver/driver.cpp:301:0 #32 0x0000000001484614 main /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tools/clang/tools/driver/driver.cpp:382:0 #33 0x00000039f061ed1d __libc_start_main (/lib64/libc.so.6+0x39f061ed1d) #34 0x00000000014814e1 _start (/work/zhang/users/nks45/RISCV-LLVM/bin/clang-3.9+0x14814e1) Stack dump: 0. Program arguments: /work/zhang/users/nks45/RISCV-LLVM/bin/clang-3.9 -cc1 -triple riscv64 -S -disable-free -main-file-name vvadd-xloops.c -mrelocation-model static -mthread-model posix -mdisable-fp-elim -fmath-errno -no-integrated-as -mconstructor-aliases -target-feature +rv64 -target-feature +a -target-feature +m -target-feature +f -target-feature +d -dwarf-column-info -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=gdb -coverage-file /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tests/vvadd-xloops.c -resource-dir /work/zhang/users/nks45/RISCV-LLVM/bin/../lib/clang/3.9.0 -dependency-file vvadd-xloops.d -MT vvadd-xloops.o -MP -I . -I/work/zhang/users/nks45/python3/include/python3.6m -I. -O3 -fno-dwarf-directory-asm -fdebug-compilation-dir /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tests -ferror-limit 19 -fmessage-length 157 -fobjc-runtime=gcc -fdiagnostics-show-option -fcolor-diagnostics -vectorize-loops -vectorize-slp -o vvadd-xloops.s -x c vvadd-xloops.c 1. <eof> parser at end of file 2. Code generation 3. Running pass 'Function Pass Manager' on module 'vvadd-xloops.c'. 4. Running pass 'Module Verifier' on function '@vvadd_xloops' clang-3.9: error: unable to execute command: Aborted clang-3.9: error: clang frontend command failed due to signal (use -v to see invocation) clang version 3.9.0 (https://github.com/riscv/riscv-clang.git 52e04ed86397148b5cac4c54c27713168d9f1c5e) (git at github.com:nitish2112/riscv-llvm.git 6bb1a18fd05a39f3bffcc5fc4bf5d5b527dca995) Target: riscv64 Thread model: posix>From the error message and stack trace it can be seen that there is anassertion failure while casting in Verifier.cpp. Is thisthe right way to change the debug info attached to an instruction? I found this post from 2015 which was also handling the same issue ( https://groups.google.com/forum/#!topic/llvm-dev/Yn5x83GycZE ). According to this post, the second argument has to be the scope. When I try this code instead: llvm::MDString* name = MDString::get(Ctx, "foo" ); llvm::MDNode *node = llvm::MDNode::get(Ctx, name); I->setDebugLoc(DILocation::get(Ctx,I->getDebugLoc().getLine(),I->getDebugLoc().getCol(), ,I->getDebugLoc().getScope(), node)); // here I is the IR instruction I want to tag with "foo" metadata This gives me following error: #0 0x0000000002034e9c llvm::sys::PrintStackTrace(llvm::raw_ostream&) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/lib/Support/Unix/Signals.inc:402:0 #1 0x0000000002035260 PrintStackTraceSignalHandler(void*) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/lib/Support/Unix/Signals.inc:470:0 #2 0x0000000002033574 llvm::sys::RunSignalHandlers() /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/lib/Support/Signals.cpp:44:0 #3 0x00000000020347e8 SignalHandler(int) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/lib/Support/Unix/Signals.inc:256:0 #4 0x00000039f120f7e0 __restore_rt (/lib64/libpthread.so.0+0x39f120f7e0) #5 0x00000039f0632495 __GI_raise (/lib64/libc.so.6+0x39f0632495) #6 0x00000039f0633c75 __GI_abort (/lib64/libc.so.6+0x39f0633c75) #7 0x00000039f062b60e __assert_fail_base (/lib64/libc.so.6+0x39f062b60e) #8 0x00000039f062b6d0 __GI___assert_perror_fail (/lib64/libc.so.6+0x39f062b6d0) #9 0x0000000001763bbf llvm::cast_retty<llvm::DILocation, llvm::Metadata*>::ret_type llvm::cast_or_null<llvm::DILocation, llvm::Metadata>(llvm::Metadata*) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/include/llvm/Support/Casting.h:271:0 #10 0x0000000001763328 llvm::DILocation::getInlinedAt() const /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/include/llvm/IR/DebugInfoMetadata.h:1238:0 #11 0x0000000001ae538e llvm::DILocation::getInlinedAtScope() const /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/include/llvm/IR/DebugInfoMetadata.h:1249:0 #12 0x0000000001bbaaaa (anonymous namespace)::Verifier::visitFunction(llvm::Function const&) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/lib/IR/Verifier.cpp:2069:0 #13 0x0000000001bc8a18 llvm::InstVisitor<(anonymous namespace)::Verifier, void>::visit(llvm::Function&) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/include/llvm/IR/InstVisitor.h:103:0 #14 0x0000000001bafd6d (anonymous namespace)::Verifier::verify(llvm::Function const&) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/lib/IR/Verifier.cpp:303:0 #15 0x0000000001bc8541 (anonymous namespace)::VerifierLegacyPass::runOnFunction(llvm::Function&) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/lib/IR/Verifier.cpp:4332:0 #16 0x0000000001b439ab llvm::FPPassManager::runOnFunction(llvm::Function&) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/lib/IR/LegacyPassManager.cpp:1526:0 #17 0x0000000001b43b22 llvm::FPPassManager::runOnModule(llvm::Module&) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/lib/IR/LegacyPassManager.cpp:1547:0 #18 0x0000000001b43e6f (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/lib/IR/LegacyPassManager.cpp:1603:0 #19 0x0000000001b44521 llvm::legacy::PassManagerImpl::run(llvm::Module&) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/lib/IR/LegacyPassManager.cpp:1706:0 #20 0x0000000001b4472d llvm::legacy::PassManager::run(llvm::Module&) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/lib/IR/LegacyPassManager.cpp:1738:0 #21 0x0000000002269a9e (anonymous namespace)::EmitAssemblyHelper::EmitAssembly(clang::BackendAction, llvm::raw_pwrite_stream*) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tools/clang/lib/CodeGen/BackendUtil.cpp:765:0 #22 0x0000000002269b77 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::DataLayout const&, llvm::Module*, clang::BackendAction, llvm::raw_pwrite_stream*) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tools/clang/lib/CodeGen/BackendUtil.cpp:782:0 #23 0x0000000002bb80a5 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tools/clang/lib/CodeGen/CodeGenAction.cpp:180:0#24 0x00000000036247af clang::ParseAST(clang::Sema&, bool, bool) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tools/clang/lib/Parse/ParseAST.cpp:169:0#25 0x00000000027932dd clang::ASTFrontendAction::ExecuteAction() /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tools/clang/lib/Frontend/FrontendAction.cpp:557:0#26 0x0000000002bb71e7 clang::CodeGenAction::ExecuteAction() /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tools/clang/lib/CodeGen/CodeGenAction.cpp:851:0#27 0x0000000002792d83 clang::FrontendAction::Execute() /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tools/clang/lib/Frontend/FrontendAction.cpp:461:0#28 0x00000000027433dc clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tools/clang/lib/Frontend/CompilerInstance.cpp:877:0#29 0x00000000028ae58d clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tools/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:241:0#30 0x000000000148d854 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tools/clang/tools/driver/cc1_main.cpp:116:0#31 0x0000000001483b89 ExecuteCC1Tool(llvm::ArrayRef<char const*>, llvm::StringRef) /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tools/clang/tools/driver/driver.cpp:301:0#32 0x0000000001484614 main /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tools/clang/tools/driver/driver.cpp:382:0#33 0x00000039f061ed1d __libc_start_main (/lib64/libc.so.6+0x39f061ed1d) #34 0x00000000014814e1 _start (/work/zhang/users/nks45/RISCV-LLVM/bin/clang-3.9+0x14814e1) Stack dump: 0. Program arguments: /work/zhang/users/nks45/RISCV-LLVM/bin/clang-3.9 -cc1 -triple riscv64 -S -disable-free -main-file-name vvadd-xloops.c -mrelocation-model static -mthread-model posix -mdisable-fp-elim -fmath-errno -no-integrated-as -mconstructor-aliases -target-feature +rv64 -target-feature +a -target-feature +m -target-feature +f -target-feature +d -dwarf-column-info -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=gdb -coverage-file /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tests/vvadd-xloops.c -resource-dir /work/zhang/users/nks45/RISCV-LLVM/bin/../lib/clang/3.9.0 -dependency-file vvadd-xloops.d -MT vvadd-xloops.o -MP -I . -I/work/zhang/users/nks45/python3/include/python3.6m -I. -O3 -fno-dwarf-directory-asm -fdebug-compilation-dir /work/zhang/users/nks45/RISCV-LLVM/riscv-llvm/tests -ferror-limit 19 -fmessage-length 0 -fobjc-runtime=gcc -fdiagnostics-show-option -vectorize-loops -vectorize-slp -o vvadd-xloops.s -x c vvadd-xloops.c Can someone tell what is the right way of doing this? Thanks, Best Regards, Nitish -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170905/cc3004fb/attachment-0001.html>