master
GreenDay 2 years ago
parent 3371cf514a
commit b326312136

@ -0,0 +1,24 @@
source_filename = "assign_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 @main() { ;
%1 = alloca float, align 4 ; float, b
%2 = alloca [2 x i32], align 4 ; i32a[2]
store float 0x3FFCCCCCC0000000, float* %1, align 4 ; b=1.81.8
%3 = getelementptr [2 x i32], [2 x i32]* %2, i64 0, i64 0 ; %20
store i32 2, i32* %3 ; 2a[0]=2a[2]={2}
%4 = getelementptr [2 x i32], [2 x i32]* %2, i64 0, i64 0
%5 = load i32, i32* %4, align 4
%6 = sitofp i32 %5 to float ; %5a[0]float
%7 = load float, float* %1, align 4
%8 = fmul float %6, %7
%9 = fptosi float %8 to i32 ; %8a[0]*bi32
%10 = getelementptr [2 x i32], [2 x i32]* %2, i64 0, i64 1 ; %21
store i32 %9, i32* %10, align 4 ; %9%10a[1]
%11 = getelementptr [2 x i32], [2 x i32]* %2, i64 0, i64 1
%12 = load i32, i32* %11, align 4 ; %10a[1]
ret i32 %12 ; main
}

@ -0,0 +1,30 @@
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 %43
%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~%43,2,5a,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
}

@ -0,0 +1,20 @@
source_filename = "if_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"
@a = dso_local global i32 0, align 4
define dso_local i32 @main() {
store i32 10, i32* @a, align 4 ; a=10
%1 = load i32, i32* @a, align 4
%2 = icmp sgt i32 %1, 0 ; %2aa
br i1 %2, label %3, label %5 ; %4%6
3:
%4 = load i32, i32* @a, align 4
ret i32 %4 ; a
5:
ret i32 0 ; 0
}

@ -0,0 +1,31 @@
source_filename = "while_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"
@b = dso_local global i32 0, align 4
@a = dso_local global i32 0, align 4
define dso_local i32 @main() {
store i32 0, i32* @b, align 4
store i32 3, i32* @a, align 4 ; b, a0, 3
br label %1 ; 2
1:
%2 = load i32, i32* @a, align 4
%3 = icmp sgt i32 %2, 0
br i1 %3, label %4, label %10 ; a0
4:
%5 = load i32, i32* @b, align 4
%6 = load i32, i32* @a, align 4
%7 = add i32 %5, %6
store i32 %7, i32* @b, align 4
%8 = load i32, i32* @a, align 4
%9 = sub i32 %8, 1
store i32 %9, i32* @a, align 4 ; b = b+a; a = a-1;
br label %1 ;
10:
%11 = load i32, i32* @b, align 4
ret i32 %11 ; %b
}

@ -1,9 +1,16 @@
# PW6 实验报告
学号1 姓名1 学号2 姓名2 学号3 姓名3
舒英特 PB21111704
杨宇航 PB21051030
## 问题回答
1-1 一个while语句对应三个标签第一个标签处执行判断第二个标签处执行函数体
第三个标签对应while的末尾。br指令有两种形式br label a表示直接跳转到a标签处br i1 x, label a, label b表示x是真则跳到ax是假则跳到b。
1-2 函数调用语句的格式是call <return-type> @<func-name>(<para-type> <para-reg>),包含了返回值类型,参数类型及其具体值。
## 实验设计
## 实验难点及解决方案

Loading…
Cancel
Save