|
|
source_filename = "func_test.sy"
|
|
|
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
|
|
target triple = "x86_64-pc-linux-gnu"
|
|
|
|
|
|
define dso_local i32 @add(i32 %0, i32 %1) { ; 定义add函数
|
|
|
%3 = alloca i32, align 4
|
|
|
%4 = alloca i32, align 4
|
|
|
store i32 %0, i32* %3, align 4
|
|
|
store i32 %1, i32* %4, align 4 ; 以上四步把两个参数移到%3 %4,必须从3开始
|
|
|
%5 = load i32, i32* %3, align 4
|
|
|
%6 = load i32, i32* %4, align 4
|
|
|
%7 = add i32 %5, %6
|
|
|
%8 = sub i32 %7, 1
|
|
|
ret i32 %8 ; 此处用静态单赋值的方式计算a+b-1
|
|
|
}
|
|
|
|
|
|
define dso_local i32 @main() {
|
|
|
%1 = alloca i32, align 4
|
|
|
%2 = alloca i32, align 4
|
|
|
%3 = alloca i32, align 4
|
|
|
store i32 3, i32* %1, align 4
|
|
|
store i32 2, i32* %2, align 4
|
|
|
store i32 5, i32* %3, align 4 ; %1 浪费不用,%2~%4赋给3,2,5相当于a,b,c。
|
|
|
%4 = load i32, i32* %3, align 4
|
|
|
%5 = load i32, i32* %1, align 4
|
|
|
%6 = load i32, i32* %2, align 4
|
|
|
%7 = call i32 @add(i32 %5, i32 %6) ; 执行函数调用
|
|
|
%8 = add i32 %4, %7 ; 加法
|
|
|
ret i32 %8
|
|
|
} |