【问题标题】:Randomly iterate over llvm::Instructions in a function随机迭代函数中的 llvm::Instructions
【发布时间】:2019-04-01 22:03:26
【问题描述】:

有没有办法在函数中随机迭代 llvm::Instructions?假设一个函数有几个分支。每次迭代函数的指令时,我想随机遵循不同的路径。

【问题讨论】:

    标签: llvm llvm-ir


    【解决方案1】:

    首先,创建一个返回随机迭代器的函数:

    template<typename T>
    typename T::iterator getRandomIterator(T& t)
    {
        if(!t.size())
            return t.end();
        size_t randIdx = ::rand() % t.size();
        auto i = t.begin();
        std::advance(i, randIdx);
        return i;
    }
    

    然后将您要处理的所有指令复制到一个临时向量中:

    #include <llvm/IR/InstIterator.h>
    
    std::vector<Instruction*> insts;
    std::copy(inst_begin(F), inst_end(F), insts);
    

    然后走过它们,直到您访问每条指令:

    while(!insts.empty())
    {
      auto It = getRandomIterator(insts);
      // do something
      insts.erase(It);
    }
    

    【讨论】:

      猜你喜欢
      • 2012-03-04
      • 2017-10-31
      • 2023-03-10
      • 2019-11-10
      • 2015-05-05
      • 2021-05-03
      • 2020-08-05
      • 2016-08-26
      • 1970-01-01
      相关资源
      最近更新 更多