%7 = load i32, ptr %4, align 4 ; 读取%4,值给%7 就是参数 b %8 = add nsw i32 %6, %7 store i32 %8, ptr %5, align 4 ; 参数 %9 赋值给%5 e 就是转换前函数写的 int c 变量 ret void } ; Function Attrs: noinline nounwind optnone uwtable define dso_local i32 @main() #0...
指令选择在llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp这个文件中,入口函数在void RISCVDAGToDAGISel::Select(SDNode *Node), 我们需要在里面的switch case中添加一段逻辑: caseISD::ADD:{// Only handle i32 addif(VT!=MVT::i32)break;autoLHS=Node->getOperand(0);autoRHS=Node->getOperand(1);// ...
%4 = add nsw i32 %0, -1 %5 = call i32 @_Z9fibonaccii(i32 %4) %6 = add nsw i32 %0, -2 %7 = call i32 @_Z9fibonaccii(i32 %6) %8 = add nsw i32 %7, %5 br label %9 9: ; preds = %1, %3 %10 = phi i32 [ %8, %3 ], [ 1, %1 ] ret i32 %10 } 所以...
; Function Attrs: noinline nounwind optnone uwtabledefinedso_local void@test(i32noundef%0,i32noundef%1)#0{%3=allocai32,align4%4=allocai32,align4%5=allocai32,align4storei32%0,ptr%3,align4storei32%1,ptr%4,align4%6=loadi32,ptr%3,align4%7=loadi32,ptr%4,align4%8=addnswi32%6,%7...
(add, %a, %b, %result) (ret, %result, , ) 三地址码是一种强大且灵活的中间表示形式,通过使用简单的四元组结构,可以有效地描述程序的中间步骤。LLVM IR 采用了类似三地址码的设计,使得编译器能够高效地进行优化和代码生成。理解三地址码的基本原理和其在 LLVM IR 中的应用,有助于深入掌握编译器技术和优...
%add = add nsw i32 %1, 42 store i32 %add, i32* %data, align 4 %2 = load i32, i32* %data, align 4 ret i32 %2 } ; Function Attrs: noinline nounwind optnone uwtable define internal i32 @foo3() #0 { entry: call void @foo4() ...
%26 = add nsw i32 %25, 59 // input[i]+59 %27 = trunc i32 %26 to i8 // 强制转化 相当于 &0xff %28 = load i8*, i8** %6, align 8 %29 = load i32, i32* %9, align 4 %30 = sext i32 %29 to i64 %31 = getelementptr inbounds i8, i8* %28, i64 %30 // 存储base...
%26 = add nsw i32 %25, 59 // input[i]+59 %27 = trunc i32 %26 to i8 // 强制转化 相当于 &0xff %28 = load i8*, i8** %6, align 8 %29 = load i32, i32* %9, align 4 %30 = sext i32 %29 to i64 %31 = getelementptr inbounds i8, i8* %28, i64 %30 // 存储base...
Since index operations have no set bitwidth, it is ill-defined to use signed/unsigned wrapping behavior. The corollary to which is that it is always safe to add nsw/nuw to lowering of affine ops. Also add a folder to folddiv(s|u)i (mul (a, v), v) -> a ...
%4,align4%6=loadi32,i32*%3,align4%7=loadi32,i32*%4,align4%8=addnswi32%6,%7%9=addnswi32%8,1638storei32%9,i32* %5,align4retvoid} 全局变量用unnamed_addr来标记,表示地址不重要,只有内容 nsw是“No Signed Wrap”缩写,是一种无符号值运算的标识 ...