Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在LLVM中嵌套basicblock时如何生成LLVM IR_Llvm - Fatal编程技术网

在LLVM中嵌套basicblock时如何生成LLVM IR

在LLVM中嵌套basicblock时如何生成LLVM IR,llvm,Llvm,有一个函数basicblock a,位于块a内部的另一个块,如何生成LLVM IR。例如: int fun() {/*block A*/ int i=0; {/*block B*/ int i=1 printf("i in block B is %d\n",i); } printf("i in block A is %d\n",i); } 您的块A和B不是基本块,它们只是块。C(或任何一种语言)没有基本块的概念——LLVM有 LLVM中的基本块不必(通常也不必

有一个函数basicblock a,位于块a内部的另一个块,如何生成LLVM IR。例如:

int fun()
{/*block A*/
  int i=0;
  {/*block B*/
    int i=1
    printf("i in block B is %d\n",i);
  }
  printf("i in block A is %d\n",i);
 }

您的块
A
B
不是基本块,它们只是块。C(或任何一种语言)没有基本块的概念——LLVM有

LLVM中的基本块不必(通常也不必)与源语言中的块相对应。基本上,一个基本块只是一个代码单元,因此您永远不会跳进或跳出它的中间。你只能跳到块的开头,也只能从块的末尾跳

源语言中的块可以用于多种用途。有时它们被用作控制流语句的一部分,有时则不是。有时,您可以使用不带块的控制流。例如,在许多语言中,循环和
if
语句可以与不是复合语句的单个语句体一起使用(例如
if(condition)return;
-此处无块,但仍控制流)。同样地,
switch
语句通常没有针对每种情况的块,当然还有
goto

因此,当有没有块的控制流时,生成的程序将包含比源程序包含的块更多的基本块。在相反的情况下,如果存在没有控制流的块,则生成的程序将包含较少的基本块


在您的示例中,函数
fun
除了函数末尾的隐式返回之外,不包含任何控制流。因此,您应该只为它生成一个基本块。

您的块
a
B
不是基本块,它们只是块。C(或任何一种语言)没有基本块的概念——LLVM有

LLVM中的基本块不必(通常也不必)与源语言中的块相对应。基本上,一个基本块只是一个代码单元,因此您永远不会跳进或跳出它的中间。你只能跳到块的开头,也只能从块的末尾跳

源语言中的块可以用于多种用途。有时它们被用作控制流语句的一部分,有时则不是。有时,您可以使用不带块的控制流。例如,在许多语言中,循环和
if
语句可以与不是复合语句的单个语句体一起使用(例如
if(condition)return;
-此处无块,但仍控制流)。同样地,
switch
语句通常没有针对每种情况的块,当然还有
goto

因此,当有没有块的控制流时,生成的程序将包含比源程序包含的块更多的基本块。在相反的情况下,如果存在没有控制流的块,则生成的程序将包含较少的基本块


在您的示例中,函数
fun
除了函数末尾的隐式返回之外,不包含任何控制流。因此,您应该只为它生成一个基本块。

请回答您的问题并提供一个基本块。基本块不能嵌套。请澄清您的意思。您将高级词汇作用域与基本块混淆,因为sepp2k指出基本块不能嵌套。请回答您的问题并提供答案。基本块不能嵌套。请澄清你的意思。你把高级词汇作用域和基本块混淆了,因为sepp2k指出基本块不能嵌套。嗨,你的答案引用了任何LLVM文档吗?如果是,请提供它们好吗?@linrongbin否,我的回答中没有任何关于LLVM文档的参考。你是说应该这样吗?如果是,那是哪一部分?嗨,你的答案是否引用了任何LLVM文档?如果是,请提供它们好吗?@linrongbin否,我的回答中没有任何关于LLVM文档的参考。你是说应该这样吗?如果有的话,是哪一部分?