【问题标题】:Last basic block of a function in LLVMLLVM 中函数的最后一个基本块
【发布时间】:2012-03-14 14:03:14
【问题描述】:

Function 的 back() 是否保证返回 LLVM 中 CFG 的终止符基本块?

【问题讨论】:

    标签: compiler-construction llvm


    【解决方案1】:

    我不认为,因为没有“终结者 BB”这样的东西:很可能有多个 BB 被返回终止。

    【讨论】:

    • 你能给我举一个有多个终结符 BB 的函数的例子吗?即使有多个返回,也应该有一个带有 phi 的 BB 来“收集”所有返回 BB,对吧?
    • 不,事实上,甚至还有一个名为 UnifyFunctionExitNodes 的通行证,它完全按照它的名字所说的那样工作,即摆脱函数的多个出口
    【解决方案2】:

    没有。一个函数可能有多个终止符基本块,例如一个包含多个返回语句的函数。每个包含函数返回语句的基本块将被称为终结器块或终结器基本块。要检测所有作为终止符基本块的基本块(即包含返回语句),请执行以下操作:

    runOnFunction {
       for BB in F:
          for I in BB:
              if (ReturnInst *RI = dyn_cast<ReturnInst> I)
                 BB is terminator Basic Block
              endif
          endfor
       endfor
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-31
      • 2020-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多