Commit d2f3c996 authored by 李晓奇's avatar 李晓奇

53 points!

parent 1de803c9
......@@ -99,6 +99,8 @@ PB20111654 李晓奇
- 神奇,bool变量不能比较,所以在比较、计算的时候要做类型转换
- store的顺序颠倒了!!
## 实验设计
请写明为了顺利完成本次实验,加入了哪些亮点设计,并对这些设计进行解释。
......
......@@ -136,18 +136,20 @@ void CminusfBuilder::visit(ASTVarDeclaration &node) {
case TYPE_INT: {
auto I32Array_T = Type::get_array_type(INT32_T, size);
if (global)
cur_value =
GlobalVariable::create(node.id, builder->get_module(), I32Array_T, false, I32Initializer);
else
builder->create_alloca(I32Array_T);
cur_value = builder->create_alloca(I32Array_T);
break;
}
case TYPE_FLOAT: {
auto FloatArray_T = Type::get_array_type(FLOAT_T, size);
if (global)
cur_value =
GlobalVariable::create(node.id, builder->get_module(), FloatArray_T, false, FloatInitializer);
else
builder->create_alloca(FloatArray_T);
cur_value = builder->create_alloca(FloatArray_T);
break;
}
default:
......@@ -159,16 +161,17 @@ void CminusfBuilder::visit(ASTVarDeclaration &node) {
switch (node.type) {
case TYPE_INT:
if (global)
GlobalVariable::create(node.id, builder->get_module(), INT32_T, false, I32Initializer);
cur_value = GlobalVariable::create(node.id, builder->get_module(), INT32_T, false, I32Initializer);
else
builder->create_alloca(INT32_T);
cur_value = builder->create_alloca(INT32_T);
break;
case TYPE_FLOAT:
if (global)
cur_value =
GlobalVariable::create(node.id, builder->get_module(), FLOAT_T, false, FloatInitializer);
else
builder->create_alloca(INT32_T);
cur_value = builder->create_alloca(INT32_T);
break;
default:
error_exit("Variable type(not array) is not int or float");
......@@ -432,7 +435,7 @@ void CminusfBuilder::visit(ASTAssignExpression &node) {
error_exit("bad type for assignment");
}
// gen code
builder->create_store(addr, cur_value);
builder->create_store(cur_value, addr);
}
// Done
......
; ModuleID = 'cminus'
source_filename = "assign_int_var_local.cminus"
declare i32 @input()
declare void @output(i32)
declare void @outputFloat(float)
declare void @neg_idx_except()
define void @main() {
label_entry:
%op0 = alloca i32
store i32* %op0, i32 1234
%op1 = load i32, i32* %op0
call void @output(i32 %op1)
ret void
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment