Swift Compiler LLVM IR优化
对于一个项目,我目前正在使用Swift编译器前端生成LLVM IR。我需要分析IR以找到可变读/写入之间的运行时间依赖关系,以找到并行性的最终目标。 为此,…
什么是LLVM ExtractValueInst?
我正在研究一个LLVM代码,现在我找到了一条线, const ExtractValueInst *EI = cast(I); st.setValue(I, st.getValue(EI->getAggregateOperand())); …
需要解释LLVM :: Constant的子类
我目前正在研究LLVM IR。我了解 llvm :: value 是LLVM中的重要类, llvm :: value 具有许多派生类,例如 llvm :: function , llvm :: BASIC BLOCK 和…
如何访问LLVM IR的阵列?
我对LLVM如何访问数组感到困惑。 对于一个2维数组,就像 int a[5][5]; int func1(){ return a[1][2]; } 翻译后的LLVM-IR一样, @a = global [5 x [5 x…
什么C++代码可以在LLVM中生成PHI节点
从理论上讲,当无法静态确定变量分配时,会发生PHI节点。但是以下代码不会按预期生成PHI节点: clang++ -c -emit-llvm -fno-discard-value-names -S -…
如何确定`phinode'是否受``if`分支的影响
在 llvm 中, phinode 在无法静态确定变量分配时发生。当 phinode 发生时,我想如果 phinode 中的分配是由给定的分支确定的。在下面的三个示例中,前…
LLVM:从其OpCode创建指令
我正在寻找一种创建llvm 指令从Opcode来看。 理想的函数将是诸如指令 *createInstruction(无符号opcode,arrayref< value *> permants); 是…
用LLVM中的指令代替教学的RHS
假设这是一个问题, 我有以下我想要的说明 %add = add nsw i32 %argc, 50 ,首先要创建一个二进制指令 %T1 = add nsw i32 %argc, 50 %add = add nsw i…
【 llvm延伸:从元数据中提取信息
我想从返回指令中获取值和 861 ,例如 ret i32%3,!dbg!861 ,它是元数据!861 =!diLocation(line:line:line:line:line: 8,列:5,范围:…
如何在模块通行证中获取loopinfo
我想通过模块通行中的函数迭代来获取每个函数中的循环。我的代码如下: for (auto &F:M) { if(!F.isDeclaration()){ LoopInfo &LI = getAnalysis(F).g…
用于大型 C 项目的 LLVM IR
我是 LLVM、clang 等新手。 我的主要需求是将 C 代码转换为 LLVM IR (.ll),然后将其解析为类似汇编的语言。为此,我到目前为止一直在使用小长度的 c …
在LLVM中,您如何获得循环起始部分内的所有指令?
我将 #pragma omp for for (i = 0; i < length; i++) { A[i] = A[i] * B[i]; } 其编译到LLVM IR之后,我只需要获取“ for”零件(增量操作)中的指令…