标签: llvm-ir

如何验证 LLVM“ret”指令是否返回 void?

我有以下代码片段:

static LLVMContext TempContext;
Type * RetTy = Type::getVoidTy(TempContext)
for (Instruction *I : ListOfInstructions) {
  if (isa<ReturnInst>(I)) {
    RetTy = I->getOperand(0)->getType();
    break
  }
}
Run Code Online (Sandbox Code Playgroud)

我试图捕获指令的 RetTy 的地方,无论是否无效,这样我就可以在

getOrInsertFunction("TempF", FunctionType::get(RetTy, ArgsTys,false));
Run Code Online (Sandbox Code Playgroud)

只要 ret 指令不是ret void.

我尝试添加第二个时间if来检查void情况,但这似乎不起作用,并且执行在函数中停止FunctionType::get(...),打印反向跟踪。

for (Instruction *I : ListOfInstructions) {
  if (isa<ReturnInst>(I)) {
    if ( I->getOperand(0)->getType() != Type::getVoidTy(TempContext)) {
      RetTy = I->getOperand(0)->getType();
      break
    }
  }
}                                            
Run Code Online (Sandbox Code Playgroud)

请注意,将for循环全部删除并继续执行,因为该函数可以很好地FunctionType::get(...)处理初始化的Type * RetTy = Type::getVoidTy(TempContext)“void”值。RetTy但是当 …

c++ compiler-construction llvm llvm-ir

1
推荐指数
1
解决办法
3306
查看次数

如何使 LLVM Opt 工具报告每个优化 -O1、-O2 等成功使用的分析通道?

我想知道是否可以让 LLVMopt工具详细报告在每个优化级别(如-O1-O2等)期间成功使用了哪些优化通道。

例如,这是文件的简单位码foo.bc

define dso_local i32 @main() #0 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  store i32 0, i32* %1, align 4
  store i32 1, i32* %2, align 4
  store i32 1, i32* %3, align 4
  %4 = load i32, i32* %2, align 4
  ret i32 %4
}
Run Code Online (Sandbox Code Playgroud)

这是运行后获得的bitcodeopt -O1 foo.bc -o foo.opt.bc

; Function Attrs: noinline norecurse nounwind …
Run Code Online (Sandbox Code Playgroud)

optimization llvm llvm-clang llvm-ir bitcode

1
推荐指数
1
解决办法
4757
查看次数

LLVM IR中的"移动"操作码是什么?

我是新手LLVM IR,我正在尝试模拟一些x86指令LLVM IR.

这是一个简单的案例:

move %eax, %ebx
Run Code Online (Sandbox Code Playgroud)

但是,mov在查看此处此处的材料后,我没有找到任何相应的操作码.

所以我的问题是:

  1. 如果我想mov使用LLVM IR 模拟操作码?我该怎么办?

  2. 我是新手LLVM IR,也许我会花很长时间在这个"模拟"工作上,关于LLVM IR的最佳参考应该是什么?

如果有人能给我一些帮助,我真的很感激.谢谢!

llvm llc llvm-ir

0
推荐指数
1
解决办法
797
查看次数

llvm-ir中'store {} {},{}*%p'的含义是什么?

我知道该store指令用于将数据存储到内存中,但下面的llvm-ir代码是什么意思?你可以在这里看到很多空的"{}"结构.

; CHECK:      Function: foo:
; CHECK-NEXT:   NoAlias: {}* %p, {}* %q

define void @foo({}* %p, {}* %q) {
  store {} {}, {}* %p
  store {} {}, {}* %q
  ret void
}
Run Code Online (Sandbox Code Playgroud)

仅供参考:https://github.com/llvm-mirror/llvm/blob/master/test/Analysis/CFLAliasAnalysis/Steensgaard/empty.ll

llvm llvm-ir

0
推荐指数
1
解决办法
119
查看次数

操作系统和体系结构之间的 FILE 结构是否一致?

对于以下 C 代码片段,LLVM 将生成下面的 IR。

#include <stdio.h>
#include <stdlib.h>

int main(){
  printf("Hello world\n");
  fflush(NULL);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)
; ModuleID = 'a.c'
source_filename = "a.c"
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.15.0"

%struct.__sFILE = type { i8*, i32, i32, i16, i16, %struct.__sbuf, i32, i8*, i32 (i8*)*, i32 (i8*, i8*, i32)*, i64 (i8*, i64, i32)*, i32 (i8*, i8*, i32)*, %struct.__sbuf, %struct.__sFILEX*, i32, [3 x i8], [1 x i8], %struct.__sbuf, i32, i64 }
%struct.__sFILEX = type opaque
%struct.__sbuf = type { i8*, …
Run Code Online (Sandbox Code Playgroud)

c llvm llvm-ir

0
推荐指数
1
解决办法
109
查看次数

无法使用 Clang-14 编译 C++ 程序

scons我目前正在尝试编译一个我一直在使用 Clang 编写的小程序,并且在使用构建系统进行编译时出现以下错误:

/usr/bin/clang++ -o src/PluGen/main.o -c -std=c++17 -fPIC -I. -O2 -fno-strict-aliasing -fpermissive -fopenmp --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security -fpermissive -fPIC -I. -O2 -flto -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -DHAVE_PYTHON -D_REENTRANT -D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DLARGE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_PERL -DREENTRANT -DHAVE_R -I/usr/include -I/usr/local/include -Isrc -I/usr/include/python3.10 -I/usr/lib/perl5/5.36/core_perl/CORE -I/usr/include/R -I/usr/lib/R/library/Rcpp/include -I/usr/lib/R/library/RInside/include -I/usr/lib/R/site-library/RInside/include -I/usr/lib/R/site-library/Rcpp/include -I/usr/local/lib/R/library/Rcpp/include -I/usr/local/lib/R/library/RInside/include -I/usr/local/lib/R/site-library/RInside/include -I/usr/local/lib/R/site-library/Rcpp/include -I/usr/local/lib/R/site-library/RInside/lib src/PluGen/main.cxx
...
/usr/bin/clang++ -o PluGen/plugen -rdynamic -Wl,-E -Wl,-rpath,/usr/lib/perl5/5.36/core_perl/CORE -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now src/PluGen/main.o src/PluGen/PluginGenerator.o -L/lib -L/usr/lib -L/usr/local/lib -L/usr/lib/perl5/5.36/core_perl/CORE -L/usr/lib/R/lib -L/usr/lib/R/library/RInside/lib -L/usr/lib/R/site-library/RInside/lib -L/usr/local/lib/R/library/RInside/lib -L/usr/local/lib/R/site-library/RInside/lib -Llib -lc -lc++ -lstdc++fs
src/PluGen/main.o: file not …
Run Code Online (Sandbox Code Playgroud)

c++ linux clang clang++ llvm-ir

0
推荐指数
1
解决办法
1419
查看次数