如何使用f.getValuesymboltable()

发布于 2025-01-24 06:33:12 字数 458 浏览 0 评论 0原文

我想在功能中获取所有本地变量。

void getLocalVariables(Function &F) {
  ValueSymbolTable *vst = F.getValueSymbolTable();
  for (auto vs : vst) {  // here it says: This scope-based "for" statement required the appropriate "begin" function, but was not found
    auto s = vs.getKey();
    auto v = vs.getValue();
  }
}

错误是:基于范围的“对语句需要适当的开始”函数,但没有找到。所以如何更正我的代码? TKS。

I wanna get all the local variables in a function.

void getLocalVariables(Function &F) {
  ValueSymbolTable *vst = F.getValueSymbolTable();
  for (auto vs : vst) {  // here it says: This scope-based "for" statement required the appropriate "begin" function, but was not found
    auto s = vs.getKey();
    auto v = vs.getValue();
  }
}

The error is that: This scope-based "for" statement required the appropriate "begin" function, but was not found. So how can I correct my code? Tks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

街角卖回忆 2025-01-31 06:33:12

我检查文档是否valueymboltable,最后找到如何使用它。但是实际上,正如 arnt 所说,它们不是源代码中的本地变量。它们是IR产生的临时变量。

void getLocalVariables(Function &F) {
      // not test yet
      ValueSymbolTable *vst = F.getValueSymbolTable();
      errs() << (*vst).size() << "\n.";

      for (ValueSymbolTable::iterator VI = vst->begin(), VE = vst->end(); VI != VE; ++VI) {
        Value *V = VI->getValue();
        if (!isa<GlobalValue>(V) || cast<GlobalValue>(V)->hasLocalLinkage()) {
          if (!V->getName().startswith("llvm.dbg"))
            // Set name to "", removing from symbol table!
            V->setName("");
        }
      }
    }

I check the documentation for ValueSymbolTable, and finally find how to use it. But actually, as arnt said, they are not local variables in source code. They are temporary variables generated by IR.

void getLocalVariables(Function &F) {
      // not test yet
      ValueSymbolTable *vst = F.getValueSymbolTable();
      errs() << (*vst).size() << "\n.";

      for (ValueSymbolTable::iterator VI = vst->begin(), VE = vst->end(); VI != VE; ++VI) {
        Value *V = VI->getValue();
        if (!isa<GlobalValue>(V) || cast<GlobalValue>(V)->hasLocalLinkage()) {
          if (!V->getName().startswith("llvm.dbg"))
            // Set name to "", removing from symbol table!
            V->setName("");
        }
      }
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文