diff --git a/.gitignore b/.gitignore index 1ee33a1..53075fa 100644 --- a/.gitignore +++ b/.gitignore @@ -68,3 +68,9 @@ Thumbs.db # Project outputs # ========================= test/test_result/ + +# ========================= +# mxr +# ========================= +result.txt +build.sh \ No newline at end of file diff --git a/include/ir/IR.h b/include/ir/IR.h index b961192..ea62b05 100644 --- a/include/ir/IR.h +++ b/include/ir/IR.h @@ -41,10 +41,16 @@ namespace ir { class Type; +class ArrayType; +class FunctionType; class Value; class User; class ConstantValue; class ConstantInt; +class ConstantFloat; +class ConstantArray; +class ConstantZero; +class ConstantAggregateZero; class GlobalValue; class Instruction; class BasicBlock; @@ -77,39 +83,141 @@ class Use { }; // IR 上下文:集中管理类型、常量等共享资源,便于复用与扩展。 +// ir/IR.h - 修改 Context 类定义 + class Context { public: Context() = default; ~Context(); - // 去重创建 i32 常量。 + + // 去重创建 i32 常量 ConstantInt* GetConstInt(int v); + + // 去重创建浮点常量 + ConstantFloat* GetConstFloat(float v); + + // 创建数组常量(不去重,因为数组常量通常比较复杂且组合多样) + ConstantArray* GetConstArray(std::shared_ptr ty, + std::vector elements); + + // 获取零常量(按类型缓存) + ConstantZero* GetZeroConstant(std::shared_ptr ty); + + // 获取聚合类型的零常量 + ConstantAggregateZero* GetAggregateZero(std::shared_ptr ty); std::string NextTemp(); private: + // 数组常量缓存需要添加到类中 + struct ArrayKey { + std::shared_ptr type; + std::vector elements; + + bool operator==(const ArrayKey& other) const; + }; + + struct ArrayKeyHash { + size_t operator()(const ArrayKey& key) const; + }; + + std::unordered_map, ArrayKeyHash> array_cache_; + + // 其他现有成员... std::unordered_map> const_ints_; + std::unordered_map> const_floats_; + std::unordered_map> zero_constants_; + std::unordered_map> aggregate_zeros_; int temp_index_ = -1; }; class Type { public: - enum class Kind { Void, Int32, PtrInt32 }; - explicit Type(Kind k); + enum class Kind { Void, Int32, Float, PtrInt32, PtrFloat, Label, Array, Function, + Int1, PtrInt1}; + + virtual ~Type() = default; + // 使用静态共享对象获取类型。 // 同一类型可直接比较返回值是否相等,例如: // Type::GetInt32Type() == Type::GetInt32Type() static const std::shared_ptr& GetVoidType(); static const std::shared_ptr& GetInt32Type(); + static const std::shared_ptr& GetFloatType(); static const std::shared_ptr& GetPtrInt32Type(); - Kind GetKind() const; - bool IsVoid() const; - bool IsInt32() const; - bool IsPtrInt32() const; + static const std::shared_ptr& GetPtrFloatType(); + static const std::shared_ptr& GetLabelType(); + static std::shared_ptr GetArrayType(std::shared_ptr elem, std::vector dims); + static std::shared_ptr GetFunctionType(std::shared_ptr ret, std::vector> params); + static const std::shared_ptr& GetInt1Type(); + static const std::shared_ptr& GetPtrInt1Type(); + + + // 类型判断 + Kind GetKind() const { return kind_; } + bool IsVoid() const { return kind_ == Kind::Void; } + bool IsInt32() const { return kind_ == Kind::Int32; } + bool IsFloat() const { return kind_ == Kind::Float; } + bool IsPtrInt32() const { return kind_ == Kind::PtrInt32; } + bool IsPtrFloat() const { return kind_ == Kind::PtrFloat; } + bool IsLabel() const { return kind_ == Kind::Label; } + bool IsArray() const { return kind_ == Kind::Array; } + bool IsFunction() const { return kind_ == Kind::Function; } + bool IsInt1() const { return kind_ == Kind::Int1; } + bool IsPtrInt1() const { return kind_ == Kind::PtrInt1; } + + // 类型属性 + virtual size_t Size() const; // 字节大小 + virtual size_t Alignment() const; // 对齐要求 + virtual bool IsComplete() const; // 是否为完整类型(非 void,数组维度已知等) + +protected: + explicit Type(Kind k); // 构造函数 protected,只能由工厂和派生类调用 private: Kind kind_; }; +// 数组类型 +class ArrayType : public Type { +public: + // 获取元素类型和维度 + const std::shared_ptr& GetElementType() const { return elem_type_; } + const std::vector& GetDimensions() const { return dims_; } + size_t GetElementCount() const; // 总元素个数 + + size_t Size() const override; + size_t Alignment() const override; + bool IsComplete() const override; + +protected: + ArrayType(std::shared_ptr elem, std::vector dims); + friend class Type; // 允许 Type::GetArrayType 构造 + +private: + std::shared_ptr elem_type_; + std::vector dims_; +}; + +// 函数类型 +class FunctionType : public Type { +public: + const std::shared_ptr& GetReturnType() const { return return_type_; } + const std::vector>& GetParamTypes() const { return param_types_; } + + size_t Size() const override; // 函数类型没有大小,通常返回 0 + size_t Alignment() const override; // 无对齐要求 + bool IsComplete() const override; // 函数类型视为完整 + +protected: + FunctionType(std::shared_ptr ret, std::vector> params); + friend class Type; + +private: + std::shared_ptr return_type_; + std::vector> param_types_; +}; + class Value { public: Value(std::shared_ptr ty, std::string name); @@ -151,8 +259,82 @@ class ConstantInt : public ConstantValue { int value_{}; }; -// 后续还需要扩展更多指令类型。 -enum class Opcode { Add, Sub, Mul, Alloca, Load, Store, Ret }; +// 在 ConstantInt 类之后添加以下类 + +// ConstantFloat - 浮点常量 +class ConstantFloat : public ConstantValue { + public: + ConstantFloat(std::shared_ptr ty, float v); + float GetValue() const { return value_; } + + private: + float value_{}; +}; + +// ConstantArray - 数组常量 +class ConstantArray : public ConstantValue { + public: + // 构造函数:接收数组类型和常量元素列表 + ConstantArray(std::shared_ptr ty, std::vector elements); + + // 获取元素数量 + size_t GetNumElements() const { return elements_.size(); } + + // 获取指定索引的元素 + ConstantValue* GetElement(size_t index) const { return elements_[index]; } + + // 获取所有元素 + const std::vector& GetElements() const { return elements_; } + + // 验证常量数组的类型是否正确 + bool IsValid() const; + + private: + std::vector elements_; +}; + +// ConstantZero - 零常量(用于零初始化) +class ConstantZero : public ConstantValue { + public: + explicit ConstantZero(std::shared_ptr ty); + + // 工厂方法:创建特定类型的零常量 + static std::unique_ptr GetZero(std::shared_ptr ty); +}; + +// ConstantAggregateZero - 聚合类型的零常量(数组、结构体等) +class ConstantAggregateZero : public ConstantValue { + public: + explicit ConstantAggregateZero(std::shared_ptr ty); + + // 获取聚合类型 + std::shared_ptr GetAggregateType() const { return GetType(); } + + // 工厂方法:创建聚合类型的零常量 + static std::unique_ptr GetZero(std::shared_ptr ty); +}; +//function 参数占位类,目前仅保存类型和名字,后续可扩展更多属性(例如是否为数组参数、数组维度等)。 +class Argument : public Value { + public: + Argument(std::shared_ptr ty, std::string name); +}; + +// 后续还需要扩展更多指令类型。add call instruction 只是最小占位,后续可以继续补 sub/mul/div/rem、br/condbr、phi、gep 等指令。 +enum class Opcode { + Add, Sub, Mul, + Alloca, Load, Store, Ret, Call, + Br, CondBr, Icmp, ZExt, Trunc, + Div, Mod, + And, Or, Not, + GEP, + FAdd, FSub, FMul, FDiv, + FCmp, + SIToFP, // 整数转浮点 + FPToSI, // 浮点转整数 + FPExt, // 浮点扩展 + FPTrunc, // 浮点截断 + }; +// ZExt 和 Trunc 是零扩展和截断指令,SysY 的 int (i32) vs LLVM IR 的比较结果 (i1)。 // User 是所有“会使用其他 Value 作为输入”的 IR 对象的抽象基类。 // 当前实现中只有 Instruction 继承自 User。 @@ -162,7 +344,16 @@ class User : public Value { size_t GetNumOperands() const; Value* GetOperand(size_t index) const; void SetOperand(size_t index, Value* value); - + // 添加模板方法,支持派生类自动转换 + template + void SetOperand(size_t index, T* value) { + SetOperand(index, static_cast(value)); + } + + template + void AddOperand(T* value) { + AddOperand(static_cast(value)); + } protected: // 统一的 operand 入口。 void AddOperand(Value* value); @@ -173,9 +364,53 @@ class User : public Value { // GlobalValue 是全局值/全局变量体系的空壳占位类。 // 当前只补齐类层次,具体初始化器、打印和链接语义后续再补。 +// ir/IR.h - GlobalValue 类定义需要添加这些方法 + class GlobalValue : public User { - public: +private: + std::vector initializer_; + bool is_constant_ = false; + bool is_extern_ = false; + +public: GlobalValue(std::shared_ptr ty, std::string name); + + // 初始化器相关 + void SetInitializer(ConstantValue* init); + void SetInitializer(const std::vector& init); + const std::vector& GetInitializer() const { return initializer_; } + bool HasInitializer() const { return !initializer_.empty(); } + + // 常量属性 + void SetConstant(bool is_const) { is_constant_ = is_const; } + bool IsConstant() const { return is_constant_; } + + // 外部声明 + void SetExtern(bool is_extern) { is_extern_ = is_extern; } + bool IsExtern() const { return is_extern_; } + + // 类型判断 + bool IsArray() const { return GetType()->IsArray(); } + bool IsScalar() const { return GetType()->IsInt32() || GetType()->IsFloat(); } + + // 数组常量相关方法 + bool IsArrayConstant() const; + ConstantValue* GetArrayElement(size_t index) const; + size_t GetArraySize() const; + + // 获取数组大小(如果是数组类型) + int GetArraySizeInElements() const { + if (auto* array_ty = dynamic_cast(GetType().get())) { + return array_ty->GetElementCount(); + } + return 0; + } + +private: + // 辅助方法 + std::shared_ptr GetValueType() const; + bool CheckTypeCompatibility(std::shared_ptr value_type, + ConstantValue* init) const; }; class Instruction : public User { @@ -223,6 +458,284 @@ class StoreInst : public Instruction { Value* GetPtr() const; }; +// 在 IR.h 中修改 BranchInst 类定义 + +class BranchInst : public Instruction { + public: + // 无条件跳转构造函数 + BranchInst(std::shared_ptr void_ty, BasicBlock* target) + : Instruction(Opcode::Br, void_ty, ""), + is_conditional_(false), + cond_(nullptr), + target_(target), + true_target_(nullptr), + false_target_(nullptr) {} + + // 条件跳转构造函数 + BranchInst(std::shared_ptr void_ty, Value* cond, + BasicBlock* true_target, BasicBlock* false_target) + : Instruction(Opcode::CondBr, void_ty, ""), + is_conditional_(true), + cond_(cond), + target_(nullptr), + true_target_(true_target), + false_target_(false_target) { + // 添加操作数以便维护 def-use 关系 + AddOperand(cond); + // 注意:BasicBlock 也是 Value,也需要添加到操作数中 + // 但 BasicBlock 继承自 Value,所以可以添加 + AddOperand(true_target); + AddOperand(false_target); + } + + // 判断是否为条件跳转 + bool IsConditional() const { return is_conditional_; } + + // 获取无条件跳转的目标(仅适用于无条件跳转) + BasicBlock* GetTarget() const { + if (is_conditional_) { + throw std::runtime_error("GetTarget called on conditional branch"); + } + return target_; + } + + // 获取条件值(仅适用于条件跳转) + Value* GetCondition() const { + if (!is_conditional_) { + throw std::runtime_error("GetCondition called on unconditional branch"); + } + return cond_; + } + + // 获取真分支目标(仅适用于条件跳转) + BasicBlock* GetTrueTarget() const { + if (!is_conditional_) { + throw std::runtime_error("GetTrueTarget called on unconditional branch"); + } + return true_target_; + } + + // 获取假分支目标(仅适用于条件跳转) + BasicBlock* GetFalseTarget() const { + if (!is_conditional_) { + throw std::runtime_error("GetFalseTarget called on unconditional branch"); + } + return false_target_; + } + + // 设置无条件跳转目标 + void SetTarget(BasicBlock* target) { + if (is_conditional_) { + throw std::runtime_error("SetTarget called on conditional branch"); + } + target_ = target; + } + + // 设置条件跳转的分支目标 + void SetTrueTarget(BasicBlock* target) { + if (!is_conditional_) { + throw std::runtime_error("SetTrueTarget called on unconditional branch"); + } + true_target_ = target; + // 更新操作数 + SetOperand(1, target); + } + + void SetFalseTarget(BasicBlock* target) { + if (!is_conditional_) { + throw std::runtime_error("SetFalseTarget called on unconditional branch"); + } + false_target_ = target; + // 更新操作数 + SetOperand(2, target); + } + + void SetCondition(Value* cond) { + if (!is_conditional_) { + throw std::runtime_error("SetCondition called on unconditional branch"); + } + cond_ = cond; + // 更新操作数 + SetOperand(0, cond); + } + + private: + bool is_conditional_; + Value* cond_; // 条件值(条件跳转使用) + BasicBlock* target_; // 无条件跳转目标 + BasicBlock* true_target_; // 真分支目标(条件跳转使用) + BasicBlock* false_target_; // 假分支目标(条件跳转使用) +}; + +// 创建整数比较指令 + class IcmpInst : public Instruction { + public: + enum class Predicate { + EQ, // equal + NE, // not equal + LT, // less than + LE, // less than or equal + GT, // greater than + GE // greater than or equal + }; + + IcmpInst(Predicate pred, Value* lhs, Value* rhs, std::shared_ptr i1_ty, std::string name) + : Instruction(Opcode::Icmp, i1_ty, name), pred_(pred) { + AddOperand(lhs); + AddOperand(rhs); + } + + Predicate GetPredicate() const { return pred_; } + Value* GetLhs() const { return GetOperand(0); } + Value* GetRhs() const { return GetOperand(1); } + + private: + Predicate pred_; + }; + +class FcmpInst : public Instruction { + public: + enum class Predicate { + FALSE, // Always false + OEQ, // Ordered and equal + OGT, // Ordered and greater than + OGE, // Ordered and greater than or equal + OLT, // Ordered and less than + OLE, // Ordered and less than or equal + ONE, // Ordered and not equal + ORD, // Ordered (no nans) + UNO, // Unordered (isnan(x) || isnan(y)) + UEQ, // Unordered or equal + UGT, // Unordered or greater than + UGE, // Unordered or greater than or equal + ULT, // Unordered or less than + ULE, // Unordered or less than or equal + UNE, // Unordered or not equal + TRUE // Always true + }; + + FcmpInst(Predicate pred, Value* lhs, Value* rhs, + std::shared_ptr i1_ty, std::string name) + : Instruction(Opcode::FCmp, i1_ty, name), pred_(pred) { + AddOperand(lhs); + AddOperand(rhs); + } + + Predicate GetPredicate() const { return pred_; } + Value* GetLhs() const { return GetOperand(0); } + Value* GetRhs() const { return GetOperand(1); } + + private: + Predicate pred_; +}; + + // ZExtInst - 零扩展指令 +class ZExtInst : public Instruction { + public: + ZExtInst(Value* value, std::shared_ptr target_ty, std::string name = "") + : Instruction(Opcode::ZExt, target_ty, name) { + AddOperand(value); + } + + // 获取被扩展的值 + Value* GetValue() const { + return GetOperand(0); + } + + // 获取源类型 + std::shared_ptr GetSourceType() const { + return GetValue()->GetType(); + } + + // 获取目标类型 + std::shared_ptr GetTargetType() const { + return GetType(); + } + + // 设置被扩展的值 + void SetValue(Value* value) { + SetOperand(0, value); + } +}; + +// TruncInst - 截断指令 +class TruncInst : public Instruction { + public: + TruncInst(Value* value, std::shared_ptr target_ty, std::string name = "") + : Instruction(Opcode::Trunc, target_ty, name) { + AddOperand(value); + } + + // 获取被截断的值 + Value* GetValue() const { + return GetOperand(0); + } + + // 获取源类型 + std::shared_ptr GetSourceType() const { + return GetValue()->GetType(); + } + + // 获取目标类型 + std::shared_ptr GetTargetType() const { + return GetType(); + } + + // 设置被截断的值 + void SetValue(Value* value) { + SetOperand(0, value); + } +}; + +class GEPInst : public Instruction { + public: + GEPInst(std::shared_ptr ptr_ty, + Value* base, + const std::vector& indices, + const std::string& name); + Value* GetBase() const; + const std::vector& GetIndices() const; +}; + +// Function 当前也采用了最小实现。 +// 需要特别注意:由于项目里还没有单独的 FunctionType, +// Function 继承自 Value 后,其 type_ 目前只保存“返回类型”, +// 并不能完整表达“返回类型 + 形参列表”这一整套函数签名。 +// 这对当前只支持 int main() 的最小 IR 足够,但后续若补普通函数、 +// 形参和调用,通常需要引入专门的函数类型表示。 +class Function : public Value { + public: + // 当前构造函数接收完整的 FunctionType。 + Function(std::string name, std::shared_ptr func_type); + BasicBlock* CreateBlock(const std::string& name); + BasicBlock* GetEntry(); + const BasicBlock* GetEntry() const; + const std::vector>& GetBlocks() const; + // 函数增加参数的接口,目前仅保存参数类型和名字,后续可扩展更多属性(例如是否为数组参数、数组维度等)。注意这里是直接在 Function 上管理参数列表,而不是通过一个单独的 FunctionType 来表达完整函数签名,这也是当前最小实现的一个简化点。 + Argument* AddArgument(std::unique_ptr arg); + const std::vector>& GetArguments() const; + + private: + BasicBlock* entry_ = nullptr; + std::vector> blocks_; + std::vector> arguments_; +}; + + +class CallInst : public Instruction { + public: + CallInst(std::shared_ptr ret_ty, + Function* callee, + const std::vector& args, + const std::string& name); + Function* GetCallee() const; + const std::vector& GetArgs() const; + + private: + Function* callee_; + std::vector args_; +}; + // BasicBlock 已纳入 Value 体系,便于后续向更完整 IR 类图靠拢。 // 当前其类型仍使用 void 作为占位,后续可替换为专门的 label type。 class BasicBlock : public Value { @@ -247,6 +760,20 @@ class BasicBlock : public Value { return ptr; } + template + T* InsertBeforeTerminator(Args&&... args) { + auto inst = std::make_unique(std::forward(args)...); + auto* ptr = inst.get(); + ptr->SetParent(this); + + auto pos = instructions_.end(); + if (HasTerminator()) { + pos = instructions_.end() - 1; + } + instructions_.insert(pos, std::move(inst)); + return ptr; + } + private: Function* parent_ = nullptr; std::vector> instructions_; @@ -254,39 +781,51 @@ class BasicBlock : public Value { std::vector successors_; }; -// Function 当前也采用了最小实现。 -// 需要特别注意:由于项目里还没有单独的 FunctionType, -// Function 继承自 Value 后,其 type_ 目前只保存“返回类型”, -// 并不能完整表达“返回类型 + 形参列表”这一整套函数签名。 -// 这对当前只支持 int main() 的最小 IR 足够,但后续若补普通函数、 -// 形参和调用,通常需要引入专门的函数类型表示。 -class Function : public Value { - public: - // 当前构造函数接收的也是返回类型,而不是完整函数类型。 - Function(std::string name, std::shared_ptr ret_type); - BasicBlock* CreateBlock(const std::string& name); - BasicBlock* GetEntry(); - const BasicBlock* GetEntry() const; - const std::vector>& GetBlocks() const; - - private: - BasicBlock* entry_ = nullptr; - std::vector> blocks_; -}; class Module { public: Module() = default; Context& GetContext(); const Context& GetContext() const; - // 创建函数时当前只显式传入返回类型,尚未接入完整的 FunctionType。 + // 创建函数时传入完整的 FunctionType。 Function* CreateFunction(const std::string& name, - std::shared_ptr ret_type); + std::shared_ptr func_type); + GlobalValue* CreateGlobal(const std::string& name, + std::shared_ptr ty); + Function* FindFunction(const std::string& name) const; const std::vector>& GetFunctions() const; + const std::vector>& GetGlobals() const; private: Context context_; std::vector> functions_; + std::vector> globals_; +}; + +// SIToFP - 整数转浮点 +class SIToFPInst : public Instruction { + public: + SIToFPInst(Value* value, std::shared_ptr target_ty, std::string name = "") + : Instruction(Opcode::SIToFP, target_ty, name) { + AddOperand(value); + } + + Value* GetValue() const { + return GetOperand(0); + } +}; + +// FPToSI - 浮点转整数 +class FPToSIInst : public Instruction { + public: + FPToSIInst(Value* value, std::shared_ptr target_ty, std::string name = "") + : Instruction(Opcode::FPToSI, target_ty, name) { + AddOperand(value); + } + + Value* GetValue() const { + return GetOperand(0); + } }; class IRBuilder { @@ -297,14 +836,81 @@ class IRBuilder { // 构造常量、二元运算、返回指令的最小集合。 ConstantInt* CreateConstInt(int v); + ConstantFloat* CreateConstFloat(float v); // 新增 + ConstantArray* CreateConstArray(std::shared_ptr ty, + std::vector elements); // 新增 + ConstantZero* CreateZeroConstant(std::shared_ptr ty); // 新增 + BinaryInst* CreateBinary(Opcode op, Value* lhs, Value* rhs, const std::string& name); BinaryInst* CreateAdd(Value* lhs, Value* rhs, const std::string& name); + AllocaInst* CreateAlloca(std::shared_ptr ty, const std::string& name); AllocaInst* CreateAllocaI32(const std::string& name); + AllocaInst* CreateAllocaFloat(const std::string& name); LoadInst* CreateLoad(Value* ptr, const std::string& name); StoreInst* CreateStore(Value* val, Value* ptr); ReturnInst* CreateRet(Value* v); - + CallInst* CreateCall(Function* callee, const std::vector& args, + const std::string& name); + + // 创建无条件跳转 + BranchInst* CreateBr(BasicBlock* target); + + // 创建条件跳转 + BranchInst* CreateCondBr(Value* cond, BasicBlock* true_target, + BasicBlock* false_target); + + // 创建整数比较指令 + IcmpInst* CreateICmpEQ(Value* lhs, Value* rhs, const std::string& name); + IcmpInst* CreateICmpNE(Value* lhs, Value* rhs, const std::string& name); + IcmpInst* CreateICmpLT(Value* lhs, Value* rhs, const std::string& name); + IcmpInst* CreateICmpLE(Value* lhs, Value* rhs, const std::string& name); + IcmpInst* CreateICmpGT(Value* lhs, Value* rhs, const std::string& name); + IcmpInst* CreateICmpGE(Value* lhs, Value* rhs, const std::string& name); + + // 创建类型转换指令 + ZExtInst* CreateZExt(Value* value, std::shared_ptr target_ty, + const std::string& name = ""); + TruncInst* CreateTrunc(Value* value, std::shared_ptr target_ty, + const std::string& name = ""); + + // 便捷方法 + ZExtInst* CreateZExtI1ToI32(Value* value, const std::string& name = "zext"); + TruncInst* CreateTruncI32ToI1(Value* value, const std::string& name = "trunc"); + + + + BinaryInst* CreateDiv(Value* lhs, Value* rhs, const std::string& name); + BinaryInst* CreateMod(Value* lhs, Value* rhs, const std::string& name); + BinaryInst* CreateMul(Value* lhs, Value* rhs, const std::string& name); + BinaryInst* CreateSub(Value* lhs, Value* rhs, const std::string& name); + + // 比较运算接口 + BinaryInst* CreateAnd(Value* lhs, Value* rhs, const std::string& name); + BinaryInst* CreateOr(Value* lhs, Value* rhs, const std::string& name); + IcmpInst* CreateNot(Value* val, const std::string& name); + + GEPInst* CreateGEP(Value* base, const std::vector& indices, const std::string& name); + + // 浮点运算 + BinaryInst* CreateFAdd(Value* lhs, Value* rhs, const std::string& name); + BinaryInst* CreateFSub(Value* lhs, Value* rhs, const std::string& name); + BinaryInst* CreateFMul(Value* lhs, Value* rhs, const std::string& name); + BinaryInst* CreateFDiv(Value* lhs, Value* rhs, const std::string& name); + + // 浮点比较 + FcmpInst* CreateFCmpOEQ(Value* lhs, Value* rhs, const std::string& name); + FcmpInst* CreateFCmpONE(Value* lhs, Value* rhs, const std::string& name); + FcmpInst* CreateFCmpOLT(Value* lhs, Value* rhs, const std::string& name); + FcmpInst* CreateFCmpOLE(Value* lhs, Value* rhs, const std::string& name); + FcmpInst* CreateFCmpOGT(Value* lhs, Value* rhs, const std::string& name); + FcmpInst* CreateFCmpOGE(Value* lhs, Value* rhs, const std::string& name); + + // 类型转换 + SIToFPInst* CreateSIToFP(Value* value, std::shared_ptr target_ty, + const std::string& name = ""); + FPToSIInst* CreateFPToSI(Value* value, std::shared_ptr target_ty, + const std::string& name = ""); private: Context& ctx_; BasicBlock* insert_block_; @@ -313,6 +919,9 @@ class IRBuilder { class IRPrinter { public: void Print(const Module& module, std::ostream& os); + + private: + void PrintConstant(const ConstantValue* constant, std::ostream& os); }; } // namespace ir diff --git a/include/irgen/IRGen.h b/include/irgen/IRGen.h index 231ba90..5f57b4d 100644 --- a/include/irgen/IRGen.h +++ b/include/irgen/IRGen.h @@ -7,6 +7,7 @@ #include #include #include +#include #include "SysYBaseVisitor.h" #include "SysYParser.h" @@ -21,38 +22,151 @@ class Value; } class IRGenImpl final : public SysYBaseVisitor { - public: - IRGenImpl(ir::Module& module, const SemanticContext& sema); +public: + // 修改构造函数,添加 SymbolTable 参数 + IRGenImpl(ir::Module& module, + const SemanticContext& sema, + const SymbolTable& sym_table); // 新增 + // 顶层 std::any visitCompUnit(SysYParser::CompUnitContext* ctx) override; std::any visitFuncDef(SysYParser::FuncDefContext* ctx) override; - std::any visitBlockStmt(SysYParser::BlockStmtContext* ctx) override; + + // 块 + std::any visitBlock(SysYParser::BlockContext* ctx) override; // 注意:规则名为 Block std::any visitBlockItem(SysYParser::BlockItemContext* ctx) override; + + // 声明 std::any visitDecl(SysYParser::DeclContext* ctx) override; - std::any visitStmt(SysYParser::StmtContext* ctx) override; std::any visitVarDef(SysYParser::VarDefContext* ctx) override; - std::any visitReturnStmt(SysYParser::ReturnStmtContext* ctx) override; - std::any visitParenExp(SysYParser::ParenExpContext* ctx) override; - std::any visitNumberExp(SysYParser::NumberExpContext* ctx) override; - std::any visitVarExp(SysYParser::VarExpContext* ctx) override; - std::any visitAdditiveExp(SysYParser::AdditiveExpContext* ctx) override; - - private: - enum class BlockFlow { + std::any visitConstDecl(SysYParser::ConstDeclContext* ctx) override; + std::any visitConstDef(SysYParser::ConstDefContext* ctx) override; + std::any visitInitVal(SysYParser::InitValContext* ctx) override; + std::any visitConstInitVal(SysYParser::ConstInitValContext* ctx) override; + + // 语句 + std::any visitStmt(SysYParser::StmtContext* ctx) override; + + // 表达式 + // 基本表达式(变量、常量、括号表达式)直接翻译为 IR 中的值;函数调用和一元运算需要特殊处理。 + std::any visitExp(SysYParser::ExpContext* ctx) override; + std::any visitCond(SysYParser::CondContext* ctx) override; + std::any visitLVal(SysYParser::LValContext* ctx) override; + std::any visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) override; + + + std::any visitUnaryExp(SysYParser::UnaryExpContext* ctx) override; + std::any visitFuncRParams(SysYParser::FuncRParamsContext* ctx) override; + std::any visitMulExp(SysYParser::MulExpContext* ctx) override; + // 加法表达式、乘法表达式、关系表达式、相等表达式、条件表达式分别对应不同的访问函数,按照优先级分层访问,最终调用 visitLVal 来处理变量访问 + std::any visitAddExp(SysYParser::AddExpContext* ctx) override; + std::any visitRelExp(SysYParser::RelExpContext* ctx) override; + std::any visitEqExp(SysYParser::EqExpContext* ctx) override; + std::any visitLAndExp(SysYParser::LAndExpContext* ctx) override; + std::any visitLOrExp(SysYParser::LOrExpContext* ctx) override; + std::any visitConstExp(SysYParser::ConstExpContext* ctx) override; + + // 辅助函数 + ir::Value* EvalExpr(SysYParser::ExpContext& expr); // 只保留一处 + ir::Value* EvalCond(SysYParser::CondContext& cond); + std::any visitCallExp(SysYParser::UnaryExpContext* ctx); + std::vector ProcessNestedInitVals(SysYParser::InitValContext* ctx); + // 带维度感知的展平:按 C 语言花括号对齐规则填充 total_size 个槽位 + // dims[0] 是最外层维度,dims.back() 是最内层维度(元素层) + // 返回已展平并补零的 total_size 大小的向量 + std::vector FlattenInitVal(SysYParser::InitValContext* ctx, + const std::vector& dims, + bool is_float); + int TryEvaluateConstInt(SysYParser::ConstExpContext* ctx); + void AddRuntimeFunctions(); + ir::Function* CreateRuntimeFunctionDecl(const std::string& funcName); + ir::BasicBlock* EnsureCleanupBlock(); + void RegisterCleanup(ir::Function* free_func, ir::Value* ptr); + ir::AllocaInst* CreateEntryAlloca(std::shared_ptr ty, + const std::string& name); + ir::AllocaInst* CreateEntryAllocaI32(const std::string& name); + ir::AllocaInst* CreateEntryAllocaFloat(const std::string& name); +private: + // 辅助函数声明 + enum class BlockFlow{ Continue, Terminated, }; BlockFlow VisitBlockItemResult(SysYParser::BlockItemContext& item); - ir::Value* EvalExpr(SysYParser::ExpContext& expr); + + BlockFlow HandleReturnStmt(SysYParser::StmtContext* ctx); + BlockFlow HandleIfStmt(SysYParser::StmtContext* ctx); + BlockFlow HandleWhileStmt(SysYParser::StmtContext* ctx); + BlockFlow HandleBreakStmt(SysYParser::StmtContext* ctx); + BlockFlow HandleContinueStmt(SysYParser::StmtContext* ctx); + BlockFlow HandleAssignStmt(SysYParser::StmtContext* ctx); + + // 完全正确的左值判断函数 + bool IsLValueExpression(SysYParser::ExpContext* ctx); + bool IsLValueInAddExp(SysYParser::AddExpContext* ctx); + bool IsLValueInMulExp(SysYParser::MulExpContext* ctx); + bool IsLValueInUnaryExp(SysYParser::UnaryExpContext* ctx); + bool IsLValueInPrimaryExp(SysYParser::PrimaryExpContext* ctx); + // 循环上下文结构 + struct LoopContext { + ir::BasicBlock* condBlock; + ir::BasicBlock* bodyBlock; + ir::BasicBlock* exitBlock; + }; + + struct ArrayInfo { + std::vector elements; + std::vector dimensions; + }; + + std::vector loopStack_; ir::Module& module_; const SemanticContext& sema_; + const SymbolTable& symbol_table_; // 新增成员 ir::Function* func_; ir::IRBuilder builder_; - // 名称绑定由 Sema 负责;IRGen 只维护“声明 -> 存储槽位”的代码生成状态。 + ir::Value* EvalAssign(SysYParser::StmtContext* ctx); + + // 按 VarDefContext 查找存储位置(用于数组访问等场景) std::unordered_map storage_map_; + + // 按变量名快速查找(用于 LVal 等场景) + std::unordered_map local_var_map_; // 局部变量 + std::unordered_map global_map_; // 全局变量 + std::unordered_map param_map_; // 函数参数 + std::unordered_set pointer_param_names_; // 指针/数组形参名 + std::unordered_set heap_local_array_names_; // 堆分配的局部数组名 + + // 常量映射:常量名 -> 常量值(标量常量) + std::unordered_map const_value_map_; + + // 全局常量映射:常量名 -> 全局变量(数组常量) + std::unordered_map const_global_map_; + + // 原有的常量存储映射(用于兼容) + std::unordered_map const_storage_map_; + + std::unordered_map array_info_map_; + + std::string current_function_name_; + bool current_function_is_recursive_ = false; + ir::AllocaInst* function_return_slot_ = nullptr; + ir::BasicBlock* function_cleanup_block_ = nullptr; + std::vector> function_cleanup_actions_; + + // 新增:处理全局和局部变量的辅助函数 + // 修改处理函数的签名,使用 Symbol* 参数 + std::any HandleGlobalVariable(SysYParser::VarDefContext* ctx, + const std::string& varName, + const Symbol* sym); + + std::any HandleLocalVariable(SysYParser::VarDefContext* ctx, + const std::string& varName, + const Symbol* sym); }; +// 修改 GenerateIR 函数签名 std::unique_ptr GenerateIR(SysYParser::CompUnitContext& tree, - const SemanticContext& sema); + const SemaResult& sema_result); \ No newline at end of file diff --git a/include/sem/Sema.h b/include/sem/Sema.h index 9ac057b..c053428 100644 --- a/include/sem/Sema.h +++ b/include/sem/Sema.h @@ -2,29 +2,101 @@ #pragma once #include +#include +#include #include "SysYParser.h" +#include "ir/IR.h" +#include "sem/SymbolTable.h" +// 表达式信息结构 +struct ExprInfo { + std::shared_ptr type = nullptr; + bool is_lvalue = false; + bool is_const = false; + bool is_const_int = false; // 是否是整型常量 + int const_int_value = 0; + float const_float_value = 0.0f; + antlr4::ParserRuleContext* node = nullptr; // 对应的语法树节点 +}; +// 语义分析上下文:存储分析过程中产生的信息 class SemanticContext { - public: - void BindVarUse(SysYParser::VarContext* use, - SysYParser::VarDefContext* decl) { - var_uses_[use] = decl; - } - - SysYParser::VarDefContext* ResolveVarUse( - const SysYParser::VarContext* use) const { - auto it = var_uses_.find(use); - return it == var_uses_.end() ? nullptr : it->second; - } - - private: - std::unordered_map - var_uses_; +public: + // ----- 变量使用绑定(使用 LValContext 而不是 VarContext)----- + void BindVarUse(SysYParser::LValContext* use, + SysYParser::VarDefContext* decl) { + var_uses_[use] = decl; + } + + SysYParser::VarDefContext* ResolveVarUse( + const SysYParser::LValContext* use) const { + auto it = var_uses_.find(use); + return it == var_uses_.end() ? nullptr : it->second; + } + + void BindConstUse(SysYParser::LValContext* use, SysYParser::ConstDefContext* decl) { + const_uses_[use] = decl; + } + SysYParser::ConstDefContext* ResolveConstUse(const SysYParser::LValContext* use) const { + auto it = const_uses_.find(use); + return it == const_uses_.end() ? nullptr : it->second; + } + + // ----- 表达式类型信息存储 ----- + void SetExprType(antlr4::ParserRuleContext* node, const ExprInfo& info) { + ExprInfo copy = info; + copy.node = node; + expr_types_[node] = copy; + } + + ExprInfo* GetExprType(antlr4::ParserRuleContext* node) { + auto it = expr_types_.find(node); + return it == expr_types_.end() ? nullptr : &it->second; + } + + const ExprInfo* GetExprType(antlr4::ParserRuleContext* node) const { + auto it = expr_types_.find(node); + return it == expr_types_.end() ? nullptr : &it->second; + } + + // ----- 隐式转换标记(供 IR 生成使用)----- + struct ConversionInfo { + antlr4::ParserRuleContext* node; + std::shared_ptr from_type; + std::shared_ptr to_type; + }; + + void AddConversion(antlr4::ParserRuleContext* node, + std::shared_ptr from, + std::shared_ptr to) { + conversions_.push_back({node, from, to}); + } + + const std::vector& GetConversions() const { return conversions_; } + +private: + // 变量使用映射 - 使用 LValContext 作为键 + std::unordered_map var_uses_; + + // 表达式类型映射 + std::unordered_map expr_types_; + + // 隐式转换列表 + std::vector conversions_; + + std::unordered_map const_uses_; }; // 目前仅检查: // - 变量先声明后使用 // - 局部变量不允许重复定义 -SemanticContext RunSema(SysYParser::CompUnitContext& comp_unit); +// SemanticContext RunSema(SysYParser::CompUnitContext& comp_unit); +// 新增:语义分析结果结构体 +struct SemaResult { + SemanticContext context; + SymbolTable symbol_table; +}; + +// 修改 RunSema 的返回类型 +SemaResult RunSema(SysYParser::CompUnitContext& comp_unit); \ No newline at end of file diff --git a/include/sem/SymbolTable.h b/include/sem/SymbolTable.h index c9396dd..ed986f1 100644 --- a/include/sem/SymbolTable.h +++ b/include/sem/SymbolTable.h @@ -1,17 +1,187 @@ // 极简符号表:记录局部变量定义点。 #pragma once +#include #include #include +#include +#include #include "SysYParser.h" +#include "ir/IR.h" +// 符号种类 +enum class SymbolKind { + Variable, + Function, + Parameter, + Constant +}; + +// 符号条目 +// 符号条目 +struct Symbol { + // 基本信息 + std::string name; + SymbolKind kind; + std::shared_ptr type; + int scope_level = 0; + int stack_offset = -1; + bool is_initialized = false; + bool is_builtin = false; + + // 数组参数相关 + std::vector array_dims; + bool is_array_param = false; + + // 函数相关 + std::vector> param_types; + + // 常量值存储 + union ConstantValue { + int i32; + float f32; + }; + + // 标量常量 + bool is_int_const = true; + ConstantValue const_value; + + // 数组常量(扁平化存储) + bool is_array_const = false; + std::vector array_const_values; + + // 语法树节点 + SysYParser::VarDefContext* var_def_ctx = nullptr; + SysYParser::ConstDefContext* const_def_ctx = nullptr; + SysYParser::FuncFParamContext* param_def_ctx = nullptr; + SysYParser::FuncDefContext* func_def_ctx = nullptr; + + // 辅助方法 + bool IsScalarConstant() const { + return kind == SymbolKind::Constant && !type->IsArray(); + } + + bool IsArrayConstant() const { + return kind == SymbolKind::Constant && type->IsArray(); + } + + int GetIntConstant() const { + if (!IsScalarConstant()) { + throw std::runtime_error("不是标量常量"); + } + if (!is_int_const) { + throw std::runtime_error("不是整型常量"); + } + return const_value.i32; + } + + float GetFloatConstant() const { + if (!IsScalarConstant()) { + throw std::runtime_error("不是标量常量"); + } + if (is_int_const) { + return static_cast(const_value.i32); + } + return const_value.f32; + } + + ConstantValue GetArrayElement(size_t index) const { + if (!IsArrayConstant()) { + throw std::runtime_error("不是数组常量"); + } + if (index >= array_const_values.size()) { + throw std::runtime_error("数组下标越界"); + } + return array_const_values[index]; + } + + size_t GetArraySize() const { + if (!IsArrayConstant()) return 0; + return array_const_values.size(); + } +}; class SymbolTable { - public: - void Add(const std::string& name, SysYParser::VarDefContext* decl); - bool Contains(const std::string& name) const; - SysYParser::VarDefContext* Lookup(const std::string& name) const; + public: + SymbolTable(); + ~SymbolTable() = default; + // 添加调试方法 + size_t getScopeCount() const { return active_scope_stack_.size(); } + + void dump() const { + std::cerr << "=== SymbolTable Dump ===" << std::endl; + for (size_t i = 0; i < scopes_.size(); ++i) { + std::cerr << "Scope " << i << " (depth=" << i << ")"; + bool active = std::find(active_scope_stack_.begin(), active_scope_stack_.end(), i) != active_scope_stack_.end(); + std::cerr << (active ? " [active]" : " [inactive]") << std::endl; + for (const auto& [name, sym] : scopes_[i]) { + std::cerr << " " << name + << " (kind=" << (int)sym.kind + << ", level=" << sym.scope_level << ")" << std::endl; + } + } + } + // ----- 作用域管理 ----- + void enterScope(); // 进入新作用域 + void exitScope(); // 退出当前作用域 + int currentScopeLevel() const { return static_cast(active_scope_stack_.size()) - 1; } + + // ----- 符号操作(推荐使用)----- + bool addSymbol(const Symbol& sym); // 添加符号到当前作用域 + Symbol* lookup(const std::string& name); // 从当前作用域向外查找 + Symbol* lookupCurrent(const std::string& name); // 仅在当前作用域查找 + const Symbol* lookup(const std::string& name) const; + const Symbol* lookupCurrent(const std::string& name) const; + const Symbol* lookupAll(const std::string& name) const; // 所有作用域查找,包括已结束的作用域 + const Symbol* lookupByVarDef(const SysYParser::VarDefContext* decl) const; // 通过定义节点查找符号 + const Symbol* lookupByConstDef(const SysYParser::ConstDefContext* decl) const; // 通过常量定义节点查找符号 + + // ----- 与原接口兼容(保留原有功能)----- + void Add(const std::string& name, SysYParser::VarDefContext* decl); + bool Contains(const std::string& name) const; + SysYParser::VarDefContext* Lookup(const std::string& name) const; + + // ----- 辅助函数:从语法树节点构造 Type ----- + static std::shared_ptr getTypeFromFuncDef(SysYParser::FuncDefContext* ctx); + + void registerBuiltinFunctions(); + + // 对常量表达式求值(返回整数值,用于数组维度等) + int EvaluateConstExp(SysYParser::ConstExpContext* ctx) const; + + // 对常量表达式求值(返回浮点值,用于全局初始化) + float EvaluateConstExpFloat(SysYParser::ConstExpContext* ctx) const; + + // 对常量初始化列表求值,返回一系列常量值(扁平化) + struct ConstValue { + enum Kind { INT, FLOAT }; + Kind kind; + union { + int int_val; + float float_val; + }; + }; + void flattenInit(SysYParser::ConstInitValContext* ctx, + std::vector& out, + std::shared_ptr base_type) const; + std::vector EvaluateConstInitVal( + SysYParser::ConstInitValContext* ctx, + const std::vector& dims, + std::shared_ptr base_type) const; + + int EvaluateConstExpression(SysYParser::ExpContext* ctx) const; + + private: + // 作用域栈:每个元素是一个从名字到符号的映射 + std::vector> scopes_; + std::vector active_scope_stack_; + + static constexpr int GLOBAL_SCOPE = 0; // 全局作用域索引 + + ConstValue EvaluateAddExp(SysYParser::AddExpContext* ctx) const; + ConstValue EvaluateMulExp(SysYParser::MulExpContext* ctx) const; + ConstValue EvaluateUnaryExp(SysYParser::UnaryExpContext* ctx) const; + ConstValue EvaluatePrimaryExp(SysYParser::PrimaryExpContext* ctx) const; - private: - std::unordered_map table_; + std::shared_ptr getTypeFromVarDef(SysYParser::VarDefContext* ctx) const; }; diff --git a/optimized.bc b/optimized.bc new file mode 100644 index 0000000..479f919 Binary files /dev/null and b/optimized.bc differ diff --git a/optimized.ll b/optimized.ll new file mode 100644 index 0000000..7f41f77 --- /dev/null +++ b/optimized.ll @@ -0,0 +1,492 @@ +; ModuleID = 'optimized.bc' +source_filename = "./build/test_compiler/performance/03_sort1.ll" + +@a = global [30000010 x i32] zeroinitializer +@ans = local_unnamed_addr global i32 0 + +declare i32 @getarray(ptr) local_unnamed_addr + +declare void @putint(i32) local_unnamed_addr + +declare void @putch(i32) local_unnamed_addr + +declare void @starttime() local_unnamed_addr + +declare void @stoptime() local_unnamed_addr + +declare ptr @sysy_alloc_i32(i32) local_unnamed_addr + +declare void @sysy_free_i32(ptr) local_unnamed_addr + +declare void @sysy_zero_i32(ptr, i32) local_unnamed_addr + +; Function Attrs: nofree norecurse nosync nounwind memory(argmem: read) +define i32 @getMaxNum(i32 %n, ptr nocapture readonly %arr) local_unnamed_addr #0 { +entry: + %t95 = icmp sgt i32 %n, 0 + br i1 %t95, label %while.body.t5, label %while.exit.t6 + +while.body.t5: ; preds = %entry, %while.body.t5 + %t3_i.07 = phi i32 [ %t21, %while.body.t5 ], [ 0, %entry ] + %t2_ret.06 = phi i32 [ %spec.select, %while.body.t5 ], [ 0, %entry ] + %0 = zext nneg i32 %t3_i.07 to i64 + %t13 = getelementptr i32, ptr %arr, i64 %0 + %t14 = load i32, ptr %t13, align 4 + %spec.select = tail call i32 @llvm.smax.i32(i32 %t14, i32 %t2_ret.06) + %t21 = add nuw nsw i32 %t3_i.07, 1 + %t9 = icmp slt i32 %t21, %n + br i1 %t9, label %while.body.t5, label %while.exit.t6 + +while.exit.t6: ; preds = %while.body.t5, %entry + %t2_ret.0.lcssa = phi i32 [ 0, %entry ], [ %spec.select, %while.body.t5 ] + ret i32 %t2_ret.0.lcssa +} + +; Function Attrs: nofree norecurse nosync nounwind memory(none) +define i32 @getNumPos(i32 %num, i32 %pos) local_unnamed_addr #1 { +entry: + %t333 = icmp sgt i32 %pos, 0 + br i1 %t333, label %while.body.t29, label %while.exit.t30 + +while.body.t29: ; preds = %entry, %while.body.t29 + %t27_i.05 = phi i32 [ %t37, %while.body.t29 ], [ 0, %entry ] + %t24.04 = phi i32 [ %t35, %while.body.t29 ], [ %num, %entry ] + %t35 = sdiv i32 %t24.04, 16 + %t37 = add nuw nsw i32 %t27_i.05, 1 + %t33 = icmp slt i32 %t37, %pos + br i1 %t33, label %while.body.t29, label %while.exit.t30 + +while.exit.t30: ; preds = %while.body.t29, %entry + %t24.0.lcssa = phi i32 [ %num, %entry ], [ %t35, %while.body.t29 ] + %t39 = srem i32 %t24.0.lcssa, 16 + ret i32 %t39 +} + +define void @radixSort(i32 %bitround, ptr nocapture %a, i32 %l, i32 %r) local_unnamed_addr { +entry: + %t43 = tail call ptr @sysy_alloc_i32(i32 16) + tail call void @sysy_zero_i32(ptr %t43, i32 16) + %t46 = tail call ptr @sysy_alloc_i32(i32 16) + tail call void @sysy_zero_i32(ptr %t46, i32 16) + %t48 = tail call ptr @sysy_alloc_i32(i32 16) + tail call void @sysy_zero_i32(ptr %t48, i32 16) + %t54 = icmp eq i32 %bitround, -1 + %t56 = add i32 %l, 1 + %t58 = icmp sge i32 %t56, %r + %t59 = or i1 %t54, %t58 + br i1 %t59, label %cleanup.t44, label %while.cond.t62.preheader + +while.cond.t62.preheader: ; preds = %entry + %t6796 = icmp slt i32 %l, %r + br i1 %t6796, label %while.body.t63.lr.ph, label %while.exit.t64 + +while.body.t63.lr.ph: ; preds = %while.cond.t62.preheader + %t333.i = icmp sgt i32 %bitround, 0 + br label %while.body.t63 + +cleanup.t44: ; preds = %merge.t196, %entry + tail call void @sysy_free_i32(ptr %t48) + tail call void @sysy_free_i32(ptr %t46) + tail call void @sysy_free_i32(ptr %t43) + ret void + +while.body.t63: ; preds = %while.body.t63.lr.ph, %getNumPos.exit28 + %storemerge97 = phi i32 [ %l, %while.body.t63.lr.ph ], [ %t83, %getNumPos.exit28 ] + %0 = sext i32 %storemerge97 to i64 + %t69 = getelementptr i32, ptr %a, i64 %0 + %t70 = load i32, ptr %t69, align 4 + br i1 %t333.i, label %while.body.t29.i, label %getNumPos.exit.thread + +getNumPos.exit.thread: ; preds = %while.body.t63 + %t39.i80 = srem i32 %t70, 16 + %1 = sext i32 %t39.i80 to i64 + %t7381 = getelementptr i32, ptr %t48, i64 %1 + %t7482 = load i32, ptr %t7381, align 4 + br label %getNumPos.exit28 + +while.body.t29.i: ; preds = %while.body.t63, %while.body.t29.i + %t27_i.05.i = phi i32 [ %t37.i, %while.body.t29.i ], [ 0, %while.body.t63 ] + %t24.04.i = phi i32 [ %t35.i, %while.body.t29.i ], [ %t70, %while.body.t63 ] + %t35.i = sdiv i32 %t24.04.i, 16 + %t37.i = add nuw nsw i32 %t27_i.05.i, 1 + %t33.i = icmp slt i32 %t37.i, %bitround + br i1 %t33.i, label %while.body.t29.i, label %getNumPos.exit + +getNumPos.exit: ; preds = %while.body.t29.i + %t39.i = srem i32 %t35.i, 16 + %2 = sext i32 %t39.i to i64 + %t73 = getelementptr i32, ptr %t48, i64 %2 + %t74 = load i32, ptr %t73, align 4 + br label %while.body.t29.i22 + +while.body.t29.i22: ; preds = %getNumPos.exit, %while.body.t29.i22 + %t27_i.05.i23 = phi i32 [ %t37.i26, %while.body.t29.i22 ], [ 0, %getNumPos.exit ] + %t24.04.i24 = phi i32 [ %t35.i25, %while.body.t29.i22 ], [ %t70, %getNumPos.exit ] + %t35.i25 = sdiv i32 %t24.04.i24, 16 + %t37.i26 = add nuw nsw i32 %t27_i.05.i23, 1 + %t33.i27 = icmp slt i32 %t37.i26, %bitround + br i1 %t33.i27, label %while.body.t29.i22, label %getNumPos.exit28.loopexit + +getNumPos.exit28.loopexit: ; preds = %while.body.t29.i22 + %.pre114 = srem i32 %t35.i25, 16 + %.pre115 = sext i32 %.pre114 to i64 + br label %getNumPos.exit28 + +getNumPos.exit28: ; preds = %getNumPos.exit28.loopexit, %getNumPos.exit.thread + %.pre-phi116 = phi i64 [ %.pre115, %getNumPos.exit28.loopexit ], [ %1, %getNumPos.exit.thread ] + %t7584.in = phi i32 [ %t74, %getNumPos.exit28.loopexit ], [ %t7482, %getNumPos.exit.thread ] + %t7584 = add i32 %t7584.in, 1 + %t81 = getelementptr i32, ptr %t48, i64 %.pre-phi116 + store i32 %t7584, ptr %t81, align 4 + %t83 = add nsw i32 %storemerge97, 1 + %t67 = icmp slt i32 %t83, %r + br i1 %t67, label %while.body.t63, label %while.exit.t64 + +while.exit.t64: ; preds = %getNumPos.exit28, %while.cond.t62.preheader + store i32 %l, ptr %t43, align 4 + %t88 = load i32, ptr %t48, align 4 + %t89 = add i32 %t88, %l + store i32 %t89, ptr %t46, align 4 + %invariant.gep = getelementptr i32, ptr %t46, i64 -1 + %t101 = getelementptr i32, ptr %t43, i64 1 + store i32 %t89, ptr %t101, align 4 + %t106 = getelementptr i32, ptr %t48, i64 1 + %t107 = load i32, ptr %t106, align 4 + %t108 = add i32 %t107, %t89 + %t110 = getelementptr i32, ptr %t46, i64 1 + store i32 %t108, ptr %t110, align 4 + %t101.1 = getelementptr i32, ptr %t43, i64 2 + store i32 %t108, ptr %t101.1, align 4 + %t106.1 = getelementptr i32, ptr %t48, i64 2 + %t107.1 = load i32, ptr %t106.1, align 4 + %t108.1 = add i32 %t107.1, %t108 + %t110.1 = getelementptr i32, ptr %t46, i64 2 + store i32 %t108.1, ptr %t110.1, align 4 + %t101.2 = getelementptr i32, ptr %t43, i64 3 + store i32 %t108.1, ptr %t101.2, align 4 + %t106.2 = getelementptr i32, ptr %t48, i64 3 + %t107.2 = load i32, ptr %t106.2, align 4 + %t108.2 = add i32 %t107.2, %t108.1 + %t110.2 = getelementptr i32, ptr %t46, i64 3 + store i32 %t108.2, ptr %t110.2, align 4 + %t101.3 = getelementptr i32, ptr %t43, i64 4 + store i32 %t108.2, ptr %t101.3, align 4 + %t106.3 = getelementptr i32, ptr %t48, i64 4 + %t107.3 = load i32, ptr %t106.3, align 4 + %t108.3 = add i32 %t107.3, %t108.2 + %t110.3 = getelementptr i32, ptr %t46, i64 4 + store i32 %t108.3, ptr %t110.3, align 4 + %t101.4 = getelementptr i32, ptr %t43, i64 5 + store i32 %t108.3, ptr %t101.4, align 4 + %t106.4 = getelementptr i32, ptr %t48, i64 5 + %t107.4 = load i32, ptr %t106.4, align 4 + %t108.4 = add i32 %t107.4, %t108.3 + %t110.4 = getelementptr i32, ptr %t46, i64 5 + store i32 %t108.4, ptr %t110.4, align 4 + %t101.5 = getelementptr i32, ptr %t43, i64 6 + store i32 %t108.4, ptr %t101.5, align 4 + %t106.5 = getelementptr i32, ptr %t48, i64 6 + %t107.5 = load i32, ptr %t106.5, align 4 + %t108.5 = add i32 %t107.5, %t108.4 + %t110.5 = getelementptr i32, ptr %t46, i64 6 + store i32 %t108.5, ptr %t110.5, align 4 + %t101.6 = getelementptr i32, ptr %t43, i64 7 + store i32 %t108.5, ptr %t101.6, align 4 + %t106.6 = getelementptr i32, ptr %t48, i64 7 + %t107.6 = load i32, ptr %t106.6, align 4 + %t108.6 = add i32 %t107.6, %t108.5 + %t110.6 = getelementptr i32, ptr %t46, i64 7 + store i32 %t108.6, ptr %t110.6, align 4 + %t101.7 = getelementptr i32, ptr %t43, i64 8 + store i32 %t108.6, ptr %t101.7, align 4 + %t106.7 = getelementptr i32, ptr %t48, i64 8 + %t107.7 = load i32, ptr %t106.7, align 4 + %t108.7 = add i32 %t107.7, %t108.6 + %t110.7 = getelementptr i32, ptr %t46, i64 8 + store i32 %t108.7, ptr %t110.7, align 4 + %t101.8 = getelementptr i32, ptr %t43, i64 9 + store i32 %t108.7, ptr %t101.8, align 4 + %t106.8 = getelementptr i32, ptr %t48, i64 9 + %t107.8 = load i32, ptr %t106.8, align 4 + %t108.8 = add i32 %t107.8, %t108.7 + %t110.8 = getelementptr i32, ptr %t46, i64 9 + store i32 %t108.8, ptr %t110.8, align 4 + %t101.9 = getelementptr i32, ptr %t43, i64 10 + store i32 %t108.8, ptr %t101.9, align 4 + %t106.9 = getelementptr i32, ptr %t48, i64 10 + %t107.9 = load i32, ptr %t106.9, align 4 + %t108.9 = add i32 %t107.9, %t108.8 + %t110.9 = getelementptr i32, ptr %t46, i64 10 + store i32 %t108.9, ptr %t110.9, align 4 + %t101.10 = getelementptr i32, ptr %t43, i64 11 + store i32 %t108.9, ptr %t101.10, align 4 + %t106.10 = getelementptr i32, ptr %t48, i64 11 + %t107.10 = load i32, ptr %t106.10, align 4 + %t108.10 = add i32 %t107.10, %t108.9 + %t110.10 = getelementptr i32, ptr %t46, i64 11 + store i32 %t108.10, ptr %t110.10, align 4 + %t101.11 = getelementptr i32, ptr %t43, i64 12 + store i32 %t108.10, ptr %t101.11, align 4 + %t106.11 = getelementptr i32, ptr %t48, i64 12 + %t107.11 = load i32, ptr %t106.11, align 4 + %t108.11 = add i32 %t107.11, %t108.10 + %t110.11 = getelementptr i32, ptr %t46, i64 12 + store i32 %t108.11, ptr %t110.11, align 4 + %t101.12 = getelementptr i32, ptr %t43, i64 13 + store i32 %t108.11, ptr %t101.12, align 4 + %t106.12 = getelementptr i32, ptr %t48, i64 13 + %t107.12 = load i32, ptr %t106.12, align 4 + %t108.12 = add i32 %t107.12, %t108.11 + %t110.12 = getelementptr i32, ptr %t46, i64 13 + store i32 %t108.12, ptr %t110.12, align 4 + %t101.13 = getelementptr i32, ptr %t43, i64 14 + store i32 %t108.12, ptr %t101.13, align 4 + %t106.13 = getelementptr i32, ptr %t48, i64 14 + %t107.13 = load i32, ptr %t106.13, align 4 + %t108.13 = add i32 %t107.13, %t108.12 + %t110.13 = getelementptr i32, ptr %t46, i64 14 + store i32 %t108.13, ptr %t110.13, align 4 + %t101.14 = getelementptr i32, ptr %t43, i64 15 + store i32 %t108.13, ptr %t101.14, align 4 + %t106.14 = getelementptr i32, ptr %t48, i64 15 + %t107.14 = load i32, ptr %t106.14, align 4 + %t108.14 = add i32 %t107.14, %t108.13 + %t110.14 = getelementptr i32, ptr %t46, i64 15 + store i32 %t108.14, ptr %t110.14, align 4 + %t333.i29 = icmp sgt i32 %bitround, 0 + br label %while.cond.t118.preheader + +while.cond.t118.preheader: ; preds = %while.exit.t64, %while.exit.t120 + %storemerge17104 = phi i32 [ 0, %while.exit.t64 ], [ %t180, %while.exit.t120 ] + %3 = zext nneg i32 %storemerge17104 to i64 + %t122 = getelementptr i32, ptr %t43, i64 %3 + %t125 = getelementptr i32, ptr %t46, i64 %3 + %t123100 = load i32, ptr %t122, align 4 + %t126101 = load i32, ptr %t125, align 4 + %t127102 = icmp slt i32 %t123100, %t126101 + br i1 %t127102, label %while.body.t119, label %while.exit.t120 + +while.body.t191.peel.next: ; preds = %while.exit.t120 + store i32 %l, ptr %t43, align 4 + %t187 = load i32, ptr %t48, align 4 + %t188 = add i32 %t187, %l + store i32 %t188, ptr %t46, align 4 + %t215 = add i32 %bitround, -1 + %t218.peel.pre = load i32, ptr %t43, align 4 + tail call void @radixSort(i32 %t215, ptr %a, i32 %t218.peel.pre, i32 %t188) + br label %merge.t196 + +while.body.t119: ; preds = %while.cond.t118.preheader, %while.exit.t136 + %t123103 = phi i32 [ %t176, %while.exit.t136 ], [ %t123100, %while.cond.t118.preheader ] + %4 = sext i32 %t123103 to i64 + %t132 = getelementptr i32, ptr %a, i64 %4 + %t133 = load i32, ptr %t132, align 4 + br label %while.cond.t134 + +while.exit.t120: ; preds = %while.exit.t136, %while.cond.t118.preheader + %t180 = add nuw nsw i32 %storemerge17104, 1 + %t117 = icmp ult i32 %storemerge17104, 15 + br i1 %t117, label %while.cond.t118.preheader, label %while.body.t191.peel.next + +while.cond.t134: ; preds = %getNumPos.exit78, %while.body.t119 + %t15099 = phi i32 [ %t150129, %getNumPos.exit78 ], [ %t133, %while.body.t119 ] + br i1 %t333.i29, label %while.body.t29.i32, label %getNumPos.exit38.thread + +while.body.t29.i32: ; preds = %while.cond.t134, %while.body.t29.i32 + %t27_i.05.i33 = phi i32 [ %t37.i36, %while.body.t29.i32 ], [ 0, %while.cond.t134 ] + %t24.04.i34 = phi i32 [ %t35.i35, %while.body.t29.i32 ], [ %t15099, %while.cond.t134 ] + %t35.i35 = sdiv i32 %t24.04.i34, 16 + %t37.i36 = add nuw nsw i32 %t27_i.05.i33, 1 + %t33.i37 = icmp slt i32 %t37.i36, %bitround + br i1 %t33.i37, label %while.body.t29.i32, label %getNumPos.exit38 + +getNumPos.exit38: ; preds = %while.body.t29.i32 + %t39.i31 = srem i32 %t35.i35, 16 + %t141.not = icmp eq i32 %t39.i31, %storemerge17104 + br i1 %t141.not, label %while.exit.t136, label %while.body.t29.i42 + +getNumPos.exit38.thread: ; preds = %while.cond.t134 + %t39.i3186 = srem i32 %t15099, 16 + %t141.not87 = icmp eq i32 %t39.i3186, %storemerge17104 + br i1 %t141.not87, label %while.exit.t136, label %getNumPos.exit48.thread + +getNumPos.exit48.thread: ; preds = %getNumPos.exit38.thread + %5 = sext i32 %t39.i3186 to i64 + %t147125 = getelementptr i32, ptr %t43, i64 %5 + %t148126 = load i32, ptr %t147125, align 4 + %6 = sext i32 %t148126 to i64 + %t149127 = getelementptr i32, ptr %a, i64 %6 + %t150128 = load i32, ptr %t149127, align 4 + br label %getNumPos.exit68.thread + +while.body.t29.i42: ; preds = %getNumPos.exit38, %while.body.t29.i42 + %t27_i.05.i43 = phi i32 [ %t37.i46, %while.body.t29.i42 ], [ 0, %getNumPos.exit38 ] + %t24.04.i44 = phi i32 [ %t35.i45, %while.body.t29.i42 ], [ %t15099, %getNumPos.exit38 ] + %t35.i45 = sdiv i32 %t24.04.i44, 16 + %t37.i46 = add nuw nsw i32 %t27_i.05.i43, 1 + %t33.i47 = icmp slt i32 %t37.i46, %bitround + br i1 %t33.i47, label %while.body.t29.i42, label %getNumPos.exit48 + +getNumPos.exit48: ; preds = %while.body.t29.i42 + %.pre117 = srem i32 %t35.i45, 16 + %7 = sext i32 %.pre117 to i64 + %t147 = getelementptr i32, ptr %t43, i64 %7 + %t148 = load i32, ptr %t147, align 4 + %8 = sext i32 %t148 to i64 + %t149 = getelementptr i32, ptr %a, i64 %8 + %t150 = load i32, ptr %t149, align 4 + br i1 %t333.i29, label %while.body.t29.i52, label %getNumPos.exit68.thread + +while.body.t29.i52: ; preds = %getNumPos.exit48, %while.body.t29.i52 + %t27_i.05.i53 = phi i32 [ %t37.i56, %while.body.t29.i52 ], [ 0, %getNumPos.exit48 ] + %t24.04.i54 = phi i32 [ %t35.i55, %while.body.t29.i52 ], [ %t15099, %getNumPos.exit48 ] + %t35.i55 = sdiv i32 %t24.04.i54, 16 + %t37.i56 = add nuw nsw i32 %t27_i.05.i53, 1 + %t33.i57 = icmp slt i32 %t37.i56, %bitround + br i1 %t33.i57, label %while.body.t29.i52, label %while.body.t29.i62.preheader + +while.body.t29.i62.preheader: ; preds = %while.body.t29.i52 + %t39.i51 = srem i32 %t35.i55, 16 + %9 = sext i32 %t39.i51 to i64 + %t155 = getelementptr i32, ptr %t43, i64 %9 + %t156 = load i32, ptr %t155, align 4 + %10 = sext i32 %t156 to i64 + %t157 = getelementptr i32, ptr %a, i64 %10 + store i32 %t15099, ptr %t157, align 4 + br label %while.body.t29.i62 + +getNumPos.exit68.thread: ; preds = %getNumPos.exit48, %getNumPos.exit48.thread + %t150130 = phi i32 [ %t150128, %getNumPos.exit48.thread ], [ %t150, %getNumPos.exit48 ] + %t39.i51.c = srem i32 %t15099, 16 + %11 = sext i32 %t39.i51.c to i64 + %t155.c = getelementptr i32, ptr %t43, i64 %11 + %t156.c = load i32, ptr %t155.c, align 4 + %12 = sext i32 %t156.c to i64 + %t157.c = getelementptr i32, ptr %a, i64 %12 + store i32 %t15099, ptr %t157.c, align 4 + %t16191 = getelementptr i32, ptr %t43, i64 %11 + %t16292 = load i32, ptr %t16191, align 4 + br label %getNumPos.exit78 + +while.body.t29.i62: ; preds = %while.body.t29.i62.preheader, %while.body.t29.i62 + %t27_i.05.i63 = phi i32 [ %t37.i66, %while.body.t29.i62 ], [ 0, %while.body.t29.i62.preheader ] + %t24.04.i64 = phi i32 [ %t35.i65, %while.body.t29.i62 ], [ %t15099, %while.body.t29.i62.preheader ] + %t35.i65 = sdiv i32 %t24.04.i64, 16 + %t37.i66 = add nuw nsw i32 %t27_i.05.i63, 1 + %t33.i67 = icmp slt i32 %t37.i66, %bitround + br i1 %t33.i67, label %while.body.t29.i62, label %getNumPos.exit68 + +getNumPos.exit68: ; preds = %while.body.t29.i62 + %t39.i61 = srem i32 %t35.i65, 16 + %13 = sext i32 %t39.i61 to i64 + %t161 = getelementptr i32, ptr %t43, i64 %13 + %t162 = load i32, ptr %t161, align 4 + br label %while.body.t29.i72 + +while.body.t29.i72: ; preds = %getNumPos.exit68, %while.body.t29.i72 + %t27_i.05.i73 = phi i32 [ %t37.i76, %while.body.t29.i72 ], [ 0, %getNumPos.exit68 ] + %t24.04.i74 = phi i32 [ %t35.i75, %while.body.t29.i72 ], [ %t15099, %getNumPos.exit68 ] + %t35.i75 = sdiv i32 %t24.04.i74, 16 + %t37.i76 = add nuw nsw i32 %t27_i.05.i73, 1 + %t33.i77 = icmp slt i32 %t37.i76, %bitround + br i1 %t33.i77, label %while.body.t29.i72, label %getNumPos.exit78.loopexit + +getNumPos.exit78.loopexit: ; preds = %while.body.t29.i72 + %.pre118 = srem i32 %t35.i75, 16 + %.pre119 = sext i32 %.pre118 to i64 + br label %getNumPos.exit78 + +getNumPos.exit78: ; preds = %getNumPos.exit78.loopexit, %getNumPos.exit68.thread + %t150129 = phi i32 [ %t150, %getNumPos.exit78.loopexit ], [ %t150130, %getNumPos.exit68.thread ] + %.pre-phi120 = phi i64 [ %.pre119, %getNumPos.exit78.loopexit ], [ %11, %getNumPos.exit68.thread ] + %t16394.in = phi i32 [ %t162, %getNumPos.exit78.loopexit ], [ %t16292, %getNumPos.exit68.thread ] + %t16394 = add i32 %t16394.in, 1 + %t167 = getelementptr i32, ptr %t43, i64 %.pre-phi120 + store i32 %t16394, ptr %t167, align 4 + br label %while.cond.t134 + +while.exit.t136: ; preds = %getNumPos.exit38.thread, %getNumPos.exit38 + %t171 = load i32, ptr %t122, align 4 + %14 = sext i32 %t171 to i64 + %t172 = getelementptr i32, ptr %a, i64 %14 + store i32 %t15099, ptr %t172, align 4 + %t175 = load i32, ptr %t122, align 4 + %t176 = add i32 %t175, 1 + store i32 %t176, ptr %t122, align 4 + %t126 = load i32, ptr %t125, align 4 + %t127 = icmp slt i32 %t176, %t126 + br i1 %t127, label %while.body.t119, label %while.exit.t120 + +merge.t196: ; preds = %while.body.t191.peel.next, %merge.t196 + %storemerge18107 = phi i32 [ 1, %while.body.t191.peel.next ], [ %t224, %merge.t196 ] + %15 = zext nneg i32 %storemerge18107 to i64 + %gep106 = getelementptr i32, ptr %invariant.gep, i64 %15 + %t202 = load i32, ptr %gep106, align 4 + %t204 = getelementptr i32, ptr %t43, i64 %15 + store i32 %t202, ptr %t204, align 4 + %t209 = getelementptr i32, ptr %t48, i64 %15 + %t210 = load i32, ptr %t209, align 4 + %t211 = add i32 %t210, %t202 + %t213 = getelementptr i32, ptr %t46, i64 %15 + store i32 %t211, ptr %t213, align 4 + %t218.pre = load i32, ptr %t204, align 4 + tail call void @radixSort(i32 %t215, ptr %a, i32 %t218.pre, i32 %t211) + %t224 = add nuw nsw i32 %storemerge18107, 1 + %t194 = icmp ult i32 %storemerge18107, 15 + br i1 %t194, label %merge.t196, label %cleanup.t44, !llvm.loop !0 +} + +define noundef i32 @main() local_unnamed_addr { +entry: + %t231 = tail call i32 @getarray(ptr nonnull @a) + tail call void @starttime() + tail call void @radixSort(i32 8, ptr nonnull @a, i32 0, i32 %t231) + %ans.promoted = load i32, ptr @ans, align 4 + %t2427 = icmp sgt i32 %t231, 0 + br i1 %t2427, label %while.body.t238, label %while.exit.t239 + +while.body.t238: ; preds = %entry, %while.body.t238 + %t236_i.09 = phi i32 [ %t254, %while.body.t238 ], [ 0, %entry ] + %t25268 = phi i32 [ %t252, %while.body.t238 ], [ %ans.promoted, %entry ] + %0 = zext nneg i32 %t236_i.09 to i64 + %t246 = getelementptr [30000010 x i32], ptr @a, i64 0, i64 %0 + %t247 = load i32, ptr %t246, align 4 + %t249 = add nuw i32 %t236_i.09, 2 + %t250 = srem i32 %t247, %t249 + %t251 = mul i32 %t250, %t236_i.09 + %t252 = add i32 %t251, %t25268 + %t254 = add nuw nsw i32 %t236_i.09, 1 + %t242 = icmp slt i32 %t254, %t231 + br i1 %t242, label %while.body.t238, label %while.cond.t237.while.exit.t239_crit_edge + +while.cond.t237.while.exit.t239_crit_edge: ; preds = %while.body.t238 + store i32 %t252, ptr @ans, align 4 + br label %while.exit.t239 + +while.exit.t239: ; preds = %while.cond.t237.while.exit.t239_crit_edge, %entry + %t257 = phi i32 [ %t252, %while.cond.t237.while.exit.t239_crit_edge ], [ %ans.promoted, %entry ] + %t258 = icmp slt i32 %t257, 0 + br i1 %t258, label %then.t255, label %merge.t256 + +then.t255: ; preds = %while.exit.t239 + %t260 = sub i32 0, %t257 + store i32 %t260, ptr @ans, align 4 + br label %merge.t256 + +merge.t256: ; preds = %then.t255, %while.exit.t239 + tail call void @stoptime() + %t262 = load i32, ptr @ans, align 4 + tail call void @putint(i32 %t262) + tail call void @putch(i32 10) + ret i32 0 +} + +; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none) +declare i32 @llvm.smax.i32(i32, i32) #2 + +attributes #0 = { nofree norecurse nosync nounwind memory(argmem: read) } +attributes #1 = { nofree norecurse nosync nounwind memory(none) } +attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) } + +!0 = distinct !{!0, !1} +!1 = !{!"llvm.loop.peeled.count", i32 1} diff --git a/result.txt b/result.txt new file mode 100644 index 0000000..893ee2e --- /dev/null +++ b/result.txt @@ -0,0 +1,26478 @@ +========== test/test_case/functional/05_arr_defn4.sy ========== +SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored starttime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored stoptime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckConstDef: a base_type: int is_array: 1 dim_count: 2 +[DEBUG] dim[0] = 4 +[DEBUG] dim[1] = 2 +[DEBUG] 创建数组类型完成,IsArray: 1 +[DEBUG] visitUnaryExp: 4 +[DEBUG] visitPrimaryExp: 4 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] visitUnaryExp: 4 +[DEBUG] visitPrimaryExp: 4 +[DEBUG] visitUnaryExp: 7 +[DEBUG] visitPrimaryExp: 7 +[SymbolTable Debug] 进入花括号初始化列表: { ... } +[SymbolTable Debug] 进入花括号初始化列表: { ... } +[SymbolTable Debug] 处理常量表达式: 1 类型=INT 值=1 目标类型=Int32 +[SymbolTable Debug] 处理常量表达式: 2 类型=INT 值=2 目标类型=Int32 +[SymbolTable Debug] 退出花括号初始化列表 +[SymbolTable Debug] 进入花括号初始化列表: { ... } +[SymbolTable Debug] 处理常量表达式: 3 类型=INT 值=3 目标类型=Int32 +[SymbolTable Debug] 处理常量表达式: 4 类型=INT 值=4 目标类型=Int32 +[SymbolTable Debug] 退出花括号初始化列表 +[SymbolTable Debug] 进入花括号初始化列表: { ... } +[SymbolTable Debug] 退出花括号初始化列表 +[SymbolTable Debug] 处理常量表达式: 7 类型=INT 值=7 目标类型=Int32 +[SymbolTable Debug] 退出花括号初始化列表 +[DEBUG] 初始化值数量: 8 +[DEBUG] 期望元素数量: 8 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: a, ctx: 0x55aa3d9d1b00 +[DEBUG] 数组常量,不存储单个常量值 +SymbolTable::addSymbol: stored a with kind=3, const_def_ctx=0x55aa3d9d1b00 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found a in scope level 3, kind=3, const_def_ctx=0x55aa3d9d1b00 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55aa3d9d1b00 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: N base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: N, ctx: 0x55aa3d9dc2c0 +SymbolTable::addSymbol: stored N with kind=3, const_def_ctx=0x55aa3d9dc2c0 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found N in scope level 3, kind=3, const_def_ctx=0x55aa3d9dc2c0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55aa3d9dc2c0 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckVarDef: b base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: 4 +[DEBUG] visitPrimaryExp: 4 +[DEBUG] dim[0] = 4 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] dim[1] = 2 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 4 2 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: b type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: c base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: 4 +[DEBUG] visitPrimaryExp: 4 +[DEBUG] dim[0] = 4 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] dim[1] = 2 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 4 2 +[DEBUG] Element type: int +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: 2 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] CheckExp: 3 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] CheckExp: 4 +[DEBUG] visitUnaryExp: 4 +[DEBUG] visitPrimaryExp: 4 +[DEBUG] CheckExp: 5 +[DEBUG] visitUnaryExp: 5 +[DEBUG] visitPrimaryExp: 5 +[DEBUG] CheckExp: 6 +[DEBUG] visitUnaryExp: 6 +[DEBUG] visitPrimaryExp: 6 +[DEBUG] CheckExp: 7 +[DEBUG] visitUnaryExp: 7 +[DEBUG] visitPrimaryExp: 7 +[DEBUG] CheckExp: 8 +[DEBUG] visitUnaryExp: 8 +[DEBUG] visitPrimaryExp: 8 +SymbolTable::addSymbol: stored c with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: c type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: d base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: N +[DEBUG] visitPrimaryExp: N +SymbolTable::lookup: found N in scope level 3, kind=3, const_def_ctx=0x55aa3d9dc2c0 +CheckLValue: found sym->name = N, sym->kind = 3 +绑定常量: N -> ConstDefContext +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55aa3d9dc2c0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +SymbolTable::lookup: found N in scope level 3, kind=3, const_def_ctx=0x55aa3d9dc2c0 +[DEBUG] dim[0] = 4 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] dim[1] = 2 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 4 2 +[DEBUG] Element type: int +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: 2 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] CheckExp: 3 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] CheckExp: 5 +[DEBUG] visitUnaryExp: 5 +[DEBUG] visitPrimaryExp: 5 +[DEBUG] CheckExp: a[3][0] +[DEBUG] visitUnaryExp: a[3][0] +[DEBUG] visitPrimaryExp: a[3][0] +SymbolTable::lookup: found a in scope level 3, kind=3, const_def_ctx=0x55aa3d9d1b00 +CheckLValue: found sym->name = a, sym->kind = 3 +绑定常量: a -> ConstDefContext +CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55aa3d9d1b00 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: 3 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: 8 +[DEBUG] visitUnaryExp: 8 +[DEBUG] visitPrimaryExp: 8 +SymbolTable::addSymbol: stored d with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: d type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: e base_type: int is_array: 1 dim_count: 3 +[DEBUG] visitUnaryExp: 4 +[DEBUG] visitPrimaryExp: 4 +[DEBUG] dim[0] = 4 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] dim[1] = 2 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] dim[2] = 1 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 4 2 1 +[DEBUG] Element type: int +[DEBUG] CheckExp: d[2][1] +[DEBUG] visitUnaryExp: d[2][1] +[DEBUG] visitPrimaryExp: d[2][1] +SymbolTable::lookup: found d in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = d, sym->kind = 0 +绑定变量: d -> VarDefContext +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55aa3d9e2a40, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: 2 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +完全索引,返回元素类型 +[DEBUG] CheckExp: c[2][1] +[DEBUG] visitUnaryExp: c[2][1] +[DEBUG] visitPrimaryExp: c[2][1] +SymbolTable::lookup: found c in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = c, sym->kind = 0 +绑定变量: c -> VarDefContext +CheckLValue 绑定变量: c, sym->kind: 0, sym->var_def_ctx: 0x55aa3d9def60, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: 2 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +完全索引,返回元素类型 +[DEBUG] CheckExp: 3 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] CheckExp: 4 +[DEBUG] visitUnaryExp: 4 +[DEBUG] visitPrimaryExp: 4 +[DEBUG] CheckExp: 5 +[DEBUG] visitUnaryExp: 5 +[DEBUG] visitPrimaryExp: 5 +[DEBUG] CheckExp: 6 +[DEBUG] visitUnaryExp: 6 +[DEBUG] visitPrimaryExp: 6 +[DEBUG] CheckExp: 7 +[DEBUG] visitUnaryExp: 7 +[DEBUG] visitPrimaryExp: 7 +[DEBUG] CheckExp: 8 +[DEBUG] visitUnaryExp: 8 +[DEBUG] visitPrimaryExp: 8 +SymbolTable::addSymbol: stored e with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: e type_kind: 6 is_array: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: e[3][1][0]+e[0][0][0]+e[0][1][0]+d[3][0] +[DEBUG] visitUnaryExp: e[3][1][0] +[DEBUG] visitPrimaryExp: e[3][1][0] +SymbolTable::lookup: found e in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = e, sym->kind = 0 +绑定变量: e -> VarDefContext +CheckLValue 绑定变量: e, sym->kind: 0, sym->var_def_ctx: 0x55aa3d9eb470, sym->const_def_ctx: 0 +dim_count: 3, subscript_count: 3 +[DEBUG] CheckExp: 3 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: e[0][0][0] +[DEBUG] visitPrimaryExp: e[0][0][0] +SymbolTable::lookup: found e in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = e, sym->kind = 0 +绑定变量: e -> VarDefContext +CheckLValue 绑定变量: e, sym->kind: 0, sym->var_def_ctx: 0x55aa3d9eb470, sym->const_def_ctx: 0 +dim_count: 3, subscript_count: 3 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: e[0][1][0] +[DEBUG] visitPrimaryExp: e[0][1][0] +SymbolTable::lookup: found e in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = e, sym->kind = 0 +绑定变量: e -> VarDefContext +CheckLValue 绑定变量: e, sym->kind: 0, sym->var_def_ctx: 0x55aa3d9eb470, sym->const_def_ctx: 0 +dim_count: 3, subscript_count: 3 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: d[3][0] +[DEBUG] visitPrimaryExp: d[3][0] +SymbolTable::lookup: found d in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = d, sym->kind = 0 +绑定变量: d -> VarDefContext +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55aa3d9e2a40, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: 3 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +完全索引,返回元素类型 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 +[DEBUG IRGEN] visitCompUnit +[DEBUG IRGEN] visitFuncDef: main +[DEBUG] visitFuncDef: 创建函数 main,返回类型: int,参数数量: 0 +[DEBUG] visitFuncDef: 函数对象地址: 0x55aa3da01cd0 +[DEBUG] visitFuncDef: 开始生成函数体 +[DEBUG IRGEN] visitBlock: {constinta[4][2]={{1,2},{3,4},{},7};constintN=3;intb[4][2]={};intc[4][2]={1,2,3,4,5,6,7,8};intd[N+1][2]={1,2,{3},{5},a[3][0],8};inte[4][2][1]={{d[2][1],{c[2][1]}},{3,4},{5,6},{7,8}};returne[3][1][0]+e[0][0][0]+e[0][1][0]+d[3][0];} +[DEBUG IRGEN] visitBlockItem: constinta[4][2]={{1,2},{3,4},{},7}; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x55aa3da02190 +[DEBUG IRGEN] visitAddExp: 2 +[DEBUG IRGEN] visitMulExp: 2 +[DEBUG IRGEN] visitPrimaryExp: 2 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 2 created as 0x55aa3da02210 +[DEBUG IRGEN] visitAddExp: 3 +[DEBUG IRGEN] visitMulExp: 3 +[DEBUG IRGEN] visitPrimaryExp: 3 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 3 created as 0x55aa3da02360 +[DEBUG IRGEN] visitAddExp: 4 +[DEBUG IRGEN] visitMulExp: 4 +[DEBUG IRGEN] visitPrimaryExp: 4 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 4 created as 0x55aa3da023c0 +[DEBUG IRGEN] visitAddExp: 7 +[DEBUG IRGEN] visitMulExp: 7 +[DEBUG IRGEN] visitPrimaryExp: 7 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 7 created as 0x55aa3da02460 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: constintN=3; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: intb[4][2]={}; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: b +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 b +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 空初始化列表 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: intc[4][2]={1,2,3,4,5,6,7,8}; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: c +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 c +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理聚合初始化 +[DEBUG] ProcessNestedInitVals: 开始处理嵌套初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 1 +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x55aa3da02190 +[DEBUG] EvalExpr: success, result = 0x55aa3da02190 +[DEBUG] ProcessNestedInitVals: 获取到单个值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 2 +[DEBUG IRGEN] visitAddExp: 2 +[DEBUG IRGEN] visitMulExp: 2 +[DEBUG IRGEN] visitPrimaryExp: 2 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 2 created as 0x55aa3da02210 +[DEBUG] EvalExpr: success, result = 0x55aa3da02210 +[DEBUG] ProcessNestedInitVals: 获取到单个值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 3 +[DEBUG IRGEN] visitAddExp: 3 +[DEBUG IRGEN] visitMulExp: 3 +[DEBUG IRGEN] visitPrimaryExp: 3 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 3 created as 0x55aa3da02360 +[DEBUG] EvalExpr: success, result = 0x55aa3da02360 +[DEBUG] ProcessNestedInitVals: 获取到单个值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 4 +[DEBUG IRGEN] visitAddExp: 4 +[DEBUG IRGEN] visitMulExp: 4 +[DEBUG IRGEN] visitPrimaryExp: 4 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 4 created as 0x55aa3da023c0 +[DEBUG] EvalExpr: success, result = 0x55aa3da023c0 +[DEBUG] ProcessNestedInitVals: 获取到单个值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 5 +[DEBUG IRGEN] visitAddExp: 5 +[DEBUG IRGEN] visitMulExp: 5 +[DEBUG IRGEN] visitPrimaryExp: 5 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 5 created as 0x55aa3da036a0 +[DEBUG] EvalExpr: success, result = 0x55aa3da036a0 +[DEBUG] ProcessNestedInitVals: 获取到单个值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 6 +[DEBUG IRGEN] visitAddExp: 6 +[DEBUG IRGEN] visitMulExp: 6 +[DEBUG IRGEN] visitPrimaryExp: 6 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 6 created as 0x55aa3da03750 +[DEBUG] EvalExpr: success, result = 0x55aa3da03750 +[DEBUG] ProcessNestedInitVals: 获取到单个值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 7 +[DEBUG IRGEN] visitAddExp: 7 +[DEBUG IRGEN] visitMulExp: 7 +[DEBUG IRGEN] visitPrimaryExp: 7 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 7 created as 0x55aa3da02460 +[DEBUG] EvalExpr: success, result = 0x55aa3da02460 +[DEBUG] ProcessNestedInitVals: 获取到单个值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 8 +[DEBUG IRGEN] visitAddExp: 8 +[DEBUG IRGEN] visitMulExp: 8 +[DEBUG IRGEN] visitPrimaryExp: 8 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 8 created as 0x55aa3da037b0 +[DEBUG] EvalExpr: success, result = 0x55aa3da037b0 +[DEBUG] ProcessNestedInitVals: 获取到单个值 +[DEBUG] ProcessNestedInitVals: 共获取 8 个初始化值 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: intd[N+1][2]={1,2,{3},{5},a[3][0],8}; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: d +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 d +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理聚合初始化 +[DEBUG] ProcessNestedInitVals: 开始处理嵌套初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 1 +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x55aa3da02190 +[DEBUG] EvalExpr: success, result = 0x55aa3da02190 +[DEBUG] ProcessNestedInitVals: 获取到单个值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 2 +[DEBUG IRGEN] visitAddExp: 2 +[DEBUG IRGEN] visitMulExp: 2 +[DEBUG IRGEN] visitPrimaryExp: 2 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 2 created as 0x55aa3da02210 +[DEBUG] EvalExpr: success, result = 0x55aa3da02210 +[DEBUG] ProcessNestedInitVals: 获取到单个值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理聚合初始化 +[DEBUG] ProcessNestedInitVals: 开始处理嵌套初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 3 +[DEBUG IRGEN] visitAddExp: 3 +[DEBUG IRGEN] visitMulExp: 3 +[DEBUG IRGEN] visitPrimaryExp: 3 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 3 created as 0x55aa3da02360 +[DEBUG] EvalExpr: success, result = 0x55aa3da02360 +[DEBUG] ProcessNestedInitVals: 获取到单个值 +[DEBUG] ProcessNestedInitVals: 共获取 1 个初始化值 +[DEBUG] ProcessNestedInitVals: 获取到嵌套值列表, 大小: 1 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理聚合初始化 +[DEBUG] ProcessNestedInitVals: 开始处理嵌套初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 5 +[DEBUG IRGEN] visitAddExp: 5 +[DEBUG IRGEN] visitMulExp: 5 +[DEBUG IRGEN] visitPrimaryExp: 5 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 5 created as 0x55aa3da036a0 +[DEBUG] EvalExpr: success, result = 0x55aa3da036a0 +[DEBUG] ProcessNestedInitVals: 获取到单个值 +[DEBUG] ProcessNestedInitVals: 共获取 1 个初始化值 +[DEBUG] ProcessNestedInitVals: 获取到嵌套值列表, 大小: 1 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: a[3][0] +[DEBUG IRGEN] visitAddExp: a[3][0] +[DEBUG IRGEN] visitMulExp: a[3][0] +[DEBUG IRGEN] visitPrimaryExp: a[3][0] +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG IRGEN] EvalExpr: 3 +[DEBUG IRGEN] visitAddExp: 3 +[DEBUG IRGEN] visitMulExp: 3 +[DEBUG IRGEN] visitPrimaryExp: 3 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 3 created as 0x55aa3da02360 +[DEBUG] EvalExpr: success, result = 0x55aa3da02360 +[DEBUG IRGEN] EvalExpr: 0 +[DEBUG IRGEN] visitAddExp: 0 +[DEBUG IRGEN] visitMulExp: 0 +[DEBUG IRGEN] visitPrimaryExp: 0 +[DEBUG] visitPrimaryExp +[DEBUG] EvalExpr: success, result = 0x55aa3da024c0 +[ERROR] Exception in EvalExpr: [ir] LoadInst 当前只支持从 i32* 加载 +[error] [ir] LoadInst 当前只支持从 i32* 加载 + +========== test/test_case/functional/09_func_defn.sy ========== +SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored starttime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored stoptime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored func with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 +[DEBUG] CheckVarDef: a base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored a with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: a type_kind: 1 is_array: 0 +[DEBUG] 进入函数: func 返回类型: int +SymbolTable::addSymbol: stored p with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: p type_kind: 1 is_array: 0 dims: +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found p in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = p, sym->kind = 2 +CheckLValue 绑定变量: p, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: p-1 +[DEBUG] visitUnaryExp: p +[DEBUG] visitPrimaryExp: p +SymbolTable::lookup: found p in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = p, sym->kind = 2 +CheckLValue 绑定变量: p, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: p +[DEBUG] visitUnaryExp: p +[DEBUG] visitPrimaryExp: p +SymbolTable::lookup: found p in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = p, sym->kind = 2 +CheckLValue 绑定变量: p, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 func has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: b base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: b type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55ea0f11b720, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55ea0f11e180, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: func(a) +[DEBUG] visitUnaryExp: func(a) +[DEBUG] 函数调用: func +[DEBUG] CheckFuncCall: func +SymbolTable::lookup: found func in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: a +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55ea0f11b720, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: b +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55ea0f11e180, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 +[DEBUG IRGEN] visitCompUnit +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: a +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 a +[DEBUG] HandleGlobalVariable: 变量 a 是 int 类型 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: a +[DEBUG] visitDecl: 声明处理完成 +[DEBUG IRGEN] visitFuncDef: func +[DEBUG] visitFuncDef: 创建函数 func,返回类型: int,参数数量: 1 +[DEBUG] visitFuncDef: 函数对象地址: 0x55ea0f131b40 +[DEBUG] visitFuncDef: 为函数 func 添加参数 p,类型: int32 +[DEBUG] visitFuncDef: 参数 p 处理完成 +[DEBUG] visitFuncDef: 开始生成函数体 +[DEBUG IRGEN] visitBlock: {p=p-1;returnp;} +[DEBUG IRGEN] visitBlockItem: p=p-1; +[DEBUG IRGEN] visitStmt: p=p-1; +[DEBUG IRGEN] HandleAssignStmt: p=p-1; +[DEBUG IRGEN] EvalExpr: p-1 +[DEBUG IRGEN] visitAddExp: p-1 +[DEBUG IRGEN] visitAddExp: p +[DEBUG IRGEN] visitMulExp: p +[DEBUG IRGEN] visitPrimaryExp: p +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: p +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x55ea0f131f00 +[DEBUG] visitAddExp: left=0x55ea0f131e40, type=int, right=0x55ea0f131f00, type=int +[DEBUG] EvalExpr: success, result = 0x55ea0f131f60 +[DEBUG] HandleAssignStmt: assigning to p +[DEBUG] HandleAssignStmt: found in param_map_ for p, ptr = 0x55ea0f12fd40 +[DEBUG] HandleAssignStmt: scalar assignment to p, ptr = 0x55ea0f12fd40, rhs = 0x55ea0f131f60 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: returnp; +[DEBUG IRGEN] visitStmt: returnp; +[DEBUG IRGEN] HandleReturnStmt: returnp; +[DEBUG IRGEN] EvalExpr: p +[DEBUG IRGEN] visitAddExp: p +[DEBUG IRGEN] visitMulExp: p +[DEBUG IRGEN] visitPrimaryExp: p +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: p +[DEBUG] EvalExpr: success, result = 0x55ea0f132150 +[DEBUG] visitFuncDef: 函数 func 生成完成 +[DEBUG IRGEN] visitFuncDef: main +[DEBUG] visitFuncDef: 创建函数 main,返回类型: int,参数数量: 0 +[DEBUG] visitFuncDef: 函数对象地址: 0x55ea0f132290 +[DEBUG] visitFuncDef: 开始生成函数体 +[DEBUG IRGEN] visitBlock: {intb;a=10;b=func(a);returnb;} +[DEBUG IRGEN] visitBlockItem: intb; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: b +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 b +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: a=10; +[DEBUG IRGEN] visitStmt: a=10; +[DEBUG IRGEN] HandleAssignStmt: a=10; +[DEBUG IRGEN] EvalExpr: 10 +[DEBUG IRGEN] visitAddExp: 10 +[DEBUG IRGEN] visitMulExp: 10 +[DEBUG IRGEN] visitPrimaryExp: 10 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 10 created as 0x55ea0f132590 +[DEBUG] EvalExpr: success, result = 0x55ea0f132590 +[DEBUG] HandleAssignStmt: assigning to a +[DEBUG] HandleAssignStmt: found in global_map_ for a, ptr = 0x55ea0f131930 +[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x55ea0f131930, rhs = 0x55ea0f132590 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: b=func(a); +[DEBUG IRGEN] visitStmt: b=func(a); +[DEBUG IRGEN] HandleAssignStmt: b=func(a); +[DEBUG IRGEN] EvalExpr: func(a) +[DEBUG IRGEN] visitAddExp: func(a) +[DEBUG IRGEN] visitMulExp: func(a) +[DEBUG IRGEN] visitCallExp: 调用函数 func +[DEBUG IRGEN] EvalExpr: a +[DEBUG IRGEN] visitAddExp: a +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] EvalExpr: success, result = 0x55ea0f1326b0 +[DEBUG IRGEN] visitCallExp: 收集到 1 个参数 +[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 0x55ea0f132770 +[DEBUG] EvalExpr: success, result = 0x55ea0f132770 +[DEBUG] HandleAssignStmt: assigning to b +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x55ea0f1323f0 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x55ea0f1323f0, rhs = 0x55ea0f132770 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: returnb; +[DEBUG IRGEN] visitStmt: returnb; +[DEBUG IRGEN] HandleReturnStmt: returnb; +[DEBUG IRGEN] EvalExpr: b +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG] EvalExpr: success, result = 0x55ea0f132980 +[DEBUG] visitFuncDef: 函数 main 生成完成 +@a = global i32 0 +define i32 @getint() { +entry: +} +define i32 @getch() { +entry: +} +define i32 @getarray() { +entry: +} +define void @putint() { +entry: +} +define void @putch() { +entry: +} +define void @putarray() { +entry: +} +define void @puts() { +entry: +} +define void @_sysy_starttime() { +entry: +} +define void @_sysy_stoptime() { +entry: +} +define void @starttime() { +entry: +} +define void @stoptime() { +entry: +} +define i32 @read_map() { +entry: +} +define i32 @float_eq() { +entry: +} +define i32* @memset() { +entry: +} +define i32 @func(i32 %p) { +entry: + %t0 = alloca i32 + store i32 %p, i32* %t0 + %t1 = load i32, i32* %t0 + %t2 = sub i32 %t1, 1 + store i32 %t2, i32* %t0 + %t3 = load i32, i32* %t0 + ret i32 %t3 +} +define i32 @main() { +entry: + %t4_b = alloca i32 + store i32 0, i32* %t4_b + store i32 10, i32* @a + %t5 = load i32, i32* @a + %t6 = call i32 @func(i32 %t5) + store i32 %t6, i32* %t4_b + %t7 = load i32, i32* %t4_b + ret i32 %t7 +} + +========== test/test_case/functional/11_add2.sy ========== +SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored starttime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored stoptime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: a base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored a with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: a type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: b base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: b type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x558443521a60, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x558443522230, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: -1 +[DEBUG] visitUnaryExp: -1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: a+b +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x558443521a60, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x558443522230, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 +[DEBUG IRGEN] visitCompUnit +[DEBUG IRGEN] visitFuncDef: main +[DEBUG] visitFuncDef: 创建函数 main,返回类型: int,参数数量: 0 +[DEBUG] visitFuncDef: 函数对象地址: 0x558443533370 +[DEBUG] visitFuncDef: 开始生成函数体 +[DEBUG IRGEN] visitBlock: {inta,b;a=10;b=-1;returna+b;} +[DEBUG IRGEN] visitBlockItem: inta,b; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: a +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 a +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: b +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 b +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: a=10; +[DEBUG IRGEN] visitStmt: a=10; +[DEBUG IRGEN] HandleAssignStmt: a=10; +[DEBUG IRGEN] EvalExpr: 10 +[DEBUG IRGEN] visitAddExp: 10 +[DEBUG IRGEN] visitMulExp: 10 +[DEBUG IRGEN] visitPrimaryExp: 10 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 10 created as 0x558443530380 +[DEBUG] EvalExpr: success, result = 0x558443530380 +[DEBUG] HandleAssignStmt: assigning to a +[DEBUG] HandleAssignStmt: found in storage_map_ for a, ptr = 0x5584434eca30 +[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x5584434eca30, rhs = 0x558443530380 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: b=-1; +[DEBUG IRGEN] visitStmt: b=-1; +[DEBUG IRGEN] HandleAssignStmt: b=-1; +[DEBUG IRGEN] EvalExpr: -1 +[DEBUG IRGEN] visitAddExp: -1 +[DEBUG IRGEN] visitMulExp: -1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x55844352f1a0 +[DEBUG] EvalExpr: success, result = 0x558443533980 +[DEBUG] HandleAssignStmt: assigning to b +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x558443533690 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x558443533690, rhs = 0x558443533980 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: returna+b; +[DEBUG IRGEN] visitStmt: returna+b; +[DEBUG IRGEN] HandleReturnStmt: returna+b; +[DEBUG IRGEN] EvalExpr: a+b +[DEBUG IRGEN] visitAddExp: a+b +[DEBUG IRGEN] visitAddExp: a +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG] visitAddExp: left=0x558443533b00, type=int, right=0x558443533bf0, type=int +[DEBUG] EvalExpr: success, result = 0x558443533d70 +[DEBUG] visitFuncDef: 函数 main 生成完成 +define i32 @getint() { +entry: +} +define i32 @getch() { +entry: +} +define i32 @getarray() { +entry: +} +define void @putint() { +entry: +} +define void @putch() { +entry: +} +define void @putarray() { +entry: +} +define void @puts() { +entry: +} +define void @_sysy_starttime() { +entry: +} +define void @_sysy_stoptime() { +entry: +} +define void @starttime() { +entry: +} +define void @stoptime() { +entry: +} +define i32 @read_map() { +entry: +} +define i32 @float_eq() { +entry: +} +define i32* @memset() { +entry: +} +define i32 @main() { +entry: + %t0_a = alloca i32 + store i32 0, i32* %t0_a + %t1_b = alloca i32 + store i32 0, i32* %t1_b + store i32 10, i32* %t0_a + %t2 = sub i32 0, 1 + store i32 %t2, i32* %t1_b + %t3 = load i32, i32* %t0_a + %t4 = load i32, i32* %t1_b + %t5 = add i32 %t3, %t4 + ret i32 %t5 +} + +========== test/test_case/functional/13_sub2.sy ========== +SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored starttime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored stoptime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 +[DEBUG] CheckConstDef: a base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: a, ctx: 0x55c7457585d0 +SymbolTable::addSymbol: stored a with kind=3, const_def_ctx=0x55c7457585d0 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found a in scope level 1, kind=3, const_def_ctx=0x55c7457585d0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c7457585d0 +[DEBUG] 常量符号添加完成 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: b base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: b type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55c74575f9e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 2 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: b-a +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55c74575f9e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 1, kind=3, const_def_ctx=0x55c7457585d0 +CheckLValue: found sym->name = a, sym->kind = 3 +绑定常量: a -> ConstDefContext +CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c7457585d0 +dim_count: 0, subscript_count: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 +[DEBUG IRGEN] visitCompUnit +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG IRGEN] visitFuncDef: main +[DEBUG] visitFuncDef: 创建函数 main,返回类型: int,参数数量: 0 +[DEBUG] visitFuncDef: 函数对象地址: 0x55c74576d2b0 +[DEBUG] visitFuncDef: 开始生成函数体 +[DEBUG IRGEN] visitBlock: {intb;b=2;returnb-a;} +[DEBUG IRGEN] visitBlockItem: intb; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: b +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 b +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: b=2; +[DEBUG IRGEN] visitStmt: b=2; +[DEBUG IRGEN] HandleAssignStmt: b=2; +[DEBUG IRGEN] EvalExpr: 2 +[DEBUG IRGEN] visitAddExp: 2 +[DEBUG IRGEN] visitMulExp: 2 +[DEBUG IRGEN] visitPrimaryExp: 2 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 2 created as 0x55c74576d5b0 +[DEBUG] EvalExpr: success, result = 0x55c74576d5b0 +[DEBUG] HandleAssignStmt: assigning to b +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x55c745725be0 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x55c745725be0, rhs = 0x55c74576d5b0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: returnb-a; +[DEBUG IRGEN] visitStmt: returnb-a; +[DEBUG IRGEN] HandleReturnStmt: returnb-a; +[DEBUG IRGEN] EvalExpr: b-a +[DEBUG IRGEN] visitAddExp: b-a +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] visitLVal: constant a +[DEBUG] visitAddExp: left=0x55c74576d710, type=int, right=0x55c745765ed0, type=int +[DEBUG] EvalExpr: success, result = 0x55c74576d800 +[DEBUG] visitFuncDef: 函数 main 生成完成 +define i32 @getint() { +entry: +} +define i32 @getch() { +entry: +} +define i32 @getarray() { +entry: +} +define void @putint() { +entry: +} +define void @putch() { +entry: +} +define void @putarray() { +entry: +} +define void @puts() { +entry: +} +define void @_sysy_starttime() { +entry: +} +define void @_sysy_stoptime() { +entry: +} +define void @starttime() { +entry: +} +define void @stoptime() { +entry: +} +define i32 @read_map() { +entry: +} +define i32 @float_eq() { +entry: +} +define i32* @memset() { +entry: +} +define i32 @main() { +entry: + %t0_b = alloca i32 + store i32 0, i32* %t0_b + store i32 2, i32* %t0_b + %t1 = load i32, i32* %t0_b + %t2 = sub i32 %t1, 10 + ret i32 %t2 +} + +========== test/test_case/functional/15_graph_coloring.sy ========== +SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored starttime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored stoptime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored printSolution with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored printMessage with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored isSafe with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored graphColoring with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 +[DEBUG] CheckConstDef: V base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 4 +[DEBUG] visitPrimaryExp: 4 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: V, ctx: 0x5563e32d4130 +SymbolTable::addSymbol: stored V with kind=3, const_def_ctx=0x5563e32d4130 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x5563e32d4130 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: space base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 32 +[DEBUG] visitPrimaryExp: 32 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: space, ctx: 0x5563e32dae00 +SymbolTable::addSymbol: stored space with kind=3, const_def_ctx=0x5563e32dae00 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found space in scope level 1, kind=3, const_def_ctx=0x5563e32dae00 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x5563e32dae00 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: LF base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: LF, ctx: 0x5563e32daf80 +SymbolTable::addSymbol: stored LF with kind=3, const_def_ctx=0x5563e32daf80 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found LF in scope level 1, kind=3, const_def_ctx=0x5563e32daf80 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x5563e32daf80 +[DEBUG] 常量符号添加完成 +[DEBUG] 进入函数: printSolution 返回类型: void +SymbolTable::addSymbol: stored color with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: color type_kind: 3 is_array: 1 dims: 0 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e32d4ba0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: V +[DEBUG] visitPrimaryExp: V +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 +CheckLValue: found sym->name = V, sym->kind = 3 +绑定常量: V -> ConstDefContext +CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5563e32d4130 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putint(color[i]) +[DEBUG] visitUnaryExp: putint(color[i]) +[DEBUG] 函数调用: putint +[DEBUG] CheckFuncCall: putint +SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: color[i] +[DEBUG] visitUnaryExp: color[i] +[DEBUG] visitPrimaryExp: color[i] +SymbolTable::lookup: found color in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = color, sym->kind = 2 +CheckLValue 绑定变量: color, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e32d4ba0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(space) +[DEBUG] visitUnaryExp: putch(space) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: space +[DEBUG] visitUnaryExp: space +[DEBUG] visitPrimaryExp: space +SymbolTable::lookup: found space in scope level 1, kind=3, const_def_ctx=0x5563e32dae00 +CheckLValue: found sym->name = space, sym->kind = 3 +绑定常量: space -> ConstDefContext +CheckLValue 绑定变量: space, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5563e32dae00 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e32d4ba0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e32d4ba0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(LF) +[DEBUG] visitUnaryExp: putch(LF) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: LF +[DEBUG] visitUnaryExp: LF +[DEBUG] visitPrimaryExp: LF +SymbolTable::lookup: found LF in scope level 1, kind=3, const_def_ctx=0x5563e32daf80 +CheckLValue: found sym->name = LF, sym->kind = 3 +绑定常量: LF -> ConstDefContext +CheckLValue 绑定变量: LF, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5563e32daf80 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 函数 printSolution has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: printMessage 返回类型: void +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(78) +[DEBUG] visitUnaryExp: putch(78) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 78 +[DEBUG] visitUnaryExp: 78 +[DEBUG] visitPrimaryExp: 78 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(111) +[DEBUG] visitUnaryExp: putch(111) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 111 +[DEBUG] visitUnaryExp: 111 +[DEBUG] visitPrimaryExp: 111 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(116) +[DEBUG] visitUnaryExp: putch(116) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 116 +[DEBUG] visitUnaryExp: 116 +[DEBUG] visitPrimaryExp: 116 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(space) +[DEBUG] visitUnaryExp: putch(space) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: space +[DEBUG] visitUnaryExp: space +[DEBUG] visitPrimaryExp: space +SymbolTable::lookup: found space in scope level 1, kind=3, const_def_ctx=0x5563e32dae00 +CheckLValue: found sym->name = space, sym->kind = 3 +绑定常量: space -> ConstDefContext +CheckLValue 绑定变量: space, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5563e32dae00 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(101) +[DEBUG] visitUnaryExp: putch(101) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 101 +[DEBUG] visitUnaryExp: 101 +[DEBUG] visitPrimaryExp: 101 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(120) +[DEBUG] visitUnaryExp: putch(120) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 120 +[DEBUG] visitUnaryExp: 120 +[DEBUG] visitPrimaryExp: 120 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(105) +[DEBUG] visitUnaryExp: putch(105) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 105 +[DEBUG] visitUnaryExp: 105 +[DEBUG] visitPrimaryExp: 105 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(115) +[DEBUG] visitUnaryExp: putch(115) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 115 +[DEBUG] visitUnaryExp: 115 +[DEBUG] visitPrimaryExp: 115 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(116) +[DEBUG] visitUnaryExp: putch(116) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 116 +[DEBUG] visitUnaryExp: 116 +[DEBUG] visitPrimaryExp: 116 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 函数 printMessage has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: isSafe 返回类型: int +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 +SymbolTable::addSymbol: stored graph with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: graph type_kind: 3 is_array: 1 dims: 0 4 +SymbolTable::addSymbol: stored color with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: color type_kind: 3 is_array: 1 dims: 0 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e32fd310, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: V +[DEBUG] visitPrimaryExp: V +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 +CheckLValue: found sym->name = V, sym->kind = 3 +绑定常量: V -> ConstDefContext +CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5563e32d4130 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e32fd310, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5563e32fed40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: V +[DEBUG] visitPrimaryExp: V +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 +CheckLValue: found sym->name = V, sym->kind = 3 +绑定常量: V -> ConstDefContext +CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5563e32d4130 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: graph[i][j] +[DEBUG] visitPrimaryExp: graph[i][j] +SymbolTable::lookup: found graph in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = graph, sym->kind = 2 +CheckLValue 绑定变量: graph, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 2 维, dims: 0 4 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e32fd310, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5563e32fed40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: color[j] +[DEBUG] visitPrimaryExp: color[j] +SymbolTable::lookup: found color in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = color, sym->kind = 2 +CheckLValue 绑定变量: color, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5563e32fed40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: color[i] +[DEBUG] visitPrimaryExp: color[i] +SymbolTable::lookup: found color in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = color, sym->kind = 2 +CheckLValue 绑定变量: color, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e32fd310, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5563e32fed40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5563e32fed40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e32fd310, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e32fd310, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 isSafe has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: graphColoring 返回类型: int +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 +SymbolTable::addSymbol: stored graph with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: graph type_kind: 3 is_array: 1 dims: 0 4 +SymbolTable::addSymbol: stored m with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: m type_kind: 1 is_array: 0 dims: +SymbolTable::addSymbol: stored i with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: i type_kind: 1 is_array: 0 dims: +SymbolTable::addSymbol: stored color with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: color type_kind: 3 is_array: 1 dims: 0 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 2 +CheckLValue 绑定变量: i, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: V +[DEBUG] visitPrimaryExp: V +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 +CheckLValue: found sym->name = V, sym->kind = 3 +绑定常量: V -> ConstDefContext +CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5563e32d4130 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: isSafe(graph,color) +[DEBUG] 函数调用: isSafe +[DEBUG] CheckFuncCall: isSafe +SymbolTable::lookup: found isSafe in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: graph +[DEBUG] visitUnaryExp: graph +[DEBUG] visitPrimaryExp: graph +SymbolTable::lookup: found graph in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = graph, sym->kind = 2 +CheckLValue 绑定变量: graph, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 2 维, dims: 0 4 +dim_count: 2, subscript_count: 0 +数组参数名作为地址 +[DEBUG] CheckExp: color +[DEBUG] visitUnaryExp: color +[DEBUG] visitPrimaryExp: color +SymbolTable::lookup: found color in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = color, sym->kind = 2 +CheckLValue 绑定变量: color, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 0 +数组参数名作为地址 +[DEBUG] 检查参数 0: 实参类型 3 形参类型 3 +[DEBUG] 检查参数 1: 实参类型 3 形参类型 3 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: printSolution(color) +[DEBUG] visitUnaryExp: printSolution(color) +[DEBUG] 函数调用: printSolution +[DEBUG] CheckFuncCall: printSolution +SymbolTable::lookup: found printSolution in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: color +[DEBUG] visitUnaryExp: color +[DEBUG] visitPrimaryExp: color +SymbolTable::lookup: found color in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = color, sym->kind = 2 +CheckLValue 绑定变量: color, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 0 +数组参数名作为地址 +[DEBUG] 检查参数 0: 实参类型 3 形参类型 3 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5563e3313cf0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: m +[DEBUG] visitPrimaryExp: m +SymbolTable::lookup: found m in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = m, sym->kind = 2 +CheckLValue 绑定变量: m, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found color in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = color, sym->kind = 2 +CheckLValue 绑定变量: color, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 2 +CheckLValue 绑定变量: i, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5563e3313cf0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: graphColoring(graph,m,i+1,color) +[DEBUG] 函数调用: graphColoring +[DEBUG] CheckFuncCall: graphColoring +SymbolTable::lookup: found graphColoring in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: graph +[DEBUG] visitUnaryExp: graph +[DEBUG] visitPrimaryExp: graph +SymbolTable::lookup: found graph in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = graph, sym->kind = 2 +CheckLValue 绑定变量: graph, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 2 维, dims: 0 4 +dim_count: 2, subscript_count: 0 +数组参数名作为地址 +[DEBUG] CheckExp: m +[DEBUG] visitUnaryExp: m +[DEBUG] visitPrimaryExp: m +SymbolTable::lookup: found m in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = m, sym->kind = 2 +CheckLValue 绑定变量: m, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 2 +CheckLValue 绑定变量: i, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: color +[DEBUG] visitUnaryExp: color +[DEBUG] visitPrimaryExp: color +SymbolTable::lookup: found color in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = color, sym->kind = 2 +CheckLValue 绑定变量: color, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 0 +数组参数名作为地址 +[DEBUG] 检查参数 0: 实参类型 3 形参类型 3 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 2: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 3: 实参类型 3 形参类型 3 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found color in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = color, sym->kind = 2 +CheckLValue 绑定变量: color, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 2 +CheckLValue 绑定变量: i, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5563e3313cf0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5563e3313cf0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 graphColoring has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: graph base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: V +[DEBUG] visitPrimaryExp: V +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 +CheckLValue: found sym->name = V, sym->kind = 3 +绑定常量: V -> ConstDefContext +CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5563e32d4130 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 +[DEBUG] dim[0] = 4 +[DEBUG] visitUnaryExp: V +[DEBUG] visitPrimaryExp: V +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 +CheckLValue: found sym->name = V, sym->kind = 3 +绑定常量: V -> ConstDefContext +CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5563e32d4130 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 +[DEBUG] dim[1] = 4 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 4 4 +[DEBUG] Element type: int +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored graph with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: graph type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: m base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 3 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +SymbolTable::addSymbol: stored m with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: m type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: color base_type: int is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: V +[DEBUG] visitPrimaryExp: V +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 +CheckLValue: found sym->name = V, sym->kind = 3 +绑定常量: V -> ConstDefContext +CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5563e32d4130 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 +[DEBUG] dim[0] = 4 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 4 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored color with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: color type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e3327b90, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: V +[DEBUG] visitPrimaryExp: V +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 +CheckLValue: found sym->name = V, sym->kind = 3 +绑定常量: V -> ConstDefContext +CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5563e32d4130 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found color in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = color, sym->kind = 0 +绑定变量: color -> VarDefContext +CheckLValue 绑定变量: color, sym->kind: 0, sym->var_def_ctx: 0x5563e3327410, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e3327b90, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e3327b90, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e3327b90, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: !graphColoring(graph,m,0,color) +[DEBUG] visitUnaryExp: graphColoring(graph,m,0,color) +[DEBUG] 函数调用: graphColoring +[DEBUG] CheckFuncCall: graphColoring +SymbolTable::lookup: found graphColoring in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: graph +[DEBUG] visitUnaryExp: graph +[DEBUG] visitPrimaryExp: graph +SymbolTable::lookup: found graph in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = graph, sym->kind = 0 +绑定变量: graph -> VarDefContext +CheckLValue 绑定变量: graph, sym->kind: 0, sym->var_def_ctx: 0x5563e331e1e0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: m +[DEBUG] visitUnaryExp: m +[DEBUG] visitPrimaryExp: m +SymbolTable::lookup: found m in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = m, sym->kind = 0 +绑定变量: m -> VarDefContext +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x5563e3326b30, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] CheckExp: color +[DEBUG] visitUnaryExp: color +[DEBUG] visitPrimaryExp: color +SymbolTable::lookup: found color in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = color, sym->kind = 0 +绑定变量: color -> VarDefContext +CheckLValue 绑定变量: color, sym->kind: 0, sym->var_def_ctx: 0x5563e3327410, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] 检查参数 0: 实参类型 3 形参类型 3 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 2: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 3: 实参类型 3 形参类型 3 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: printMessage() +[DEBUG] visitUnaryExp: printMessage() +[DEBUG] 函数调用: printMessage +[DEBUG] CheckFuncCall: printMessage +SymbolTable::lookup: found printMessage in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 +[DEBUG IRGEN] visitCompUnit +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG IRGEN] visitFuncDef: printSolution +[DEBUG] visitFuncDef: 创建函数 printSolution,返回类型: void,参数数量: 1 +[DEBUG] visitFuncDef: 函数对象地址: 0x5563e333b480 +[DEBUG] visitFuncDef: 为函数 printSolution 添加参数 color,类型: ptr_int32 +[error] [ir] 存储类型不匹配:期望 int32 + +========== test/test_case/functional/22_matrix_multiply.sy ========== +SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored starttime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored stoptime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored matrix_multiply with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 +[DEBUG] CheckConstDef: MAX_SIZE base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 100 +[DEBUG] visitPrimaryExp: 100 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: MAX_SIZE, ctx: 0x5627a389bf80 +SymbolTable::addSymbol: stored MAX_SIZE with kind=3, const_def_ctx=0x5627a389bf80 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x5627a389bf80 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckVarDef: a base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: MAX_SIZE +[DEBUG] visitPrimaryExp: MAX_SIZE +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 +CheckLValue: found sym->name = MAX_SIZE, sym->kind = 3 +绑定常量: MAX_SIZE -> ConstDefContext +CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5627a389bf80 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 +[DEBUG] dim[0] = 100 +[DEBUG] visitUnaryExp: MAX_SIZE +[DEBUG] visitPrimaryExp: MAX_SIZE +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 +CheckLValue: found sym->name = MAX_SIZE, sym->kind = 3 +绑定常量: MAX_SIZE -> ConstDefContext +CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5627a389bf80 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 +[DEBUG] dim[1] = 100 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 100 100 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored a with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: a type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: b base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: MAX_SIZE +[DEBUG] visitPrimaryExp: MAX_SIZE +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 +CheckLValue: found sym->name = MAX_SIZE, sym->kind = 3 +绑定常量: MAX_SIZE -> ConstDefContext +CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5627a389bf80 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 +[DEBUG] dim[0] = 100 +[DEBUG] visitUnaryExp: MAX_SIZE +[DEBUG] visitPrimaryExp: MAX_SIZE +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 +CheckLValue: found sym->name = MAX_SIZE, sym->kind = 3 +绑定常量: MAX_SIZE -> ConstDefContext +CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5627a389bf80 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 +[DEBUG] dim[1] = 100 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 100 100 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: b type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: res base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: MAX_SIZE +[DEBUG] visitPrimaryExp: MAX_SIZE +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 +CheckLValue: found sym->name = MAX_SIZE, sym->kind = 3 +绑定常量: MAX_SIZE -> ConstDefContext +CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5627a389bf80 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 +[DEBUG] dim[0] = 100 +[DEBUG] visitUnaryExp: MAX_SIZE +[DEBUG] visitPrimaryExp: MAX_SIZE +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 +CheckLValue: found sym->name = MAX_SIZE, sym->kind = 3 +绑定常量: MAX_SIZE -> ConstDefContext +CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5627a389bf80 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 +[DEBUG] dim[1] = 100 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 100 100 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored res with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: res type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: n1 base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored n1 with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: n1 type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: m1 base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored m1 with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: m1 type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: n2 base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored n2 with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: n2 type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: m2 base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored m2 with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: m2 type_kind: 1 is_array: 0 +[DEBUG] 进入函数: matrix_multiply 返回类型: void +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38afd00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: m1 +[DEBUG] visitPrimaryExp: m1 +SymbolTable::lookup: found m1 in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = m1, sym->kind = 0 +绑定变量: m1 -> VarDefContext +CheckLValue 绑定变量: m1, sym->kind: 0, sym->var_def_ctx: 0x5627a38acd70, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38b9c40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n2 +[DEBUG] visitPrimaryExp: n2 +SymbolTable::lookup: found n2 in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n2, sym->kind = 0 +绑定变量: n2 -> VarDefContext +CheckLValue 绑定变量: n2, sym->kind: 0, sym->var_def_ctx: 0x5627a38acfc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] CheckVarDef: k base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored k with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: k type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: k +[DEBUG] visitPrimaryExp: k +SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = k, sym->kind = 0 +绑定变量: k -> VarDefContext +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5627a38bb4d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n1 +[DEBUG] visitPrimaryExp: n1 +SymbolTable::lookup: found n1 in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n1, sym->kind = 0 +绑定变量: n1 -> VarDefContext +CheckLValue 绑定变量: n1, sym->kind: 0, sym->var_def_ctx: 0x5627a38aca80, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found res in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = res, sym->kind = 0 +绑定变量: res -> VarDefContext +CheckLValue 绑定变量: res, sym->kind: 0, sym->var_def_ctx: 0x5627a38a51d0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38afd00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38b9c40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: res[i][j]+a[i][k]*b[k][j] +[DEBUG] visitUnaryExp: res[i][j] +[DEBUG] visitPrimaryExp: res[i][j] +SymbolTable::lookup: found res in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = res, sym->kind = 0 +绑定变量: res -> VarDefContext +CheckLValue 绑定变量: res, sym->kind: 0, sym->var_def_ctx: 0x5627a38a51d0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38afd00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38b9c40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: a[i][k] +[DEBUG] visitPrimaryExp: a[i][k] +SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5627a38a15e0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38afd00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: k +[DEBUG] visitUnaryExp: k +[DEBUG] visitPrimaryExp: k +SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = k, sym->kind = 0 +绑定变量: k -> VarDefContext +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5627a38bb4d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: b[k][j] +[DEBUG] visitPrimaryExp: b[k][j] +SymbolTable::lookup: found b in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5627a38a49c0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: k +[DEBUG] visitUnaryExp: k +[DEBUG] visitPrimaryExp: k +SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = k, sym->kind = 0 +绑定变量: k -> VarDefContext +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5627a38bb4d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38b9c40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = k, sym->kind = 0 +绑定变量: k -> VarDefContext +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5627a38bb4d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: k+1 +[DEBUG] visitUnaryExp: k +[DEBUG] visitPrimaryExp: k +SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = k, sym->kind = 0 +绑定变量: k -> VarDefContext +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5627a38bb4d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38b9c40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38b9c40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38afd00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38afd00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 函数 matrix_multiply has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found m1 in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = m1, sym->kind = 0 +绑定变量: m1 -> VarDefContext +CheckLValue 绑定变量: m1, sym->kind: 0, sym->var_def_ctx: 0x5627a38acd70, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: getint() +[DEBUG] visitUnaryExp: getint() +[DEBUG] 函数调用: getint +[DEBUG] CheckFuncCall: getint +SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found n1 in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n1, sym->kind = 0 +绑定变量: n1 -> VarDefContext +CheckLValue 绑定变量: n1, sym->kind: 0, sym->var_def_ctx: 0x5627a38aca80, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: getint() +[DEBUG] visitUnaryExp: getint() +[DEBUG] 函数调用: getint +[DEBUG] CheckFuncCall: getint +SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: m1 +[DEBUG] visitPrimaryExp: m1 +SymbolTable::lookup: found m1 in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = m1, sym->kind = 0 +绑定变量: m1 -> VarDefContext +CheckLValue 绑定变量: m1, sym->kind: 0, sym->var_def_ctx: 0x5627a38acd70, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n1 +[DEBUG] visitPrimaryExp: n1 +SymbolTable::lookup: found n1 in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n1, sym->kind = 0 +绑定变量: n1 -> VarDefContext +CheckLValue 绑定变量: n1, sym->kind: 0, sym->var_def_ctx: 0x5627a38aca80, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5627a38a15e0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: getint() +[DEBUG] visitUnaryExp: getint() +[DEBUG] 函数调用: getint +[DEBUG] CheckFuncCall: getint +SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found m2 in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = m2, sym->kind = 0 +绑定变量: m2 -> VarDefContext +CheckLValue 绑定变量: m2, sym->kind: 0, sym->var_def_ctx: 0x5627a38ad1e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: getint() +[DEBUG] visitUnaryExp: getint() +[DEBUG] 函数调用: getint +[DEBUG] CheckFuncCall: getint +SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found n2 in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n2, sym->kind = 0 +绑定变量: n2 -> VarDefContext +CheckLValue 绑定变量: n2, sym->kind: 0, sym->var_def_ctx: 0x5627a38acfc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: getint() +[DEBUG] visitUnaryExp: getint() +[DEBUG] 函数调用: getint +[DEBUG] CheckFuncCall: getint +SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: m2 +[DEBUG] visitPrimaryExp: m2 +SymbolTable::lookup: found m2 in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = m2, sym->kind = 0 +绑定变量: m2 -> VarDefContext +CheckLValue 绑定变量: m2, sym->kind: 0, sym->var_def_ctx: 0x5627a38ad1e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n2 +[DEBUG] visitPrimaryExp: n2 +SymbolTable::lookup: found n2 in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n2, sym->kind = 0 +绑定变量: n2 -> VarDefContext +CheckLValue 绑定变量: n2, sym->kind: 0, sym->var_def_ctx: 0x5627a38acfc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found b in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5627a38a49c0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: getint() +[DEBUG] visitUnaryExp: getint() +[DEBUG] 函数调用: getint +[DEBUG] CheckFuncCall: getint +SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: matrix_multiply() +[DEBUG] visitUnaryExp: matrix_multiply() +[DEBUG] 函数调用: matrix_multiply +[DEBUG] CheckFuncCall: matrix_multiply +SymbolTable::lookup: found matrix_multiply in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: m1 +[DEBUG] visitPrimaryExp: m1 +SymbolTable::lookup: found m1 in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = m1, sym->kind = 0 +绑定变量: m1 -> VarDefContext +CheckLValue 绑定变量: m1, sym->kind: 0, sym->var_def_ctx: 0x5627a38acd70, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n2 +[DEBUG] visitPrimaryExp: n2 +SymbolTable::lookup: found n2 in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n2, sym->kind = 0 +绑定变量: n2 -> VarDefContext +CheckLValue 绑定变量: n2, sym->kind: 0, sym->var_def_ctx: 0x5627a38acfc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putint(res[i][j]) +[DEBUG] visitUnaryExp: putint(res[i][j]) +[DEBUG] 函数调用: putint +[DEBUG] CheckFuncCall: putint +SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: res[i][j] +[DEBUG] visitUnaryExp: res[i][j] +[DEBUG] visitPrimaryExp: res[i][j] +SymbolTable::lookup: found res in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = res, sym->kind = 0 +绑定变量: res -> VarDefContext +CheckLValue 绑定变量: res, sym->kind: 0, sym->var_def_ctx: 0x5627a38a51d0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(32) +[DEBUG] visitUnaryExp: putch(32) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 32 +[DEBUG] visitUnaryExp: 32 +[DEBUG] visitPrimaryExp: 32 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(10) +[DEBUG] visitUnaryExp: putch(10) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 +[DEBUG IRGEN] visitCompUnit +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: a +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 a +[DEBUG] HandleGlobalVariable: 变量 a 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 10000 +[DEBUG] HandleGlobalVariable: 创建全局数组: a +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: b +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 b +[DEBUG] HandleGlobalVariable: 变量 b 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 10000 +[DEBUG] HandleGlobalVariable: 创建全局数组: b +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: res +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 res +[DEBUG] HandleGlobalVariable: 变量 res 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 10000 +[DEBUG] HandleGlobalVariable: 创建全局数组: res +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: n1 +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 n1 +[DEBUG] HandleGlobalVariable: 变量 n1 是 int 类型 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: n1 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: m1 +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 m1 +[DEBUG] HandleGlobalVariable: 变量 m1 是 int 类型 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: m1 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: n2 +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 n2 +[DEBUG] HandleGlobalVariable: 变量 n2 是 int 类型 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: n2 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: m2 +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 m2 +[DEBUG] HandleGlobalVariable: 变量 m2 是 int 类型 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: m2 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG IRGEN] visitFuncDef: matrix_multiply +[DEBUG] visitFuncDef: 创建函数 matrix_multiply,返回类型: void,参数数量: 0 +[DEBUG] visitFuncDef: 函数对象地址: 0x5627a3926f10 +[DEBUG] visitFuncDef: 开始生成函数体 +[DEBUG IRGEN] visitBlock: {inti=0;while(iname = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642a3910, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: a+2 +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642a3910, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] CheckVarDef: b base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: a+3 +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642a3910, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: b type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: b+4 +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 4 +[DEBUG] visitPrimaryExp: 4 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = putch, sym->kind = 0 +绑定变量: putch -> VarDefContext +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: putch+a+b +[DEBUG] visitUnaryExp: putch +[DEBUG] visitPrimaryExp: putch +SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = putch, sym->kind = 0 +绑定变量: putch -> VarDefContext +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642a3910, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: b+5 +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 5 +[DEBUG] visitPrimaryExp: 5 +[DEBUG] CheckVarDef: main base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: b+6 +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 6 +[DEBUG] visitPrimaryExp: 6 +SymbolTable::addSymbol: stored main with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: main type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642a3910, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: a+main +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642a3910, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: main +[DEBUG] visitPrimaryExp: main +SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = main, sym->kind = 0 +绑定变量: main -> VarDefContext +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x5635642ba9c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = putch, sym->kind = 0 +绑定变量: putch -> VarDefContext +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: putch+a+b+main +[DEBUG] visitUnaryExp: putch +[DEBUG] visitPrimaryExp: putch +SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = putch, sym->kind = 0 +绑定变量: putch -> VarDefContext +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642a3910, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: main +[DEBUG] visitPrimaryExp: main +SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = main, sym->kind = 0 +绑定变量: main -> VarDefContext +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x5635642ba9c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: b+a +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642a3910, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckVarDef: a base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: main+7 +[DEBUG] visitUnaryExp: main +[DEBUG] visitPrimaryExp: main +SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = main, sym->kind = 0 +绑定变量: main -> VarDefContext +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x5635642ba9c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 7 +[DEBUG] visitPrimaryExp: 7 +SymbolTable::addSymbol: stored a with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: a type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found a in scope level 6, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642be910, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: a+8 +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 6, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642be910, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 8 +[DEBUG] visitPrimaryExp: 8 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = putch, sym->kind = 0 +绑定变量: putch -> VarDefContext +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: putch+a+b+main +[DEBUG] visitUnaryExp: putch +[DEBUG] visitPrimaryExp: putch +SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = putch, sym->kind = 0 +绑定变量: putch -> VarDefContext +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 6, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642be910, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: main +[DEBUG] visitPrimaryExp: main +SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = main, sym->kind = 0 +绑定变量: main -> VarDefContext +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x5635642ba9c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: b+a +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 6, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642be910, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckVarDef: b base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: main+9 +[DEBUG] visitUnaryExp: main +[DEBUG] visitPrimaryExp: main +SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = main, sym->kind = 0 +绑定变量: main -> VarDefContext +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x5635642ba9c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 9 +[DEBUG] visitPrimaryExp: 9 +SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: b type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found a in scope level 6, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642be910, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: a+10 +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 6, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642be910, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] CheckConstDef: a base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 11 +[DEBUG] visitPrimaryExp: 11 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: a, ctx: 0x5635642c5b30 +SymbolTable::addSymbol: stored a with kind=3, const_def_ctx=0x5635642c5b30 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found a in scope level 7, kind=3, const_def_ctx=0x5635642c5b30 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x5635642c5b30 +[DEBUG] 常量符号添加完成 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found b in scope level 7, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642c2510, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: b+12 +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 7, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642c2510, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 12 +[DEBUG] visitPrimaryExp: 12 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = putch, sym->kind = 0 +绑定变量: putch -> VarDefContext +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: putch+a+b+main +[DEBUG] visitUnaryExp: putch +[DEBUG] visitPrimaryExp: putch +SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = putch, sym->kind = 0 +绑定变量: putch -> VarDefContext +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 7, kind=3, const_def_ctx=0x5635642c5b30 +CheckLValue: found sym->name = a, sym->kind = 3 +绑定常量: a -> ConstDefContext +CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5635642c5b30 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 7, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642c2510, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: main +[DEBUG] visitPrimaryExp: main +SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = main, sym->kind = 0 +绑定变量: main -> VarDefContext +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x5635642ba9c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = main, sym->kind = 0 +绑定变量: main -> VarDefContext +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x5635642ba9c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: main+b +[DEBUG] visitUnaryExp: main +[DEBUG] visitPrimaryExp: main +SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = main, sym->kind = 0 +绑定变量: main -> VarDefContext +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x5635642ba9c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 7, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642c2510, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckVarDef: main base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: b+13 +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 7, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642c2510, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 13 +[DEBUG] visitPrimaryExp: 13 +SymbolTable::addSymbol: stored main with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: main type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found main in scope level 8, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = main, sym->kind = 0 +绑定变量: main -> VarDefContext +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x5635642bd630, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: main+a +[DEBUG] visitUnaryExp: main +[DEBUG] visitPrimaryExp: main +SymbolTable::lookup: found main in scope level 8, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = main, sym->kind = 0 +绑定变量: main -> VarDefContext +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x5635642bd630, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 7, kind=3, const_def_ctx=0x5635642c5b30 +CheckLValue: found sym->name = a, sym->kind = 3 +绑定常量: a -> ConstDefContext +CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5635642c5b30 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = putch, sym->kind = 0 +绑定变量: putch -> VarDefContext +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: putch+a+b+main +[DEBUG] visitUnaryExp: putch +[DEBUG] visitPrimaryExp: putch +SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = putch, sym->kind = 0 +绑定变量: putch -> VarDefContext +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 7, kind=3, const_def_ctx=0x5635642c5b30 +CheckLValue: found sym->name = a, sym->kind = 3 +绑定常量: a -> ConstDefContext +CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5635642c5b30 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 7, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642c2510, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: main +[DEBUG] visitPrimaryExp: main +SymbolTable::lookup: found main in scope level 8, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = main, sym->kind = 0 +绑定变量: main -> VarDefContext +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x5635642bd630, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = putch, sym->kind = 0 +绑定变量: putch -> VarDefContext +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: putch-main +[DEBUG] visitUnaryExp: putch +[DEBUG] visitPrimaryExp: putch +SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = putch, sym->kind = 0 +绑定变量: putch -> VarDefContext +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: main +[DEBUG] visitPrimaryExp: main +SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = main, sym->kind = 0 +绑定变量: main -> VarDefContext +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x5635642ba9c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = putch, sym->kind = 0 +绑定变量: putch -> VarDefContext +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: putch-b +[DEBUG] visitUnaryExp: putch +[DEBUG] visitPrimaryExp: putch +SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = putch, sym->kind = 0 +绑定变量: putch -> VarDefContext +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = putch, sym->kind = 0 +绑定变量: putch -> VarDefContext +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: putch-a +[DEBUG] visitUnaryExp: putch +[DEBUG] visitPrimaryExp: putch +SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = putch, sym->kind = 0 +绑定变量: putch -> VarDefContext +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642a3910, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: putch%77 +[DEBUG] visitUnaryExp: putch +[DEBUG] visitPrimaryExp: putch +SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = putch, sym->kind = 0 +绑定变量: putch -> VarDefContext +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 77 +[DEBUG] visitPrimaryExp: 77 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 +[DEBUG IRGEN] visitCompUnit +[DEBUG IRGEN] visitFuncDef: main +[DEBUG] visitFuncDef: 创建函数 main,返回类型: int,参数数量: 0 +[DEBUG] visitFuncDef: 函数对象地址: 0x5635642db4b0 +[DEBUG] visitFuncDef: 开始生成函数体 +[DEBUG IRGEN] visitBlock: {putch(97);putch(10);inta=1,putch=0;{a=a+2;intb=a+3;b=b+4;putch=putch+a+b;{b=b+5;intmain=b+6;a=a+main;putch=putch+a+b+main;{b=b+a;inta=main+7;a=a+8;putch=putch+a+b+main;{b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;}putch=putch-b;}putch=putch-a;}}returnputch%77;} +[DEBUG IRGEN] visitBlockItem: putch(97); +[DEBUG IRGEN] visitStmt: putch(97); +[DEBUG IRGEN] EvalExpr: putch(97) +[DEBUG IRGEN] visitAddExp: putch(97) +[DEBUG IRGEN] visitMulExp: putch(97) +[DEBUG IRGEN] visitCallExp: 调用函数 putch +[DEBUG IRGEN] EvalExpr: 97 +[DEBUG IRGEN] visitAddExp: 97 +[DEBUG IRGEN] visitMulExp: 97 +[DEBUG IRGEN] visitPrimaryExp: 97 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 97 created as 0x5635642dc5b0 +[DEBUG] EvalExpr: success, result = 0x5635642dc5b0 +[DEBUG IRGEN] visitCallExp: 收集到 1 个参数 +[DEBUG] EvalExpr: success, result = 0x5635642dc670 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: putch(10); +[DEBUG IRGEN] visitStmt: putch(10); +[DEBUG IRGEN] EvalExpr: putch(10) +[DEBUG IRGEN] visitAddExp: putch(10) +[DEBUG IRGEN] visitMulExp: putch(10) +[DEBUG IRGEN] visitCallExp: 调用函数 putch +[DEBUG IRGEN] EvalExpr: 10 +[DEBUG IRGEN] visitAddExp: 10 +[DEBUG IRGEN] visitMulExp: 10 +[DEBUG IRGEN] visitPrimaryExp: 10 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 10 created as 0x5635642dc6f0 +[DEBUG] EvalExpr: success, result = 0x5635642dc6f0 +[DEBUG IRGEN] visitCallExp: 收集到 1 个参数 +[DEBUG] EvalExpr: success, result = 0x5635642dc670 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: inta=1,putch=0; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: a +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 a +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 1 +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x5635642dc890 +[DEBUG] EvalExpr: success, result = 0x5635642dc890 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: putch +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 putch +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 0 +[DEBUG IRGEN] visitAddExp: 0 +[DEBUG IRGEN] visitMulExp: 0 +[DEBUG IRGEN] visitPrimaryExp: 0 +[DEBUG] visitPrimaryExp +[DEBUG] EvalExpr: success, result = 0x5635642dc670 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: {a=a+2;intb=a+3;b=b+4;putch=putch+a+b;{b=b+5;intmain=b+6;a=a+main;putch=putch+a+b+main;{b=b+a;inta=main+7;a=a+8;putch=putch+a+b+main;{b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;}putch=putch-b;}putch=putch-a;}} +[DEBUG IRGEN] visitStmt: {a=a+2;intb=a+3;b=b+4;putch=putch+a+b;{b=b+5;intmain=b+6;a=a+main;putch=putch+a+b+main;{b=b+a;inta=main+7;a=a+8;putch=putch+a+b+main;{b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;}putch=putch-b;}putch=putch-a;}} +[DEBUG IRGEN] visitBlock: {a=a+2;intb=a+3;b=b+4;putch=putch+a+b;{b=b+5;intmain=b+6;a=a+main;putch=putch+a+b+main;{b=b+a;inta=main+7;a=a+8;putch=putch+a+b+main;{b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;}putch=putch-b;}putch=putch-a;}} +[DEBUG IRGEN] visitBlockItem: a=a+2; +[DEBUG IRGEN] visitStmt: a=a+2; +[DEBUG IRGEN] HandleAssignStmt: a=a+2; +[DEBUG IRGEN] EvalExpr: a+2 +[DEBUG IRGEN] visitAddExp: a+2 +[DEBUG IRGEN] visitAddExp: a +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG IRGEN] visitMulExp: 2 +[DEBUG IRGEN] visitPrimaryExp: 2 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 2 created as 0x5635642dcdb0 +[DEBUG] visitAddExp: left=0x5635642dccf0, type=int, right=0x5635642dcdb0, type=int +[DEBUG] EvalExpr: success, result = 0x5635642dce10 +[DEBUG] HandleAssignStmt: assigning to a +[DEBUG] HandleAssignStmt: found in storage_map_ for a, ptr = 0x5635642d33d0 +[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x5635642d33d0, rhs = 0x5635642dce10 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: intb=a+3; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: b +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 b +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: a+3 +[DEBUG IRGEN] visitAddExp: a+3 +[DEBUG IRGEN] visitAddExp: a +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG IRGEN] visitMulExp: 3 +[DEBUG IRGEN] visitPrimaryExp: 3 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 3 created as 0x5635642dd180 +[DEBUG] visitAddExp: left=0x5635642dd0e0, type=int, right=0x5635642dd180, type=int +[DEBUG] EvalExpr: success, result = 0x5635642dd200 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: b=b+4; +[DEBUG IRGEN] visitStmt: b=b+4; +[DEBUG IRGEN] HandleAssignStmt: b=b+4; +[DEBUG IRGEN] EvalExpr: b+4 +[DEBUG IRGEN] visitAddExp: b+4 +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitMulExp: 4 +[DEBUG IRGEN] visitPrimaryExp: 4 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 4 created as 0x5635642dd480 +[DEBUG] visitAddExp: left=0x5635642dd3c0, type=int, right=0x5635642dd480, type=int +[DEBUG] EvalExpr: success, result = 0x5635642dd4e0 +[DEBUG] HandleAssignStmt: assigning to b +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x5635642dd040 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x5635642dd040, rhs = 0x5635642dd4e0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: putch=putch+a+b; +[DEBUG IRGEN] visitStmt: putch=putch+a+b; +[DEBUG IRGEN] HandleAssignStmt: putch=putch+a+b; +[DEBUG IRGEN] EvalExpr: putch+a+b +[DEBUG IRGEN] visitAddExp: putch+a+b +[DEBUG IRGEN] visitAddExp: putch+a +[DEBUG IRGEN] visitAddExp: putch +[DEBUG IRGEN] visitMulExp: putch +[DEBUG IRGEN] visitPrimaryExp: putch +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: putch +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] visitAddExp: left=0x5635642dd6a0, type=int, right=0x5635642dd720, type=int +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG] visitAddExp: left=0x5635642dd870, type=int, right=0x5635642dd950, type=int +[DEBUG] EvalExpr: success, result = 0x5635642dd9f0 +[DEBUG] HandleAssignStmt: assigning to putch +[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x5635642dc9d0 +[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x5635642dc9d0, rhs = 0x5635642dd9f0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: {b=b+5;intmain=b+6;a=a+main;putch=putch+a+b+main;{b=b+a;inta=main+7;a=a+8;putch=putch+a+b+main;{b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;}putch=putch-b;}putch=putch-a;} +[DEBUG IRGEN] visitStmt: {b=b+5;intmain=b+6;a=a+main;putch=putch+a+b+main;{b=b+a;inta=main+7;a=a+8;putch=putch+a+b+main;{b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;}putch=putch-b;}putch=putch-a;} +[DEBUG IRGEN] visitBlock: {b=b+5;intmain=b+6;a=a+main;putch=putch+a+b+main;{b=b+a;inta=main+7;a=a+8;putch=putch+a+b+main;{b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;}putch=putch-b;}putch=putch-a;} +[DEBUG IRGEN] visitBlockItem: b=b+5; +[DEBUG IRGEN] visitStmt: b=b+5; +[DEBUG IRGEN] HandleAssignStmt: b=b+5; +[DEBUG IRGEN] EvalExpr: b+5 +[DEBUG IRGEN] visitAddExp: b+5 +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitMulExp: 5 +[DEBUG IRGEN] visitPrimaryExp: 5 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 5 created as 0x5635642ddd20 +[DEBUG] visitAddExp: left=0x5635642ddbd0, type=int, right=0x5635642ddd20, type=int +[DEBUG] EvalExpr: success, result = 0x5635642ddd80 +[DEBUG] HandleAssignStmt: assigning to b +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x5635642dd040 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x5635642dd040, rhs = 0x5635642ddd80 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: intmain=b+6; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: main +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 main +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: b+6 +[DEBUG IRGEN] visitAddExp: b+6 +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitMulExp: 6 +[DEBUG IRGEN] visitPrimaryExp: 6 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 6 created as 0x5635642de080 +[DEBUG] visitAddExp: left=0x5635642ddfe0, type=int, right=0x5635642de080, type=int +[DEBUG] EvalExpr: success, result = 0x5635642de100 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: a=a+main; +[DEBUG IRGEN] visitStmt: a=a+main; +[DEBUG IRGEN] HandleAssignStmt: a=a+main; +[DEBUG IRGEN] EvalExpr: a+main +[DEBUG IRGEN] visitAddExp: a+main +[DEBUG IRGEN] visitAddExp: a +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG IRGEN] visitMulExp: main +[DEBUG IRGEN] visitPrimaryExp: main +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: main +[DEBUG] visitAddExp: left=0x5635642de2c0, type=int, right=0x5635642de340, type=int +[DEBUG] EvalExpr: success, result = 0x5635642de420 +[DEBUG] HandleAssignStmt: assigning to a +[DEBUG] HandleAssignStmt: found in storage_map_ for a, ptr = 0x5635642d33d0 +[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x5635642d33d0, rhs = 0x5635642de420 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: putch=putch+a+b+main; +[DEBUG IRGEN] visitStmt: putch=putch+a+b+main; +[DEBUG IRGEN] HandleAssignStmt: putch=putch+a+b+main; +[DEBUG IRGEN] EvalExpr: putch+a+b+main +[DEBUG IRGEN] visitAddExp: putch+a+b+main +[DEBUG IRGEN] visitAddExp: putch+a+b +[DEBUG IRGEN] visitAddExp: putch+a +[DEBUG IRGEN] visitAddExp: putch +[DEBUG IRGEN] visitMulExp: putch +[DEBUG IRGEN] visitPrimaryExp: putch +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: putch +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] visitAddExp: left=0x5635642de5c0, type=int, right=0x5635642de640, type=int +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG] visitAddExp: left=0x5635642de6e0, type=int, right=0x5635642de7c0, type=int +[DEBUG IRGEN] visitMulExp: main +[DEBUG IRGEN] visitPrimaryExp: main +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: main +[DEBUG] visitAddExp: left=0x5635642de860, type=int, right=0x5635642de940, type=int +[DEBUG] EvalExpr: success, result = 0x5635642de9e0 +[DEBUG] HandleAssignStmt: assigning to putch +[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x5635642dc9d0 +[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x5635642dc9d0, rhs = 0x5635642de9e0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: {b=b+a;inta=main+7;a=a+8;putch=putch+a+b+main;{b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;}putch=putch-b;} +[DEBUG IRGEN] visitStmt: {b=b+a;inta=main+7;a=a+8;putch=putch+a+b+main;{b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;}putch=putch-b;} +[DEBUG IRGEN] visitBlock: {b=b+a;inta=main+7;a=a+8;putch=putch+a+b+main;{b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;}putch=putch-b;} +[DEBUG IRGEN] visitBlockItem: b=b+a; +[DEBUG IRGEN] visitStmt: b=b+a; +[DEBUG IRGEN] HandleAssignStmt: b=b+a; +[DEBUG IRGEN] EvalExpr: b+a +[DEBUG IRGEN] visitAddExp: b+a +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] visitAddExp: left=0x5635642dece0, type=int, right=0x5635642ded60, type=int +[DEBUG] EvalExpr: success, result = 0x5635642def70 +[DEBUG] HandleAssignStmt: assigning to b +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x5635642dd040 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x5635642dd040, rhs = 0x5635642def70 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: inta=main+7; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: a +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 a +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: main+7 +[DEBUG IRGEN] visitAddExp: main+7 +[DEBUG IRGEN] visitAddExp: main +[DEBUG IRGEN] visitMulExp: main +[DEBUG IRGEN] visitPrimaryExp: main +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: main +[DEBUG IRGEN] visitMulExp: 7 +[DEBUG IRGEN] visitPrimaryExp: 7 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 7 created as 0x5635642df210 +[DEBUG] visitAddExp: left=0x5635642df170, type=int, right=0x5635642df210, type=int +[DEBUG] EvalExpr: success, result = 0x5635642df290 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: a=a+8; +[DEBUG IRGEN] visitStmt: a=a+8; +[DEBUG IRGEN] HandleAssignStmt: a=a+8; +[DEBUG IRGEN] EvalExpr: a+8 +[DEBUG IRGEN] visitAddExp: a+8 +[DEBUG IRGEN] visitAddExp: a +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG IRGEN] visitMulExp: 8 +[DEBUG IRGEN] visitPrimaryExp: 8 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 8 created as 0x5635642df4d0 +[DEBUG] visitAddExp: left=0x5635642df450, type=int, right=0x5635642df4d0, type=int +[DEBUG] EvalExpr: success, result = 0x5635642df530 +[DEBUG] HandleAssignStmt: assigning to a +[DEBUG] HandleAssignStmt: found in storage_map_ for a, ptr = 0x5635642df0d0 +[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x5635642df0d0, rhs = 0x5635642df530 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: putch=putch+a+b+main; +[DEBUG IRGEN] visitStmt: putch=putch+a+b+main; +[DEBUG IRGEN] HandleAssignStmt: putch=putch+a+b+main; +[DEBUG IRGEN] EvalExpr: putch+a+b+main +[DEBUG IRGEN] visitAddExp: putch+a+b+main +[DEBUG IRGEN] visitAddExp: putch+a+b +[DEBUG IRGEN] visitAddExp: putch+a +[DEBUG IRGEN] visitAddExp: putch +[DEBUG IRGEN] visitMulExp: putch +[DEBUG IRGEN] visitPrimaryExp: putch +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: putch +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] visitAddExp: left=0x5635642df6f0, type=int, right=0x5635642df770, type=int +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG] visitAddExp: left=0x5635642df810, type=int, right=0x5635642df8f0, type=int +[DEBUG IRGEN] visitMulExp: main +[DEBUG IRGEN] visitPrimaryExp: main +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: main +[DEBUG] visitAddExp: left=0x5635642df990, type=int, right=0x5635642dfa70, type=int +[DEBUG] EvalExpr: success, result = 0x5635642dfb10 +[DEBUG] HandleAssignStmt: assigning to putch +[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x5635642dc9d0 +[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x5635642dc9d0, rhs = 0x5635642dfb10 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: {b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;} +[DEBUG IRGEN] visitStmt: {b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;} +[DEBUG IRGEN] visitBlock: {b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;} +[DEBUG IRGEN] visitBlockItem: b=b+a; +[DEBUG IRGEN] visitStmt: b=b+a; +[DEBUG IRGEN] HandleAssignStmt: b=b+a; +[DEBUG IRGEN] EvalExpr: b+a +[DEBUG IRGEN] visitAddExp: b+a +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] visitAddExp: left=0x5635642dfd40, type=int, right=0x5635642dfdc0, type=int +[DEBUG] EvalExpr: success, result = 0x5635642dfe40 +[DEBUG] HandleAssignStmt: assigning to b +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x5635642dd040 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x5635642dd040, rhs = 0x5635642dfe40 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: intb=main+9; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: b +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 b +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: main+9 +[DEBUG IRGEN] visitAddExp: main+9 +[DEBUG IRGEN] visitAddExp: main +[DEBUG IRGEN] visitMulExp: main +[DEBUG IRGEN] visitPrimaryExp: main +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: main +[DEBUG IRGEN] visitMulExp: 9 +[DEBUG IRGEN] visitPrimaryExp: 9 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 9 created as 0x5635642e0140 +[DEBUG] visitAddExp: left=0x5635642e00a0, type=int, right=0x5635642e0140, type=int +[DEBUG] EvalExpr: success, result = 0x5635642e01c0 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: a=a+10; +[DEBUG IRGEN] visitStmt: a=a+10; +[DEBUG IRGEN] HandleAssignStmt: a=a+10; +[DEBUG IRGEN] EvalExpr: a+10 +[DEBUG IRGEN] visitAddExp: a+10 +[DEBUG IRGEN] visitAddExp: a +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG IRGEN] visitMulExp: 10 +[DEBUG IRGEN] visitPrimaryExp: 10 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 10 created as 0x5635642dc6f0 +[DEBUG] visitAddExp: left=0x5635642e0380, type=int, right=0x5635642dc6f0, type=int +[DEBUG] EvalExpr: success, result = 0x5635642e0400 +[DEBUG] HandleAssignStmt: assigning to a +[DEBUG] HandleAssignStmt: found in storage_map_ for a, ptr = 0x5635642df0d0 +[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x5635642df0d0, rhs = 0x5635642e0400 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: constinta=11; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: b=b+12; +[DEBUG IRGEN] visitStmt: b=b+12; +[DEBUG IRGEN] HandleAssignStmt: b=b+12; +[DEBUG IRGEN] EvalExpr: b+12 +[DEBUG IRGEN] visitAddExp: b+12 +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitMulExp: 12 +[DEBUG IRGEN] visitPrimaryExp: 12 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 12 created as 0x5635642e0700 +[DEBUG] visitAddExp: left=0x5635642e0640, type=int, right=0x5635642e0700, type=int +[DEBUG] EvalExpr: success, result = 0x5635642e0760 +[DEBUG] HandleAssignStmt: assigning to b +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x5635642e0000 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x5635642e0000, rhs = 0x5635642e0760 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: putch=putch+a+b+main; +[DEBUG IRGEN] visitStmt: putch=putch+a+b+main; +[DEBUG IRGEN] HandleAssignStmt: putch=putch+a+b+main; +[DEBUG IRGEN] EvalExpr: putch+a+b+main +[DEBUG IRGEN] visitAddExp: putch+a+b+main +[DEBUG IRGEN] visitAddExp: putch+a+b +[DEBUG IRGEN] visitAddExp: putch+a +[DEBUG IRGEN] visitAddExp: putch +[DEBUG IRGEN] visitMulExp: putch +[DEBUG IRGEN] visitPrimaryExp: putch +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: putch +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] visitLVal: constant a +[DEBUG] visitAddExp: left=0x5635642e0920, type=int, right=0x5635642e0580, type=int +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG] visitAddExp: left=0x5635642e09a0, type=int, right=0x5635642e0a80, type=int +[DEBUG IRGEN] visitMulExp: main +[DEBUG IRGEN] visitPrimaryExp: main +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: main +[DEBUG] visitAddExp: left=0x5635642e0b20, type=int, right=0x5635642e0c00, type=int +[DEBUG] EvalExpr: success, result = 0x5635642e0ca0 +[DEBUG] HandleAssignStmt: assigning to putch +[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x5635642dc9d0 +[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x5635642dc9d0, rhs = 0x5635642e0ca0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: {main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;} +[DEBUG IRGEN] visitStmt: {main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;} +[DEBUG IRGEN] visitBlock: {main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;} +[DEBUG IRGEN] visitBlockItem: main=main+b; +[DEBUG IRGEN] visitStmt: main=main+b; +[DEBUG IRGEN] HandleAssignStmt: main=main+b; +[DEBUG IRGEN] EvalExpr: main+b +[DEBUG IRGEN] visitAddExp: main+b +[DEBUG IRGEN] visitAddExp: main +[DEBUG IRGEN] visitMulExp: main +[DEBUG IRGEN] visitPrimaryExp: main +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: main +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG] visitAddExp: left=0x5635642e1060, type=int, right=0x5635642e10e0, type=int +[DEBUG] EvalExpr: success, result = 0x5635642e1160 +[DEBUG] HandleAssignStmt: assigning to main +[DEBUG] HandleAssignStmt: found in storage_map_ for main, ptr = 0x5635642ddf40 +[DEBUG] HandleAssignStmt: scalar assignment to main, ptr = 0x5635642ddf40, rhs = 0x5635642e1160 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: intmain=b+13; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: main +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 main +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: b+13 +[DEBUG IRGEN] visitAddExp: b+13 +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitMulExp: 13 +[DEBUG IRGEN] visitPrimaryExp: 13 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 13 created as 0x5635642e15f0 +[DEBUG] visitAddExp: left=0x5635642e1550, type=int, right=0x5635642e15f0, type=int +[DEBUG] EvalExpr: success, result = 0x5635642e1670 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: main=main+a; +[DEBUG IRGEN] visitStmt: main=main+a; +[DEBUG IRGEN] HandleAssignStmt: main=main+a; +[DEBUG IRGEN] EvalExpr: main+a +[DEBUG IRGEN] visitAddExp: main+a +[DEBUG IRGEN] visitAddExp: main +[DEBUG IRGEN] visitMulExp: main +[DEBUG IRGEN] visitPrimaryExp: main +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: main +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] visitLVal: constant a +[DEBUG] visitAddExp: left=0x5635642e1830, type=int, right=0x5635642e0580, type=int +[DEBUG] EvalExpr: success, result = 0x5635642e18b0 +[DEBUG] HandleAssignStmt: assigning to main +[DEBUG] HandleAssignStmt: found in storage_map_ for main, ptr = 0x5635642e14b0 +[DEBUG] HandleAssignStmt: scalar assignment to main, ptr = 0x5635642e14b0, rhs = 0x5635642e18b0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: putch=putch+a+b+main; +[DEBUG IRGEN] visitStmt: putch=putch+a+b+main; +[DEBUG IRGEN] HandleAssignStmt: putch=putch+a+b+main; +[DEBUG IRGEN] EvalExpr: putch+a+b+main +[DEBUG IRGEN] visitAddExp: putch+a+b+main +[DEBUG IRGEN] visitAddExp: putch+a+b +[DEBUG IRGEN] visitAddExp: putch+a +[DEBUG IRGEN] visitAddExp: putch +[DEBUG IRGEN] visitMulExp: putch +[DEBUG IRGEN] visitPrimaryExp: putch +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: putch +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] visitLVal: constant a +[DEBUG] visitAddExp: left=0x5635642e1a50, type=int, right=0x5635642e0580, type=int +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG] visitAddExp: left=0x5635642e1ad0, type=int, right=0x5635642e1bb0, type=int +[DEBUG IRGEN] visitMulExp: main +[DEBUG IRGEN] visitPrimaryExp: main +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: main +[DEBUG] visitAddExp: left=0x5635642e1c30, type=int, right=0x5635642e1d10, type=int +[DEBUG] EvalExpr: success, result = 0x5635642e1db0 +[DEBUG] HandleAssignStmt: assigning to putch +[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x5635642dc9d0 +[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x5635642dc9d0, rhs = 0x5635642e1db0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: putch=putch-main; +[DEBUG IRGEN] visitStmt: putch=putch-main; +[DEBUG IRGEN] HandleAssignStmt: putch=putch-main; +[DEBUG IRGEN] EvalExpr: putch-main +[DEBUG IRGEN] visitAddExp: putch-main +[DEBUG IRGEN] visitAddExp: putch +[DEBUG IRGEN] visitMulExp: putch +[DEBUG IRGEN] visitPrimaryExp: putch +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: putch +[DEBUG IRGEN] visitMulExp: main +[DEBUG IRGEN] visitPrimaryExp: main +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: main +[DEBUG] visitAddExp: left=0x5635642e1f70, type=int, right=0x5635642e1ff0, type=int +[DEBUG] EvalExpr: success, result = 0x5635642e2090 +[DEBUG] HandleAssignStmt: assigning to putch +[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x5635642dc9d0 +[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x5635642dc9d0, rhs = 0x5635642e2090 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: putch=putch-b; +[DEBUG IRGEN] visitStmt: putch=putch-b; +[DEBUG IRGEN] HandleAssignStmt: putch=putch-b; +[DEBUG IRGEN] EvalExpr: putch-b +[DEBUG IRGEN] visitAddExp: putch-b +[DEBUG IRGEN] visitAddExp: putch +[DEBUG IRGEN] visitMulExp: putch +[DEBUG IRGEN] visitPrimaryExp: putch +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: putch +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG] visitAddExp: left=0x5635642e2250, type=int, right=0x5635642e22d0, type=int +[DEBUG] EvalExpr: success, result = 0x5635642e2370 +[DEBUG] HandleAssignStmt: assigning to putch +[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x5635642dc9d0 +[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x5635642dc9d0, rhs = 0x5635642e2370 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: putch=putch-a; +[DEBUG IRGEN] visitStmt: putch=putch-a; +[DEBUG IRGEN] HandleAssignStmt: putch=putch-a; +[DEBUG IRGEN] EvalExpr: putch-a +[DEBUG IRGEN] visitAddExp: putch-a +[DEBUG IRGEN] visitAddExp: putch +[DEBUG IRGEN] visitMulExp: putch +[DEBUG IRGEN] visitPrimaryExp: putch +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: putch +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] visitLVal: constant a +[DEBUG] visitAddExp: left=0x5635642e2530, type=int, right=0x5635642e0580, type=int +[DEBUG] EvalExpr: success, result = 0x5635642e25b0 +[DEBUG] HandleAssignStmt: assigning to putch +[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x5635642dc9d0 +[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x5635642dc9d0, rhs = 0x5635642e25b0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG] current insert block: entry +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: returnputch%77; +[DEBUG IRGEN] visitStmt: returnputch%77; +[DEBUG IRGEN] HandleReturnStmt: returnputch%77; +[DEBUG IRGEN] EvalExpr: putch%77 +[DEBUG IRGEN] visitAddExp: putch%77 +[DEBUG IRGEN] visitMulExp: putch%77 +[DEBUG IRGEN] visitMulExp: putch +[DEBUG IRGEN] visitPrimaryExp: putch +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: putch +[DEBUG IRGEN] visitPrimaryExp: 77 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 77 created as 0x5635642e2ae0 +[DEBUG] visitMulExp: left=0x5635642e2a60, type=int, right=0x5635642e2ae0, type=int +[DEBUG] EvalExpr: success, result = 0x5635642e2b60 +[DEBUG] visitFuncDef: 函数 main 生成完成 +define i32 @getint() { +entry: +} +define i32 @getch() { +entry: +} +define i32 @getarray() { +entry: +} +define void @putint() { +entry: +} +define void @putch() { +entry: +} +define void @putarray() { +entry: +} +define void @puts() { +entry: +} +define void @_sysy_starttime() { +entry: +} +define void @_sysy_stoptime() { +entry: +} +define void @starttime() { +entry: +} +define void @stoptime() { +entry: +} +define i32 @read_map() { +entry: +} +define i32 @float_eq() { +entry: +} +define i32* @memset() { +entry: +} +define i32 @main() { +entry: + %t0 = call void @putch(i32 97) + %t1 = call void @putch(i32 10) + %t2_a = alloca i32 + store i32 1, i32* %t2_a + %t3_putch = alloca i32 + store i32 0, i32* %t3_putch + %t4 = load i32, i32* %t2_a + %t5 = add i32 %t4, 2 + store i32 %t5, i32* %t2_a + %t6_b = alloca i32 + %t7 = load i32, i32* %t2_a + %t8 = add i32 %t7, 3 + store i32 %t8, i32* %t6_b + %t9 = load i32, i32* %t6_b + %t10 = add i32 %t9, 4 + store i32 %t10, i32* %t6_b + %t11 = load i32, i32* %t3_putch + %t12 = load i32, i32* %t2_a + %t13 = add i32 %t11, %t12 + %t14 = load i32, i32* %t6_b + %t15 = add i32 %t13, %t14 + store i32 %t15, i32* %t3_putch + %t16 = load i32, i32* %t6_b + %t17 = add i32 %t16, 5 + store i32 %t17, i32* %t6_b + %t18_main = alloca i32 + %t19 = load i32, i32* %t6_b + %t20 = add i32 %t19, 6 + store i32 %t20, i32* %t18_main + %t21 = load i32, i32* %t2_a + %t22 = load i32, i32* %t18_main + %t23 = add i32 %t21, %t22 + store i32 %t23, i32* %t2_a + %t24 = load i32, i32* %t3_putch + %t25 = load i32, i32* %t2_a + %t26 = add i32 %t24, %t25 + %t27 = load i32, i32* %t6_b + %t28 = add i32 %t26, %t27 + %t29 = load i32, i32* %t18_main + %t30 = add i32 %t28, %t29 + store i32 %t30, i32* %t3_putch + %t31 = load i32, i32* %t6_b + %t32 = load i32, i32* %t2_a + %t33 = add i32 %t31, %t32 + store i32 %t33, i32* %t6_b + %t34_a = alloca i32 + %t35 = load i32, i32* %t18_main + %t36 = add i32 %t35, 7 + store i32 %t36, i32* %t34_a + %t37 = load i32, i32* %t34_a + %t38 = add i32 %t37, 8 + store i32 %t38, i32* %t34_a + %t39 = load i32, i32* %t3_putch + %t40 = load i32, i32* %t34_a + %t41 = add i32 %t39, %t40 + %t42 = load i32, i32* %t6_b + %t43 = add i32 %t41, %t42 + %t44 = load i32, i32* %t18_main + %t45 = add i32 %t43, %t44 + store i32 %t45, i32* %t3_putch + %t46 = load i32, i32* %t6_b + %t47 = load i32, i32* %t34_a + %t48 = add i32 %t46, %t47 + store i32 %t48, i32* %t6_b + %t49_b = alloca i32 + %t50 = load i32, i32* %t18_main + %t51 = add i32 %t50, 9 + store i32 %t51, i32* %t49_b + %t52 = load i32, i32* %t34_a + %t53 = add i32 %t52, 10 + store i32 %t53, i32* %t34_a + %t54 = load i32, i32* %t49_b + %t55 = add i32 %t54, 12 + store i32 %t55, i32* %t49_b + %t56 = load i32, i32* %t3_putch + %t57 = add i32 %t56, 11 + %t58 = load i32, i32* %t49_b + %t59 = add i32 %t57, %t58 + %t60 = load i32, i32* %t18_main + %t61 = add i32 %t59, %t60 + store i32 %t61, i32* %t3_putch + %t62 = load i32, i32* %t18_main + %t63 = load i32, i32* %t49_b + %t64 = add i32 %t62, %t63 + store i32 %t64, i32* %t18_main + %t65_main = alloca i32 + %t66 = load i32, i32* %t49_b + %t67 = add i32 %t66, 13 + store i32 %t67, i32* %t65_main + %t68 = load i32, i32* %t65_main + %t69 = add i32 %t68, 11 + store i32 %t69, i32* %t65_main + %t70 = load i32, i32* %t3_putch + %t71 = add i32 %t70, 11 + %t72 = load i32, i32* %t49_b + %t73 = add i32 %t71, %t72 + %t74 = load i32, i32* %t65_main + %t75 = add i32 %t73, %t74 + store i32 %t75, i32* %t3_putch + %t76 = load i32, i32* %t3_putch + %t77 = load i32, i32* %t18_main + %t78 = sub i32 %t76, %t77 + store i32 %t78, i32* %t3_putch + %t79 = load i32, i32* %t3_putch + %t80 = load i32, i32* %t6_b + %t81 = sub i32 %t79, %t80 + store i32 %t81, i32* %t3_putch + %t82 = load i32, i32* %t3_putch + %t83 = sub i32 %t82, 11 + store i32 %t83, i32* %t3_putch + %t84 = load i32, i32* %t3_putch + %t85 = mod i32 %t84, 77 + ret i32 %t85 +} + +========== test/test_case/functional/29_break.sy ========== +SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored starttime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored stoptime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5635d7c34d40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] CheckVarDef: sum base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored sum with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: sum type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sum, sym->kind = 0 +绑定变量: sum -> VarDefContext +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x5635d7c3c1f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5635d7c34d40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 100 +[DEBUG] visitPrimaryExp: 100 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5635d7c34d40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 50 +[DEBUG] visitPrimaryExp: 50 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Break +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sum, sym->kind = 0 +绑定变量: sum -> VarDefContext +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x5635d7c3c1f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: sum+i +[DEBUG] visitUnaryExp: sum +[DEBUG] visitPrimaryExp: sum +SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sum, sym->kind = 0 +绑定变量: sum -> VarDefContext +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x5635d7c3c1f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5635d7c34d40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5635d7c34d40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5635d7c34d40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: sum +[DEBUG] visitUnaryExp: sum +[DEBUG] visitPrimaryExp: sum +SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sum, sym->kind = 0 +绑定变量: sum -> VarDefContext +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x5635d7c3c1f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 +[DEBUG IRGEN] visitCompUnit +[DEBUG IRGEN] visitFuncDef: main +[DEBUG] visitFuncDef: 创建函数 main,返回类型: int,参数数量: 0 +[DEBUG] visitFuncDef: 函数对象地址: 0x5635d7c55790 +[DEBUG] visitFuncDef: 开始生成函数体 +[DEBUG IRGEN] visitBlock: {inti;i=0;intsum;sum=0;while(i<100){if(i==50){break;}sum=sum+i;i=i+1;}returnsum;} +[DEBUG IRGEN] visitBlockItem: inti; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: i +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 i +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: i=0; +[DEBUG IRGEN] visitStmt: i=0; +[DEBUG IRGEN] HandleAssignStmt: i=0; +[DEBUG IRGEN] EvalExpr: 0 +[DEBUG IRGEN] visitAddExp: 0 +[DEBUG IRGEN] visitMulExp: 0 +[DEBUG IRGEN] visitPrimaryExp: 0 +[DEBUG] visitPrimaryExp +[DEBUG] EvalExpr: success, result = 0x5635d7c55b40 +[DEBUG] HandleAssignStmt: assigning to i +[DEBUG] HandleAssignStmt: found in storage_map_ for i, ptr = 0x5635d7c52f20 +[DEBUG] HandleAssignStmt: scalar assignment to i, ptr = 0x5635d7c52f20, rhs = 0x5635d7c55b40 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: intsum; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: sum +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 sum +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: sum=0; +[DEBUG IRGEN] visitStmt: sum=0; +[DEBUG IRGEN] HandleAssignStmt: sum=0; +[DEBUG IRGEN] EvalExpr: 0 +[DEBUG IRGEN] visitAddExp: 0 +[DEBUG IRGEN] visitMulExp: 0 +[DEBUG IRGEN] visitPrimaryExp: 0 +[DEBUG] visitPrimaryExp +[DEBUG] EvalExpr: success, result = 0x5635d7c55b40 +[DEBUG] HandleAssignStmt: assigning to sum +[DEBUG] HandleAssignStmt: found in storage_map_ for sum, ptr = 0x5635d7c55e70 +[DEBUG] HandleAssignStmt: scalar assignment to sum, ptr = 0x5635d7c55e70, rhs = 0x5635d7c55b40 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: while(i<100){if(i==50){break;}sum=sum+i;i=i+1;} +[DEBUG IRGEN] visitStmt: while(i<100){if(i==50){break;}sum=sum+i;i=i+1;} +[DEBUG IRGEN] HandleWhileStmt: while(i<100){if(i==50){break;}sum=sum+i;i=i+1;} +[DEBUG WHILE] Current insert block before while: entry +[DEBUG WHILE] condBlock: while.cond +[DEBUG WHILE] bodyBlock: while.body +[DEBUG WHILE] exitBlock: while.exit +[DEBUG WHILE] Adding br to condBlock from current block +[DEBUG WHILE] loopStack size: 1 +[DEBUG WHILE] Generating condition in block: while.cond +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 100 +[DEBUG IRGEN] visitMulExp: 100 +[DEBUG IRGEN] visitPrimaryExp: 100 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 100 created as 0x5635d7c56490 +[DEBUG] visitRelExp: left=0x5635d7c563a0, type=int, right=0x5635d7c56490, type=int +[DEBUG WHILE] condBlock has terminator: 1 +[DEBUG WHILE] Generating body in block: while.body +[DEBUG IRGEN] visitStmt: {if(i==50){break;}sum=sum+i;i=i+1;} +[DEBUG IRGEN] visitBlock: {if(i==50){break;}sum=sum+i;i=i+1;} +[DEBUG IRGEN] visitBlockItem: if(i==50){break;} +[DEBUG IRGEN] visitStmt: if(i==50){break;} +[DEBUG IRGEN] HandleIfStmt: if(i==50){break;} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: while.body +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 50 +[DEBUG IRGEN] visitMulExp: 50 +[DEBUG IRGEN] visitPrimaryExp: 50 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 50 created as 0x5635d7c569a0 +[DEBUG] visitEqExp: left=0x5635d7c56920, type=int, right=0x5635d7c569a0, type=int +[DEBUG IF] Creating condbr: %t5 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {break;} +[DEBUG IRGEN] visitBlock: {break;} +[DEBUG IRGEN] visitBlockItem: break; +[DEBUG IRGEN] visitStmt: break; +[DEBUG IRGEN] HandleBreakStmt: break; +[DEBUG BREAK] Current insert block before break: then +[DEBUG BREAK] Breaking to exitBlock: while.exit +[DEBUG IF] then branch terminated: 1 +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=1, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IRGEN] visitBlockItem: sum=sum+i; +[DEBUG IRGEN] visitStmt: sum=sum+i; +[DEBUG IRGEN] HandleAssignStmt: sum=sum+i; +[DEBUG IRGEN] EvalExpr: sum+i +[DEBUG IRGEN] visitAddExp: sum+i +[DEBUG IRGEN] visitAddExp: sum +[DEBUG IRGEN] visitMulExp: sum +[DEBUG IRGEN] visitPrimaryExp: sum +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: sum +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG] visitAddExp: left=0x5635d7c56cf0, type=int, right=0x5635d7c56e00, type=int +[DEBUG] EvalExpr: success, result = 0x5635d7c56f90 +[DEBUG] HandleAssignStmt: assigning to sum +[DEBUG] HandleAssignStmt: found in storage_map_ for sum, ptr = 0x5635d7c55e70 +[DEBUG] HandleAssignStmt: scalar assignment to sum, ptr = 0x5635d7c55e70, rhs = 0x5635d7c56f90 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: merge +[DEBUG IRGEN] visitBlockItem: i=i+1; +[DEBUG IRGEN] visitStmt: i=i+1; +[DEBUG IRGEN] HandleAssignStmt: i=i+1; +[DEBUG IRGEN] EvalExpr: i+1 +[DEBUG IRGEN] visitAddExp: i+1 +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x5635d7c571e0 +[DEBUG] visitAddExp: left=0x5635d7c57110, type=int, right=0x5635d7c571e0, type=int +[DEBUG] EvalExpr: success, result = 0x5635d7c57260 +[DEBUG] HandleAssignStmt: assigning to i +[DEBUG] HandleAssignStmt: found in storage_map_ for i, ptr = 0x5635d7c52f20 +[DEBUG] HandleAssignStmt: scalar assignment to i, ptr = 0x5635d7c52f20, rhs = 0x5635d7c57260 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: merge +[DEBUG WHILE] body terminated: 0 +[DEBUG WHILE] Adding br to condBlock from body +[DEBUG WHILE] bodyBlock has terminator: 1 +[DEBUG WHILE] loopStack size after pop: 0 +[DEBUG WHILE] Setting insert point to exitBlock: while.exit +[DEBUG WHILE] exitBlock has terminator before return: 0 +[DEBUG] current insert block: while.exit +[DEBUG IRGEN] visitBlockItem: returnsum; +[DEBUG IRGEN] visitStmt: returnsum; +[DEBUG IRGEN] HandleReturnStmt: returnsum; +[DEBUG IRGEN] EvalExpr: sum +[DEBUG IRGEN] visitAddExp: sum +[DEBUG IRGEN] visitMulExp: sum +[DEBUG IRGEN] visitPrimaryExp: sum +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: sum +[DEBUG] EvalExpr: success, result = 0x5635d7c574d0 +[DEBUG] visitFuncDef: 函数 main 生成完成 +define i32 @getint() { +entry: +} +define i32 @getch() { +entry: +} +define i32 @getarray() { +entry: +} +define void @putint() { +entry: +} +define void @putch() { +entry: +} +define void @putarray() { +entry: +} +define void @puts() { +entry: +} +define void @_sysy_starttime() { +entry: +} +define void @_sysy_stoptime() { +entry: +} +define void @starttime() { +entry: +} +define void @stoptime() { +entry: +} +define i32 @read_map() { +entry: +} +define i32 @float_eq() { +entry: +} +define i32* @memset() { +entry: +} +define i32 @main() { +entry: + %t0_i = alloca i32 + store i32 0, i32* %t0_i + store i32 0, i32* %t0_i + %t1_sum = alloca i32 + store i32 0, i32* %t1_sum + store i32 0, i32* %t1_sum + br label %while.cond +while.cond: + %t2 = load i32, i32* %t0_i + %t3 = icmp slt i32 %t2, 100 + br i1 %t3, label %while.body, label %while.exit +while.body: + %t4 = load i32, i32* %t0_i + %t5 = icmp eq i32 %t4, 50 + br i1 %t5, label %then, label %merge +while.exit: + %t11 = load i32, i32* %t1_sum + ret i32 %t11 +then: + br label %while.exit +merge: + %t6 = load i32, i32* %t1_sum + %t7 = load i32, i32* %t0_i + %t8 = add i32 %t6, %t7 + store i32 %t8, i32* %t1_sum + %t9 = load i32, i32* %t0_i + %t10 = add i32 %t9, 1 + store i32 %t10, i32* %t0_i + br label %while.cond +} + +========== test/test_case/functional/36_op_priority2.sy ========== +SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored starttime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored stoptime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: a base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored a with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: a type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: b base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: b type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: c base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored c with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: c type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: d base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored d with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: d type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55b313a55d00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55b313a564d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 4 +[DEBUG] visitUnaryExp: 4 +[DEBUG] visitPrimaryExp: 4 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found c in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = c, sym->kind = 0 +绑定变量: c -> VarDefContext +CheckLValue 绑定变量: c, sym->kind: 0, sym->var_def_ctx: 0x55b313a56c80, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 2 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found d in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = d, sym->kind = 0 +绑定变量: d -> VarDefContext +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55b313a56fa0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 2 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: (c+a)*(b-d) +[DEBUG] visitUnaryExp: (c+a) +[DEBUG] visitPrimaryExp: (c+a) +[DEBUG] CheckExp: c+a +[DEBUG] visitUnaryExp: c +[DEBUG] visitPrimaryExp: c +SymbolTable::lookup: found c in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = c, sym->kind = 0 +绑定变量: c -> VarDefContext +CheckLValue 绑定变量: c, sym->kind: 0, sym->var_def_ctx: 0x55b313a56c80, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55b313a55d00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: (b-d) +[DEBUG] visitPrimaryExp: (b-d) +[DEBUG] CheckExp: b-d +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55b313a564d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: d +[DEBUG] visitPrimaryExp: d +SymbolTable::lookup: found d in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = d, sym->kind = 0 +绑定变量: d -> VarDefContext +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55b313a56fa0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 +[DEBUG IRGEN] visitCompUnit +[DEBUG IRGEN] visitFuncDef: main +[DEBUG] visitFuncDef: 创建函数 main,返回类型: int,参数数量: 0 +[DEBUG] visitFuncDef: 函数对象地址: 0x55b313a6b220 +[DEBUG] visitFuncDef: 开始生成函数体 +[DEBUG IRGEN] visitBlock: {inta,b,c,d;a=10;b=4;c=2;d=2;return(c+a)*(b-d);} +[DEBUG IRGEN] visitBlockItem: inta,b,c,d; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: a +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 a +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: b +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 b +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: c +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 c +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: d +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 d +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: a=10; +[DEBUG IRGEN] visitStmt: a=10; +[DEBUG IRGEN] HandleAssignStmt: a=10; +[DEBUG IRGEN] EvalExpr: 10 +[DEBUG IRGEN] visitAddExp: 10 +[DEBUG IRGEN] visitMulExp: 10 +[DEBUG IRGEN] visitPrimaryExp: 10 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 10 created as 0x55b313a6bcb0 +[DEBUG] EvalExpr: success, result = 0x55b313a6bcb0 +[DEBUG] HandleAssignStmt: assigning to a +[DEBUG] HandleAssignStmt: found in storage_map_ for a, ptr = 0x55b313a694a0 +[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x55b313a694a0, rhs = 0x55b313a6bcb0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: b=4; +[DEBUG IRGEN] visitStmt: b=4; +[DEBUG IRGEN] HandleAssignStmt: b=4; +[DEBUG IRGEN] EvalExpr: 4 +[DEBUG IRGEN] visitAddExp: 4 +[DEBUG IRGEN] visitMulExp: 4 +[DEBUG IRGEN] visitPrimaryExp: 4 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 4 created as 0x55b313a6bee0 +[DEBUG] EvalExpr: success, result = 0x55b313a6bee0 +[DEBUG] HandleAssignStmt: assigning to b +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x55b313a6b7e0 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x55b313a6b7e0, rhs = 0x55b313a6bee0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: c=2; +[DEBUG IRGEN] visitStmt: c=2; +[DEBUG IRGEN] HandleAssignStmt: c=2; +[DEBUG IRGEN] EvalExpr: 2 +[DEBUG IRGEN] visitAddExp: 2 +[DEBUG IRGEN] visitMulExp: 2 +[DEBUG IRGEN] visitPrimaryExp: 2 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 2 created as 0x55b313a6c040 +[DEBUG] EvalExpr: success, result = 0x55b313a6c040 +[DEBUG] HandleAssignStmt: assigning to c +[DEBUG] HandleAssignStmt: found in storage_map_ for c, ptr = 0x55b313a6b960 +[DEBUG] HandleAssignStmt: scalar assignment to c, ptr = 0x55b313a6b960, rhs = 0x55b313a6c040 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: d=2; +[DEBUG IRGEN] visitStmt: d=2; +[DEBUG IRGEN] HandleAssignStmt: d=2; +[DEBUG IRGEN] EvalExpr: 2 +[DEBUG IRGEN] visitAddExp: 2 +[DEBUG IRGEN] visitMulExp: 2 +[DEBUG IRGEN] visitPrimaryExp: 2 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 2 created as 0x55b313a6c040 +[DEBUG] EvalExpr: success, result = 0x55b313a6c040 +[DEBUG] HandleAssignStmt: assigning to d +[DEBUG] HandleAssignStmt: found in storage_map_ for d, ptr = 0x55b313a6bb50 +[DEBUG] HandleAssignStmt: scalar assignment to d, ptr = 0x55b313a6bb50, rhs = 0x55b313a6c040 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: return(c+a)*(b-d); +[DEBUG IRGEN] visitStmt: return(c+a)*(b-d); +[DEBUG IRGEN] HandleReturnStmt: return(c+a)*(b-d); +[DEBUG IRGEN] EvalExpr: (c+a)*(b-d) +[DEBUG IRGEN] visitAddExp: (c+a)*(b-d) +[DEBUG IRGEN] visitMulExp: (c+a)*(b-d) +[DEBUG IRGEN] visitMulExp: (c+a) +[DEBUG IRGEN] visitPrimaryExp: (c+a) +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting parenthesized expression +[DEBUG IRGEN] EvalExpr: c+a +[DEBUG IRGEN] visitAddExp: c+a +[DEBUG IRGEN] visitAddExp: c +[DEBUG IRGEN] visitMulExp: c +[DEBUG IRGEN] visitPrimaryExp: c +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: c +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] visitAddExp: left=0x55b313a6c2a0, type=int, right=0x55b313a6c390, type=int +[DEBUG] EvalExpr: success, result = 0x55b313a6c480 +[DEBUG IRGEN] visitPrimaryExp: (b-d) +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting parenthesized expression +[DEBUG IRGEN] EvalExpr: b-d +[DEBUG IRGEN] visitAddExp: b-d +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitMulExp: d +[DEBUG IRGEN] visitPrimaryExp: d +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: d +[DEBUG] visitAddExp: left=0x55b313a6c540, type=int, right=0x55b313a6c650, type=int +[DEBUG] EvalExpr: success, result = 0x55b313a6c760 +[DEBUG] visitMulExp: left=0x55b313a6c480, type=int, right=0x55b313a6c760, type=int +[DEBUG] EvalExpr: success, result = 0x55b313a6c840 +[DEBUG] visitFuncDef: 函数 main 生成完成 +define i32 @getint() { +entry: +} +define i32 @getch() { +entry: +} +define i32 @getarray() { +entry: +} +define void @putint() { +entry: +} +define void @putch() { +entry: +} +define void @putarray() { +entry: +} +define void @puts() { +entry: +} +define void @_sysy_starttime() { +entry: +} +define void @_sysy_stoptime() { +entry: +} +define void @starttime() { +entry: +} +define void @stoptime() { +entry: +} +define i32 @read_map() { +entry: +} +define i32 @float_eq() { +entry: +} +define i32* @memset() { +entry: +} +define i32 @main() { +entry: + %t0_a = alloca i32 + store i32 0, i32* %t0_a + %t1_b = alloca i32 + store i32 0, i32* %t1_b + %t2_c = alloca i32 + store i32 0, i32* %t2_c + %t3_d = alloca i32 + store i32 0, i32* %t3_d + store i32 10, i32* %t0_a + store i32 4, i32* %t1_b + store i32 2, i32* %t2_c + store i32 2, i32* %t3_d + %t4 = load i32, i32* %t2_c + %t5 = load i32, i32* %t0_a + %t6 = add i32 %t4, %t5 + %t7 = load i32, i32* %t1_b + %t8 = load i32, i32* %t3_d + %t9 = sub i32 %t7, %t8 + %t10 = mul i32 %t6, %t9 + ret i32 %t10 +} + +========== test/test_case/functional/95_float.sy ========== +SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored starttime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored stoptime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored float_abs with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored circle_area with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored float_eq with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored error with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored ok with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored assert with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored assert_not with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 +[DEBUG] CheckConstDef: RADIUS base_type: float is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 5.5 +[DEBUG] visitPrimaryExp: 5.5 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: RADIUS, ctx: 0x55db9d7e0280 +SymbolTable::addSymbol: stored RADIUS with kind=3, const_def_ctx=0x55db9d7e0280 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55db9d7e0280 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7e0280 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: PI base_type: float is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 03.141592653589793 +[DEBUG] visitPrimaryExp: 03.141592653589793 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: PI, ctx: 0x55db9d7e8850 +SymbolTable::addSymbol: stored PI with kind=3, const_def_ctx=0x55db9d7e8850 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55db9d7e8850 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7e8850 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: EPS base_type: float is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 1e-6 +[DEBUG] visitPrimaryExp: 1e-6 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: EPS, ctx: 0x55db9d7e7fa0 +SymbolTable::addSymbol: stored EPS with kind=3, const_def_ctx=0x55db9d7e7fa0 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found EPS in scope level 1, kind=3, const_def_ctx=0x55db9d7e7fa0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7e7fa0 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: PI_HEX base_type: float is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 0x1.921fb6p+1 +[DEBUG] visitPrimaryExp: 0x1.921fb6p+1 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: PI_HEX, ctx: 0x55db9d7e8570 +SymbolTable::addSymbol: stored PI_HEX with kind=3, const_def_ctx=0x55db9d7e8570 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found PI_HEX in scope level 1, kind=3, const_def_ctx=0x55db9d7e8570 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7e8570 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: HEX2 base_type: float is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 0x.AP-3 +[DEBUG] visitPrimaryExp: 0x.AP-3 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: HEX2, ctx: 0x55db9d7ee8c0 +SymbolTable::addSymbol: stored HEX2 with kind=3, const_def_ctx=0x55db9d7ee8c0 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found HEX2 in scope level 1, kind=3, const_def_ctx=0x55db9d7ee8c0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7ee8c0 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: FACT base_type: float is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: -.33E+5 +[DEBUG] visitUnaryExp: .33E+5 +[DEBUG] visitPrimaryExp: .33E+5 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: FACT, ctx: 0x55db9d7f0ee0 +SymbolTable::addSymbol: stored FACT with kind=3, const_def_ctx=0x55db9d7f0ee0 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found FACT in scope level 1, kind=3, const_def_ctx=0x55db9d7f0ee0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7f0ee0 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: EVAL1 base_type: float is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: PI +[DEBUG] visitPrimaryExp: PI +SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55db9d7e8850 +CheckLValue: found sym->name = PI, sym->kind = 3 +绑定常量: PI -> ConstDefContext +CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7e8850 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: RADIUS +[DEBUG] visitPrimaryExp: RADIUS +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55db9d7e0280 +CheckLValue: found sym->name = RADIUS, sym->kind = 3 +绑定常量: RADIUS -> ConstDefContext +CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7e0280 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: RADIUS +[DEBUG] visitPrimaryExp: RADIUS +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55db9d7e0280 +CheckLValue: found sym->name = RADIUS, sym->kind = 3 +绑定常量: RADIUS -> ConstDefContext +CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7e0280 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55db9d7e8850 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55db9d7e0280 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55db9d7e0280 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: EVAL1, ctx: 0x55db9d7f3030 +SymbolTable::addSymbol: stored EVAL1 with kind=3, const_def_ctx=0x55db9d7f3030 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found EVAL1 in scope level 1, kind=3, const_def_ctx=0x55db9d7f3030 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7f3030 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: EVAL2 base_type: float is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitUnaryExp: PI_HEX +[DEBUG] visitPrimaryExp: PI_HEX +SymbolTable::lookup: found PI_HEX in scope level 1, kind=3, const_def_ctx=0x55db9d7e8570 +CheckLValue: found sym->name = PI_HEX, sym->kind = 3 +绑定常量: PI_HEX -> ConstDefContext +CheckLValue 绑定变量: PI_HEX, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7e8570 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: RADIUS +[DEBUG] visitPrimaryExp: RADIUS +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55db9d7e0280 +CheckLValue: found sym->name = RADIUS, sym->kind = 3 +绑定常量: RADIUS -> ConstDefContext +CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7e0280 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found PI_HEX in scope level 1, kind=3, const_def_ctx=0x55db9d7e8570 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55db9d7e0280 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: EVAL2, ctx: 0x55db9d7f3e60 +SymbolTable::addSymbol: stored EVAL2 with kind=3, const_def_ctx=0x55db9d7f3e60 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found EVAL2 in scope level 1, kind=3, const_def_ctx=0x55db9d7f3e60 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7f3e60 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: EVAL3 base_type: float is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: PI +[DEBUG] visitPrimaryExp: PI +SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55db9d7e8850 +CheckLValue: found sym->name = PI, sym->kind = 3 +绑定常量: PI -> ConstDefContext +CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7e8850 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitUnaryExp: RADIUS +[DEBUG] visitPrimaryExp: RADIUS +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55db9d7e0280 +CheckLValue: found sym->name = RADIUS, sym->kind = 3 +绑定常量: RADIUS -> ConstDefContext +CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7e0280 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55db9d7e8850 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55db9d7e0280 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: EVAL3, ctx: 0x55db9d7f6f50 +SymbolTable::addSymbol: stored EVAL3 with kind=3, const_def_ctx=0x55db9d7f6f50 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found EVAL3 in scope level 1, kind=3, const_def_ctx=0x55db9d7f6f50 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7f6f50 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: CONV1 base_type: float is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 233 +[DEBUG] visitPrimaryExp: 233 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: CONV1, ctx: 0x55db9d7fb210 +SymbolTable::addSymbol: stored CONV1 with kind=3, const_def_ctx=0x55db9d7fb210 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found CONV1 in scope level 1, kind=3, const_def_ctx=0x55db9d7fb210 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7fb210 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: CONV2 base_type: float is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 0xfff +[DEBUG] visitPrimaryExp: 0xfff +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: CONV2, ctx: 0x55db9d7fb9a0 +SymbolTable::addSymbol: stored CONV2 with kind=3, const_def_ctx=0x55db9d7fb9a0 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found CONV2 in scope level 1, kind=3, const_def_ctx=0x55db9d7fb9a0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7fb9a0 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: MAX base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 1e9 +[DEBUG] visitPrimaryExp: 1e9 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: MAX, ctx: 0x55db9d7fcf10 +SymbolTable::addSymbol: stored MAX with kind=3, const_def_ctx=0x55db9d7fcf10 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found MAX in scope level 1, kind=3, const_def_ctx=0x55db9d7fcf10 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7fcf10 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: TWO base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 2.9 +[DEBUG] visitPrimaryExp: 2.9 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: TWO, ctx: 0x55db9d7fd760 +SymbolTable::addSymbol: stored TWO with kind=3, const_def_ctx=0x55db9d7fd760 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found TWO in scope level 1, kind=3, const_def_ctx=0x55db9d7fd760 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7fd760 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: THREE base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 3.2 +[DEBUG] visitPrimaryExp: 3.2 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: THREE, ctx: 0x55db9d7fde30 +SymbolTable::addSymbol: stored THREE with kind=3, const_def_ctx=0x55db9d7fde30 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found THREE in scope level 1, kind=3, const_def_ctx=0x55db9d7fde30 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7fde30 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: FIVE base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: TWO +[DEBUG] visitPrimaryExp: TWO +SymbolTable::lookup: found TWO in scope level 1, kind=3, const_def_ctx=0x55db9d7fd760 +CheckLValue: found sym->name = TWO, sym->kind = 3 +绑定常量: TWO -> ConstDefContext +CheckLValue 绑定变量: TWO, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7fd760 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: THREE +[DEBUG] visitPrimaryExp: THREE +SymbolTable::lookup: found THREE in scope level 1, kind=3, const_def_ctx=0x55db9d7fde30 +CheckLValue: found sym->name = THREE, sym->kind = 3 +绑定常量: THREE -> ConstDefContext +CheckLValue 绑定变量: THREE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7fde30 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found TWO in scope level 1, kind=3, const_def_ctx=0x55db9d7fd760 +SymbolTable::lookup: found THREE in scope level 1, kind=3, const_def_ctx=0x55db9d7fde30 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: FIVE, ctx: 0x55db9d7fe610 +SymbolTable::addSymbol: stored FIVE with kind=3, const_def_ctx=0x55db9d7fe610 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found FIVE in scope level 1, kind=3, const_def_ctx=0x55db9d7fe610 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7fe610 +[DEBUG] 常量符号添加完成 +[DEBUG] 进入函数: float_abs 返回类型: float +SymbolTable::addSymbol: stored x with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: x type_kind: 2 is_array: 0 dims: +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: x +[DEBUG] visitPrimaryExp: x +SymbolTable::lookup: found x in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = x, sym->kind = 2 +CheckLValue 绑定变量: x, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: -x +[DEBUG] visitUnaryExp: -x +[DEBUG] visitUnaryExp: x +[DEBUG] visitPrimaryExp: x +SymbolTable::lookup: found x in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = x, sym->kind = 2 +CheckLValue 绑定变量: x, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: x +[DEBUG] visitUnaryExp: x +[DEBUG] visitPrimaryExp: x +SymbolTable::lookup: found x in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = x, sym->kind = 2 +CheckLValue 绑定变量: x, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 float_abs has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: circle_area 返回类型: float +SymbolTable::addSymbol: stored radius with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: radius type_kind: 1 is_array: 0 dims: +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: (PI*radius*radius+(radius*radius)*PI)/2 +[DEBUG] visitUnaryExp: (PI*radius*radius+(radius*radius)*PI) +[DEBUG] visitPrimaryExp: (PI*radius*radius+(radius*radius)*PI) +[DEBUG] CheckExp: PI*radius*radius+(radius*radius)*PI +[DEBUG] visitUnaryExp: PI +[DEBUG] visitPrimaryExp: PI +SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55db9d7e8850 +CheckLValue: found sym->name = PI, sym->kind = 3 +绑定常量: PI -> ConstDefContext +CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7e8850 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: radius +[DEBUG] visitPrimaryExp: radius +SymbolTable::lookup: found radius in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = radius, sym->kind = 2 +CheckLValue 绑定变量: radius, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: radius +[DEBUG] visitPrimaryExp: radius +SymbolTable::lookup: found radius in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = radius, sym->kind = 2 +CheckLValue 绑定变量: radius, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: (radius*radius) +[DEBUG] visitPrimaryExp: (radius*radius) +[DEBUG] CheckExp: radius*radius +[DEBUG] visitUnaryExp: radius +[DEBUG] visitPrimaryExp: radius +SymbolTable::lookup: found radius in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = radius, sym->kind = 2 +CheckLValue 绑定变量: radius, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: radius +[DEBUG] visitPrimaryExp: radius +SymbolTable::lookup: found radius in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = radius, sym->kind = 2 +CheckLValue 绑定变量: radius, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: PI +[DEBUG] visitPrimaryExp: PI +SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55db9d7e8850 +CheckLValue: found sym->name = PI, sym->kind = 3 +绑定常量: PI -> ConstDefContext +CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7e8850 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 circle_area has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: float_eq 返回类型: int +SymbolTable::addSymbol: stored a with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: a type_kind: 2 is_array: 0 dims: +SymbolTable::addSymbol: stored b with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: b type_kind: 2 is_array: 0 dims: +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: float_abs(a-b) +[DEBUG] 函数调用: float_abs +[DEBUG] CheckFuncCall: float_abs +SymbolTable::lookup: found float_abs in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: a-b +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 2 +CheckLValue 绑定变量: a, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 2 +CheckLValue 绑定变量: b, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 2 形参类型 2 +[DEBUG] visitUnaryExp: EPS +[DEBUG] visitPrimaryExp: EPS +SymbolTable::lookup: found EPS in scope level 1, kind=3, const_def_ctx=0x55db9d7e7fa0 +CheckLValue: found sym->name = EPS, sym->kind = 3 +绑定常量: EPS -> ConstDefContext +CheckLValue 绑定变量: EPS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7e7fa0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 1*2./2 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitUnaryExp: 2. +[DEBUG] visitPrimaryExp: 2. +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 float_eq has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: error 返回类型: void +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(101) +[DEBUG] visitUnaryExp: putch(101) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 101 +[DEBUG] visitUnaryExp: 101 +[DEBUG] visitPrimaryExp: 101 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(114) +[DEBUG] visitUnaryExp: putch(114) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 114 +[DEBUG] visitUnaryExp: 114 +[DEBUG] visitPrimaryExp: 114 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(114) +[DEBUG] visitUnaryExp: putch(114) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 114 +[DEBUG] visitUnaryExp: 114 +[DEBUG] visitPrimaryExp: 114 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(111) +[DEBUG] visitUnaryExp: putch(111) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 111 +[DEBUG] visitUnaryExp: 111 +[DEBUG] visitPrimaryExp: 111 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(114) +[DEBUG] visitUnaryExp: putch(114) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 114 +[DEBUG] visitUnaryExp: 114 +[DEBUG] visitPrimaryExp: 114 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(10) +[DEBUG] visitUnaryExp: putch(10) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 函数 error has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: ok 返回类型: void +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(111) +[DEBUG] visitUnaryExp: putch(111) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 111 +[DEBUG] visitUnaryExp: 111 +[DEBUG] visitPrimaryExp: 111 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(107) +[DEBUG] visitUnaryExp: putch(107) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 107 +[DEBUG] visitUnaryExp: 107 +[DEBUG] visitPrimaryExp: 107 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(10) +[DEBUG] visitUnaryExp: putch(10) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 函数 ok has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: assert 返回类型: void +SymbolTable::addSymbol: stored cond with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: cond type_kind: 1 is_array: 0 dims: +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: !cond +[DEBUG] visitUnaryExp: cond +[DEBUG] visitPrimaryExp: cond +SymbolTable::lookup: found cond in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = cond, sym->kind = 2 +CheckLValue 绑定变量: cond, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: error() +[DEBUG] visitUnaryExp: error() +[DEBUG] 函数调用: error +[DEBUG] CheckFuncCall: error +SymbolTable::lookup: found error in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: ok() +[DEBUG] visitUnaryExp: ok() +[DEBUG] 函数调用: ok +[DEBUG] CheckFuncCall: ok +SymbolTable::lookup: found ok in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 函数 assert has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: assert_not 返回类型: void +SymbolTable::addSymbol: stored cond with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: cond type_kind: 1 is_array: 0 dims: +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: cond +[DEBUG] visitPrimaryExp: cond +SymbolTable::lookup: found cond in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = cond, sym->kind = 2 +CheckLValue 绑定变量: cond, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: error() +[DEBUG] visitUnaryExp: error() +[DEBUG] 函数调用: error +[DEBUG] CheckFuncCall: error +SymbolTable::lookup: found error in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: ok() +[DEBUG] visitUnaryExp: ok() +[DEBUG] 函数调用: ok +[DEBUG] CheckFuncCall: ok +SymbolTable::lookup: found ok in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 函数 assert_not has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: assert_not(float_eq(HEX2,FACT)) +[DEBUG] visitUnaryExp: assert_not(float_eq(HEX2,FACT)) +[DEBUG] 函数调用: assert_not +[DEBUG] CheckFuncCall: assert_not +SymbolTable::lookup: found assert_not in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: float_eq(HEX2,FACT) +[DEBUG] visitUnaryExp: float_eq(HEX2,FACT) +[DEBUG] 函数调用: float_eq +[DEBUG] CheckFuncCall: float_eq +SymbolTable::lookup: found float_eq in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: HEX2 +[DEBUG] visitUnaryExp: HEX2 +[DEBUG] visitPrimaryExp: HEX2 +SymbolTable::lookup: found HEX2 in scope level 1, kind=3, const_def_ctx=0x55db9d7ee8c0 +CheckLValue: found sym->name = HEX2, sym->kind = 3 +绑定常量: HEX2 -> ConstDefContext +CheckLValue 绑定变量: HEX2, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7ee8c0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: FACT +[DEBUG] visitUnaryExp: FACT +[DEBUG] visitPrimaryExp: FACT +SymbolTable::lookup: found FACT in scope level 1, kind=3, const_def_ctx=0x55db9d7f0ee0 +CheckLValue: found sym->name = FACT, sym->kind = 3 +绑定常量: FACT -> ConstDefContext +CheckLValue 绑定变量: FACT, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7f0ee0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 2 形参类型 2 +[DEBUG] 检查参数 1: 实参类型 2 形参类型 2 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: assert_not(float_eq(EVAL1,EVAL2)) +[DEBUG] visitUnaryExp: assert_not(float_eq(EVAL1,EVAL2)) +[DEBUG] 函数调用: assert_not +[DEBUG] CheckFuncCall: assert_not +SymbolTable::lookup: found assert_not in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: float_eq(EVAL1,EVAL2) +[DEBUG] visitUnaryExp: float_eq(EVAL1,EVAL2) +[DEBUG] 函数调用: float_eq +[DEBUG] CheckFuncCall: float_eq +SymbolTable::lookup: found float_eq in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: EVAL1 +[DEBUG] visitUnaryExp: EVAL1 +[DEBUG] visitPrimaryExp: EVAL1 +SymbolTable::lookup: found EVAL1 in scope level 1, kind=3, const_def_ctx=0x55db9d7f3030 +CheckLValue: found sym->name = EVAL1, sym->kind = 3 +绑定常量: EVAL1 -> ConstDefContext +CheckLValue 绑定变量: EVAL1, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7f3030 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: EVAL2 +[DEBUG] visitUnaryExp: EVAL2 +[DEBUG] visitPrimaryExp: EVAL2 +SymbolTable::lookup: found EVAL2 in scope level 1, kind=3, const_def_ctx=0x55db9d7f3e60 +CheckLValue: found sym->name = EVAL2, sym->kind = 3 +绑定常量: EVAL2 -> ConstDefContext +CheckLValue 绑定变量: EVAL2, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7f3e60 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 2 形参类型 2 +[DEBUG] 检查参数 1: 实参类型 2 形参类型 2 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: assert(float_eq(EVAL2,EVAL3)) +[DEBUG] visitUnaryExp: assert(float_eq(EVAL2,EVAL3)) +[DEBUG] 函数调用: assert +[DEBUG] CheckFuncCall: assert +SymbolTable::lookup: found assert in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: float_eq(EVAL2,EVAL3) +[DEBUG] visitUnaryExp: float_eq(EVAL2,EVAL3) +[DEBUG] 函数调用: float_eq +[DEBUG] CheckFuncCall: float_eq +SymbolTable::lookup: found float_eq in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: EVAL2 +[DEBUG] visitUnaryExp: EVAL2 +[DEBUG] visitPrimaryExp: EVAL2 +SymbolTable::lookup: found EVAL2 in scope level 1, kind=3, const_def_ctx=0x55db9d7f3e60 +CheckLValue: found sym->name = EVAL2, sym->kind = 3 +绑定常量: EVAL2 -> ConstDefContext +CheckLValue 绑定变量: EVAL2, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7f3e60 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: EVAL3 +[DEBUG] visitUnaryExp: EVAL3 +[DEBUG] visitPrimaryExp: EVAL3 +SymbolTable::lookup: found EVAL3 in scope level 1, kind=3, const_def_ctx=0x55db9d7f6f50 +CheckLValue: found sym->name = EVAL3, sym->kind = 3 +绑定常量: EVAL3 -> ConstDefContext +CheckLValue 绑定变量: EVAL3, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7f6f50 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 2 形参类型 2 +[DEBUG] 检查参数 1: 实参类型 2 形参类型 2 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: assert(float_eq(circle_area(RADIUS),circle_area(FIVE))) +[DEBUG] visitUnaryExp: assert(float_eq(circle_area(RADIUS),circle_area(FIVE))) +[DEBUG] 函数调用: assert +[DEBUG] CheckFuncCall: assert +SymbolTable::lookup: found assert in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: float_eq(circle_area(RADIUS),circle_area(FIVE)) +[DEBUG] visitUnaryExp: float_eq(circle_area(RADIUS),circle_area(FIVE)) +[DEBUG] 函数调用: float_eq +[DEBUG] CheckFuncCall: float_eq +SymbolTable::lookup: found float_eq in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: circle_area(RADIUS) +[DEBUG] visitUnaryExp: circle_area(RADIUS) +[DEBUG] 函数调用: circle_area +[DEBUG] CheckFuncCall: circle_area +SymbolTable::lookup: found circle_area in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: RADIUS +[DEBUG] visitUnaryExp: RADIUS +[DEBUG] visitPrimaryExp: RADIUS +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55db9d7e0280 +CheckLValue: found sym->name = RADIUS, sym->kind = 3 +绑定常量: RADIUS -> ConstDefContext +CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7e0280 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 2 形参类型 1 +[DEBUG] CheckExp: circle_area(FIVE) +[DEBUG] visitUnaryExp: circle_area(FIVE) +[DEBUG] 函数调用: circle_area +[DEBUG] CheckFuncCall: circle_area +SymbolTable::lookup: found circle_area in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: FIVE +[DEBUG] visitUnaryExp: FIVE +[DEBUG] visitPrimaryExp: FIVE +SymbolTable::lookup: found FIVE in scope level 1, kind=3, const_def_ctx=0x55db9d7fe610 +CheckLValue: found sym->name = FIVE, sym->kind = 3 +绑定常量: FIVE -> ConstDefContext +CheckLValue 绑定变量: FIVE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7fe610 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 0: 实参类型 2 形参类型 2 +[DEBUG] 检查参数 1: 实参类型 2 形参类型 2 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: assert_not(float_eq(CONV1,CONV2)) +[DEBUG] visitUnaryExp: assert_not(float_eq(CONV1,CONV2)) +[DEBUG] 函数调用: assert_not +[DEBUG] CheckFuncCall: assert_not +SymbolTable::lookup: found assert_not in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: float_eq(CONV1,CONV2) +[DEBUG] visitUnaryExp: float_eq(CONV1,CONV2) +[DEBUG] 函数调用: float_eq +[DEBUG] CheckFuncCall: float_eq +SymbolTable::lookup: found float_eq in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: CONV1 +[DEBUG] visitUnaryExp: CONV1 +[DEBUG] visitPrimaryExp: CONV1 +SymbolTable::lookup: found CONV1 in scope level 1, kind=3, const_def_ctx=0x55db9d7fb210 +CheckLValue: found sym->name = CONV1, sym->kind = 3 +绑定常量: CONV1 -> ConstDefContext +CheckLValue 绑定变量: CONV1, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7fb210 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: CONV2 +[DEBUG] visitUnaryExp: CONV2 +[DEBUG] visitPrimaryExp: CONV2 +SymbolTable::lookup: found CONV2 in scope level 1, kind=3, const_def_ctx=0x55db9d7fb9a0 +CheckLValue: found sym->name = CONV2, sym->kind = 3 +绑定常量: CONV2 -> ConstDefContext +CheckLValue 绑定变量: CONV2, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7fb9a0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 2 形参类型 2 +[DEBUG] 检查参数 1: 实参类型 2 形参类型 2 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: 1.5 +[DEBUG] visitPrimaryExp: 1.5 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: ok() +[DEBUG] visitUnaryExp: ok() +[DEBUG] 函数调用: ok +[DEBUG] CheckFuncCall: ok +SymbolTable::lookup: found ok in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: !!3.3 +[DEBUG] visitUnaryExp: !3.3 +[DEBUG] visitUnaryExp: 3.3 +[DEBUG] visitPrimaryExp: 3.3 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: ok() +[DEBUG] visitUnaryExp: ok() +[DEBUG] 函数调用: ok +[DEBUG] CheckFuncCall: ok +SymbolTable::lookup: found ok in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: .0 +[DEBUG] visitPrimaryExp: .0 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: error() +[DEBUG] visitUnaryExp: error() +[DEBUG] 函数调用: error +[DEBUG] CheckFuncCall: error +SymbolTable::lookup: found error in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitUnaryExp: 0.3 +[DEBUG] visitPrimaryExp: 0.3 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: ok() +[DEBUG] visitUnaryExp: ok() +[DEBUG] 函数调用: ok +[DEBUG] CheckFuncCall: ok +SymbolTable::lookup: found ok in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: p base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored p with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: p type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: arr base_type: float is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] dim[0] = 10 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 10 +[DEBUG] Element type: float +[DEBUG] CheckExp: 1. +[DEBUG] visitUnaryExp: 1. +[DEBUG] visitPrimaryExp: 1. +[DEBUG] CheckExp: 2 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +SymbolTable::addSymbol: stored arr with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: arr type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: len base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: getfarray(arr) +[DEBUG] visitUnaryExp: getfarray(arr) +[DEBUG] 函数调用: getfarray +[DEBUG] CheckFuncCall: getfarray +SymbolTable::lookup: found getfarray in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: arr +[DEBUG] visitUnaryExp: arr +[DEBUG] visitPrimaryExp: arr +SymbolTable::lookup: found arr in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = arr, sym->kind = 0 +绑定变量: arr -> VarDefContext +CheckLValue 绑定变量: arr, sym->kind: 0, sym->var_def_ctx: 0x55db9d83aa80, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] 检查参数 0: 实参类型 4 形参类型 4 +SymbolTable::addSymbol: stored len with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: len type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55db9d839b70, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: MAX +[DEBUG] visitPrimaryExp: MAX +SymbolTable::lookup: found MAX in scope level 1, kind=3, const_def_ctx=0x55db9d7fcf10 +CheckLValue: found sym->name = MAX, sym->kind = 3 +绑定常量: MAX -> ConstDefContext +CheckLValue 绑定变量: MAX, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7fcf10 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] CheckVarDef: input base_type: float is_array: 0 dim_count: 0 +[DEBUG] CheckExp: getfloat() +[DEBUG] visitUnaryExp: getfloat() +[DEBUG] 函数调用: getfloat +[DEBUG] CheckFuncCall: getfloat +SymbolTable::lookup: found getfloat in scope level 0, kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored input with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: input type_kind: 2 is_array: 0 +[DEBUG] CheckVarDef: area base_type: float is_array: 0 dim_count: 0 +[DEBUG] CheckExp: PI*input*input +[DEBUG] visitUnaryExp: PI +[DEBUG] visitPrimaryExp: PI +SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55db9d7e8850 +CheckLValue: found sym->name = PI, sym->kind = 3 +绑定常量: PI -> ConstDefContext +CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7e8850 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: input +[DEBUG] visitPrimaryExp: input +SymbolTable::lookup: found input in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = input, sym->kind = 0 +绑定变量: input -> VarDefContext +CheckLValue 绑定变量: input, sym->kind: 0, sym->var_def_ctx: 0x55db9d840db0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: input +[DEBUG] visitPrimaryExp: input +SymbolTable::lookup: found input in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = input, sym->kind = 0 +绑定变量: input -> VarDefContext +CheckLValue 绑定变量: input, sym->kind: 0, sym->var_def_ctx: 0x55db9d840db0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +SymbolTable::addSymbol: stored area with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: area type_kind: 2 is_array: 0 +[DEBUG] CheckVarDef: area_trunc base_type: float is_array: 0 dim_count: 0 +[DEBUG] CheckExp: circle_area(input) +[DEBUG] visitUnaryExp: circle_area(input) +[DEBUG] 函数调用: circle_area +[DEBUG] CheckFuncCall: circle_area +SymbolTable::lookup: found circle_area in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: input +[DEBUG] visitUnaryExp: input +[DEBUG] visitPrimaryExp: input +SymbolTable::lookup: found input in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = input, sym->kind = 0 +绑定变量: input -> VarDefContext +CheckLValue 绑定变量: input, sym->kind: 0, sym->var_def_ctx: 0x55db9d840db0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 2 形参类型 1 +SymbolTable::addSymbol: stored area_trunc with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: area_trunc type_kind: 2 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found arr in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = arr, sym->kind = 0 +绑定变量: arr -> VarDefContext +CheckLValue 绑定变量: arr, sym->kind: 0, sym->var_def_ctx: 0x55db9d83aa80, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: p +[DEBUG] visitUnaryExp: p +[DEBUG] visitPrimaryExp: p +SymbolTable::lookup: found p in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = p, sym->kind = 0 +绑定变量: p -> VarDefContext +CheckLValue 绑定变量: p, sym->kind: 0, sym->var_def_ctx: 0x55db9d83a130, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: arr[p]+input +[DEBUG] visitUnaryExp: arr[p] +[DEBUG] visitPrimaryExp: arr[p] +SymbolTable::lookup: found arr in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = arr, sym->kind = 0 +绑定变量: arr -> VarDefContext +CheckLValue 绑定变量: arr, sym->kind: 0, sym->var_def_ctx: 0x55db9d83aa80, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: p +[DEBUG] visitUnaryExp: p +[DEBUG] visitPrimaryExp: p +SymbolTable::lookup: found p in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = p, sym->kind = 0 +绑定变量: p -> VarDefContext +CheckLValue 绑定变量: p, sym->kind: 0, sym->var_def_ctx: 0x55db9d83a130, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: input +[DEBUG] visitPrimaryExp: input +SymbolTable::lookup: found input in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = input, sym->kind = 0 +绑定变量: input -> VarDefContext +CheckLValue 绑定变量: input, sym->kind: 0, sym->var_def_ctx: 0x55db9d840db0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putfloat(area) +[DEBUG] visitUnaryExp: putfloat(area) +[DEBUG] 函数调用: putfloat +[DEBUG] CheckFuncCall: putfloat +SymbolTable::lookup: found putfloat in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: area +[DEBUG] visitUnaryExp: area +[DEBUG] visitPrimaryExp: area +SymbolTable::lookup: found area in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = area, sym->kind = 0 +绑定变量: area -> VarDefContext +CheckLValue 绑定变量: area, sym->kind: 0, sym->var_def_ctx: 0x55db9d8417e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 2 形参类型 2 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(32) +[DEBUG] visitUnaryExp: putch(32) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 32 +[DEBUG] visitUnaryExp: 32 +[DEBUG] visitPrimaryExp: 32 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putint(area_trunc) +[DEBUG] visitUnaryExp: putint(area_trunc) +[DEBUG] 函数调用: putint +[DEBUG] CheckFuncCall: putint +SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: area_trunc +[DEBUG] visitUnaryExp: area_trunc +[DEBUG] visitPrimaryExp: area_trunc +SymbolTable::lookup: found area_trunc in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = area_trunc, sym->kind = 0 +绑定变量: area_trunc -> VarDefContext +CheckLValue 绑定变量: area_trunc, sym->kind: 0, sym->var_def_ctx: 0x55db9d842640, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 2 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(10) +[DEBUG] visitUnaryExp: putch(10) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55db9d839b70, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i*--1e1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55db9d839b70, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: --1e1 +[DEBUG] visitUnaryExp: -1e1 +[DEBUG] visitUnaryExp: 1e1 +[DEBUG] visitPrimaryExp: 1e1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found p in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = p, sym->kind = 0 +绑定变量: p -> VarDefContext +CheckLValue 绑定变量: p, sym->kind: 0, sym->var_def_ctx: 0x55db9d83a130, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: p+1 +[DEBUG] visitUnaryExp: p +[DEBUG] visitPrimaryExp: p +SymbolTable::lookup: found p in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = p, sym->kind = 0 +绑定变量: p -> VarDefContext +CheckLValue 绑定变量: p, sym->kind: 0, sym->var_def_ctx: 0x55db9d83a130, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putfarray(len,arr) +[DEBUG] visitUnaryExp: putfarray(len,arr) +[DEBUG] 函数调用: putfarray +[DEBUG] CheckFuncCall: putfarray +SymbolTable::lookup: found putfarray in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: len +[DEBUG] visitUnaryExp: len +[DEBUG] visitPrimaryExp: len +SymbolTable::lookup: found len in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = len, sym->kind = 0 +绑定变量: len -> VarDefContext +CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x55db9d83d510, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: arr +[DEBUG] visitUnaryExp: arr +[DEBUG] visitPrimaryExp: arr +SymbolTable::lookup: found arr in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = arr, sym->kind = 0 +绑定变量: arr -> VarDefContext +CheckLValue 绑定变量: arr, sym->kind: 0, sym->var_def_ctx: 0x55db9d83aa80, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 4 形参类型 4 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 +[DEBUG IRGEN] visitCompUnit +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 +[error] [irgen] float常量暂未实现 + +========== test/test_case/functional/simple_add.sy ========== +SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored starttime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored stoptime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: a base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +SymbolTable::addSymbol: stored a with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: a type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: b base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 2 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: b type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: a+b +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55a29de3d0a0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55a29de41130, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 +[DEBUG IRGEN] visitCompUnit +[DEBUG IRGEN] visitFuncDef: main +[DEBUG] visitFuncDef: 创建函数 main,返回类型: int,参数数量: 0 +[DEBUG] visitFuncDef: 函数对象地址: 0x55a29de4ce40 +[DEBUG] visitFuncDef: 开始生成函数体 +[DEBUG IRGEN] visitBlock: {inta=1;intb=2;returna+b;} +[DEBUG IRGEN] visitBlockItem: inta=1; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: a +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 a +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 1 +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x55a29de48600 +[DEBUG] EvalExpr: success, result = 0x55a29de48600 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: intb=2; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: b +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 b +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 2 +[DEBUG IRGEN] visitAddExp: 2 +[DEBUG IRGEN] visitMulExp: 2 +[DEBUG IRGEN] visitPrimaryExp: 2 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 2 created as 0x55a29de47330 +[DEBUG] EvalExpr: success, result = 0x55a29de47330 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: returna+b; +[DEBUG IRGEN] visitStmt: returna+b; +[DEBUG IRGEN] HandleReturnStmt: returna+b; +[DEBUG IRGEN] EvalExpr: a+b +[DEBUG IRGEN] visitAddExp: a+b +[DEBUG IRGEN] visitAddExp: a +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG] visitAddExp: left=0x55a29de4d200, type=int, right=0x55a29de4d310, type=int +[DEBUG] EvalExpr: success, result = 0x55a29de4d3d0 +[DEBUG] visitFuncDef: 函数 main 生成完成 +define i32 @getint() { +entry: +} +define i32 @getch() { +entry: +} +define i32 @getarray() { +entry: +} +define void @putint() { +entry: +} +define void @putch() { +entry: +} +define void @putarray() { +entry: +} +define void @puts() { +entry: +} +define void @_sysy_starttime() { +entry: +} +define void @_sysy_stoptime() { +entry: +} +define void @starttime() { +entry: +} +define void @stoptime() { +entry: +} +define i32 @read_map() { +entry: +} +define i32 @float_eq() { +entry: +} +define i32* @memset() { +entry: +} +define i32 @main() { +entry: + %t0_a = alloca i32 + store i32 1, i32* %t0_a + %t1_b = alloca i32 + store i32 2, i32* %t1_b + %t2 = load i32, i32* %t0_a + %t3 = load i32, i32* %t1_b + %t4 = add i32 %t2, %t3 + ret i32 %t4 +} + +========== test/test_case/performance/01_mm2.sy ========== +SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored starttime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored stoptime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored mm with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 +[DEBUG] CheckConstDef: N base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 1024 +[DEBUG] visitPrimaryExp: 1024 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: N, ctx: 0x562c650374f0 +SymbolTable::addSymbol: stored N with kind=3, const_def_ctx=0x562c650374f0 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x562c650374f0 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckVarDef: A base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: N +[DEBUG] visitPrimaryExp: N +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 +CheckLValue: found sym->name = N, sym->kind = 3 +绑定常量: N -> ConstDefContext +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x562c650374f0 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 +[DEBUG] dim[0] = 1024 +[DEBUG] visitUnaryExp: N +[DEBUG] visitPrimaryExp: N +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 +CheckLValue: found sym->name = N, sym->kind = 3 +绑定常量: N -> ConstDefContext +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x562c650374f0 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 +[DEBUG] dim[1] = 1024 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 1024 1024 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored A with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: A type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: B base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: N +[DEBUG] visitPrimaryExp: N +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 +CheckLValue: found sym->name = N, sym->kind = 3 +绑定常量: N -> ConstDefContext +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x562c650374f0 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 +[DEBUG] dim[0] = 1024 +[DEBUG] visitUnaryExp: N +[DEBUG] visitPrimaryExp: N +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 +CheckLValue: found sym->name = N, sym->kind = 3 +绑定常量: N -> ConstDefContext +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x562c650374f0 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 +[DEBUG] dim[1] = 1024 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 1024 1024 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored B with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: B type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: C base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: N +[DEBUG] visitPrimaryExp: N +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 +CheckLValue: found sym->name = N, sym->kind = 3 +绑定常量: N -> ConstDefContext +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x562c650374f0 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 +[DEBUG] dim[0] = 1024 +[DEBUG] visitUnaryExp: N +[DEBUG] visitPrimaryExp: N +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 +CheckLValue: found sym->name = N, sym->kind = 3 +绑定常量: N -> ConstDefContext +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x562c650374f0 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 +[DEBUG] dim[1] = 1024 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 1024 1024 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored C with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: C type_kind: 6 is_array: 1 +[DEBUG] 进入函数: mm 返回类型: void +SymbolTable::addSymbol: stored n with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: n type_kind: 1 is_array: 0 dims: +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 +SymbolTable::addSymbol: stored A with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: A type_kind: 3 is_array: 1 dims: 0 1024 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 +SymbolTable::addSymbol: stored B with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: B type_kind: 3 is_array: 1 dims: 0 1024 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 +SymbolTable::addSymbol: stored C with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: C type_kind: 3 is_array: 1 dims: 0 1024 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: k base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored k with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: k type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found C in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = C, sym->kind = 2 +CheckLValue 绑定变量: C, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 2 维, dims: 0 1024 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found k in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = k, sym->kind = 0 +绑定变量: k -> VarDefContext +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x562c650437c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: k +[DEBUG] visitPrimaryExp: k +SymbolTable::lookup: found k in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = k, sym->kind = 0 +绑定变量: k -> VarDefContext +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x562c650437c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: A[i][k] +[DEBUG] visitPrimaryExp: A[i][k] +SymbolTable::lookup: found A in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = A, sym->kind = 2 +CheckLValue 绑定变量: A, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 2 维, dims: 0 1024 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: k +[DEBUG] visitUnaryExp: k +[DEBUG] visitPrimaryExp: k +SymbolTable::lookup: found k in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = k, sym->kind = 0 +绑定变量: k -> VarDefContext +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x562c650437c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Continue +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found C in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = C, sym->kind = 2 +CheckLValue 绑定变量: C, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 2 维, dims: 0 1024 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: C[i][j]+A[i][k]*B[k][j] +[DEBUG] visitUnaryExp: C[i][j] +[DEBUG] visitPrimaryExp: C[i][j] +SymbolTable::lookup: found C in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = C, sym->kind = 2 +CheckLValue 绑定变量: C, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 2 维, dims: 0 1024 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: A[i][k] +[DEBUG] visitPrimaryExp: A[i][k] +SymbolTable::lookup: found A in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = A, sym->kind = 2 +CheckLValue 绑定变量: A, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 2 维, dims: 0 1024 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: k +[DEBUG] visitUnaryExp: k +[DEBUG] visitPrimaryExp: k +SymbolTable::lookup: found k in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = k, sym->kind = 0 +绑定变量: k -> VarDefContext +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x562c650437c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: B[k][j] +[DEBUG] visitPrimaryExp: B[k][j] +SymbolTable::lookup: found B in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = B, sym->kind = 2 +CheckLValue 绑定变量: B, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 2 维, dims: 0 1024 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: k +[DEBUG] visitUnaryExp: k +[DEBUG] visitPrimaryExp: k +SymbolTable::lookup: found k in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = k, sym->kind = 0 +绑定变量: k -> VarDefContext +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x562c650437c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found k in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = k, sym->kind = 0 +绑定变量: k -> VarDefContext +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x562c650437c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: k+1 +[DEBUG] visitUnaryExp: k +[DEBUG] visitPrimaryExp: k +SymbolTable::lookup: found k in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = k, sym->kind = 0 +绑定变量: k -> VarDefContext +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x562c650437c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 函数 mm has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: n base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: getint() +[DEBUG] visitUnaryExp: getint() +[DEBUG] 函数调用: getint +[DEBUG] CheckFuncCall: getint +SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored n with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: n type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x562c650746a0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x562c650746a0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = A, sym->kind = 0 +绑定变量: A -> VarDefContext +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x562c65070b40, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: getint() +[DEBUG] visitUnaryExp: getint() +[DEBUG] 函数调用: getint +[DEBUG] CheckFuncCall: getint +SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x562c650746a0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x562c650746a0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = B, sym->kind = 0 +绑定变量: B -> VarDefContext +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x562c65071cf0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: getint() +[DEBUG] visitUnaryExp: getint() +[DEBUG] 函数调用: getint +[DEBUG] CheckFuncCall: getint +SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: starttime() +[DEBUG] visitUnaryExp: starttime() +[DEBUG] 函数调用: starttime +[DEBUG] CheckFuncCall: starttime +SymbolTable::lookup: found starttime in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 5 +[DEBUG] visitPrimaryExp: 5 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: mm(n,A,B,C) +[DEBUG] visitUnaryExp: mm(n,A,B,C) +[DEBUG] 函数调用: mm +[DEBUG] CheckFuncCall: mm +SymbolTable::lookup: found mm in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: n +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x562c650746a0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: A +[DEBUG] visitUnaryExp: A +[DEBUG] visitPrimaryExp: A +SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = A, sym->kind = 0 +绑定变量: A -> VarDefContext +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x562c65070b40, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: B +[DEBUG] visitUnaryExp: B +[DEBUG] visitPrimaryExp: B +SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = B, sym->kind = 0 +绑定变量: B -> VarDefContext +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x562c65071cf0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: C +[DEBUG] visitUnaryExp: C +[DEBUG] visitPrimaryExp: C +SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = C, sym->kind = 0 +绑定变量: C -> VarDefContext +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x562c65072c40, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 0 +数组名作为地址 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 3 形参类型 3 +[DEBUG] 检查参数 2: 实参类型 3 形参类型 3 +[DEBUG] 检查参数 3: 实参类型 3 形参类型 3 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: mm(n,A,C,B) +[DEBUG] visitUnaryExp: mm(n,A,C,B) +[DEBUG] 函数调用: mm +[DEBUG] CheckFuncCall: mm +SymbolTable::lookup: found mm in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: n +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x562c650746a0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: A +[DEBUG] visitUnaryExp: A +[DEBUG] visitPrimaryExp: A +SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = A, sym->kind = 0 +绑定变量: A -> VarDefContext +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x562c65070b40, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: C +[DEBUG] visitUnaryExp: C +[DEBUG] visitPrimaryExp: C +SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = C, sym->kind = 0 +绑定变量: C -> VarDefContext +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x562c65072c40, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: B +[DEBUG] visitUnaryExp: B +[DEBUG] visitPrimaryExp: B +SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = B, sym->kind = 0 +绑定变量: B -> VarDefContext +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x562c65071cf0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 0 +数组名作为地址 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 3 形参类型 3 +[DEBUG] 检查参数 2: 实参类型 3 形参类型 3 +[DEBUG] 检查参数 3: 实参类型 3 形参类型 3 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckVarDef: ans base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored ans with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: ans type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x562c650746a0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x562c650746a0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = ans, sym->kind = 0 +绑定变量: ans -> VarDefContext +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x562c6508b5b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: ans+B[i][j] +[DEBUG] visitUnaryExp: ans +[DEBUG] visitPrimaryExp: ans +SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = ans, sym->kind = 0 +绑定变量: ans -> VarDefContext +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x562c6508b5b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: B[i][j] +[DEBUG] visitPrimaryExp: B[i][j] +SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = B, sym->kind = 0 +绑定变量: B -> VarDefContext +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x562c65071cf0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: stoptime() +[DEBUG] visitUnaryExp: stoptime() +[DEBUG] 函数调用: stoptime +[DEBUG] CheckFuncCall: stoptime +SymbolTable::lookup: found stoptime in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putint(ans) +[DEBUG] visitUnaryExp: putint(ans) +[DEBUG] 函数调用: putint +[DEBUG] CheckFuncCall: putint +SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: ans +[DEBUG] visitUnaryExp: ans +[DEBUG] visitPrimaryExp: ans +SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = ans, sym->kind = 0 +绑定变量: ans -> VarDefContext +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x562c6508b5b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(10) +[DEBUG] visitUnaryExp: putch(10) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 +[DEBUG IRGEN] visitCompUnit +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: A +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 A +[DEBUG] HandleGlobalVariable: 变量 A 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 1048576 +[DEBUG] HandleGlobalVariable: 创建全局数组: A +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: B +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 B +[DEBUG] HandleGlobalVariable: 变量 B 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 1048576 +[DEBUG] HandleGlobalVariable: 创建全局数组: B +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: C +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 C +[DEBUG] HandleGlobalVariable: 变量 C 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 1048576 +[DEBUG] HandleGlobalVariable: 创建全局数组: C +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG IRGEN] visitFuncDef: mm +[DEBUG] visitFuncDef: 创建函数 mm,返回类型: void,参数数量: 4 +[DEBUG] visitFuncDef: 函数对象地址: 0x562c650a3b70 +[DEBUG] visitFuncDef: 为函数 mm 添加参数 n,类型: int32 +[DEBUG] visitFuncDef: 参数 n 处理完成 +[DEBUG] visitFuncDef: 为函数 mm 添加参数 A,类型: ptr_int32 +[error] [ir] 存储类型不匹配:期望 int32 + +========== test/test_case/performance/02_mv3.sy ========== +SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored starttime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored stoptime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored mv with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 +[DEBUG] CheckVarDef: x base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored x with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: x type_kind: 1 is_array: 0 +[DEBUG] CheckConstDef: N base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 2010 +[DEBUG] visitPrimaryExp: 2010 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: N, ctx: 0x559802e25620 +SymbolTable::addSymbol: stored N with kind=3, const_def_ctx=0x559802e25620 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x559802e25620 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x559802e25620 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckVarDef: A base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: N +[DEBUG] visitPrimaryExp: N +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x559802e25620 +CheckLValue: found sym->name = N, sym->kind = 3 +绑定常量: N -> ConstDefContext +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x559802e25620 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x559802e25620 +[DEBUG] dim[0] = 2010 +[DEBUG] visitUnaryExp: N +[DEBUG] visitPrimaryExp: N +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x559802e25620 +CheckLValue: found sym->name = N, sym->kind = 3 +绑定常量: N -> ConstDefContext +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x559802e25620 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x559802e25620 +[DEBUG] dim[1] = 2010 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 2010 2010 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored A with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: A type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: B base_type: int is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: N +[DEBUG] visitPrimaryExp: N +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x559802e25620 +CheckLValue: found sym->name = N, sym->kind = 3 +绑定常量: N -> ConstDefContext +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x559802e25620 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x559802e25620 +[DEBUG] dim[0] = 2010 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 2010 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored B with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: B type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: C base_type: int is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: N +[DEBUG] visitPrimaryExp: N +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x559802e25620 +CheckLValue: found sym->name = N, sym->kind = 3 +绑定常量: N -> ConstDefContext +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x559802e25620 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x559802e25620 +[DEBUG] dim[0] = 2010 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 2010 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored C with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: C type_kind: 6 is_array: 1 +[DEBUG] 进入函数: mv 返回类型: void +SymbolTable::addSymbol: stored n with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: n type_kind: 1 is_array: 0 dims: +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x559802e25620 +SymbolTable::addSymbol: stored A with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: A type_kind: 3 is_array: 1 dims: 0 2010 +SymbolTable::addSymbol: stored b with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: b type_kind: 3 is_array: 1 dims: 0 +SymbolTable::addSymbol: stored res with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: res type_kind: 3 is_array: 1 dims: 0 +[DEBUG] CheckVarDef: x base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored x with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: x type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: y base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored y with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: y type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found y in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = y, sym->kind = 0 +绑定变量: y -> VarDefContext +CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x559802e2fa60, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found x in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = x, sym->kind = 0 +绑定变量: x -> VarDefContext +CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x559802e28960, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 11 +[DEBUG] visitUnaryExp: 11 +[DEBUG] visitPrimaryExp: 11 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found res in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = res, sym->kind = 2 +CheckLValue 绑定变量: res, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e37aa0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e37aa0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e37aa0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: A[i][j] +[DEBUG] visitPrimaryExp: A[i][j] +SymbolTable::lookup: found A in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = A, sym->kind = 2 +CheckLValue 绑定变量: A, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 2 维, dims: 0 2010 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e37aa0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found x in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = x, sym->kind = 0 +绑定变量: x -> VarDefContext +CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x559802e28960, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: x*b[i]+b[j] +[DEBUG] visitUnaryExp: x +[DEBUG] visitPrimaryExp: x +SymbolTable::lookup: found x in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = x, sym->kind = 0 +绑定变量: x -> VarDefContext +CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x559802e28960, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: b[i] +[DEBUG] visitPrimaryExp: b[i] +SymbolTable::lookup: found b in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 2 +CheckLValue 绑定变量: b, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: b[j] +[DEBUG] visitPrimaryExp: b[j] +SymbolTable::lookup: found b in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 2 +CheckLValue 绑定变量: b, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e37aa0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found y in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = y, sym->kind = 0 +绑定变量: y -> VarDefContext +CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x559802e2fa60, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: y-x +[DEBUG] visitUnaryExp: y +[DEBUG] visitPrimaryExp: y +SymbolTable::lookup: found y in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = y, sym->kind = 0 +绑定变量: y -> VarDefContext +CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x559802e2fa60, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: x +[DEBUG] visitPrimaryExp: x +SymbolTable::lookup: found x in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = x, sym->kind = 0 +绑定变量: x -> VarDefContext +CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x559802e28960, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found res in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = res, sym->kind = 2 +CheckLValue 绑定变量: res, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: res[i]+A[i][j]*b[j] +[DEBUG] visitUnaryExp: res[i] +[DEBUG] visitPrimaryExp: res[i] +SymbolTable::lookup: found res in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = res, sym->kind = 2 +CheckLValue 绑定变量: res, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: A[i][j] +[DEBUG] visitPrimaryExp: A[i][j] +SymbolTable::lookup: found A in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = A, sym->kind = 2 +CheckLValue 绑定变量: A, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 2 维, dims: 0 2010 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e37aa0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: b[j] +[DEBUG] visitPrimaryExp: b[j] +SymbolTable::lookup: found b in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 2 +CheckLValue 绑定变量: b, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e37aa0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e37aa0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e37aa0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 函数 mv has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: n base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: getint() +[DEBUG] visitUnaryExp: getint() +[DEBUG] 函数调用: getint +[DEBUG] CheckFuncCall: getint +SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored n with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: n type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x559802e5d050, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e5e170, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e5e170, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x559802e5d050, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = A, sym->kind = 0 +绑定变量: A -> VarDefContext +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x559802e523e0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e5e170, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: getint() +[DEBUG] visitUnaryExp: getint() +[DEBUG] 函数调用: getint +[DEBUG] CheckFuncCall: getint +SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e5e170, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e5e170, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x559802e5d050, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = B, sym->kind = 0 +绑定变量: B -> VarDefContext +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x559802e47ce0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: getint() +[DEBUG] visitUnaryExp: getint() +[DEBUG] 函数调用: getint +[DEBUG] CheckFuncCall: getint +SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: starttime() +[DEBUG] visitUnaryExp: starttime() +[DEBUG] 函数调用: starttime +[DEBUG] CheckFuncCall: starttime +SymbolTable::lookup: found starttime in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 50 +[DEBUG] visitPrimaryExp: 50 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: mv(n,A,B,C) +[DEBUG] visitUnaryExp: mv(n,A,B,C) +[DEBUG] 函数调用: mv +[DEBUG] CheckFuncCall: mv +SymbolTable::lookup: found mv in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: n +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x559802e5d050, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: A +[DEBUG] visitUnaryExp: A +[DEBUG] visitPrimaryExp: A +SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = A, sym->kind = 0 +绑定变量: A -> VarDefContext +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x559802e523e0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: B +[DEBUG] visitUnaryExp: B +[DEBUG] visitPrimaryExp: B +SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = B, sym->kind = 0 +绑定变量: B -> VarDefContext +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x559802e47ce0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: C +[DEBUG] visitUnaryExp: C +[DEBUG] visitPrimaryExp: C +SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = C, sym->kind = 0 +绑定变量: C -> VarDefContext +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x559802e5c1c0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 3 形参类型 3 +[DEBUG] 检查参数 2: 实参类型 3 形参类型 3 +[DEBUG] 检查参数 3: 实参类型 3 形参类型 3 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: mv(n,A,C,B) +[DEBUG] visitUnaryExp: mv(n,A,C,B) +[DEBUG] 函数调用: mv +[DEBUG] CheckFuncCall: mv +SymbolTable::lookup: found mv in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: n +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x559802e5d050, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: A +[DEBUG] visitUnaryExp: A +[DEBUG] visitPrimaryExp: A +SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = A, sym->kind = 0 +绑定变量: A -> VarDefContext +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x559802e523e0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: C +[DEBUG] visitUnaryExp: C +[DEBUG] visitPrimaryExp: C +SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = C, sym->kind = 0 +绑定变量: C -> VarDefContext +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x559802e5c1c0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: B +[DEBUG] visitUnaryExp: B +[DEBUG] visitPrimaryExp: B +SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = B, sym->kind = 0 +绑定变量: B -> VarDefContext +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x559802e47ce0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 3 形参类型 3 +[DEBUG] 检查参数 2: 实参类型 3 形参类型 3 +[DEBUG] 检查参数 3: 实参类型 3 形参类型 3 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: stoptime() +[DEBUG] visitUnaryExp: stoptime() +[DEBUG] 函数调用: stoptime +[DEBUG] CheckFuncCall: stoptime +SymbolTable::lookup: found stoptime in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putarray(n,C) +[DEBUG] visitUnaryExp: putarray(n,C) +[DEBUG] 函数调用: putarray +[DEBUG] CheckFuncCall: putarray +SymbolTable::lookup: found putarray in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: n +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x559802e5d050, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: C +[DEBUG] visitUnaryExp: C +[DEBUG] visitPrimaryExp: C +SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = C, sym->kind = 0 +绑定变量: C -> VarDefContext +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x559802e5c1c0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 3 形参类型 3 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 +[DEBUG IRGEN] visitCompUnit +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: x +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 x +[DEBUG] HandleGlobalVariable: 变量 x 是 int 类型 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: x +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: A +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 A +[DEBUG] HandleGlobalVariable: 变量 A 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 4040100 +[DEBUG] HandleGlobalVariable: 创建全局数组: A +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: B +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 B +[DEBUG] HandleGlobalVariable: 变量 B 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 2010 +[DEBUG] HandleGlobalVariable: 创建全局数组: B +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: C +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 C +[DEBUG] HandleGlobalVariable: 变量 C 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 2010 +[DEBUG] HandleGlobalVariable: 创建全局数组: C +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG IRGEN] visitFuncDef: mv +[DEBUG] visitFuncDef: 创建函数 mv,返回类型: void,参数数量: 4 +[DEBUG] visitFuncDef: 函数对象地址: 0x559802e7db20 +[DEBUG] visitFuncDef: 为函数 mv 添加参数 n,类型: int32 +[DEBUG] visitFuncDef: 参数 n 处理完成 +[DEBUG] visitFuncDef: 为函数 mv 添加参数 A,类型: ptr_int32 +[error] [ir] 存储类型不匹配:期望 int32 + +========== test/test_case/performance/03_sort1.sy ========== +SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored starttime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored stoptime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getMaxNum with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getNumPos with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored radixSort with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 +[DEBUG] CheckConstDef: base base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 16 +[DEBUG] visitPrimaryExp: 16 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: base, ctx: 0x563bb8523830 +SymbolTable::addSymbol: stored base with kind=3, const_def_ctx=0x563bb8523830 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x563bb8523830 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x563bb8523830 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckVarDef: a base_type: int is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: 30000010 +[DEBUG] visitPrimaryExp: 30000010 +[DEBUG] dim[0] = 30000010 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 30000010 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored a with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: a type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: ans base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored ans with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: ans type_kind: 1 is_array: 0 +[DEBUG] 进入函数: getMaxNum 返回类型: int +SymbolTable::addSymbol: stored n with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: n type_kind: 1 is_array: 0 dims: +SymbolTable::addSymbol: stored arr with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: arr type_kind: 3 is_array: 1 dims: 0 +[DEBUG] CheckVarDef: ret base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored ret with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: ret type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8530850, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: arr[i] +[DEBUG] visitPrimaryExp: arr[i] +SymbolTable::lookup: found arr in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = arr, sym->kind = 2 +CheckLValue 绑定变量: arr, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8530850, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: ret +[DEBUG] visitPrimaryExp: ret +SymbolTable::lookup: found ret in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = ret, sym->kind = 0 +绑定变量: ret -> VarDefContext +CheckLValue 绑定变量: ret, sym->kind: 0, sym->var_def_ctx: 0x563bb852f770, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found ret in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = ret, sym->kind = 0 +绑定变量: ret -> VarDefContext +CheckLValue 绑定变量: ret, sym->kind: 0, sym->var_def_ctx: 0x563bb852f770, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: arr[i] +[DEBUG] visitUnaryExp: arr[i] +[DEBUG] visitPrimaryExp: arr[i] +SymbolTable::lookup: found arr in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = arr, sym->kind = 2 +CheckLValue 绑定变量: arr, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8530850, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8530850, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8530850, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: ret +[DEBUG] visitUnaryExp: ret +[DEBUG] visitPrimaryExp: ret +SymbolTable::lookup: found ret in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = ret, sym->kind = 0 +绑定变量: ret -> VarDefContext +CheckLValue 绑定变量: ret, sym->kind: 0, sym->var_def_ctx: 0x563bb852f770, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 getMaxNum has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: getNumPos 返回类型: int +SymbolTable::addSymbol: stored num with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: num type_kind: 1 is_array: 0 dims: +SymbolTable::addSymbol: stored pos with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: pos type_kind: 1 is_array: 0 dims: +[DEBUG] CheckVarDef: tmp base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +SymbolTable::addSymbol: stored tmp with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: tmp type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8548ae0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: pos +[DEBUG] visitPrimaryExp: pos +SymbolTable::lookup: found pos in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = pos, sym->kind = 2 +CheckLValue 绑定变量: pos, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found num in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = num, sym->kind = 2 +CheckLValue 绑定变量: num, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: num/base +[DEBUG] visitUnaryExp: num +[DEBUG] visitPrimaryExp: num +SymbolTable::lookup: found num in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = num, sym->kind = 2 +CheckLValue 绑定变量: num, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: base +[DEBUG] visitPrimaryExp: base +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x563bb8523830 +CheckLValue: found sym->name = base, sym->kind = 3 +绑定常量: base -> ConstDefContext +CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x563bb8523830 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8548ae0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8548ae0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: num%base +[DEBUG] visitUnaryExp: num +[DEBUG] visitPrimaryExp: num +SymbolTable::lookup: found num in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = num, sym->kind = 2 +CheckLValue 绑定变量: num, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: base +[DEBUG] visitPrimaryExp: base +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x563bb8523830 +CheckLValue: found sym->name = base, sym->kind = 3 +绑定常量: base -> ConstDefContext +CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x563bb8523830 +dim_count: 0, subscript_count: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 getNumPos has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: radixSort 返回类型: void +SymbolTable::addSymbol: stored bitround with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: bitround type_kind: 1 is_array: 0 dims: +SymbolTable::addSymbol: stored a with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: a type_kind: 3 is_array: 1 dims: 0 +SymbolTable::addSymbol: stored l with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: l type_kind: 1 is_array: 0 dims: +SymbolTable::addSymbol: stored r with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: r type_kind: 1 is_array: 0 dims: +[DEBUG] CheckVarDef: head base_type: int is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: base +[DEBUG] visitPrimaryExp: base +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x563bb8523830 +CheckLValue: found sym->name = base, sym->kind = 3 +绑定常量: base -> ConstDefContext +CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x563bb8523830 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x563bb8523830 +[DEBUG] dim[0] = 16 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 16 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored head with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: head type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: tail base_type: int is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: base +[DEBUG] visitPrimaryExp: base +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x563bb8523830 +CheckLValue: found sym->name = base, sym->kind = 3 +绑定常量: base -> ConstDefContext +CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x563bb8523830 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x563bb8523830 +[DEBUG] dim[0] = 16 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 16 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored tail with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: tail type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: cnt base_type: int is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: base +[DEBUG] visitPrimaryExp: base +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x563bb8523830 +CheckLValue: found sym->name = base, sym->kind = 3 +绑定常量: base -> ConstDefContext +CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x563bb8523830 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x563bb8523830 +[DEBUG] dim[0] = 16 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 16 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored cnt with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: cnt type_kind: 6 is_array: 1 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: bitround +[DEBUG] visitPrimaryExp: bitround +SymbolTable::lookup: found bitround in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = bitround, sym->kind = 2 +CheckLValue 绑定变量: bitround, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: -1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitUnaryExp: l +[DEBUG] visitPrimaryExp: l +SymbolTable::lookup: found l in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = l, sym->kind = 2 +CheckLValue 绑定变量: l, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitUnaryExp: r +[DEBUG] visitPrimaryExp: r +SymbolTable::lookup: found r in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = r, sym->kind = 2 +CheckLValue 绑定变量: r, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Return +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 无返回值的 return +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] visitStmt: Block +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: l +[DEBUG] visitUnaryExp: l +[DEBUG] visitPrimaryExp: l +SymbolTable::lookup: found l in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = l, sym->kind = 2 +CheckLValue 绑定变量: l, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: r +[DEBUG] visitPrimaryExp: r +SymbolTable::lookup: found r in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = r, sym->kind = 2 +CheckLValue 绑定变量: r, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found cnt in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = cnt, sym->kind = 0 +绑定变量: cnt -> VarDefContext +CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x563bb85529f0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: getNumPos(a[i],bitround) +[DEBUG] visitUnaryExp: getNumPos(a[i],bitround) +[DEBUG] 函数调用: getNumPos +[DEBUG] CheckFuncCall: getNumPos +SymbolTable::lookup: found getNumPos in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: a[i] +[DEBUG] visitUnaryExp: a[i] +[DEBUG] visitPrimaryExp: a[i] +SymbolTable::lookup: found a in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 2 +CheckLValue 绑定变量: a, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: bitround +[DEBUG] visitUnaryExp: bitround +[DEBUG] visitPrimaryExp: bitround +SymbolTable::lookup: found bitround in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = bitround, sym->kind = 2 +CheckLValue 绑定变量: bitround, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +完全索引,返回元素类型 +[DEBUG] CheckExp: cnt[getNumPos(a[i],bitround)]+1 +[DEBUG] visitUnaryExp: cnt[getNumPos(a[i],bitround)] +[DEBUG] visitPrimaryExp: cnt[getNumPos(a[i],bitround)] +SymbolTable::lookup: found cnt in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = cnt, sym->kind = 0 +绑定变量: cnt -> VarDefContext +CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x563bb85529f0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: getNumPos(a[i],bitround) +[DEBUG] visitUnaryExp: getNumPos(a[i],bitround) +[DEBUG] 函数调用: getNumPos +[DEBUG] CheckFuncCall: getNumPos +SymbolTable::lookup: found getNumPos in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: a[i] +[DEBUG] visitUnaryExp: a[i] +[DEBUG] visitPrimaryExp: a[i] +SymbolTable::lookup: found a in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 2 +CheckLValue 绑定变量: a, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: bitround +[DEBUG] visitUnaryExp: bitround +[DEBUG] visitPrimaryExp: bitround +SymbolTable::lookup: found bitround in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = bitround, sym->kind = 2 +CheckLValue 绑定变量: bitround, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = head, sym->kind = 0 +绑定变量: head -> VarDefContext +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: l +[DEBUG] visitUnaryExp: l +[DEBUG] visitPrimaryExp: l +SymbolTable::lookup: found l in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = l, sym->kind = 2 +CheckLValue 绑定变量: l, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found tail in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = tail, sym->kind = 0 +绑定变量: tail -> VarDefContext +CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x563bb8551cb0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: l+cnt[0] +[DEBUG] visitUnaryExp: l +[DEBUG] visitPrimaryExp: l +SymbolTable::lookup: found l in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = l, sym->kind = 2 +CheckLValue 绑定变量: l, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: cnt[0] +[DEBUG] visitPrimaryExp: cnt[0] +SymbolTable::lookup: found cnt in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = cnt, sym->kind = 0 +绑定变量: cnt -> VarDefContext +CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x563bb85529f0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +完全索引,返回元素类型 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: base +[DEBUG] visitPrimaryExp: base +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x563bb8523830 +CheckLValue: found sym->name = base, sym->kind = 3 +绑定常量: base -> ConstDefContext +CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x563bb8523830 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = head, sym->kind = 0 +绑定变量: head -> VarDefContext +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: tail[i-1] +[DEBUG] visitUnaryExp: tail[i-1] +[DEBUG] visitPrimaryExp: tail[i-1] +SymbolTable::lookup: found tail in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = tail, sym->kind = 0 +绑定变量: tail -> VarDefContext +CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x563bb8551cb0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i-1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +完全索引,返回元素类型 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found tail in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = tail, sym->kind = 0 +绑定变量: tail -> VarDefContext +CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x563bb8551cb0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: head[i]+cnt[i] +[DEBUG] visitUnaryExp: head[i] +[DEBUG] visitPrimaryExp: head[i] +SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = head, sym->kind = 0 +绑定变量: head -> VarDefContext +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: cnt[i] +[DEBUG] visitPrimaryExp: cnt[i] +SymbolTable::lookup: found cnt in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = cnt, sym->kind = 0 +绑定变量: cnt -> VarDefContext +CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x563bb85529f0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: base +[DEBUG] visitPrimaryExp: base +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x563bb8523830 +CheckLValue: found sym->name = base, sym->kind = 3 +绑定常量: base -> ConstDefContext +CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x563bb8523830 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: head[i] +[DEBUG] visitPrimaryExp: head[i] +SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = head, sym->kind = 0 +绑定变量: head -> VarDefContext +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: tail[i] +[DEBUG] visitPrimaryExp: tail[i] +SymbolTable::lookup: found tail in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = tail, sym->kind = 0 +绑定变量: tail -> VarDefContext +CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x563bb8551cb0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitStmt: Block +[DEBUG] CheckVarDef: v base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: a[head[i]] +[DEBUG] visitUnaryExp: a[head[i]] +[DEBUG] visitPrimaryExp: a[head[i]] +SymbolTable::lookup: found a in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 2 +CheckLValue 绑定变量: a, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: head[i] +[DEBUG] visitUnaryExp: head[i] +[DEBUG] visitPrimaryExp: head[i] +SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = head, sym->kind = 0 +绑定变量: head -> VarDefContext +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +完全索引,返回元素类型 +SymbolTable::addSymbol: stored v with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: v type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: getNumPos(v,bitround) +[DEBUG] 函数调用: getNumPos +[DEBUG] CheckFuncCall: getNumPos +SymbolTable::lookup: found getNumPos in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: v +[DEBUG] visitUnaryExp: v +[DEBUG] visitPrimaryExp: v +SymbolTable::lookup: found v in scope level 6, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = v, sym->kind = 0 +绑定变量: v -> VarDefContext +CheckLValue 绑定变量: v, sym->kind: 0, sym->var_def_ctx: 0x563bb8573f10, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: bitround +[DEBUG] visitUnaryExp: bitround +[DEBUG] visitPrimaryExp: bitround +SymbolTable::lookup: found bitround in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = bitround, sym->kind = 2 +CheckLValue 绑定变量: bitround, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] CheckVarDef: t base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: v +[DEBUG] visitUnaryExp: v +[DEBUG] visitPrimaryExp: v +SymbolTable::lookup: found v in scope level 6, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = v, sym->kind = 0 +绑定变量: v -> VarDefContext +CheckLValue 绑定变量: v, sym->kind: 0, sym->var_def_ctx: 0x563bb8573f10, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +SymbolTable::addSymbol: stored t with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: t type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found v in scope level 6, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = v, sym->kind = 0 +绑定变量: v -> VarDefContext +CheckLValue 绑定变量: v, sym->kind: 0, sym->var_def_ctx: 0x563bb8573f10, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: a[head[getNumPos(t,bitround)]] +[DEBUG] visitUnaryExp: a[head[getNumPos(t,bitround)]] +[DEBUG] visitPrimaryExp: a[head[getNumPos(t,bitround)]] +SymbolTable::lookup: found a in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 2 +CheckLValue 绑定变量: a, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: head[getNumPos(t,bitround)] +[DEBUG] visitUnaryExp: head[getNumPos(t,bitround)] +[DEBUG] visitPrimaryExp: head[getNumPos(t,bitround)] +SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = head, sym->kind = 0 +绑定变量: head -> VarDefContext +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: getNumPos(t,bitround) +[DEBUG] visitUnaryExp: getNumPos(t,bitround) +[DEBUG] 函数调用: getNumPos +[DEBUG] CheckFuncCall: getNumPos +SymbolTable::lookup: found getNumPos in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: t +[DEBUG] visitUnaryExp: t +[DEBUG] visitPrimaryExp: t +SymbolTable::lookup: found t in scope level 7, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = t, sym->kind = 0 +绑定变量: t -> VarDefContext +CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x563bb85777f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: bitround +[DEBUG] visitUnaryExp: bitround +[DEBUG] visitPrimaryExp: bitround +SymbolTable::lookup: found bitround in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = bitround, sym->kind = 2 +CheckLValue 绑定变量: bitround, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +完全索引,返回元素类型 +完全索引,返回元素类型 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found a in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 2 +CheckLValue 绑定变量: a, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: head[getNumPos(t,bitround)] +[DEBUG] visitUnaryExp: head[getNumPos(t,bitround)] +[DEBUG] visitPrimaryExp: head[getNumPos(t,bitround)] +SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = head, sym->kind = 0 +绑定变量: head -> VarDefContext +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: getNumPos(t,bitround) +[DEBUG] visitUnaryExp: getNumPos(t,bitround) +[DEBUG] 函数调用: getNumPos +[DEBUG] CheckFuncCall: getNumPos +SymbolTable::lookup: found getNumPos in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: t +[DEBUG] visitUnaryExp: t +[DEBUG] visitPrimaryExp: t +SymbolTable::lookup: found t in scope level 7, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = t, sym->kind = 0 +绑定变量: t -> VarDefContext +CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x563bb85777f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: bitround +[DEBUG] visitUnaryExp: bitround +[DEBUG] visitPrimaryExp: bitround +SymbolTable::lookup: found bitround in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = bitround, sym->kind = 2 +CheckLValue 绑定变量: bitround, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +完全索引,返回元素类型 +完全索引,返回元素类型 +[DEBUG] CheckExp: t +[DEBUG] visitUnaryExp: t +[DEBUG] visitPrimaryExp: t +SymbolTable::lookup: found t in scope level 7, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = t, sym->kind = 0 +绑定变量: t -> VarDefContext +CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x563bb85777f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = head, sym->kind = 0 +绑定变量: head -> VarDefContext +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: getNumPos(t,bitround) +[DEBUG] visitUnaryExp: getNumPos(t,bitround) +[DEBUG] 函数调用: getNumPos +[DEBUG] CheckFuncCall: getNumPos +SymbolTable::lookup: found getNumPos in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: t +[DEBUG] visitUnaryExp: t +[DEBUG] visitPrimaryExp: t +SymbolTable::lookup: found t in scope level 7, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = t, sym->kind = 0 +绑定变量: t -> VarDefContext +CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x563bb85777f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: bitround +[DEBUG] visitUnaryExp: bitround +[DEBUG] visitPrimaryExp: bitround +SymbolTable::lookup: found bitround in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = bitround, sym->kind = 2 +CheckLValue 绑定变量: bitround, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +完全索引,返回元素类型 +[DEBUG] CheckExp: head[getNumPos(t,bitround)]+1 +[DEBUG] visitUnaryExp: head[getNumPos(t,bitround)] +[DEBUG] visitPrimaryExp: head[getNumPos(t,bitround)] +SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = head, sym->kind = 0 +绑定变量: head -> VarDefContext +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: getNumPos(t,bitround) +[DEBUG] visitUnaryExp: getNumPos(t,bitround) +[DEBUG] 函数调用: getNumPos +[DEBUG] CheckFuncCall: getNumPos +SymbolTable::lookup: found getNumPos in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: t +[DEBUG] visitUnaryExp: t +[DEBUG] visitPrimaryExp: t +SymbolTable::lookup: found t in scope level 7, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = t, sym->kind = 0 +绑定变量: t -> VarDefContext +CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x563bb85777f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: bitround +[DEBUG] visitUnaryExp: bitround +[DEBUG] visitPrimaryExp: bitround +SymbolTable::lookup: found bitround in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = bitround, sym->kind = 2 +CheckLValue 绑定变量: bitround, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found a in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 2 +CheckLValue 绑定变量: a, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: head[i] +[DEBUG] visitUnaryExp: head[i] +[DEBUG] visitPrimaryExp: head[i] +SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = head, sym->kind = 0 +绑定变量: head -> VarDefContext +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +完全索引,返回元素类型 +[DEBUG] CheckExp: v +[DEBUG] visitUnaryExp: v +[DEBUG] visitPrimaryExp: v +SymbolTable::lookup: found v in scope level 6, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = v, sym->kind = 0 +绑定变量: v -> VarDefContext +CheckLValue 绑定变量: v, sym->kind: 0, sym->var_def_ctx: 0x563bb8573f10, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = head, sym->kind = 0 +绑定变量: head -> VarDefContext +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: head[i]+1 +[DEBUG] visitUnaryExp: head[i] +[DEBUG] visitPrimaryExp: head[i] +SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = head, sym->kind = 0 +绑定变量: head -> VarDefContext +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Block +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: l +[DEBUG] visitUnaryExp: l +[DEBUG] visitPrimaryExp: l +SymbolTable::lookup: found l in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = l, sym->kind = 2 +CheckLValue 绑定变量: l, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = head, sym->kind = 0 +绑定变量: head -> VarDefContext +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: l +[DEBUG] visitUnaryExp: l +[DEBUG] visitPrimaryExp: l +SymbolTable::lookup: found l in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = l, sym->kind = 2 +CheckLValue 绑定变量: l, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found tail in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = tail, sym->kind = 0 +绑定变量: tail -> VarDefContext +CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x563bb8551cb0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: l+cnt[0] +[DEBUG] visitUnaryExp: l +[DEBUG] visitPrimaryExp: l +SymbolTable::lookup: found l in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = l, sym->kind = 2 +CheckLValue 绑定变量: l, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: cnt[0] +[DEBUG] visitPrimaryExp: cnt[0] +SymbolTable::lookup: found cnt in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = cnt, sym->kind = 0 +绑定变量: cnt -> VarDefContext +CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x563bb85529f0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +完全索引,返回元素类型 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb858ab20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb858ab20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: base +[DEBUG] visitPrimaryExp: base +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x563bb8523830 +CheckLValue: found sym->name = base, sym->kind = 3 +绑定常量: base -> ConstDefContext +CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x563bb8523830 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb858ab20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = head, sym->kind = 0 +绑定变量: head -> VarDefContext +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb858ab20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: tail[i-1] +[DEBUG] visitUnaryExp: tail[i-1] +[DEBUG] visitPrimaryExp: tail[i-1] +SymbolTable::lookup: found tail in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = tail, sym->kind = 0 +绑定变量: tail -> VarDefContext +CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x563bb8551cb0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i-1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb858ab20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +完全索引,返回元素类型 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found tail in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = tail, sym->kind = 0 +绑定变量: tail -> VarDefContext +CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x563bb8551cb0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb858ab20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: head[i]+cnt[i] +[DEBUG] visitUnaryExp: head[i] +[DEBUG] visitPrimaryExp: head[i] +SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = head, sym->kind = 0 +绑定变量: head -> VarDefContext +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb858ab20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: cnt[i] +[DEBUG] visitPrimaryExp: cnt[i] +SymbolTable::lookup: found cnt in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = cnt, sym->kind = 0 +绑定变量: cnt -> VarDefContext +CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x563bb85529f0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb858ab20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: radixSort(bitround-1,a,head[i],tail[i]) +[DEBUG] visitUnaryExp: radixSort(bitround-1,a,head[i],tail[i]) +[DEBUG] 函数调用: radixSort +[DEBUG] CheckFuncCall: radixSort +SymbolTable::lookup: found radixSort in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: bitround-1 +[DEBUG] visitUnaryExp: bitround +[DEBUG] visitPrimaryExp: bitround +SymbolTable::lookup: found bitround in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = bitround, sym->kind = 2 +CheckLValue 绑定变量: bitround, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: a +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 2 +CheckLValue 绑定变量: a, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 0 +数组参数名作为地址 +[DEBUG] CheckExp: head[i] +[DEBUG] visitUnaryExp: head[i] +[DEBUG] visitPrimaryExp: head[i] +SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = head, sym->kind = 0 +绑定变量: head -> VarDefContext +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb858ab20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: tail[i] +[DEBUG] visitUnaryExp: tail[i] +[DEBUG] visitPrimaryExp: tail[i] +SymbolTable::lookup: found tail in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = tail, sym->kind = 0 +绑定变量: tail -> VarDefContext +CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x563bb8551cb0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb858ab20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 3 形参类型 3 +[DEBUG] 检查参数 2: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 3: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb858ab20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb858ab20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 无返回值的 return +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 radixSort has_return: 1 return_type_is_void: 1 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: n base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: getarray(a) +[DEBUG] visitUnaryExp: getarray(a) +[DEBUG] 函数调用: getarray +[DEBUG] CheckFuncCall: getarray +SymbolTable::lookup: found getarray in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: a +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x563bb856e320, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] 检查参数 0: 实参类型 3 形参类型 3 +SymbolTable::addSymbol: stored n with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: n type_kind: 1 is_array: 0 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: starttime() +[DEBUG] visitUnaryExp: starttime() +[DEBUG] 函数调用: starttime +[DEBUG] CheckFuncCall: starttime +SymbolTable::lookup: found starttime in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: radixSort(8,a,0,n) +[DEBUG] visitUnaryExp: radixSort(8,a,0,n) +[DEBUG] 函数调用: radixSort +[DEBUG] CheckFuncCall: radixSort +SymbolTable::lookup: found radixSort in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 8 +[DEBUG] visitUnaryExp: 8 +[DEBUG] visitPrimaryExp: 8 +[DEBUG] CheckExp: a +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x563bb856e320, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] CheckExp: n +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x563bb85992d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 3 形参类型 3 +[DEBUG] 检查参数 2: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 3: 实参类型 1 形参类型 1 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb859bf60, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x563bb85992d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found ans in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = ans, sym->kind = 0 +绑定变量: ans -> VarDefContext +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x563bb8598770, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: ans+i*(a[i]%(2+i)) +[DEBUG] visitUnaryExp: ans +[DEBUG] visitPrimaryExp: ans +SymbolTable::lookup: found ans in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = ans, sym->kind = 0 +绑定变量: ans -> VarDefContext +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x563bb8598770, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb859bf60, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: (a[i]%(2+i)) +[DEBUG] visitPrimaryExp: (a[i]%(2+i)) +[DEBUG] CheckExp: a[i]%(2+i) +[DEBUG] visitUnaryExp: a[i] +[DEBUG] visitPrimaryExp: a[i] +SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x563bb856e320, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb859bf60, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: (2+i) +[DEBUG] visitPrimaryExp: (2+i) +[DEBUG] CheckExp: 2+i +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb859bf60, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb859bf60, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb859bf60, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: ans +[DEBUG] visitPrimaryExp: ans +SymbolTable::lookup: found ans in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = ans, sym->kind = 0 +绑定变量: ans -> VarDefContext +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x563bb8598770, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found ans in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = ans, sym->kind = 0 +绑定变量: ans -> VarDefContext +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x563bb8598770, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: -ans +[DEBUG] visitUnaryExp: -ans +[DEBUG] visitUnaryExp: ans +[DEBUG] visitPrimaryExp: ans +SymbolTable::lookup: found ans in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = ans, sym->kind = 0 +绑定变量: ans -> VarDefContext +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x563bb8598770, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: stoptime() +[DEBUG] visitUnaryExp: stoptime() +[DEBUG] 函数调用: stoptime +[DEBUG] CheckFuncCall: stoptime +SymbolTable::lookup: found stoptime in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putint(ans) +[DEBUG] visitUnaryExp: putint(ans) +[DEBUG] 函数调用: putint +[DEBUG] CheckFuncCall: putint +SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: ans +[DEBUG] visitUnaryExp: ans +[DEBUG] visitPrimaryExp: ans +SymbolTable::lookup: found ans in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = ans, sym->kind = 0 +绑定变量: ans -> VarDefContext +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x563bb8598770, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(10) +[DEBUG] visitUnaryExp: putch(10) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 +[DEBUG IRGEN] visitCompUnit +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: a +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 a +[DEBUG] HandleGlobalVariable: 变量 a 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 30000010 +[DEBUG] HandleGlobalVariable: 创建全局数组: a +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: ans +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 ans +[DEBUG] HandleGlobalVariable: 变量 ans 是 int 类型 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: ans +[DEBUG] visitDecl: 声明处理完成 +[DEBUG IRGEN] visitFuncDef: getMaxNum +[DEBUG] visitFuncDef: 创建函数 getMaxNum,返回类型: int,参数数量: 2 +[DEBUG] visitFuncDef: 函数对象地址: 0x563bb85b5b10 +[DEBUG] visitFuncDef: 为函数 getMaxNum 添加参数 n,类型: int32 +[DEBUG] visitFuncDef: 参数 n 处理完成 +[DEBUG] visitFuncDef: 为函数 getMaxNum 添加参数 arr,类型: ptr_int32 +[error] [ir] 存储类型不匹配:期望 int32 + +========== test/test_case/performance/2025-MYO-20.sy ========== +SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored starttime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored stoptime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 +[DEBUG] CheckVarDef: A base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: 1024 +[DEBUG] visitPrimaryExp: 1024 +[DEBUG] dim[0] = 1024 +[DEBUG] visitUnaryExp: 1024 +[DEBUG] visitPrimaryExp: 1024 +[DEBUG] dim[1] = 1024 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 1024 1024 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored A with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: A type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: B base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: 1024 +[DEBUG] visitPrimaryExp: 1024 +[DEBUG] dim[0] = 1024 +[DEBUG] visitUnaryExp: 1024 +[DEBUG] visitPrimaryExp: 1024 +[DEBUG] dim[1] = 1024 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 1024 1024 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored B with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: B type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: C base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: 1024 +[DEBUG] visitPrimaryExp: 1024 +[DEBUG] dim[0] = 1024 +[DEBUG] visitUnaryExp: 1024 +[DEBUG] visitPrimaryExp: 1024 +[DEBUG] dim[1] = 1024 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 1024 1024 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored C with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: C type_kind: 6 is_array: 1 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: T base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: getint() +[DEBUG] visitUnaryExp: getint() +[DEBUG] 函数调用: getint +[DEBUG] CheckFuncCall: getint +SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored T with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: T type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: R base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: getint() +[DEBUG] visitUnaryExp: getint() +[DEBUG] 函数调用: getint +[DEBUG] CheckFuncCall: getint +SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored R with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: R type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: T +[DEBUG] visitPrimaryExp: T +SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = T, sym->kind = 0 +绑定变量: T -> VarDefContext +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: T +[DEBUG] visitPrimaryExp: T +SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = T, sym->kind = 0 +绑定变量: T -> VarDefContext +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: getarray(A[i]) +[DEBUG] visitUnaryExp: getarray(A[i]) +[DEBUG] 函数调用: getarray +[DEBUG] CheckFuncCall: getarray +SymbolTable::lookup: found getarray in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: A[i] +[DEBUG] visitUnaryExp: A[i] +[DEBUG] visitPrimaryExp: A[i] +SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = A, sym->kind = 0 +绑定变量: A -> VarDefContext +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55f6145043a0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +部分索引,返回指针类型 +[DEBUG] 检查参数 0: 实参类型 3 形参类型 3 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: T +[DEBUG] visitPrimaryExp: T +SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = T, sym->kind = 0 +绑定变量: T -> VarDefContext +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: T +[DEBUG] visitPrimaryExp: T +SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = T, sym->kind = 0 +绑定变量: T -> VarDefContext +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: getarray(B[i]) +[DEBUG] visitUnaryExp: getarray(B[i]) +[DEBUG] 函数调用: getarray +[DEBUG] CheckFuncCall: getarray +SymbolTable::lookup: found getarray in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: B[i] +[DEBUG] visitUnaryExp: B[i] +[DEBUG] visitPrimaryExp: B[i] +SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = B, sym->kind = 0 +绑定变量: B -> VarDefContext +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x55f614509ce0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +部分索引,返回指针类型 +[DEBUG] 检查参数 0: 实参类型 3 形参类型 3 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: starttime() +[DEBUG] visitUnaryExp: starttime() +[DEBUG] 函数调用: starttime +[DEBUG] CheckFuncCall: starttime +SymbolTable::lookup: found starttime in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: T +[DEBUG] visitPrimaryExp: T +SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = T, sym->kind = 0 +绑定变量: T -> VarDefContext +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: T +[DEBUG] visitPrimaryExp: T +SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = T, sym->kind = 0 +绑定变量: T -> VarDefContext +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitStmt: Block +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f61452eb70, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: T +[DEBUG] visitPrimaryExp: T +SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = T, sym->kind = 0 +绑定变量: T -> VarDefContext +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = A, sym->kind = 0 +绑定变量: A -> VarDefContext +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55f6145043a0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f61452eb70, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: -1 +[DEBUG] visitUnaryExp: -1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f61452eb70, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f61452eb70, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: T +[DEBUG] visitPrimaryExp: T +SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = T, sym->kind = 0 +绑定变量: T -> VarDefContext +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: T +[DEBUG] visitPrimaryExp: T +SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = T, sym->kind = 0 +绑定变量: T -> VarDefContext +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitStmt: Block +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614539040, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: T +[DEBUG] visitPrimaryExp: T +SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = T, sym->kind = 0 +绑定变量: T -> VarDefContext +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = B, sym->kind = 0 +绑定变量: B -> VarDefContext +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x55f614509ce0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614539040, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: -1 +[DEBUG] visitUnaryExp: -1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614539040, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614539040, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: T +[DEBUG] visitPrimaryExp: T +SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = T, sym->kind = 0 +绑定变量: T -> VarDefContext +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f61453eaf0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: T +[DEBUG] visitPrimaryExp: T +SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = T, sym->kind = 0 +绑定变量: T -> VarDefContext +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = C, sym->kind = 0 +绑定变量: C -> VarDefContext +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x55f614507ad0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f61453eaf0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: A[i][j]*2+B[i][j]*3 +[DEBUG] visitUnaryExp: A[i][j] +[DEBUG] visitPrimaryExp: A[i][j] +SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = A, sym->kind = 0 +绑定变量: A -> VarDefContext +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55f6145043a0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f61453eaf0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitUnaryExp: B[i][j] +[DEBUG] visitPrimaryExp: B[i][j] +SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = B, sym->kind = 0 +绑定变量: B -> VarDefContext +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x55f614509ce0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f61453eaf0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f61453eaf0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f61453eaf0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: T +[DEBUG] visitPrimaryExp: T +SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = T, sym->kind = 0 +绑定变量: T -> VarDefContext +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f6145478e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: T +[DEBUG] visitPrimaryExp: T +SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = T, sym->kind = 0 +绑定变量: T -> VarDefContext +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] CheckVarDef: val base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: C[i][j] +[DEBUG] visitUnaryExp: C[i][j] +[DEBUG] visitPrimaryExp: C[i][j] +SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = C, sym->kind = 0 +绑定变量: C -> VarDefContext +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x55f614507ad0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f6145478e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +SymbolTable::addSymbol: stored val with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: val type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found val in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = val, sym->kind = 0 +绑定变量: val -> VarDefContext +CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x55f6145352f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: val*val+7 +[DEBUG] visitUnaryExp: val +[DEBUG] visitPrimaryExp: val +SymbolTable::lookup: found val in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = val, sym->kind = 0 +绑定变量: val -> VarDefContext +CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x55f6145352f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: val +[DEBUG] visitPrimaryExp: val +SymbolTable::lookup: found val in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = val, sym->kind = 0 +绑定变量: val -> VarDefContext +CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x55f6145352f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 7 +[DEBUG] visitPrimaryExp: 7 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found val in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = val, sym->kind = 0 +绑定变量: val -> VarDefContext +CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x55f6145352f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: val/3 +[DEBUG] visitUnaryExp: val +[DEBUG] visitPrimaryExp: val +SymbolTable::lookup: found val in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = val, sym->kind = 0 +绑定变量: val -> VarDefContext +CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x55f6145352f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = C, sym->kind = 0 +绑定变量: C -> VarDefContext +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x55f614507ad0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f6145478e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: val +[DEBUG] visitUnaryExp: val +[DEBUG] visitPrimaryExp: val +SymbolTable::lookup: found val in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = val, sym->kind = 0 +绑定变量: val -> VarDefContext +CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x55f6145352f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f6145478e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f6145478e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: T +[DEBUG] visitPrimaryExp: T +SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = T, sym->kind = 0 +绑定变量: T -> VarDefContext +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614552e10, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: T +[DEBUG] visitPrimaryExp: T +SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = T, sym->kind = 0 +绑定变量: T -> VarDefContext +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] CheckVarDef: k base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored k with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: k type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: sum base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored sum with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: sum type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: k +[DEBUG] visitPrimaryExp: k +SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = k, sym->kind = 0 +绑定变量: k -> VarDefContext +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55f6145548f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: T +[DEBUG] visitPrimaryExp: T +SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = T, sym->kind = 0 +绑定变量: T -> VarDefContext +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found sum in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sum, sym->kind = 0 +绑定变量: sum -> VarDefContext +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55f614555280, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: sum+C[i][k]*A[k][j] +[DEBUG] visitUnaryExp: sum +[DEBUG] visitPrimaryExp: sum +SymbolTable::lookup: found sum in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sum, sym->kind = 0 +绑定变量: sum -> VarDefContext +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55f614555280, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: C[i][k] +[DEBUG] visitPrimaryExp: C[i][k] +SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = C, sym->kind = 0 +绑定变量: C -> VarDefContext +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x55f614507ad0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: k +[DEBUG] visitUnaryExp: k +[DEBUG] visitPrimaryExp: k +SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = k, sym->kind = 0 +绑定变量: k -> VarDefContext +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55f6145548f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: A[k][j] +[DEBUG] visitPrimaryExp: A[k][j] +SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = A, sym->kind = 0 +绑定变量: A -> VarDefContext +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55f6145043a0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: k +[DEBUG] visitUnaryExp: k +[DEBUG] visitPrimaryExp: k +SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = k, sym->kind = 0 +绑定变量: k -> VarDefContext +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55f6145548f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614552e10, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = k, sym->kind = 0 +绑定变量: k -> VarDefContext +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55f6145548f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: k+1 +[DEBUG] visitUnaryExp: k +[DEBUG] visitPrimaryExp: k +SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = k, sym->kind = 0 +绑定变量: k -> VarDefContext +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55f6145548f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = A, sym->kind = 0 +绑定变量: A -> VarDefContext +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55f6145043a0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614552e10, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: sum +[DEBUG] visitUnaryExp: sum +[DEBUG] visitPrimaryExp: sum +SymbolTable::lookup: found sum in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sum, sym->kind = 0 +绑定变量: sum -> VarDefContext +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55f614555280, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614552e10, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614552e10, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckVarDef: total base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored total with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: total type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: r base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored r with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: r type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: r +[DEBUG] visitPrimaryExp: r +SymbolTable::lookup: found r in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = r, sym->kind = 0 +绑定变量: r -> VarDefContext +CheckLValue 绑定变量: r, sym->kind: 0, sym->var_def_ctx: 0x55f61455d2e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: R +[DEBUG] visitPrimaryExp: R +SymbolTable::lookup: found R in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = R, sym->kind = 0 +绑定变量: R -> VarDefContext +CheckLValue 绑定变量: R, sym->kind: 0, sym->var_def_ctx: 0x55f6145114b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: T +[DEBUG] visitPrimaryExp: T +SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = T, sym->kind = 0 +绑定变量: T -> VarDefContext +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614560150, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: T +[DEBUG] visitPrimaryExp: T +SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = T, sym->kind = 0 +绑定变量: T -> VarDefContext +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found total in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = total, sym->kind = 0 +绑定变量: total -> VarDefContext +CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x55f61455c6c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: total+A[i][j]*A[i][j] +[DEBUG] visitUnaryExp: total +[DEBUG] visitPrimaryExp: total +SymbolTable::lookup: found total in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = total, sym->kind = 0 +绑定变量: total -> VarDefContext +CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x55f61455c6c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: A[i][j] +[DEBUG] visitPrimaryExp: A[i][j] +SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = A, sym->kind = 0 +绑定变量: A -> VarDefContext +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55f6145043a0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614560150, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: A[i][j] +[DEBUG] visitPrimaryExp: A[i][j] +SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = A, sym->kind = 0 +绑定变量: A -> VarDefContext +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55f6145043a0, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614560150, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614560150, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614560150, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found r in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = r, sym->kind = 0 +绑定变量: r -> VarDefContext +CheckLValue 绑定变量: r, sym->kind: 0, sym->var_def_ctx: 0x55f61455d2e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: r+1 +[DEBUG] visitUnaryExp: r +[DEBUG] visitPrimaryExp: r +SymbolTable::lookup: found r in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = r, sym->kind = 0 +绑定变量: r -> VarDefContext +CheckLValue 绑定变量: r, sym->kind: 0, sym->var_def_ctx: 0x55f61455d2e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: stoptime() +[DEBUG] visitUnaryExp: stoptime() +[DEBUG] 函数调用: stoptime +[DEBUG] CheckFuncCall: stoptime +SymbolTable::lookup: found stoptime in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putint(total) +[DEBUG] visitUnaryExp: putint(total) +[DEBUG] 函数调用: putint +[DEBUG] CheckFuncCall: putint +SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: total +[DEBUG] visitUnaryExp: total +[DEBUG] visitPrimaryExp: total +SymbolTable::lookup: found total in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = total, sym->kind = 0 +绑定变量: total -> VarDefContext +CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x55f61455c6c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(10) +[DEBUG] visitUnaryExp: putch(10) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 +[DEBUG IRGEN] visitCompUnit +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: A +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 A +[DEBUG] HandleGlobalVariable: 变量 A 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 1048576 +[DEBUG] HandleGlobalVariable: 创建全局数组: A +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: B +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 B +[DEBUG] HandleGlobalVariable: 变量 B 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 1048576 +[DEBUG] HandleGlobalVariable: 创建全局数组: B +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: C +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 C +[DEBUG] HandleGlobalVariable: 变量 C 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 1048576 +[DEBUG] HandleGlobalVariable: 创建全局数组: C +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG IRGEN] visitFuncDef: main +[DEBUG] visitFuncDef: 创建函数 main,返回类型: int,参数数量: 0 +[DEBUG] visitFuncDef: 函数对象地址: 0x55f61457c340 +[DEBUG] visitFuncDef: 开始生成函数体 +[DEBUG IRGEN] visitBlock: {intT=getint();intR=getint();inti=0;while(i=T/2){getarray(B[i]);}i=i+1;}starttime();i=0;while(i=T/2){intj=0;while(j then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {getarray(A[i]);} +[DEBUG IRGEN] visitBlock: {getarray(A[i]);} +[DEBUG IRGEN] visitBlockItem: getarray(A[i]); +[DEBUG IRGEN] visitStmt: getarray(A[i]); +[DEBUG IRGEN] EvalExpr: getarray(A[i]) +[DEBUG IRGEN] visitAddExp: getarray(A[i]) +[DEBUG IRGEN] visitMulExp: getarray(A[i]) +[DEBUG IRGEN] visitCallExp: 调用函数 getarray +[DEBUG IRGEN] EvalExpr: A[i] +[DEBUG IRGEN] visitAddExp: A[i] +[DEBUG IRGEN] visitMulExp: A[i] +[DEBUG IRGEN] visitPrimaryExp: A[i] +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: A +[DEBUG IRGEN] EvalExpr: i +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG] EvalExpr: success, result = 0x55f614d7df50 +[ERROR] Exception in EvalExpr: [ir] LoadInst 当前只支持从 i32* 加载 +[ERROR] Exception in EvalExpr: [ir] LoadInst 当前只支持从 i32* 加载 +[error] [ir] LoadInst 当前只支持从 i32* 加载 + +========== test/test_case/performance/fft0.sy ========== +SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored starttime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored stoptime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored multiply with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored power with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored memmove with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored fft with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 +[DEBUG] CheckConstDef: mod base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 998244353 +[DEBUG] visitPrimaryExp: 998244353 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: mod, ctx: 0x55dd44ad2ce0 +SymbolTable::addSymbol: stored mod with kind=3, const_def_ctx=0x55dd44ad2ce0 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x55dd44ad2ce0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55dd44ad2ce0 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckVarDef: d base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored d with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: d type_kind: 1 is_array: 0 +[DEBUG] CheckConstDef: maxlen base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 2097152 +[DEBUG] visitPrimaryExp: 2097152 +[DEBUG] 初始化值数量: 1 +CheckConstDef: before addSymbol, sym.kind = 3 +保存常量定义上下文: maxlen, ctx: 0x55dd44b035a0 +SymbolTable::addSymbol: stored maxlen with kind=3, const_def_ctx=0x55dd44b035a0 +CheckConstDef: after addSymbol, sym.kind = 3 +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x55dd44b035a0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55dd44b035a0 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckVarDef: temp base_type: int is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: maxlen +[DEBUG] visitPrimaryExp: maxlen +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x55dd44b035a0 +CheckLValue: found sym->name = maxlen, sym->kind = 3 +绑定常量: maxlen -> ConstDefContext +CheckLValue 绑定变量: maxlen, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44b035a0 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x55dd44b035a0 +[DEBUG] dim[0] = 2097152 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 2097152 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored temp with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: temp type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: a base_type: int is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: maxlen +[DEBUG] visitPrimaryExp: maxlen +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x55dd44b035a0 +CheckLValue: found sym->name = maxlen, sym->kind = 3 +绑定常量: maxlen -> ConstDefContext +CheckLValue 绑定变量: maxlen, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44b035a0 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x55dd44b035a0 +[DEBUG] dim[0] = 2097152 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 2097152 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored a with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: a type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: b base_type: int is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: maxlen +[DEBUG] visitPrimaryExp: maxlen +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x55dd44b035a0 +CheckLValue: found sym->name = maxlen, sym->kind = 3 +绑定常量: maxlen -> ConstDefContext +CheckLValue 绑定变量: maxlen, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44b035a0 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x55dd44b035a0 +[DEBUG] dim[0] = 2097152 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 2097152 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: b type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: c base_type: int is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: maxlen +[DEBUG] visitPrimaryExp: maxlen +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x55dd44b035a0 +CheckLValue: found sym->name = maxlen, sym->kind = 3 +绑定常量: maxlen -> ConstDefContext +CheckLValue 绑定变量: maxlen, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44b035a0 +dim_count: 0, subscript_count: 0 +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x55dd44b035a0 +[DEBUG] dim[0] = 2097152 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 2097152 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored c with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: c type_kind: 6 is_array: 1 +[DEBUG] 进入函数: multiply 返回类型: int +SymbolTable::addSymbol: stored a with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: a type_kind: 1 is_array: 0 dims: +SymbolTable::addSymbol: stored b with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: b type_kind: 1 is_array: 0 dims: +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 2 +CheckLValue 绑定变量: b, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 2 +CheckLValue 绑定变量: b, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: a%mod +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 2 +CheckLValue 绑定变量: a, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: mod +[DEBUG] visitPrimaryExp: mod +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x55dd44ad2ce0 +CheckLValue: found sym->name = mod, sym->kind = 3 +绑定常量: mod -> ConstDefContext +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44ad2ce0 +dim_count: 0, subscript_count: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] CheckVarDef: cur base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: multiply(a,b/2) +[DEBUG] visitUnaryExp: multiply(a,b/2) +[DEBUG] 函数调用: multiply +[DEBUG] CheckFuncCall: multiply +SymbolTable::lookup: found multiply in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: a +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 2 +CheckLValue 绑定变量: a, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: b/2 +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 2 +CheckLValue 绑定变量: b, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +SymbolTable::addSymbol: stored cur with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: cur type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = cur, sym->kind = 0 +绑定变量: cur -> VarDefContext +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x55dd44aee740, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: (cur+cur)%mod +[DEBUG] visitUnaryExp: (cur+cur) +[DEBUG] visitPrimaryExp: (cur+cur) +[DEBUG] CheckExp: cur+cur +[DEBUG] visitUnaryExp: cur +[DEBUG] visitPrimaryExp: cur +SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = cur, sym->kind = 0 +绑定变量: cur -> VarDefContext +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x55dd44aee740, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: cur +[DEBUG] visitPrimaryExp: cur +SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = cur, sym->kind = 0 +绑定变量: cur -> VarDefContext +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x55dd44aee740, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: mod +[DEBUG] visitPrimaryExp: mod +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x55dd44ad2ce0 +CheckLValue: found sym->name = mod, sym->kind = 3 +绑定常量: mod -> ConstDefContext +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44ad2ce0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 2 +CheckLValue 绑定变量: b, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: (cur+a)%mod +[DEBUG] visitUnaryExp: (cur+a) +[DEBUG] visitPrimaryExp: (cur+a) +[DEBUG] CheckExp: cur+a +[DEBUG] visitUnaryExp: cur +[DEBUG] visitPrimaryExp: cur +SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = cur, sym->kind = 0 +绑定变量: cur -> VarDefContext +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x55dd44aee740, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 2 +CheckLValue 绑定变量: a, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: mod +[DEBUG] visitPrimaryExp: mod +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x55dd44ad2ce0 +CheckLValue: found sym->name = mod, sym->kind = 3 +绑定常量: mod -> ConstDefContext +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44ad2ce0 +dim_count: 0, subscript_count: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: cur +[DEBUG] visitUnaryExp: cur +[DEBUG] visitPrimaryExp: cur +SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = cur, sym->kind = 0 +绑定变量: cur -> VarDefContext +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x55dd44aee740, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 multiply has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: power 返回类型: int +SymbolTable::addSymbol: stored a with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: a type_kind: 1 is_array: 0 dims: +SymbolTable::addSymbol: stored b with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: b type_kind: 1 is_array: 0 dims: +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 2 +CheckLValue 绑定变量: b, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] CheckVarDef: cur base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: power(a,b/2) +[DEBUG] visitUnaryExp: power(a,b/2) +[DEBUG] 函数调用: power +[DEBUG] CheckFuncCall: power +SymbolTable::lookup: found power in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: a +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 2 +CheckLValue 绑定变量: a, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: b/2 +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 2 +CheckLValue 绑定变量: b, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +SymbolTable::addSymbol: stored cur with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: cur type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = cur, sym->kind = 0 +绑定变量: cur -> VarDefContext +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x55dd44afdbc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: multiply(cur,cur) +[DEBUG] visitUnaryExp: multiply(cur,cur) +[DEBUG] 函数调用: multiply +[DEBUG] CheckFuncCall: multiply +SymbolTable::lookup: found multiply in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: cur +[DEBUG] visitUnaryExp: cur +[DEBUG] visitPrimaryExp: cur +SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = cur, sym->kind = 0 +绑定变量: cur -> VarDefContext +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x55dd44afdbc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: cur +[DEBUG] visitUnaryExp: cur +[DEBUG] visitPrimaryExp: cur +SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = cur, sym->kind = 0 +绑定变量: cur -> VarDefContext +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x55dd44afdbc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 2 +CheckLValue 绑定变量: b, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: multiply(cur,a) +[DEBUG] visitUnaryExp: multiply(cur,a) +[DEBUG] 函数调用: multiply +[DEBUG] CheckFuncCall: multiply +SymbolTable::lookup: found multiply in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: cur +[DEBUG] visitUnaryExp: cur +[DEBUG] visitPrimaryExp: cur +SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = cur, sym->kind = 0 +绑定变量: cur -> VarDefContext +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x55dd44afdbc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: a +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 2 +CheckLValue 绑定变量: a, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: cur +[DEBUG] visitUnaryExp: cur +[DEBUG] visitPrimaryExp: cur +SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = cur, sym->kind = 0 +绑定变量: cur -> VarDefContext +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x55dd44afdbc0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 power has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: memmove 返回类型: int +SymbolTable::addSymbol: stored dst with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: dst type_kind: 3 is_array: 1 dims: 0 +SymbolTable::addSymbol: stored dst_pos with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: dst_pos type_kind: 1 is_array: 0 dims: +SymbolTable::addSymbol: stored src with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: src type_kind: 3 is_array: 1 dims: 0 +SymbolTable::addSymbol: stored len with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: len type_kind: 1 is_array: 0 dims: +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b09db0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: len +[DEBUG] visitPrimaryExp: len +SymbolTable::lookup: found len in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = len, sym->kind = 2 +CheckLValue 绑定变量: len, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found dst in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = dst, sym->kind = 2 +CheckLValue 绑定变量: dst, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: dst_pos+i +[DEBUG] visitUnaryExp: dst_pos +[DEBUG] visitPrimaryExp: dst_pos +SymbolTable::lookup: found dst_pos in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = dst_pos, sym->kind = 2 +CheckLValue 绑定变量: dst_pos, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b09db0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: src[i] +[DEBUG] visitUnaryExp: src[i] +[DEBUG] visitPrimaryExp: src[i] +SymbolTable::lookup: found src in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = src, sym->kind = 2 +CheckLValue 绑定变量: src, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b09db0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b09db0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b09db0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b09db0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 memmove has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: fft 返回类型: int +SymbolTable::addSymbol: stored arr with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: arr type_kind: 3 is_array: 1 dims: 0 +SymbolTable::addSymbol: stored begin_pos with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: begin_pos type_kind: 1 is_array: 0 dims: +SymbolTable::addSymbol: stored n with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: n type_kind: 1 is_array: 0 dims: +SymbolTable::addSymbol: stored w with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: w type_kind: 1 is_array: 0 dims: +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = temp, sym->kind = 0 +绑定变量: temp -> VarDefContext +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x55dd44b037d0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i/2 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +完全索引,返回元素类型 +[DEBUG] CheckExp: arr[i+begin_pos] +[DEBUG] visitUnaryExp: arr[i+begin_pos] +[DEBUG] visitPrimaryExp: arr[i+begin_pos] +SymbolTable::lookup: found arr in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = arr, sym->kind = 2 +CheckLValue 绑定变量: arr, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i+begin_pos +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: begin_pos +[DEBUG] visitPrimaryExp: begin_pos +SymbolTable::lookup: found begin_pos in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = begin_pos, sym->kind = 2 +CheckLValue 绑定变量: begin_pos, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = temp, sym->kind = 0 +绑定变量: temp -> VarDefContext +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x55dd44b037d0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: n/2+i/2 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +完全索引,返回元素类型 +[DEBUG] CheckExp: arr[i+begin_pos] +[DEBUG] visitUnaryExp: arr[i+begin_pos] +[DEBUG] visitPrimaryExp: arr[i+begin_pos] +SymbolTable::lookup: found arr in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = arr, sym->kind = 2 +CheckLValue 绑定变量: arr, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i+begin_pos +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: begin_pos +[DEBUG] visitPrimaryExp: begin_pos +SymbolTable::lookup: found begin_pos in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = begin_pos, sym->kind = 2 +CheckLValue 绑定变量: begin_pos, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: memmove(arr,begin_pos,temp,n) +[DEBUG] visitUnaryExp: memmove(arr,begin_pos,temp,n) +[DEBUG] 函数调用: memmove +[DEBUG] CheckFuncCall: memmove +SymbolTable::lookup: found memmove in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: arr +[DEBUG] visitUnaryExp: arr +[DEBUG] visitPrimaryExp: arr +SymbolTable::lookup: found arr in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = arr, sym->kind = 2 +CheckLValue 绑定变量: arr, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 0 +数组参数名作为地址 +[DEBUG] CheckExp: begin_pos +[DEBUG] visitUnaryExp: begin_pos +[DEBUG] visitPrimaryExp: begin_pos +SymbolTable::lookup: found begin_pos in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = begin_pos, sym->kind = 2 +CheckLValue 绑定变量: begin_pos, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: temp +[DEBUG] visitUnaryExp: temp +[DEBUG] visitPrimaryExp: temp +SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = temp, sym->kind = 0 +绑定变量: temp -> VarDefContext +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x55dd44b037d0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: n +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 3 形参类型 3 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 2: 实参类型 3 形参类型 3 +[DEBUG] 检查参数 3: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: fft(arr,begin_pos,n/2,multiply(w,w)) +[DEBUG] visitUnaryExp: fft(arr,begin_pos,n/2,multiply(w,w)) +[DEBUG] 函数调用: fft +[DEBUG] CheckFuncCall: fft +SymbolTable::lookup: found fft in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: arr +[DEBUG] visitUnaryExp: arr +[DEBUG] visitPrimaryExp: arr +SymbolTable::lookup: found arr in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = arr, sym->kind = 2 +CheckLValue 绑定变量: arr, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 0 +数组参数名作为地址 +[DEBUG] CheckExp: begin_pos +[DEBUG] visitUnaryExp: begin_pos +[DEBUG] visitPrimaryExp: begin_pos +SymbolTable::lookup: found begin_pos in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = begin_pos, sym->kind = 2 +CheckLValue 绑定变量: begin_pos, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: n/2 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] CheckExp: multiply(w,w) +[DEBUG] visitUnaryExp: multiply(w,w) +[DEBUG] 函数调用: multiply +[DEBUG] CheckFuncCall: multiply +SymbolTable::lookup: found multiply in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: w +[DEBUG] visitUnaryExp: w +[DEBUG] visitPrimaryExp: w +SymbolTable::lookup: found w in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = w, sym->kind = 2 +CheckLValue 绑定变量: w, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: w +[DEBUG] visitUnaryExp: w +[DEBUG] visitPrimaryExp: w +SymbolTable::lookup: found w in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = w, sym->kind = 2 +CheckLValue 绑定变量: w, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 0: 实参类型 3 形参类型 3 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 2: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 3: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: fft(arr,begin_pos+n/2,n/2,multiply(w,w)) +[DEBUG] visitUnaryExp: fft(arr,begin_pos+n/2,n/2,multiply(w,w)) +[DEBUG] 函数调用: fft +[DEBUG] CheckFuncCall: fft +SymbolTable::lookup: found fft in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: arr +[DEBUG] visitUnaryExp: arr +[DEBUG] visitPrimaryExp: arr +SymbolTable::lookup: found arr in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = arr, sym->kind = 2 +CheckLValue 绑定变量: arr, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 0 +数组参数名作为地址 +[DEBUG] CheckExp: begin_pos+n/2 +[DEBUG] visitUnaryExp: begin_pos +[DEBUG] visitPrimaryExp: begin_pos +SymbolTable::lookup: found begin_pos in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = begin_pos, sym->kind = 2 +CheckLValue 绑定变量: begin_pos, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] CheckExp: n/2 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] CheckExp: multiply(w,w) +[DEBUG] visitUnaryExp: multiply(w,w) +[DEBUG] 函数调用: multiply +[DEBUG] CheckFuncCall: multiply +SymbolTable::lookup: found multiply in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: w +[DEBUG] visitUnaryExp: w +[DEBUG] visitPrimaryExp: w +SymbolTable::lookup: found w in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = w, sym->kind = 2 +CheckLValue 绑定变量: w, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: w +[DEBUG] visitUnaryExp: w +[DEBUG] visitPrimaryExp: w +SymbolTable::lookup: found w in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = w, sym->kind = 2 +CheckLValue 绑定变量: w, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 0: 实参类型 3 形参类型 3 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 2: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 3: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] CheckVarDef: wn base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +SymbolTable::addSymbol: stored wn with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: wn type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitStmt: Block +[DEBUG] CheckVarDef: x base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: arr[begin_pos+i] +[DEBUG] visitUnaryExp: arr[begin_pos+i] +[DEBUG] visitPrimaryExp: arr[begin_pos+i] +SymbolTable::lookup: found arr in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = arr, sym->kind = 2 +CheckLValue 绑定变量: arr, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: begin_pos+i +[DEBUG] visitUnaryExp: begin_pos +[DEBUG] visitPrimaryExp: begin_pos +SymbolTable::lookup: found begin_pos in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = begin_pos, sym->kind = 2 +CheckLValue 绑定变量: begin_pos, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +SymbolTable::addSymbol: stored x with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: x type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: y base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: arr[begin_pos+i+n/2] +[DEBUG] visitUnaryExp: arr[begin_pos+i+n/2] +[DEBUG] visitPrimaryExp: arr[begin_pos+i+n/2] +SymbolTable::lookup: found arr in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = arr, sym->kind = 2 +CheckLValue 绑定变量: arr, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: begin_pos+i+n/2 +[DEBUG] visitUnaryExp: begin_pos +[DEBUG] visitPrimaryExp: begin_pos +SymbolTable::lookup: found begin_pos in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = begin_pos, sym->kind = 2 +CheckLValue 绑定变量: begin_pos, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +完全索引,返回元素类型 +SymbolTable::addSymbol: stored y with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: y type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found arr in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = arr, sym->kind = 2 +CheckLValue 绑定变量: arr, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: begin_pos+i +[DEBUG] visitUnaryExp: begin_pos +[DEBUG] visitPrimaryExp: begin_pos +SymbolTable::lookup: found begin_pos in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = begin_pos, sym->kind = 2 +CheckLValue 绑定变量: begin_pos, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: (x+multiply(wn,y))%mod +[DEBUG] visitUnaryExp: (x+multiply(wn,y)) +[DEBUG] visitPrimaryExp: (x+multiply(wn,y)) +[DEBUG] CheckExp: x+multiply(wn,y) +[DEBUG] visitUnaryExp: x +[DEBUG] visitPrimaryExp: x +SymbolTable::lookup: found x in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = x, sym->kind = 0 +绑定变量: x -> VarDefContext +CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x55dd44b2ce80, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: multiply(wn,y) +[DEBUG] 函数调用: multiply +[DEBUG] CheckFuncCall: multiply +SymbolTable::lookup: found multiply in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: wn +[DEBUG] visitUnaryExp: wn +[DEBUG] visitPrimaryExp: wn +SymbolTable::lookup: found wn in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = wn, sym->kind = 0 +绑定变量: wn -> VarDefContext +CheckLValue 绑定变量: wn, sym->kind: 0, sym->var_def_ctx: 0x55dd44b2b2a0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: y +[DEBUG] visitUnaryExp: y +[DEBUG] visitPrimaryExp: y +SymbolTable::lookup: found y in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = y, sym->kind = 0 +绑定变量: y -> VarDefContext +CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x55dd44b2e230, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] visitUnaryExp: mod +[DEBUG] visitPrimaryExp: mod +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x55dd44ad2ce0 +CheckLValue: found sym->name = mod, sym->kind = 3 +绑定常量: mod -> ConstDefContext +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44ad2ce0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found arr in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = arr, sym->kind = 2 +CheckLValue 绑定变量: arr, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: begin_pos+i+n/2 +[DEBUG] visitUnaryExp: begin_pos +[DEBUG] visitPrimaryExp: begin_pos +SymbolTable::lookup: found begin_pos in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = begin_pos, sym->kind = 2 +CheckLValue 绑定变量: begin_pos, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +完全索引,返回元素类型 +[DEBUG] CheckExp: (x-multiply(wn,y)+mod)%mod +[DEBUG] visitUnaryExp: (x-multiply(wn,y)+mod) +[DEBUG] visitPrimaryExp: (x-multiply(wn,y)+mod) +[DEBUG] CheckExp: x-multiply(wn,y)+mod +[DEBUG] visitUnaryExp: x +[DEBUG] visitPrimaryExp: x +SymbolTable::lookup: found x in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = x, sym->kind = 0 +绑定变量: x -> VarDefContext +CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x55dd44b2ce80, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: multiply(wn,y) +[DEBUG] 函数调用: multiply +[DEBUG] CheckFuncCall: multiply +SymbolTable::lookup: found multiply in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: wn +[DEBUG] visitUnaryExp: wn +[DEBUG] visitPrimaryExp: wn +SymbolTable::lookup: found wn in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = wn, sym->kind = 0 +绑定变量: wn -> VarDefContext +CheckLValue 绑定变量: wn, sym->kind: 0, sym->var_def_ctx: 0x55dd44b2b2a0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: y +[DEBUG] visitUnaryExp: y +[DEBUG] visitPrimaryExp: y +SymbolTable::lookup: found y in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = y, sym->kind = 0 +绑定变量: y -> VarDefContext +CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x55dd44b2e230, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] visitUnaryExp: mod +[DEBUG] visitPrimaryExp: mod +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x55dd44ad2ce0 +CheckLValue: found sym->name = mod, sym->kind = 3 +绑定常量: mod -> ConstDefContext +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44ad2ce0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: mod +[DEBUG] visitPrimaryExp: mod +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x55dd44ad2ce0 +CheckLValue: found sym->name = mod, sym->kind = 3 +绑定常量: mod -> ConstDefContext +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44ad2ce0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found wn in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = wn, sym->kind = 0 +绑定变量: wn -> VarDefContext +CheckLValue 绑定变量: wn, sym->kind: 0, sym->var_def_ctx: 0x55dd44b2b2a0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: multiply(wn,w) +[DEBUG] visitUnaryExp: multiply(wn,w) +[DEBUG] 函数调用: multiply +[DEBUG] CheckFuncCall: multiply +SymbolTable::lookup: found multiply in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: wn +[DEBUG] visitUnaryExp: wn +[DEBUG] visitPrimaryExp: wn +SymbolTable::lookup: found wn in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = wn, sym->kind = 0 +绑定变量: wn -> VarDefContext +CheckLValue 绑定变量: wn, sym->kind: 0, sym->var_def_ctx: 0x55dd44b2b2a0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: w +[DEBUG] visitUnaryExp: w +[DEBUG] visitPrimaryExp: w +SymbolTable::lookup: found w in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = w, sym->kind = 2 +CheckLValue 绑定变量: w, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 fft has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: n base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: getarray(a) +[DEBUG] visitUnaryExp: getarray(a) +[DEBUG] 函数调用: getarray +[DEBUG] CheckFuncCall: getarray +SymbolTable::lookup: found getarray in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: a +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55dd44b06040, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] 检查参数 0: 实参类型 3 形参类型 3 +SymbolTable::addSymbol: stored n with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: n type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: m base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: getarray(b) +[DEBUG] visitUnaryExp: getarray(b) +[DEBUG] 函数调用: getarray +[DEBUG] CheckFuncCall: getarray +SymbolTable::lookup: found getarray in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: b +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55dd44b068e0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] 检查参数 0: 实参类型 3 形参类型 3 +SymbolTable::addSymbol: stored m with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: m type_kind: 1 is_array: 0 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: starttime() +[DEBUG] visitUnaryExp: starttime() +[DEBUG] 函数调用: starttime +[DEBUG] CheckFuncCall: starttime +SymbolTable::lookup: found starttime in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = d, sym->kind = 0 +绑定变量: d -> VarDefContext +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: d +[DEBUG] visitPrimaryExp: d +SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = d, sym->kind = 0 +绑定变量: d -> VarDefContext +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55dd44b384b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: m +[DEBUG] visitPrimaryExp: m +SymbolTable::lookup: found m in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = m, sym->kind = 0 +绑定变量: m -> VarDefContext +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x55dd44b39380, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = d, sym->kind = 0 +绑定变量: d -> VarDefContext +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: d*2 +[DEBUG] visitUnaryExp: d +[DEBUG] visitPrimaryExp: d +SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = d, sym->kind = 0 +绑定变量: d -> VarDefContext +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: fft(a,0,d,power(3,(mod-1)/d)) +[DEBUG] visitUnaryExp: fft(a,0,d,power(3,(mod-1)/d)) +[DEBUG] 函数调用: fft +[DEBUG] CheckFuncCall: fft +SymbolTable::lookup: found fft in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: a +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55dd44b06040, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] CheckExp: d +[DEBUG] visitUnaryExp: d +[DEBUG] visitPrimaryExp: d +SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = d, sym->kind = 0 +绑定变量: d -> VarDefContext +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: power(3,(mod-1)/d) +[DEBUG] visitUnaryExp: power(3,(mod-1)/d) +[DEBUG] 函数调用: power +[DEBUG] CheckFuncCall: power +SymbolTable::lookup: found power in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 3 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] CheckExp: (mod-1)/d +[DEBUG] visitUnaryExp: (mod-1) +[DEBUG] visitPrimaryExp: (mod-1) +[DEBUG] CheckExp: mod-1 +[DEBUG] visitUnaryExp: mod +[DEBUG] visitPrimaryExp: mod +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x55dd44ad2ce0 +CheckLValue: found sym->name = mod, sym->kind = 3 +绑定常量: mod -> ConstDefContext +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44ad2ce0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitUnaryExp: d +[DEBUG] visitPrimaryExp: d +SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = d, sym->kind = 0 +绑定变量: d -> VarDefContext +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 0: 实参类型 3 形参类型 3 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 2: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 3: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: fft(b,0,d,power(3,(mod-1)/d)) +[DEBUG] visitUnaryExp: fft(b,0,d,power(3,(mod-1)/d)) +[DEBUG] 函数调用: fft +[DEBUG] CheckFuncCall: fft +SymbolTable::lookup: found fft in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: b +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55dd44b068e0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] CheckExp: d +[DEBUG] visitUnaryExp: d +[DEBUG] visitPrimaryExp: d +SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = d, sym->kind = 0 +绑定变量: d -> VarDefContext +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: power(3,(mod-1)/d) +[DEBUG] visitUnaryExp: power(3,(mod-1)/d) +[DEBUG] 函数调用: power +[DEBUG] CheckFuncCall: power +SymbolTable::lookup: found power in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 3 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] CheckExp: (mod-1)/d +[DEBUG] visitUnaryExp: (mod-1) +[DEBUG] visitPrimaryExp: (mod-1) +[DEBUG] CheckExp: mod-1 +[DEBUG] visitUnaryExp: mod +[DEBUG] visitPrimaryExp: mod +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x55dd44ad2ce0 +CheckLValue: found sym->name = mod, sym->kind = 3 +绑定常量: mod -> ConstDefContext +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44ad2ce0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitUnaryExp: d +[DEBUG] visitPrimaryExp: d +SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = d, sym->kind = 0 +绑定变量: d -> VarDefContext +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 0: 实参类型 3 形参类型 3 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 2: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 3: 实参类型 1 形参类型 1 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b43df0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: d +[DEBUG] visitPrimaryExp: d +SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = d, sym->kind = 0 +绑定变量: d -> VarDefContext +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55dd44b06040, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b43df0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: multiply(a[i],b[i]) +[DEBUG] visitUnaryExp: multiply(a[i],b[i]) +[DEBUG] 函数调用: multiply +[DEBUG] CheckFuncCall: multiply +SymbolTable::lookup: found multiply in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: a[i] +[DEBUG] visitUnaryExp: a[i] +[DEBUG] visitPrimaryExp: a[i] +SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55dd44b06040, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b43df0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: b[i] +[DEBUG] visitUnaryExp: b[i] +[DEBUG] visitPrimaryExp: b[i] +SymbolTable::lookup: found b in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55dd44b068e0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b43df0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b43df0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b43df0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: fft(a,0,d,power(3,mod-1-(mod-1)/d)) +[DEBUG] visitUnaryExp: fft(a,0,d,power(3,mod-1-(mod-1)/d)) +[DEBUG] 函数调用: fft +[DEBUG] CheckFuncCall: fft +SymbolTable::lookup: found fft in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: a +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55dd44b06040, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] CheckExp: d +[DEBUG] visitUnaryExp: d +[DEBUG] visitPrimaryExp: d +SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = d, sym->kind = 0 +绑定变量: d -> VarDefContext +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: power(3,mod-1-(mod-1)/d) +[DEBUG] visitUnaryExp: power(3,mod-1-(mod-1)/d) +[DEBUG] 函数调用: power +[DEBUG] CheckFuncCall: power +SymbolTable::lookup: found power in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 3 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] CheckExp: mod-1-(mod-1)/d +[DEBUG] visitUnaryExp: mod +[DEBUG] visitPrimaryExp: mod +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x55dd44ad2ce0 +CheckLValue: found sym->name = mod, sym->kind = 3 +绑定常量: mod -> ConstDefContext +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44ad2ce0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitUnaryExp: (mod-1) +[DEBUG] visitPrimaryExp: (mod-1) +[DEBUG] CheckExp: mod-1 +[DEBUG] visitUnaryExp: mod +[DEBUG] visitPrimaryExp: mod +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x55dd44ad2ce0 +CheckLValue: found sym->name = mod, sym->kind = 3 +绑定常量: mod -> ConstDefContext +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44ad2ce0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitUnaryExp: d +[DEBUG] visitPrimaryExp: d +SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = d, sym->kind = 0 +绑定变量: d -> VarDefContext +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 0: 实参类型 3 形参类型 3 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 2: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 3: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b43df0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b43df0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: d +[DEBUG] visitPrimaryExp: d +SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = d, sym->kind = 0 +绑定变量: d -> VarDefContext +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55dd44b06040, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b43df0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: multiply(a[i],power(d,mod-2)) +[DEBUG] visitUnaryExp: multiply(a[i],power(d,mod-2)) +[DEBUG] 函数调用: multiply +[DEBUG] CheckFuncCall: multiply +SymbolTable::lookup: found multiply in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: a[i] +[DEBUG] visitUnaryExp: a[i] +[DEBUG] visitPrimaryExp: a[i] +SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55dd44b06040, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b43df0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: power(d,mod-2) +[DEBUG] visitUnaryExp: power(d,mod-2) +[DEBUG] 函数调用: power +[DEBUG] CheckFuncCall: power +SymbolTable::lookup: found power in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: d +[DEBUG] visitUnaryExp: d +[DEBUG] visitPrimaryExp: d +SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = d, sym->kind = 0 +绑定变量: d -> VarDefContext +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: mod-2 +[DEBUG] visitUnaryExp: mod +[DEBUG] visitPrimaryExp: mod +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x55dd44ad2ce0 +CheckLValue: found sym->name = mod, sym->kind = 3 +绑定常量: mod -> ConstDefContext +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44ad2ce0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b43df0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b43df0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: stoptime() +[DEBUG] visitUnaryExp: stoptime() +[DEBUG] 函数调用: stoptime +[DEBUG] CheckFuncCall: stoptime +SymbolTable::lookup: found stoptime in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putarray(n+m-1,a) +[DEBUG] visitUnaryExp: putarray(n+m-1,a) +[DEBUG] 函数调用: putarray +[DEBUG] CheckFuncCall: putarray +SymbolTable::lookup: found putarray in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: n+m-1 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55dd44b384b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: m +[DEBUG] visitPrimaryExp: m +SymbolTable::lookup: found m in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = m, sym->kind = 0 +绑定变量: m -> VarDefContext +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x55dd44b39380, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: a +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55dd44b06040, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 3 形参类型 3 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 +[DEBUG IRGEN] visitCompUnit +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: d +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 d +[DEBUG] HandleGlobalVariable: 变量 d 是 int 类型 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: d +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: temp +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 temp +[DEBUG] HandleGlobalVariable: 变量 temp 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 2097152 +[DEBUG] HandleGlobalVariable: 创建全局数组: temp +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: a +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 a +[DEBUG] HandleGlobalVariable: 变量 a 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 2097152 +[DEBUG] HandleGlobalVariable: 创建全局数组: a +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: b +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 b +[DEBUG] HandleGlobalVariable: 变量 b 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 2097152 +[DEBUG] HandleGlobalVariable: 创建全局数组: b +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: c +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 c +[DEBUG] HandleGlobalVariable: 变量 c 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 2097152 +[DEBUG] HandleGlobalVariable: 创建全局数组: c +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG IRGEN] visitFuncDef: multiply +[DEBUG] visitFuncDef: 创建函数 multiply,返回类型: int,参数数量: 2 +[DEBUG] visitFuncDef: 函数对象地址: 0x55dd45b6b150 +[DEBUG] visitFuncDef: 为函数 multiply 添加参数 a,类型: int32 +[DEBUG] visitFuncDef: 参数 a 处理完成 +[DEBUG] visitFuncDef: 为函数 multiply 添加参数 b,类型: int32 +[DEBUG] visitFuncDef: 参数 b 处理完成 +[DEBUG] visitFuncDef: 开始生成函数体 +[DEBUG IRGEN] visitBlock: {if(b==0)return0;if(b==1)returna%mod;intcur=multiply(a,b/2);cur=(cur+cur)%mod;if(b%2==1)return(cur+a)%mod;elsereturncur;} +[DEBUG IRGEN] visitBlockItem: if(b==0)return0; +[DEBUG IRGEN] visitStmt: if(b==0)return0; +[DEBUG IRGEN] HandleIfStmt: if(b==0)return0; +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: entry +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitAddExp: 0 +[DEBUG IRGEN] visitMulExp: 0 +[DEBUG IRGEN] visitPrimaryExp: 0 +[DEBUG] visitPrimaryExp +[DEBUG] visitEqExp: left=0x55dd45b6ba80, type=int, right=0x55dd44a9d560, type=int +[DEBUG IF] Creating condbr: %t3 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: return0; +[DEBUG IRGEN] HandleReturnStmt: return0; +[DEBUG IRGEN] EvalExpr: 0 +[DEBUG IRGEN] visitAddExp: 0 +[DEBUG IRGEN] visitMulExp: 0 +[DEBUG IRGEN] visitPrimaryExp: 0 +[DEBUG] visitPrimaryExp +[DEBUG] EvalExpr: success, result = 0x55dd44a9d560 +[DEBUG IF] then branch terminated: 1 +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=1, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IRGEN] visitBlockItem: if(b==1)returna%mod; +[DEBUG IRGEN] visitStmt: if(b==1)returna%mod; +[DEBUG IRGEN] HandleIfStmt: if(b==1)returna%mod; +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: merge +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x55dd45b6bff0 +[DEBUG] visitEqExp: left=0x55dd45b6bf30, type=int, right=0x55dd45b6bff0, type=int +[DEBUG IF] Creating condbr: %t5 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: returna%mod; +[DEBUG IRGEN] HandleReturnStmt: returna%mod; +[DEBUG IRGEN] EvalExpr: a%mod +[DEBUG IRGEN] visitAddExp: a%mod +[DEBUG IRGEN] visitMulExp: a%mod +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG IRGEN] visitPrimaryExp: mod +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: mod +[DEBUG] visitLVal: constant mod +[DEBUG] visitMulExp: left=0x55dd45b6c270, type=int, right=0x55dd44b58bd0, type=int +[DEBUG] EvalExpr: success, result = 0x55dd45b6c2f0 +[DEBUG IF] then branch terminated: 1 +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=1, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IRGEN] visitBlockItem: intcur=multiply(a,b/2); +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: cur +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 cur +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: multiply(a,b/2) +[DEBUG IRGEN] visitAddExp: multiply(a,b/2) +[DEBUG IRGEN] visitMulExp: multiply(a,b/2) +[DEBUG IRGEN] visitCallExp: 调用函数 multiply +[DEBUG IRGEN] EvalExpr: a +[DEBUG IRGEN] visitAddExp: a +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] EvalExpr: success, result = 0x55dd45b6c5d0 +[DEBUG IRGEN] EvalExpr: b/2 +[DEBUG IRGEN] visitAddExp: b/2 +[DEBUG IRGEN] visitMulExp: b/2 +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitPrimaryExp: 2 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 2 created as 0x55dd45b6c780 +[DEBUG] visitMulExp: left=0x55dd45b6c6e0, type=int, right=0x55dd45b6c780, type=int +[DEBUG] EvalExpr: success, result = 0x55dd45b6c7e0 +[DEBUG IRGEN] visitCallExp: 收集到 2 个参数 +[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 0x55dd45b6c8e0 +[DEBUG] EvalExpr: success, result = 0x55dd45b6c8e0 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: merge +[DEBUG IRGEN] visitBlockItem: cur=(cur+cur)%mod; +[DEBUG IRGEN] visitStmt: cur=(cur+cur)%mod; +[DEBUG IRGEN] HandleAssignStmt: cur=(cur+cur)%mod; +[DEBUG IRGEN] EvalExpr: (cur+cur)%mod +[DEBUG IRGEN] visitAddExp: (cur+cur)%mod +[DEBUG IRGEN] visitMulExp: (cur+cur)%mod +[DEBUG IRGEN] visitMulExp: (cur+cur) +[DEBUG IRGEN] visitPrimaryExp: (cur+cur) +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting parenthesized expression +[DEBUG IRGEN] EvalExpr: cur+cur +[DEBUG IRGEN] visitAddExp: cur+cur +[DEBUG IRGEN] visitAddExp: cur +[DEBUG IRGEN] visitMulExp: cur +[DEBUG IRGEN] visitPrimaryExp: cur +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: cur +[DEBUG IRGEN] visitMulExp: cur +[DEBUG IRGEN] visitPrimaryExp: cur +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: cur +[DEBUG] visitAddExp: left=0x55dd45b6cad0, type=int, right=0x55dd45b6cb50, type=int +[DEBUG] EvalExpr: success, result = 0x55dd45b6cc40 +[DEBUG IRGEN] visitPrimaryExp: mod +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: mod +[DEBUG] visitLVal: constant mod +[DEBUG] visitMulExp: left=0x55dd45b6cc40, type=int, right=0x55dd44b58bd0, type=int +[DEBUG] EvalExpr: success, result = 0x55dd45b6cdb0 +[DEBUG] HandleAssignStmt: assigning to cur +[DEBUG] HandleAssignStmt: found in storage_map_ for cur, ptr = 0x55dd45b6c490 +[DEBUG] HandleAssignStmt: scalar assignment to cur, ptr = 0x55dd45b6c490, rhs = 0x55dd45b6cdb0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: merge +[DEBUG IRGEN] visitBlockItem: if(b%2==1)return(cur+a)%mod;elsereturncur; +[DEBUG IRGEN] visitStmt: if(b%2==1)return(cur+a)%mod;elsereturncur; +[DEBUG IRGEN] HandleIfStmt: if(b%2==1)return(cur+a)%mod;elsereturncur; +[DEBUG IF] thenBlock: then +[DEBUG IF] elseBlock: else +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: merge +[DEBUG IRGEN] visitAddExp: b%2 +[DEBUG IRGEN] visitMulExp: b%2 +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitPrimaryExp: 2 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 2 created as 0x55dd45b6c780 +[DEBUG] visitMulExp: left=0x55dd45b6d180, type=int, right=0x55dd45b6c780, type=int +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x55dd45b6bff0 +[DEBUG] visitEqExp: left=0x55dd45b6d2d0, type=int, right=0x55dd45b6bff0, type=int +[DEBUG IF] Creating condbr: %t19 -> then, else +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: return(cur+a)%mod; +[DEBUG IRGEN] HandleReturnStmt: return(cur+a)%mod; +[DEBUG IRGEN] EvalExpr: (cur+a)%mod +[DEBUG IRGEN] visitAddExp: (cur+a)%mod +[DEBUG IRGEN] visitMulExp: (cur+a)%mod +[DEBUG IRGEN] visitMulExp: (cur+a) +[DEBUG IRGEN] visitPrimaryExp: (cur+a) +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting parenthesized expression +[DEBUG IRGEN] EvalExpr: cur+a +[DEBUG IRGEN] visitAddExp: cur+a +[DEBUG IRGEN] visitAddExp: cur +[DEBUG IRGEN] visitMulExp: cur +[DEBUG IRGEN] visitPrimaryExp: cur +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: cur +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] visitAddExp: left=0x55dd45b6d570, type=int, right=0x55dd45b6d700, type=int +[DEBUG] EvalExpr: success, result = 0x55dd45b6d7c0 +[DEBUG IRGEN] visitPrimaryExp: mod +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: mod +[DEBUG] visitLVal: constant mod +[DEBUG] visitMulExp: left=0x55dd45b6d7c0, type=int, right=0x55dd44b58bd0, type=int +[DEBUG] EvalExpr: success, result = 0x55dd45b6d880 +[DEBUG IF] then branch terminated: 1 +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] Generating else branch in block: else +[DEBUG IRGEN] visitStmt: returncur; +[DEBUG IRGEN] HandleReturnStmt: returncur; +[DEBUG IRGEN] EvalExpr: cur +[DEBUG IRGEN] visitAddExp: cur +[DEBUG IRGEN] visitMulExp: cur +[DEBUG IRGEN] visitPrimaryExp: cur +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: cur +[DEBUG] EvalExpr: success, result = 0x55dd45b6d9e0 +[DEBUG IF] else branch terminated: 1 +[DEBUG IF] else block has terminator: 1 +[DEBUG IF] thenTerminated=1, elseTerminated=1 +[DEBUG IF] Both branches terminated, creating new block: after.if +[DEBUG IF] Final insert block: after.if +[DEBUG] current insert block: after.if +[ERROR] visitFuncDef: 验证函数结构失败: [irgen] 基本块未正确终结: merge +[error] [irgen] 基本块未正确终结: merge + +========== test/test_case/performance/gameoflife-oscillator.sy ========== +SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored starttime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored stoptime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored read_map with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored put_map with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored swap12 with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored step with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 +[DEBUG] CheckVarDef: sheet1 base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: 500 +[DEBUG] visitPrimaryExp: 500 +[DEBUG] dim[0] = 500 +[DEBUG] visitUnaryExp: 500 +[DEBUG] visitPrimaryExp: 500 +[DEBUG] dim[1] = 500 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 500 500 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored sheet1 with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: sheet1 type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: sheet2 base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: 500 +[DEBUG] visitPrimaryExp: 500 +[DEBUG] dim[0] = 500 +[DEBUG] visitUnaryExp: 500 +[DEBUG] visitPrimaryExp: 500 +[DEBUG] dim[1] = 500 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 500 500 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored sheet2 with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: sheet2 type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: active base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +SymbolTable::addSymbol: stored active with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: active type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: width base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored width with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: width type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: height base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored height with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: height type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: steps base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored steps with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: steps type_kind: 1 is_array: 0 +[DEBUG] 进入函数: read_map 返回类型: void +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found width in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = width, sym->kind = 0 +绑定变量: width -> VarDefContext +CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x5627859c13c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: getint() +[DEBUG] visitUnaryExp: getint() +[DEBUG] 函数调用: getint +[DEBUG] CheckFuncCall: getint +SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found height in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = height, sym->kind = 0 +绑定变量: height -> VarDefContext +CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x5627859c1a20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: getint() +[DEBUG] visitUnaryExp: getint() +[DEBUG] 函数调用: getint +[DEBUG] CheckFuncCall: getint +SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found steps in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = steps, sym->kind = 0 +绑定变量: steps -> VarDefContext +CheckLValue 绑定变量: steps, sym->kind: 0, sym->var_def_ctx: 0x5627859c1f70, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: getint() +[DEBUG] visitUnaryExp: getint() +[DEBUG] 函数调用: getint +[DEBUG] CheckFuncCall: getint +SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: getch() +[DEBUG] visitUnaryExp: getch() +[DEBUG] 函数调用: getch +[DEBUG] CheckFuncCall: getch +SymbolTable::lookup: found getch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859ccd20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: height +[DEBUG] visitPrimaryExp: height +SymbolTable::lookup: found height in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = height, sym->kind = 0 +绑定变量: height -> VarDefContext +CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x5627859c1a20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859cc540, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859cc540, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: width +[DEBUG] visitPrimaryExp: width +SymbolTable::lookup: found width in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = width, sym->kind = 0 +绑定变量: width -> VarDefContext +CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x5627859c13c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] CheckVarDef: get base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: getch() +[DEBUG] visitUnaryExp: getch() +[DEBUG] 函数调用: getch +[DEBUG] CheckFuncCall: getch +SymbolTable::lookup: found getch in scope level 0, kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored get with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: get type_kind: 1 is_array: 0 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: get +[DEBUG] visitPrimaryExp: get +SymbolTable::lookup: found get in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = get, sym->kind = 0 +绑定变量: get -> VarDefContext +CheckLValue 绑定变量: get, sym->kind: 0, sym->var_def_ctx: 0x5627859d61e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 35 +[DEBUG] visitPrimaryExp: 35 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found sheet1 in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sheet1, sym->kind = 0 +绑定变量: sheet1 -> VarDefContext +CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x5627859b6b90, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859ccd20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859cc540, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found sheet1 in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sheet1, sym->kind = 0 +绑定变量: sheet1 -> VarDefContext +CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x5627859b6b90, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859ccd20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859cc540, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859cc540, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859cc540, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: getch() +[DEBUG] visitUnaryExp: getch() +[DEBUG] 函数调用: getch +[DEBUG] CheckFuncCall: getch +SymbolTable::lookup: found getch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859ccd20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859ccd20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 函数 read_map has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: put_map 返回类型: void +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859e89b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: height +[DEBUG] visitPrimaryExp: height +SymbolTable::lookup: found height in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = height, sym->kind = 0 +绑定变量: height -> VarDefContext +CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x5627859c1a20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859e80d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859e80d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: width +[DEBUG] visitPrimaryExp: width +SymbolTable::lookup: found width in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = width, sym->kind = 0 +绑定变量: width -> VarDefContext +CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x5627859c13c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: sheet1[j][i] +[DEBUG] visitPrimaryExp: sheet1[j][i] +SymbolTable::lookup: found sheet1 in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sheet1, sym->kind = 0 +绑定变量: sheet1 -> VarDefContext +CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x5627859b6b90, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859e89b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859e80d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(35) +[DEBUG] visitUnaryExp: putch(35) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 35 +[DEBUG] visitUnaryExp: 35 +[DEBUG] visitPrimaryExp: 35 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(46) +[DEBUG] visitUnaryExp: putch(46) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 46 +[DEBUG] visitUnaryExp: 46 +[DEBUG] visitPrimaryExp: 46 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859e80d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859e80d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(10) +[DEBUG] visitUnaryExp: putch(10) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859e89b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859e89b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 函数 put_map has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: swap12 返回类型: void +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859f3220, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: height +[DEBUG] visitPrimaryExp: height +SymbolTable::lookup: found height in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = height, sym->kind = 0 +绑定变量: height -> VarDefContext +CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x5627859c1a20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859f28e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859f28e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: width +[DEBUG] visitPrimaryExp: width +SymbolTable::lookup: found width in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = width, sym->kind = 0 +绑定变量: width -> VarDefContext +CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x5627859c13c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found sheet1 in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sheet1, sym->kind = 0 +绑定变量: sheet1 -> VarDefContext +CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x5627859b6b90, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859f3220, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859f28e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: sheet2[j][i] +[DEBUG] visitUnaryExp: sheet2[j][i] +[DEBUG] visitPrimaryExp: sheet2[j][i] +SymbolTable::lookup: found sheet2 in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sheet2, sym->kind = 0 +绑定变量: sheet2 -> VarDefContext +CheckLValue 绑定变量: sheet2, sym->kind: 0, sym->var_def_ctx: 0x5627859b9170, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859f3220, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859f28e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859f28e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859f28e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859f3220, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859f3220, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 函数 swap12 has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: step 返回类型: void +SymbolTable::addSymbol: stored source with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: source type_kind: 3 is_array: 1 dims: 0 500 +SymbolTable::addSymbol: stored target with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: target type_kind: 3 is_array: 1 dims: 0 500 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: height +[DEBUG] visitPrimaryExp: height +SymbolTable::lookup: found height in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = height, sym->kind = 0 +绑定变量: height -> VarDefContext +CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x5627859c1a20, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: width +[DEBUG] visitPrimaryExp: width +SymbolTable::lookup: found width in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = width, sym->kind = 0 +绑定变量: width -> VarDefContext +CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x5627859c13c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] CheckVarDef: alive_count base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: source[j-1][i-1]+source[j-1][i]+source[j-1][i+1]+source[j][i-1]+source[j][i+1]+source[j+1][i-1]+source[j+1][i]+source[j+1][i+1] +[DEBUG] visitUnaryExp: source[j-1][i-1] +[DEBUG] visitPrimaryExp: source[j-1][i-1] +SymbolTable::lookup: found source in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = source, sym->kind = 2 +CheckLValue 绑定变量: source, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 2 维, dims: 0 500 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: j-1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: i-1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: source[j-1][i] +[DEBUG] visitPrimaryExp: source[j-1][i] +SymbolTable::lookup: found source in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = source, sym->kind = 2 +CheckLValue 绑定变量: source, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 2 维, dims: 0 500 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: j-1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: source[j-1][i+1] +[DEBUG] visitPrimaryExp: source[j-1][i+1] +SymbolTable::lookup: found source in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = source, sym->kind = 2 +CheckLValue 绑定变量: source, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 2 维, dims: 0 500 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: j-1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: source[j][i-1] +[DEBUG] visitPrimaryExp: source[j][i-1] +SymbolTable::lookup: found source in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = source, sym->kind = 2 +CheckLValue 绑定变量: source, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 2 维, dims: 0 500 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i-1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: source[j][i+1] +[DEBUG] visitPrimaryExp: source[j][i+1] +SymbolTable::lookup: found source in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = source, sym->kind = 2 +CheckLValue 绑定变量: source, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 2 维, dims: 0 500 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: source[j+1][i-1] +[DEBUG] visitPrimaryExp: source[j+1][i-1] +SymbolTable::lookup: found source in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = source, sym->kind = 2 +CheckLValue 绑定变量: source, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 2 维, dims: 0 500 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: i-1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: source[j+1][i] +[DEBUG] visitPrimaryExp: source[j+1][i] +SymbolTable::lookup: found source in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = source, sym->kind = 2 +CheckLValue 绑定变量: source, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 2 维, dims: 0 500 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: source[j+1][i+1] +[DEBUG] visitPrimaryExp: source[j+1][i+1] +SymbolTable::lookup: found source in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = source, sym->kind = 2 +CheckLValue 绑定变量: source, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 2 维, dims: 0 500 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +完全索引,返回元素类型 +SymbolTable::addSymbol: stored alive_count with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: alive_count type_kind: 1 is_array: 0 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: source[j][i] +[DEBUG] visitPrimaryExp: source[j][i] +SymbolTable::lookup: found source in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = source, sym->kind = 2 +CheckLValue 绑定变量: source, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 2 维, dims: 0 500 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitUnaryExp: alive_count +[DEBUG] visitPrimaryExp: alive_count +SymbolTable::lookup: found alive_count in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = alive_count, sym->kind = 0 +绑定变量: alive_count -> VarDefContext +CheckLValue 绑定变量: alive_count, sym->kind: 0, sym->var_def_ctx: 0x5627859ff6e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found target in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = target, sym->kind = 2 +CheckLValue 绑定变量: target, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 2 维, dims: 0 500 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: alive_count +[DEBUG] visitPrimaryExp: alive_count +SymbolTable::lookup: found alive_count in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = alive_count, sym->kind = 0 +绑定变量: alive_count -> VarDefContext +CheckLValue 绑定变量: alive_count, sym->kind: 0, sym->var_def_ctx: 0x5627859ff6e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found target in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = target, sym->kind = 2 +CheckLValue 绑定变量: target, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 2 维, dims: 0 500 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found target in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = target, sym->kind = 2 +CheckLValue 绑定变量: target, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 2 维, dims: 0 500 +dim_count: 2, subscript_count: 2 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 函数 step has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: read_map() +[DEBUG] visitUnaryExp: read_map() +[DEBUG] 函数调用: read_map +[DEBUG] CheckFuncCall: read_map +SymbolTable::lookup: found read_map in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: starttime() +[DEBUG] visitUnaryExp: starttime() +[DEBUG] 函数调用: starttime +[DEBUG] CheckFuncCall: starttime +SymbolTable::lookup: found starttime in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: steps +[DEBUG] visitPrimaryExp: steps +SymbolTable::lookup: found steps in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = steps, sym->kind = 0 +绑定变量: steps -> VarDefContext +CheckLValue 绑定变量: steps, sym->kind: 0, sym->var_def_ctx: 0x5627859c1f70, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: active +[DEBUG] visitPrimaryExp: active +SymbolTable::lookup: found active in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = active, sym->kind = 0 +绑定变量: active -> VarDefContext +CheckLValue 绑定变量: active, sym->kind: 0, sym->var_def_ctx: 0x5627859ba7e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: step(sheet1,sheet2) +[DEBUG] visitUnaryExp: step(sheet1,sheet2) +[DEBUG] 函数调用: step +[DEBUG] CheckFuncCall: step +SymbolTable::lookup: found step in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: sheet1 +[DEBUG] visitUnaryExp: sheet1 +[DEBUG] visitPrimaryExp: sheet1 +SymbolTable::lookup: found sheet1 in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sheet1, sym->kind = 0 +绑定变量: sheet1 -> VarDefContext +CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x5627859b6b90, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: sheet2 +[DEBUG] visitUnaryExp: sheet2 +[DEBUG] visitPrimaryExp: sheet2 +SymbolTable::lookup: found sheet2 in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sheet2, sym->kind = 0 +绑定变量: sheet2 -> VarDefContext +CheckLValue 绑定变量: sheet2, sym->kind: 0, sym->var_def_ctx: 0x5627859b9170, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 0 +数组名作为地址 +[DEBUG] 检查参数 0: 实参类型 3 形参类型 3 +[DEBUG] 检查参数 1: 实参类型 3 形参类型 3 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found active in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = active, sym->kind = 0 +绑定变量: active -> VarDefContext +CheckLValue 绑定变量: active, sym->kind: 0, sym->var_def_ctx: 0x5627859ba7e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 2 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: step(sheet2,sheet1) +[DEBUG] visitUnaryExp: step(sheet2,sheet1) +[DEBUG] 函数调用: step +[DEBUG] CheckFuncCall: step +SymbolTable::lookup: found step in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: sheet2 +[DEBUG] visitUnaryExp: sheet2 +[DEBUG] visitPrimaryExp: sheet2 +SymbolTable::lookup: found sheet2 in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sheet2, sym->kind = 0 +绑定变量: sheet2 -> VarDefContext +CheckLValue 绑定变量: sheet2, sym->kind: 0, sym->var_def_ctx: 0x5627859b9170, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: sheet1 +[DEBUG] visitUnaryExp: sheet1 +[DEBUG] visitPrimaryExp: sheet1 +SymbolTable::lookup: found sheet1 in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sheet1, sym->kind = 0 +绑定变量: sheet1 -> VarDefContext +CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x5627859b6b90, sym->const_def_ctx: 0 +dim_count: 2, subscript_count: 0 +数组名作为地址 +[DEBUG] 检查参数 0: 实参类型 3 形参类型 3 +[DEBUG] 检查参数 1: 实参类型 3 形参类型 3 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found active in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = active, sym->kind = 0 +绑定变量: active -> VarDefContext +CheckLValue 绑定变量: active, sym->kind: 0, sym->var_def_ctx: 0x5627859ba7e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found steps in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = steps, sym->kind = 0 +绑定变量: steps -> VarDefContext +CheckLValue 绑定变量: steps, sym->kind: 0, sym->var_def_ctx: 0x5627859c1f70, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: steps-1 +[DEBUG] visitUnaryExp: steps +[DEBUG] visitPrimaryExp: steps +SymbolTable::lookup: found steps in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = steps, sym->kind = 0 +绑定变量: steps -> VarDefContext +CheckLValue 绑定变量: steps, sym->kind: 0, sym->var_def_ctx: 0x5627859c1f70, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: stoptime() +[DEBUG] visitUnaryExp: stoptime() +[DEBUG] 函数调用: stoptime +[DEBUG] CheckFuncCall: stoptime +SymbolTable::lookup: found stoptime in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: active +[DEBUG] visitPrimaryExp: active +SymbolTable::lookup: found active in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = active, sym->kind = 0 +绑定变量: active -> VarDefContext +CheckLValue 绑定变量: active, sym->kind: 0, sym->var_def_ctx: 0x5627859ba7e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: swap12() +[DEBUG] visitUnaryExp: swap12() +[DEBUG] 函数调用: swap12 +[DEBUG] CheckFuncCall: swap12 +SymbolTable::lookup: found swap12 in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: put_map() +[DEBUG] visitUnaryExp: put_map() +[DEBUG] 函数调用: put_map +[DEBUG] CheckFuncCall: put_map +SymbolTable::lookup: found put_map in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 +[DEBUG IRGEN] visitCompUnit +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: sheet1 +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 sheet1 +[DEBUG] HandleGlobalVariable: 变量 sheet1 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 250000 +[DEBUG] HandleGlobalVariable: 创建全局数组: sheet1 +[DEBUG] HandleGlobalVariable: 处理初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 空初始化列表 +[DEBUG] HandleGlobalVariable: 获取到初始化值列表, 大小: 0 +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: sheet2 +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 sheet2 +[DEBUG] HandleGlobalVariable: 变量 sheet2 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 250000 +[DEBUG] HandleGlobalVariable: 创建全局数组: sheet2 +[DEBUG] HandleGlobalVariable: 处理初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 空初始化列表 +[DEBUG] HandleGlobalVariable: 获取到初始化值列表, 大小: 0 +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: active +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 active +[DEBUG] HandleGlobalVariable: 变量 active 是 int 类型 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: active +[DEBUG] HandleGlobalVariable: 处理标量初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 1 +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x562785c1ca10 +[DEBUG] EvalExpr: success, result = 0x562785c1ca10 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: width +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 width +[DEBUG] HandleGlobalVariable: 变量 width 是 int 类型 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: width +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: height +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 height +[DEBUG] HandleGlobalVariable: 变量 height 是 int 类型 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: height +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: steps +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 steps +[DEBUG] HandleGlobalVariable: 变量 steps 是 int 类型 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: steps +[DEBUG] visitDecl: 声明处理完成 +[DEBUG IRGEN] visitFuncDef: read_map +[DEBUG] visitFuncDef: 创建函数 read_map,返回类型: void,参数数量: 0 +[DEBUG] visitFuncDef: 函数对象地址: 0x562785c1cdc0 +[DEBUG] visitFuncDef: 开始生成函数体 +[DEBUG IRGEN] visitBlock: {width=getint();height=getint();steps=getint();getch();inti=1;intj=1;while(j<=height){i=1;while(i<=width){intget=getch();if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;}i=i+1;}getch();j=j+1;}} +[DEBUG IRGEN] visitBlockItem: width=getint(); +[DEBUG IRGEN] visitStmt: width=getint(); +[DEBUG IRGEN] HandleAssignStmt: width=getint(); +[DEBUG IRGEN] EvalExpr: getint() +[DEBUG IRGEN] visitAddExp: getint() +[DEBUG IRGEN] visitMulExp: getint() +[DEBUG IRGEN] visitCallExp: 调用函数 getint +[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 0x562785c1d730 +[DEBUG] EvalExpr: success, result = 0x562785c1d730 +[DEBUG] HandleAssignStmt: assigning to width +[DEBUG] HandleAssignStmt: found in global_map_ for width, ptr = 0x562785c1cab0 +[DEBUG] HandleAssignStmt: scalar assignment to width, ptr = 0x562785c1cab0, rhs = 0x562785c1d730 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: height=getint(); +[DEBUG IRGEN] visitStmt: height=getint(); +[DEBUG IRGEN] HandleAssignStmt: height=getint(); +[DEBUG IRGEN] EvalExpr: getint() +[DEBUG IRGEN] visitAddExp: getint() +[DEBUG IRGEN] visitMulExp: getint() +[DEBUG IRGEN] visitCallExp: 调用函数 getint +[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 0x562785c1d7d0 +[DEBUG] EvalExpr: success, result = 0x562785c1d7d0 +[DEBUG] HandleAssignStmt: assigning to height +[DEBUG] HandleAssignStmt: found in global_map_ for height, ptr = 0x562785c1cb80 +[DEBUG] HandleAssignStmt: scalar assignment to height, ptr = 0x562785c1cb80, rhs = 0x562785c1d7d0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: steps=getint(); +[DEBUG IRGEN] visitStmt: steps=getint(); +[DEBUG IRGEN] HandleAssignStmt: steps=getint(); +[DEBUG IRGEN] EvalExpr: getint() +[DEBUG IRGEN] visitAddExp: getint() +[DEBUG IRGEN] visitMulExp: getint() +[DEBUG IRGEN] visitCallExp: 调用函数 getint +[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 0x562785c1d910 +[DEBUG] EvalExpr: success, result = 0x562785c1d910 +[DEBUG] HandleAssignStmt: assigning to steps +[DEBUG] HandleAssignStmt: found in global_map_ for steps, ptr = 0x562785c1cc90 +[DEBUG] HandleAssignStmt: scalar assignment to steps, ptr = 0x562785c1cc90, rhs = 0x562785c1d910 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: getch(); +[DEBUG IRGEN] visitStmt: getch(); +[DEBUG IRGEN] EvalExpr: getch() +[DEBUG IRGEN] visitAddExp: getch() +[DEBUG IRGEN] visitMulExp: getch() +[DEBUG IRGEN] visitCallExp: 调用函数 getch +[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 0x562785c1dae0 +[DEBUG] EvalExpr: success, result = 0x562785c1dae0 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: inti=1; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: i +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 i +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 1 +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x562785c1ca10 +[DEBUG] EvalExpr: success, result = 0x562785c1ca10 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: intj=1; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: j +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 j +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 1 +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x562785c1ca10 +[DEBUG] EvalExpr: success, result = 0x562785c1ca10 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: while(j<=height){i=1;while(i<=width){intget=getch();if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;}i=i+1;}getch();j=j+1;} +[DEBUG IRGEN] visitStmt: while(j<=height){i=1;while(i<=width){intget=getch();if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;}i=i+1;}getch();j=j+1;} +[DEBUG IRGEN] HandleWhileStmt: while(j<=height){i=1;while(i<=width){intget=getch();if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;}i=i+1;}getch();j=j+1;} +[DEBUG WHILE] Current insert block before while: entry +[DEBUG WHILE] condBlock: while.cond +[DEBUG WHILE] bodyBlock: while.body +[DEBUG WHILE] exitBlock: while.exit +[DEBUG WHILE] Adding br to condBlock from current block +[DEBUG WHILE] loopStack size: 1 +[DEBUG WHILE] Generating condition in block: while.cond +[DEBUG IRGEN] visitAddExp: j +[DEBUG IRGEN] visitMulExp: j +[DEBUG IRGEN] visitPrimaryExp: j +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: j +[DEBUG IRGEN] visitAddExp: height +[DEBUG IRGEN] visitMulExp: height +[DEBUG IRGEN] visitPrimaryExp: height +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: height +[DEBUG] visitRelExp: left=0x562785c1df20, type=int, right=0x562785c1e2f0, type=int +[DEBUG WHILE] condBlock has terminator: 1 +[DEBUG WHILE] Generating body in block: while.body +[DEBUG IRGEN] visitStmt: {i=1;while(i<=width){intget=getch();if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;}i=i+1;}getch();j=j+1;} +[DEBUG IRGEN] visitBlock: {i=1;while(i<=width){intget=getch();if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;}i=i+1;}getch();j=j+1;} +[DEBUG IRGEN] visitBlockItem: i=1; +[DEBUG IRGEN] visitStmt: i=1; +[DEBUG IRGEN] HandleAssignStmt: i=1; +[DEBUG IRGEN] EvalExpr: 1 +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x562785c1ca10 +[DEBUG] EvalExpr: success, result = 0x562785c1ca10 +[DEBUG] HandleAssignStmt: assigning to i +[DEBUG] HandleAssignStmt: found in storage_map_ for i, ptr = 0x562785c1dba0 +[DEBUG] HandleAssignStmt: scalar assignment to i, ptr = 0x562785c1dba0, rhs = 0x562785c1ca10 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: while.body +[DEBUG IRGEN] visitBlockItem: while(i<=width){intget=getch();if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;}i=i+1;} +[DEBUG IRGEN] visitStmt: while(i<=width){intget=getch();if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;}i=i+1;} +[DEBUG IRGEN] HandleWhileStmt: while(i<=width){intget=getch();if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;}i=i+1;} +[DEBUG WHILE] Current insert block before while: while.body +[DEBUG WHILE] condBlock: while.cond +[DEBUG WHILE] bodyBlock: while.body +[DEBUG WHILE] exitBlock: while.exit +[DEBUG WHILE] Adding br to condBlock from current block +[DEBUG WHILE] loopStack size: 2 +[DEBUG WHILE] Generating condition in block: while.cond +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: width +[DEBUG IRGEN] visitMulExp: width +[DEBUG IRGEN] visitPrimaryExp: width +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: width +[DEBUG] visitRelExp: left=0x562785c1e900, type=int, right=0x562785c1e980, type=int +[DEBUG WHILE] condBlock has terminator: 1 +[DEBUG WHILE] Generating body in block: while.body +[DEBUG IRGEN] visitStmt: {intget=getch();if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;}i=i+1;} +[DEBUG IRGEN] visitBlock: {intget=getch();if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;}i=i+1;} +[DEBUG IRGEN] visitBlockItem: intget=getch(); +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: get +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 get +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: getch() +[DEBUG IRGEN] visitAddExp: getch() +[DEBUG IRGEN] visitMulExp: getch() +[DEBUG IRGEN] visitCallExp: 调用函数 getch +[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 0x562785c1ed00 +[DEBUG] EvalExpr: success, result = 0x562785c1ed00 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: while.body +[DEBUG IRGEN] visitBlockItem: if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;} +[DEBUG IRGEN] visitStmt: if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;} +[DEBUG IRGEN] HandleIfStmt: if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;} +[DEBUG IF] thenBlock: then +[DEBUG IF] elseBlock: else +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: while.body +[DEBUG IRGEN] visitAddExp: get +[DEBUG IRGEN] visitMulExp: get +[DEBUG IRGEN] visitPrimaryExp: get +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: get +[DEBUG IRGEN] visitAddExp: 35 +[DEBUG IRGEN] visitMulExp: 35 +[DEBUG IRGEN] visitPrimaryExp: 35 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 35 created as 0x562785c1d570 +[DEBUG] visitEqExp: left=0x562785c1f160, type=int, right=0x562785c1d570, type=int +[DEBUG IF] Creating condbr: %t15 -> then, else +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {sheet1[j][i]=1;} +[DEBUG IRGEN] visitBlock: {sheet1[j][i]=1;} +[DEBUG IRGEN] visitBlockItem: sheet1[j][i]=1; +[DEBUG IRGEN] visitStmt: sheet1[j][i]=1; +[DEBUG IRGEN] HandleAssignStmt: sheet1[j][i]=1; +[DEBUG IRGEN] EvalExpr: 1 +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x562785c1ca10 +[DEBUG] EvalExpr: success, result = 0x562785c1ca10 +[DEBUG] HandleAssignStmt: assigning to sheet1 +[DEBUG] HandleAssignStmt: found in global_map_ for sheet1, ptr = 0x562785a34330 +[DEBUG IRGEN] EvalExpr: j +[DEBUG IRGEN] visitAddExp: j +[DEBUG IRGEN] visitMulExp: j +[DEBUG IRGEN] visitPrimaryExp: j +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: j +[DEBUG] EvalExpr: success, result = 0x562785c1f420 +[DEBUG IRGEN] EvalExpr: i +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG] EvalExpr: success, result = 0x562785c1f570 +[error] [ir] StoreInst 当前只支持写入 i32* + +========== test/test_case/performance/if-combine3.sy ========== +SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored starttime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored stoptime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored func with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 +[DEBUG] 进入函数: func 返回类型: int +SymbolTable::addSymbol: stored n with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: n type_kind: 1 is_array: 0 dims: +[DEBUG] CheckVarDef: sum base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored sum with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: sum type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 200 +[DEBUG] visitUnaryExp: 200 +[DEBUG] visitPrimaryExp: 200 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: s base_type: int is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: 100 +[DEBUG] visitPrimaryExp: 100 +[DEBUG] dim[0] = 100 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 100 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored s with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: s type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: m base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored m with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: m type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: m +[DEBUG] visitPrimaryExp: m +SymbolTable::lookup: found m in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = m, sym->kind = 0 +绑定变量: m -> VarDefContext +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x560d55a4da00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 100 +[DEBUG] visitPrimaryExp: 100 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: m +[DEBUG] visitUnaryExp: m +[DEBUG] visitPrimaryExp: m +SymbolTable::lookup: found m in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = m, sym->kind = 0 +绑定变量: m -> VarDefContext +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x560d55a4da00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found m in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = m, sym->kind = 0 +绑定变量: m -> VarDefContext +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x560d55a4da00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: m+1 +[DEBUG] visitUnaryExp: m +[DEBUG] visitPrimaryExp: m +SymbolTable::lookup: found m in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = m, sym->kind = 0 +绑定变量: m -> VarDefContext +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x560d55a4da00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x560d55a47c00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +完全索引,返回元素类型 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 2 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +完全索引,返回元素类型 +[DEBUG] CheckExp: 2 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 3 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +完全索引,返回元素类型 +[DEBUG] CheckExp: 3 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 4 +[DEBUG] visitPrimaryExp: 4 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 4 +[DEBUG] visitUnaryExp: 4 +[DEBUG] visitPrimaryExp: 4 +完全索引,返回元素类型 +[DEBUG] CheckExp: 4 +[DEBUG] visitUnaryExp: 4 +[DEBUG] visitPrimaryExp: 4 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 5 +[DEBUG] visitPrimaryExp: 5 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 5 +[DEBUG] visitUnaryExp: 5 +[DEBUG] visitPrimaryExp: 5 +完全索引,返回元素类型 +[DEBUG] CheckExp: 5 +[DEBUG] visitUnaryExp: 5 +[DEBUG] visitPrimaryExp: 5 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 6 +[DEBUG] visitPrimaryExp: 6 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 6 +[DEBUG] visitUnaryExp: 6 +[DEBUG] visitPrimaryExp: 6 +完全索引,返回元素类型 +[DEBUG] CheckExp: 6 +[DEBUG] visitUnaryExp: 6 +[DEBUG] visitPrimaryExp: 6 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 7 +[DEBUG] visitPrimaryExp: 7 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 7 +[DEBUG] visitUnaryExp: 7 +[DEBUG] visitPrimaryExp: 7 +完全索引,返回元素类型 +[DEBUG] CheckExp: 7 +[DEBUG] visitUnaryExp: 7 +[DEBUG] visitPrimaryExp: 7 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 8 +[DEBUG] visitPrimaryExp: 8 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 8 +[DEBUG] visitUnaryExp: 8 +[DEBUG] visitPrimaryExp: 8 +完全索引,返回元素类型 +[DEBUG] CheckExp: 8 +[DEBUG] visitUnaryExp: 8 +[DEBUG] visitPrimaryExp: 8 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 9 +[DEBUG] visitPrimaryExp: 9 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 9 +[DEBUG] visitUnaryExp: 9 +[DEBUG] visitPrimaryExp: 9 +完全索引,返回元素类型 +[DEBUG] CheckExp: 9 +[DEBUG] visitUnaryExp: 9 +[DEBUG] visitPrimaryExp: 9 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +完全索引,返回元素类型 +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 11 +[DEBUG] visitPrimaryExp: 11 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 11 +[DEBUG] visitUnaryExp: 11 +[DEBUG] visitPrimaryExp: 11 +完全索引,返回元素类型 +[DEBUG] CheckExp: 11 +[DEBUG] visitUnaryExp: 11 +[DEBUG] visitPrimaryExp: 11 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 12 +[DEBUG] visitPrimaryExp: 12 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 12 +[DEBUG] visitUnaryExp: 12 +[DEBUG] visitPrimaryExp: 12 +完全索引,返回元素类型 +[DEBUG] CheckExp: 12 +[DEBUG] visitUnaryExp: 12 +[DEBUG] visitPrimaryExp: 12 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 13 +[DEBUG] visitPrimaryExp: 13 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 13 +[DEBUG] visitUnaryExp: 13 +[DEBUG] visitPrimaryExp: 13 +完全索引,返回元素类型 +[DEBUG] CheckExp: 13 +[DEBUG] visitUnaryExp: 13 +[DEBUG] visitPrimaryExp: 13 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 14 +[DEBUG] visitPrimaryExp: 14 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 14 +[DEBUG] visitUnaryExp: 14 +[DEBUG] visitPrimaryExp: 14 +完全索引,返回元素类型 +[DEBUG] CheckExp: 14 +[DEBUG] visitUnaryExp: 14 +[DEBUG] visitPrimaryExp: 14 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 15 +[DEBUG] visitPrimaryExp: 15 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 15 +[DEBUG] visitUnaryExp: 15 +[DEBUG] visitPrimaryExp: 15 +完全索引,返回元素类型 +[DEBUG] CheckExp: 15 +[DEBUG] visitUnaryExp: 15 +[DEBUG] visitPrimaryExp: 15 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 16 +[DEBUG] visitPrimaryExp: 16 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 16 +[DEBUG] visitUnaryExp: 16 +[DEBUG] visitPrimaryExp: 16 +完全索引,返回元素类型 +[DEBUG] CheckExp: 16 +[DEBUG] visitUnaryExp: 16 +[DEBUG] visitPrimaryExp: 16 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 17 +[DEBUG] visitPrimaryExp: 17 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 17 +[DEBUG] visitUnaryExp: 17 +[DEBUG] visitPrimaryExp: 17 +完全索引,返回元素类型 +[DEBUG] CheckExp: 17 +[DEBUG] visitUnaryExp: 17 +[DEBUG] visitPrimaryExp: 17 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 18 +[DEBUG] visitPrimaryExp: 18 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 18 +[DEBUG] visitUnaryExp: 18 +[DEBUG] visitPrimaryExp: 18 +完全索引,返回元素类型 +[DEBUG] CheckExp: 18 +[DEBUG] visitUnaryExp: 18 +[DEBUG] visitPrimaryExp: 18 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 19 +[DEBUG] visitPrimaryExp: 19 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 19 +[DEBUG] visitUnaryExp: 19 +[DEBUG] visitPrimaryExp: 19 +完全索引,返回元素类型 +[DEBUG] CheckExp: 19 +[DEBUG] visitUnaryExp: 19 +[DEBUG] visitPrimaryExp: 19 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 20 +[DEBUG] visitPrimaryExp: 20 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 20 +[DEBUG] visitUnaryExp: 20 +[DEBUG] visitPrimaryExp: 20 +完全索引,返回元素类型 +[DEBUG] CheckExp: 20 +[DEBUG] visitUnaryExp: 20 +[DEBUG] visitPrimaryExp: 20 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 21 +[DEBUG] visitPrimaryExp: 21 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 21 +[DEBUG] visitUnaryExp: 21 +[DEBUG] visitPrimaryExp: 21 +完全索引,返回元素类型 +[DEBUG] CheckExp: 21 +[DEBUG] visitUnaryExp: 21 +[DEBUG] visitPrimaryExp: 21 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 22 +[DEBUG] visitPrimaryExp: 22 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 22 +[DEBUG] visitUnaryExp: 22 +[DEBUG] visitPrimaryExp: 22 +完全索引,返回元素类型 +[DEBUG] CheckExp: 22 +[DEBUG] visitUnaryExp: 22 +[DEBUG] visitPrimaryExp: 22 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 23 +[DEBUG] visitPrimaryExp: 23 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 23 +[DEBUG] visitUnaryExp: 23 +[DEBUG] visitPrimaryExp: 23 +完全索引,返回元素类型 +[DEBUG] CheckExp: 23 +[DEBUG] visitUnaryExp: 23 +[DEBUG] visitPrimaryExp: 23 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 24 +[DEBUG] visitPrimaryExp: 24 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 24 +[DEBUG] visitUnaryExp: 24 +[DEBUG] visitPrimaryExp: 24 +完全索引,返回元素类型 +[DEBUG] CheckExp: 24 +[DEBUG] visitUnaryExp: 24 +[DEBUG] visitPrimaryExp: 24 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 25 +[DEBUG] visitPrimaryExp: 25 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 25 +[DEBUG] visitUnaryExp: 25 +[DEBUG] visitPrimaryExp: 25 +完全索引,返回元素类型 +[DEBUG] CheckExp: 25 +[DEBUG] visitUnaryExp: 25 +[DEBUG] visitPrimaryExp: 25 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 26 +[DEBUG] visitPrimaryExp: 26 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 26 +[DEBUG] visitUnaryExp: 26 +[DEBUG] visitPrimaryExp: 26 +完全索引,返回元素类型 +[DEBUG] CheckExp: 26 +[DEBUG] visitUnaryExp: 26 +[DEBUG] visitPrimaryExp: 26 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 27 +[DEBUG] visitPrimaryExp: 27 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 27 +[DEBUG] visitUnaryExp: 27 +[DEBUG] visitPrimaryExp: 27 +完全索引,返回元素类型 +[DEBUG] CheckExp: 27 +[DEBUG] visitUnaryExp: 27 +[DEBUG] visitPrimaryExp: 27 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 28 +[DEBUG] visitPrimaryExp: 28 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 28 +[DEBUG] visitUnaryExp: 28 +[DEBUG] visitPrimaryExp: 28 +完全索引,返回元素类型 +[DEBUG] CheckExp: 28 +[DEBUG] visitUnaryExp: 28 +[DEBUG] visitPrimaryExp: 28 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 29 +[DEBUG] visitPrimaryExp: 29 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 29 +[DEBUG] visitUnaryExp: 29 +[DEBUG] visitPrimaryExp: 29 +完全索引,返回元素类型 +[DEBUG] CheckExp: 29 +[DEBUG] visitUnaryExp: 29 +[DEBUG] visitPrimaryExp: 29 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 30 +[DEBUG] visitPrimaryExp: 30 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 30 +[DEBUG] visitUnaryExp: 30 +[DEBUG] visitPrimaryExp: 30 +完全索引,返回元素类型 +[DEBUG] CheckExp: 30 +[DEBUG] visitUnaryExp: 30 +[DEBUG] visitPrimaryExp: 30 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 31 +[DEBUG] visitPrimaryExp: 31 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 31 +[DEBUG] visitUnaryExp: 31 +[DEBUG] visitPrimaryExp: 31 +完全索引,返回元素类型 +[DEBUG] CheckExp: 31 +[DEBUG] visitUnaryExp: 31 +[DEBUG] visitPrimaryExp: 31 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 32 +[DEBUG] visitPrimaryExp: 32 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 32 +[DEBUG] visitUnaryExp: 32 +[DEBUG] visitPrimaryExp: 32 +完全索引,返回元素类型 +[DEBUG] CheckExp: 32 +[DEBUG] visitUnaryExp: 32 +[DEBUG] visitPrimaryExp: 32 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 33 +[DEBUG] visitPrimaryExp: 33 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 33 +[DEBUG] visitUnaryExp: 33 +[DEBUG] visitPrimaryExp: 33 +完全索引,返回元素类型 +[DEBUG] CheckExp: 33 +[DEBUG] visitUnaryExp: 33 +[DEBUG] visitPrimaryExp: 33 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 34 +[DEBUG] visitPrimaryExp: 34 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 34 +[DEBUG] visitUnaryExp: 34 +[DEBUG] visitPrimaryExp: 34 +完全索引,返回元素类型 +[DEBUG] CheckExp: 34 +[DEBUG] visitUnaryExp: 34 +[DEBUG] visitPrimaryExp: 34 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 35 +[DEBUG] visitPrimaryExp: 35 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 35 +[DEBUG] visitUnaryExp: 35 +[DEBUG] visitPrimaryExp: 35 +完全索引,返回元素类型 +[DEBUG] CheckExp: 35 +[DEBUG] visitUnaryExp: 35 +[DEBUG] visitPrimaryExp: 35 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 36 +[DEBUG] visitPrimaryExp: 36 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 36 +[DEBUG] visitUnaryExp: 36 +[DEBUG] visitPrimaryExp: 36 +完全索引,返回元素类型 +[DEBUG] CheckExp: 36 +[DEBUG] visitUnaryExp: 36 +[DEBUG] visitPrimaryExp: 36 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 37 +[DEBUG] visitPrimaryExp: 37 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 37 +[DEBUG] visitUnaryExp: 37 +[DEBUG] visitPrimaryExp: 37 +完全索引,返回元素类型 +[DEBUG] CheckExp: 37 +[DEBUG] visitUnaryExp: 37 +[DEBUG] visitPrimaryExp: 37 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 38 +[DEBUG] visitPrimaryExp: 38 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 38 +[DEBUG] visitUnaryExp: 38 +[DEBUG] visitPrimaryExp: 38 +完全索引,返回元素类型 +[DEBUG] CheckExp: 38 +[DEBUG] visitUnaryExp: 38 +[DEBUG] visitPrimaryExp: 38 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 39 +[DEBUG] visitPrimaryExp: 39 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 39 +[DEBUG] visitUnaryExp: 39 +[DEBUG] visitPrimaryExp: 39 +完全索引,返回元素类型 +[DEBUG] CheckExp: 39 +[DEBUG] visitUnaryExp: 39 +[DEBUG] visitPrimaryExp: 39 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 40 +[DEBUG] visitPrimaryExp: 40 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 40 +[DEBUG] visitUnaryExp: 40 +[DEBUG] visitPrimaryExp: 40 +完全索引,返回元素类型 +[DEBUG] CheckExp: 40 +[DEBUG] visitUnaryExp: 40 +[DEBUG] visitPrimaryExp: 40 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 41 +[DEBUG] visitPrimaryExp: 41 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 41 +[DEBUG] visitUnaryExp: 41 +[DEBUG] visitPrimaryExp: 41 +完全索引,返回元素类型 +[DEBUG] CheckExp: 41 +[DEBUG] visitUnaryExp: 41 +[DEBUG] visitPrimaryExp: 41 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 42 +[DEBUG] visitPrimaryExp: 42 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 42 +[DEBUG] visitUnaryExp: 42 +[DEBUG] visitPrimaryExp: 42 +完全索引,返回元素类型 +[DEBUG] CheckExp: 42 +[DEBUG] visitUnaryExp: 42 +[DEBUG] visitPrimaryExp: 42 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 43 +[DEBUG] visitPrimaryExp: 43 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 43 +[DEBUG] visitUnaryExp: 43 +[DEBUG] visitPrimaryExp: 43 +完全索引,返回元素类型 +[DEBUG] CheckExp: 43 +[DEBUG] visitUnaryExp: 43 +[DEBUG] visitPrimaryExp: 43 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 44 +[DEBUG] visitPrimaryExp: 44 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 44 +[DEBUG] visitUnaryExp: 44 +[DEBUG] visitPrimaryExp: 44 +完全索引,返回元素类型 +[DEBUG] CheckExp: 44 +[DEBUG] visitUnaryExp: 44 +[DEBUG] visitPrimaryExp: 44 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 45 +[DEBUG] visitPrimaryExp: 45 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 45 +[DEBUG] visitUnaryExp: 45 +[DEBUG] visitPrimaryExp: 45 +完全索引,返回元素类型 +[DEBUG] CheckExp: 45 +[DEBUG] visitUnaryExp: 45 +[DEBUG] visitPrimaryExp: 45 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 46 +[DEBUG] visitPrimaryExp: 46 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 46 +[DEBUG] visitUnaryExp: 46 +[DEBUG] visitPrimaryExp: 46 +完全索引,返回元素类型 +[DEBUG] CheckExp: 46 +[DEBUG] visitUnaryExp: 46 +[DEBUG] visitPrimaryExp: 46 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 47 +[DEBUG] visitPrimaryExp: 47 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 47 +[DEBUG] visitUnaryExp: 47 +[DEBUG] visitPrimaryExp: 47 +完全索引,返回元素类型 +[DEBUG] CheckExp: 47 +[DEBUG] visitUnaryExp: 47 +[DEBUG] visitPrimaryExp: 47 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 48 +[DEBUG] visitPrimaryExp: 48 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 48 +[DEBUG] visitUnaryExp: 48 +[DEBUG] visitPrimaryExp: 48 +完全索引,返回元素类型 +[DEBUG] CheckExp: 48 +[DEBUG] visitUnaryExp: 48 +[DEBUG] visitPrimaryExp: 48 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 49 +[DEBUG] visitPrimaryExp: 49 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 49 +[DEBUG] visitUnaryExp: 49 +[DEBUG] visitPrimaryExp: 49 +完全索引,返回元素类型 +[DEBUG] CheckExp: 49 +[DEBUG] visitUnaryExp: 49 +[DEBUG] visitPrimaryExp: 49 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 50 +[DEBUG] visitPrimaryExp: 50 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 50 +[DEBUG] visitUnaryExp: 50 +[DEBUG] visitPrimaryExp: 50 +完全索引,返回元素类型 +[DEBUG] CheckExp: 50 +[DEBUG] visitUnaryExp: 50 +[DEBUG] visitPrimaryExp: 50 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 51 +[DEBUG] visitPrimaryExp: 51 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 51 +[DEBUG] visitUnaryExp: 51 +[DEBUG] visitPrimaryExp: 51 +完全索引,返回元素类型 +[DEBUG] CheckExp: 51 +[DEBUG] visitUnaryExp: 51 +[DEBUG] visitPrimaryExp: 51 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 52 +[DEBUG] visitPrimaryExp: 52 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 52 +[DEBUG] visitUnaryExp: 52 +[DEBUG] visitPrimaryExp: 52 +完全索引,返回元素类型 +[DEBUG] CheckExp: 52 +[DEBUG] visitUnaryExp: 52 +[DEBUG] visitPrimaryExp: 52 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 53 +[DEBUG] visitPrimaryExp: 53 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 53 +[DEBUG] visitUnaryExp: 53 +[DEBUG] visitPrimaryExp: 53 +完全索引,返回元素类型 +[DEBUG] CheckExp: 53 +[DEBUG] visitUnaryExp: 53 +[DEBUG] visitPrimaryExp: 53 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 54 +[DEBUG] visitPrimaryExp: 54 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 54 +[DEBUG] visitUnaryExp: 54 +[DEBUG] visitPrimaryExp: 54 +完全索引,返回元素类型 +[DEBUG] CheckExp: 54 +[DEBUG] visitUnaryExp: 54 +[DEBUG] visitPrimaryExp: 54 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 55 +[DEBUG] visitPrimaryExp: 55 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 55 +[DEBUG] visitUnaryExp: 55 +[DEBUG] visitPrimaryExp: 55 +完全索引,返回元素类型 +[DEBUG] CheckExp: 55 +[DEBUG] visitUnaryExp: 55 +[DEBUG] visitPrimaryExp: 55 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 56 +[DEBUG] visitPrimaryExp: 56 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 56 +[DEBUG] visitUnaryExp: 56 +[DEBUG] visitPrimaryExp: 56 +完全索引,返回元素类型 +[DEBUG] CheckExp: 56 +[DEBUG] visitUnaryExp: 56 +[DEBUG] visitPrimaryExp: 56 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 57 +[DEBUG] visitPrimaryExp: 57 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 57 +[DEBUG] visitUnaryExp: 57 +[DEBUG] visitPrimaryExp: 57 +完全索引,返回元素类型 +[DEBUG] CheckExp: 57 +[DEBUG] visitUnaryExp: 57 +[DEBUG] visitPrimaryExp: 57 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 58 +[DEBUG] visitPrimaryExp: 58 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 58 +[DEBUG] visitUnaryExp: 58 +[DEBUG] visitPrimaryExp: 58 +完全索引,返回元素类型 +[DEBUG] CheckExp: 58 +[DEBUG] visitUnaryExp: 58 +[DEBUG] visitPrimaryExp: 58 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 59 +[DEBUG] visitPrimaryExp: 59 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 59 +[DEBUG] visitUnaryExp: 59 +[DEBUG] visitPrimaryExp: 59 +完全索引,返回元素类型 +[DEBUG] CheckExp: 59 +[DEBUG] visitUnaryExp: 59 +[DEBUG] visitPrimaryExp: 59 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 60 +[DEBUG] visitPrimaryExp: 60 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 60 +[DEBUG] visitUnaryExp: 60 +[DEBUG] visitPrimaryExp: 60 +完全索引,返回元素类型 +[DEBUG] CheckExp: 60 +[DEBUG] visitUnaryExp: 60 +[DEBUG] visitPrimaryExp: 60 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 61 +[DEBUG] visitPrimaryExp: 61 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 61 +[DEBUG] visitUnaryExp: 61 +[DEBUG] visitPrimaryExp: 61 +完全索引,返回元素类型 +[DEBUG] CheckExp: 61 +[DEBUG] visitUnaryExp: 61 +[DEBUG] visitPrimaryExp: 61 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 62 +[DEBUG] visitPrimaryExp: 62 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 62 +[DEBUG] visitUnaryExp: 62 +[DEBUG] visitPrimaryExp: 62 +完全索引,返回元素类型 +[DEBUG] CheckExp: 62 +[DEBUG] visitUnaryExp: 62 +[DEBUG] visitPrimaryExp: 62 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 63 +[DEBUG] visitPrimaryExp: 63 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 63 +[DEBUG] visitUnaryExp: 63 +[DEBUG] visitPrimaryExp: 63 +完全索引,返回元素类型 +[DEBUG] CheckExp: 63 +[DEBUG] visitUnaryExp: 63 +[DEBUG] visitPrimaryExp: 63 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 64 +[DEBUG] visitPrimaryExp: 64 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 64 +[DEBUG] visitUnaryExp: 64 +[DEBUG] visitPrimaryExp: 64 +完全索引,返回元素类型 +[DEBUG] CheckExp: 64 +[DEBUG] visitUnaryExp: 64 +[DEBUG] visitPrimaryExp: 64 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 65 +[DEBUG] visitPrimaryExp: 65 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 65 +[DEBUG] visitUnaryExp: 65 +[DEBUG] visitPrimaryExp: 65 +完全索引,返回元素类型 +[DEBUG] CheckExp: 65 +[DEBUG] visitUnaryExp: 65 +[DEBUG] visitPrimaryExp: 65 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 66 +[DEBUG] visitPrimaryExp: 66 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 66 +[DEBUG] visitUnaryExp: 66 +[DEBUG] visitPrimaryExp: 66 +完全索引,返回元素类型 +[DEBUG] CheckExp: 66 +[DEBUG] visitUnaryExp: 66 +[DEBUG] visitPrimaryExp: 66 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 67 +[DEBUG] visitPrimaryExp: 67 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 67 +[DEBUG] visitUnaryExp: 67 +[DEBUG] visitPrimaryExp: 67 +完全索引,返回元素类型 +[DEBUG] CheckExp: 67 +[DEBUG] visitUnaryExp: 67 +[DEBUG] visitPrimaryExp: 67 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 68 +[DEBUG] visitPrimaryExp: 68 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 68 +[DEBUG] visitUnaryExp: 68 +[DEBUG] visitPrimaryExp: 68 +完全索引,返回元素类型 +[DEBUG] CheckExp: 68 +[DEBUG] visitUnaryExp: 68 +[DEBUG] visitPrimaryExp: 68 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 69 +[DEBUG] visitPrimaryExp: 69 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 69 +[DEBUG] visitUnaryExp: 69 +[DEBUG] visitPrimaryExp: 69 +完全索引,返回元素类型 +[DEBUG] CheckExp: 69 +[DEBUG] visitUnaryExp: 69 +[DEBUG] visitPrimaryExp: 69 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 70 +[DEBUG] visitPrimaryExp: 70 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 70 +[DEBUG] visitUnaryExp: 70 +[DEBUG] visitPrimaryExp: 70 +完全索引,返回元素类型 +[DEBUG] CheckExp: 70 +[DEBUG] visitUnaryExp: 70 +[DEBUG] visitPrimaryExp: 70 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 71 +[DEBUG] visitPrimaryExp: 71 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 71 +[DEBUG] visitUnaryExp: 71 +[DEBUG] visitPrimaryExp: 71 +完全索引,返回元素类型 +[DEBUG] CheckExp: 71 +[DEBUG] visitUnaryExp: 71 +[DEBUG] visitPrimaryExp: 71 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 72 +[DEBUG] visitPrimaryExp: 72 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 72 +[DEBUG] visitUnaryExp: 72 +[DEBUG] visitPrimaryExp: 72 +完全索引,返回元素类型 +[DEBUG] CheckExp: 72 +[DEBUG] visitUnaryExp: 72 +[DEBUG] visitPrimaryExp: 72 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 73 +[DEBUG] visitPrimaryExp: 73 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 73 +[DEBUG] visitUnaryExp: 73 +[DEBUG] visitPrimaryExp: 73 +完全索引,返回元素类型 +[DEBUG] CheckExp: 73 +[DEBUG] visitUnaryExp: 73 +[DEBUG] visitPrimaryExp: 73 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 74 +[DEBUG] visitPrimaryExp: 74 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 74 +[DEBUG] visitUnaryExp: 74 +[DEBUG] visitPrimaryExp: 74 +完全索引,返回元素类型 +[DEBUG] CheckExp: 74 +[DEBUG] visitUnaryExp: 74 +[DEBUG] visitPrimaryExp: 74 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 75 +[DEBUG] visitPrimaryExp: 75 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 75 +[DEBUG] visitUnaryExp: 75 +[DEBUG] visitPrimaryExp: 75 +完全索引,返回元素类型 +[DEBUG] CheckExp: 75 +[DEBUG] visitUnaryExp: 75 +[DEBUG] visitPrimaryExp: 75 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 76 +[DEBUG] visitPrimaryExp: 76 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 76 +[DEBUG] visitUnaryExp: 76 +[DEBUG] visitPrimaryExp: 76 +完全索引,返回元素类型 +[DEBUG] CheckExp: 76 +[DEBUG] visitUnaryExp: 76 +[DEBUG] visitPrimaryExp: 76 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 77 +[DEBUG] visitPrimaryExp: 77 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 77 +[DEBUG] visitUnaryExp: 77 +[DEBUG] visitPrimaryExp: 77 +完全索引,返回元素类型 +[DEBUG] CheckExp: 77 +[DEBUG] visitUnaryExp: 77 +[DEBUG] visitPrimaryExp: 77 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 78 +[DEBUG] visitPrimaryExp: 78 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 78 +[DEBUG] visitUnaryExp: 78 +[DEBUG] visitPrimaryExp: 78 +完全索引,返回元素类型 +[DEBUG] CheckExp: 78 +[DEBUG] visitUnaryExp: 78 +[DEBUG] visitPrimaryExp: 78 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 79 +[DEBUG] visitPrimaryExp: 79 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 79 +[DEBUG] visitUnaryExp: 79 +[DEBUG] visitPrimaryExp: 79 +完全索引,返回元素类型 +[DEBUG] CheckExp: 79 +[DEBUG] visitUnaryExp: 79 +[DEBUG] visitPrimaryExp: 79 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 80 +[DEBUG] visitPrimaryExp: 80 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 80 +[DEBUG] visitUnaryExp: 80 +[DEBUG] visitPrimaryExp: 80 +完全索引,返回元素类型 +[DEBUG] CheckExp: 80 +[DEBUG] visitUnaryExp: 80 +[DEBUG] visitPrimaryExp: 80 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 81 +[DEBUG] visitPrimaryExp: 81 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 81 +[DEBUG] visitUnaryExp: 81 +[DEBUG] visitPrimaryExp: 81 +完全索引,返回元素类型 +[DEBUG] CheckExp: 81 +[DEBUG] visitUnaryExp: 81 +[DEBUG] visitPrimaryExp: 81 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 82 +[DEBUG] visitPrimaryExp: 82 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 82 +[DEBUG] visitUnaryExp: 82 +[DEBUG] visitPrimaryExp: 82 +完全索引,返回元素类型 +[DEBUG] CheckExp: 82 +[DEBUG] visitUnaryExp: 82 +[DEBUG] visitPrimaryExp: 82 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 83 +[DEBUG] visitPrimaryExp: 83 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 83 +[DEBUG] visitUnaryExp: 83 +[DEBUG] visitPrimaryExp: 83 +完全索引,返回元素类型 +[DEBUG] CheckExp: 83 +[DEBUG] visitUnaryExp: 83 +[DEBUG] visitPrimaryExp: 83 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 84 +[DEBUG] visitPrimaryExp: 84 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 84 +[DEBUG] visitUnaryExp: 84 +[DEBUG] visitPrimaryExp: 84 +完全索引,返回元素类型 +[DEBUG] CheckExp: 84 +[DEBUG] visitUnaryExp: 84 +[DEBUG] visitPrimaryExp: 84 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 85 +[DEBUG] visitPrimaryExp: 85 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 85 +[DEBUG] visitUnaryExp: 85 +[DEBUG] visitPrimaryExp: 85 +完全索引,返回元素类型 +[DEBUG] CheckExp: 85 +[DEBUG] visitUnaryExp: 85 +[DEBUG] visitPrimaryExp: 85 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 86 +[DEBUG] visitPrimaryExp: 86 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 86 +[DEBUG] visitUnaryExp: 86 +[DEBUG] visitPrimaryExp: 86 +完全索引,返回元素类型 +[DEBUG] CheckExp: 86 +[DEBUG] visitUnaryExp: 86 +[DEBUG] visitPrimaryExp: 86 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 87 +[DEBUG] visitPrimaryExp: 87 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 87 +[DEBUG] visitUnaryExp: 87 +[DEBUG] visitPrimaryExp: 87 +完全索引,返回元素类型 +[DEBUG] CheckExp: 87 +[DEBUG] visitUnaryExp: 87 +[DEBUG] visitPrimaryExp: 87 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 88 +[DEBUG] visitPrimaryExp: 88 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 88 +[DEBUG] visitUnaryExp: 88 +[DEBUG] visitPrimaryExp: 88 +完全索引,返回元素类型 +[DEBUG] CheckExp: 88 +[DEBUG] visitUnaryExp: 88 +[DEBUG] visitPrimaryExp: 88 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 89 +[DEBUG] visitPrimaryExp: 89 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 89 +[DEBUG] visitUnaryExp: 89 +[DEBUG] visitPrimaryExp: 89 +完全索引,返回元素类型 +[DEBUG] CheckExp: 89 +[DEBUG] visitUnaryExp: 89 +[DEBUG] visitPrimaryExp: 89 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 90 +[DEBUG] visitPrimaryExp: 90 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 90 +[DEBUG] visitUnaryExp: 90 +[DEBUG] visitPrimaryExp: 90 +完全索引,返回元素类型 +[DEBUG] CheckExp: 90 +[DEBUG] visitUnaryExp: 90 +[DEBUG] visitPrimaryExp: 90 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 91 +[DEBUG] visitPrimaryExp: 91 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 91 +[DEBUG] visitUnaryExp: 91 +[DEBUG] visitPrimaryExp: 91 +完全索引,返回元素类型 +[DEBUG] CheckExp: 91 +[DEBUG] visitUnaryExp: 91 +[DEBUG] visitPrimaryExp: 91 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 92 +[DEBUG] visitPrimaryExp: 92 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 92 +[DEBUG] visitUnaryExp: 92 +[DEBUG] visitPrimaryExp: 92 +完全索引,返回元素类型 +[DEBUG] CheckExp: 92 +[DEBUG] visitUnaryExp: 92 +[DEBUG] visitPrimaryExp: 92 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 93 +[DEBUG] visitPrimaryExp: 93 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 93 +[DEBUG] visitUnaryExp: 93 +[DEBUG] visitPrimaryExp: 93 +完全索引,返回元素类型 +[DEBUG] CheckExp: 93 +[DEBUG] visitUnaryExp: 93 +[DEBUG] visitPrimaryExp: 93 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 94 +[DEBUG] visitPrimaryExp: 94 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 94 +[DEBUG] visitUnaryExp: 94 +[DEBUG] visitPrimaryExp: 94 +完全索引,返回元素类型 +[DEBUG] CheckExp: 94 +[DEBUG] visitUnaryExp: 94 +[DEBUG] visitPrimaryExp: 94 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 95 +[DEBUG] visitPrimaryExp: 95 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 95 +[DEBUG] visitUnaryExp: 95 +[DEBUG] visitPrimaryExp: 95 +完全索引,返回元素类型 +[DEBUG] CheckExp: 95 +[DEBUG] visitUnaryExp: 95 +[DEBUG] visitPrimaryExp: 95 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 96 +[DEBUG] visitPrimaryExp: 96 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 96 +[DEBUG] visitUnaryExp: 96 +[DEBUG] visitPrimaryExp: 96 +完全索引,返回元素类型 +[DEBUG] CheckExp: 96 +[DEBUG] visitUnaryExp: 96 +[DEBUG] visitPrimaryExp: 96 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 97 +[DEBUG] visitPrimaryExp: 97 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 97 +[DEBUG] visitUnaryExp: 97 +[DEBUG] visitPrimaryExp: 97 +完全索引,返回元素类型 +[DEBUG] CheckExp: 97 +[DEBUG] visitUnaryExp: 97 +[DEBUG] visitPrimaryExp: 97 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 98 +[DEBUG] visitPrimaryExp: 98 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 98 +[DEBUG] visitUnaryExp: 98 +[DEBUG] visitPrimaryExp: 98 +完全索引,返回元素类型 +[DEBUG] CheckExp: 98 +[DEBUG] visitUnaryExp: 98 +[DEBUG] visitPrimaryExp: 98 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 99 +[DEBUG] visitPrimaryExp: 99 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: 99 +[DEBUG] visitUnaryExp: 99 +[DEBUG] visitPrimaryExp: 99 +完全索引,返回元素类型 +[DEBUG] CheckExp: 99 +[DEBUG] visitUnaryExp: 99 +[DEBUG] visitPrimaryExp: 99 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x560d55a47c00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x560d55a47c00, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckVarDef: m base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored m with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: m type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: m +[DEBUG] visitPrimaryExp: m +SymbolTable::lookup: found m in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = m, sym->kind = 0 +绑定变量: m -> VarDefContext +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x560d55b23510, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 100 +[DEBUG] visitPrimaryExp: 100 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sum, sym->kind = 0 +绑定变量: sum -> VarDefContext +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x560d55a44580, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: sum+s[m] +[DEBUG] visitUnaryExp: sum +[DEBUG] visitPrimaryExp: sum +SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sum, sym->kind = 0 +绑定变量: sum -> VarDefContext +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x560d55a44580, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: s[m] +[DEBUG] visitPrimaryExp: s[m] +SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = s, sym->kind = 0 +绑定变量: s -> VarDefContext +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: m +[DEBUG] visitUnaryExp: m +[DEBUG] visitPrimaryExp: m +SymbolTable::lookup: found m in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = m, sym->kind = 0 +绑定变量: m -> VarDefContext +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x560d55b23510, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found m in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = m, sym->kind = 0 +绑定变量: m -> VarDefContext +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x560d55b23510, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: m+1 +[DEBUG] visitUnaryExp: m +[DEBUG] visitPrimaryExp: m +SymbolTable::lookup: found m in scope level 4, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = m, sym->kind = 0 +绑定变量: m -> VarDefContext +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x560d55b23510, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sum, sym->kind = 0 +绑定变量: sum -> VarDefContext +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x560d55a44580, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: sum%65535 +[DEBUG] visitUnaryExp: sum +[DEBUG] visitPrimaryExp: sum +SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sum, sym->kind = 0 +绑定变量: sum -> VarDefContext +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x560d55a44580, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 65535 +[DEBUG] visitPrimaryExp: 65535 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: sum +[DEBUG] visitUnaryExp: sum +[DEBUG] visitPrimaryExp: sum +SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sum, sym->kind = 0 +绑定变量: sum -> VarDefContext +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x560d55a44580, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 func has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: starttime() +[DEBUG] visitUnaryExp: starttime() +[DEBUG] 函数调用: starttime +[DEBUG] CheckFuncCall: starttime +SymbolTable::lookup: found starttime in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] CheckVarDef: loopcount base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: getint() +[DEBUG] visitUnaryExp: getint() +[DEBUG] 函数调用: getint +[DEBUG] CheckFuncCall: getint +SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored loopcount with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: loopcount type_kind: 1 is_array: 0 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putint(func(loopcount)) +[DEBUG] visitUnaryExp: putint(func(loopcount)) +[DEBUG] 函数调用: putint +[DEBUG] CheckFuncCall: putint +SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: func(loopcount) +[DEBUG] visitUnaryExp: func(loopcount) +[DEBUG] 函数调用: func +[DEBUG] CheckFuncCall: func +SymbolTable::lookup: found func in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: loopcount +[DEBUG] visitUnaryExp: loopcount +[DEBUG] visitPrimaryExp: loopcount +SymbolTable::lookup: found loopcount in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = loopcount, sym->kind = 0 +绑定变量: loopcount -> VarDefContext +CheckLValue 绑定变量: loopcount, sym->kind: 0, sym->var_def_ctx: 0x560d55b2c140, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(10) +[DEBUG] visitUnaryExp: putch(10) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: stoptime() +[DEBUG] visitUnaryExp: stoptime() +[DEBUG] 函数调用: stoptime +[DEBUG] CheckFuncCall: stoptime +SymbolTable::lookup: found stoptime in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 +[DEBUG IRGEN] visitCompUnit +[DEBUG IRGEN] visitFuncDef: func +[DEBUG] visitFuncDef: 创建函数 func,返回类型: int,参数数量: 1 +[DEBUG] visitFuncDef: 函数对象地址: 0x560d55b3f320 +[DEBUG] visitFuncDef: 为函数 func 添加参数 n,类型: int32 +[DEBUG] visitFuncDef: 参数 n 处理完成 +[DEBUG] visitFuncDef: 开始生成函数体 +[DEBUG IRGEN] visitBlock: {intsum=0;inti=200;intj=0;ints[100];intm=0;while(m<100){s[m]=0;m=m+1;}while(j1){s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}j=j+1;intm=0;while(m<100){sum=sum+s[m];m=m+1;}sum=sum%65535;}returnsum;} +[DEBUG IRGEN] visitBlockItem: intsum=0; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: sum +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 sum +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 0 +[DEBUG IRGEN] visitAddExp: 0 +[DEBUG IRGEN] visitMulExp: 0 +[DEBUG IRGEN] visitPrimaryExp: 0 +[DEBUG] visitPrimaryExp +[DEBUG] EvalExpr: success, result = 0x560d55b3f750 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: inti=200; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: i +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 i +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 200 +[DEBUG IRGEN] visitAddExp: 200 +[DEBUG IRGEN] visitMulExp: 200 +[DEBUG IRGEN] visitPrimaryExp: 200 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 200 created as 0x560d55b3b200 +[DEBUG] EvalExpr: success, result = 0x560d55b3b200 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: intj=0; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: j +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 j +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 0 +[DEBUG IRGEN] visitAddExp: 0 +[DEBUG IRGEN] visitMulExp: 0 +[DEBUG IRGEN] visitPrimaryExp: 0 +[DEBUG] visitPrimaryExp +[DEBUG] EvalExpr: success, result = 0x560d55b3f750 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: ints[100]; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: s +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 s +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: intm=0; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: m +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 m +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 0 +[DEBUG IRGEN] visitAddExp: 0 +[DEBUG IRGEN] visitMulExp: 0 +[DEBUG IRGEN] visitPrimaryExp: 0 +[DEBUG] visitPrimaryExp +[DEBUG] EvalExpr: success, result = 0x560d55b3f750 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: while(m<100){s[m]=0;m=m+1;} +[DEBUG IRGEN] visitStmt: while(m<100){s[m]=0;m=m+1;} +[DEBUG IRGEN] HandleWhileStmt: while(m<100){s[m]=0;m=m+1;} +[DEBUG WHILE] Current insert block before while: entry +[DEBUG WHILE] condBlock: while.cond +[DEBUG WHILE] bodyBlock: while.body +[DEBUG WHILE] exitBlock: while.exit +[DEBUG WHILE] Adding br to condBlock from current block +[DEBUG WHILE] loopStack size: 1 +[DEBUG WHILE] Generating condition in block: while.cond +[DEBUG IRGEN] visitAddExp: m +[DEBUG IRGEN] visitMulExp: m +[DEBUG IRGEN] visitPrimaryExp: m +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: m +[DEBUG IRGEN] visitAddExp: 100 +[DEBUG IRGEN] visitMulExp: 100 +[DEBUG IRGEN] visitPrimaryExp: 100 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 100 created as 0x560d55b651b0 +[DEBUG] visitRelExp: left=0x560d55b65130, type=int, right=0x560d55b651b0, type=int +[DEBUG WHILE] condBlock has terminator: 1 +[DEBUG WHILE] Generating body in block: while.body +[DEBUG IRGEN] visitStmt: {s[m]=0;m=m+1;} +[DEBUG IRGEN] visitBlock: {s[m]=0;m=m+1;} +[DEBUG IRGEN] visitBlockItem: s[m]=0; +[DEBUG IRGEN] visitStmt: s[m]=0; +[DEBUG IRGEN] HandleAssignStmt: s[m]=0; +[DEBUG IRGEN] EvalExpr: 0 +[DEBUG IRGEN] visitAddExp: 0 +[DEBUG IRGEN] visitMulExp: 0 +[DEBUG IRGEN] visitPrimaryExp: 0 +[DEBUG] visitPrimaryExp +[DEBUG] EvalExpr: success, result = 0x560d55b3f750 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: m +[DEBUG IRGEN] visitAddExp: m +[DEBUG IRGEN] visitMulExp: m +[DEBUG IRGEN] visitPrimaryExp: m +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: m +[DEBUG] EvalExpr: success, result = 0x560d55b65420 +[DEBUG] current insert block: while.body +[DEBUG IRGEN] visitBlockItem: m=m+1; +[DEBUG IRGEN] visitStmt: m=m+1; +[DEBUG IRGEN] HandleAssignStmt: m=m+1; +[DEBUG IRGEN] EvalExpr: m+1 +[DEBUG IRGEN] visitAddExp: m+1 +[DEBUG IRGEN] visitAddExp: m +[DEBUG IRGEN] visitMulExp: m +[DEBUG IRGEN] visitPrimaryExp: m +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: m +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x560d55b656a0 +[DEBUG] visitAddExp: left=0x560d55b65620, type=int, right=0x560d55b656a0, type=int +[DEBUG] EvalExpr: success, result = 0x560d55b65700 +[DEBUG] HandleAssignStmt: assigning to m +[DEBUG] HandleAssignStmt: found in storage_map_ for m, ptr = 0x560d55b64e00 +[DEBUG] HandleAssignStmt: scalar assignment to m, ptr = 0x560d55b64e00, rhs = 0x560d55b65700 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: while.body +[DEBUG WHILE] body terminated: 0 +[DEBUG WHILE] Adding br to condBlock from body +[DEBUG WHILE] bodyBlock has terminator: 1 +[DEBUG WHILE] loopStack size after pop: 0 +[DEBUG WHILE] Setting insert point to exitBlock: while.exit +[DEBUG WHILE] exitBlock has terminator before return: 0 +[DEBUG] current insert block: while.exit +[DEBUG IRGEN] visitBlockItem: while(j1){s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}j=j+1;intm=0;while(m<100){sum=sum+s[m];m=m+1;}sum=sum%65535;} +[DEBUG IRGEN] visitStmt: while(j1){s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}j=j+1;intm=0;while(m<100){sum=sum+s[m];m=m+1;}sum=sum%65535;} +[DEBUG IRGEN] HandleWhileStmt: while(j1){s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}j=j+1;intm=0;while(m<100){sum=sum+s[m];m=m+1;}sum=sum%65535;} +[DEBUG WHILE] Current insert block before while: while.exit +[DEBUG WHILE] condBlock: while.cond +[DEBUG WHILE] bodyBlock: while.body +[DEBUG WHILE] exitBlock: while.exit +[DEBUG WHILE] Adding br to condBlock from current block +[DEBUG WHILE] loopStack size: 1 +[DEBUG WHILE] Generating condition in block: while.cond +[DEBUG IRGEN] visitAddExp: j +[DEBUG IRGEN] visitMulExp: j +[DEBUG IRGEN] visitPrimaryExp: j +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: j +[DEBUG IRGEN] visitAddExp: n +[DEBUG IRGEN] visitMulExp: n +[DEBUG IRGEN] visitPrimaryExp: n +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: n +[DEBUG] visitRelExp: left=0x560d55b659f0, type=int, right=0x560d55b65e90, type=int +[DEBUG WHILE] condBlock has terminator: 1 +[DEBUG WHILE] Generating body in block: while.body +[DEBUG IRGEN] visitStmt: {if(i>1){s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}j=j+1;intm=0;while(m<100){sum=sum+s[m];m=m+1;}sum=sum%65535;} +[DEBUG IRGEN] visitBlock: {if(i>1){s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}j=j+1;intm=0;while(m<100){sum=sum+s[m];m=m+1;}sum=sum%65535;} +[DEBUG IRGEN] visitBlockItem: if(i>1){s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>1){s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>1){s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: while.body +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x560d55b656a0 +[DEBUG] visitRelExp: left=0x560d55b66130, type=int, right=0x560d55b656a0, type=int +[DEBUG IF] Creating condbr: %t115 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[1]=1; +[DEBUG IRGEN] visitStmt: s[1]=1; +[DEBUG IRGEN] HandleAssignStmt: s[1]=1; +[DEBUG IRGEN] EvalExpr: 1 +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x560d55b656a0 +[DEBUG] EvalExpr: success, result = 0x560d55b656a0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 1 +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x560d55b656a0 +[DEBUG] EvalExpr: success, result = 0x560d55b656a0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 2 +[DEBUG IRGEN] visitMulExp: 2 +[DEBUG IRGEN] visitPrimaryExp: 2 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 2 created as 0x560d55b65990 +[DEBUG] visitRelExp: left=0x560d55b66a20, type=int, right=0x560d55b65990, type=int +[DEBUG IF] Creating condbr: %t118 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[2]=2; +[DEBUG IRGEN] visitStmt: s[2]=2; +[DEBUG IRGEN] HandleAssignStmt: s[2]=2; +[DEBUG IRGEN] EvalExpr: 2 +[DEBUG IRGEN] visitAddExp: 2 +[DEBUG IRGEN] visitMulExp: 2 +[DEBUG IRGEN] visitPrimaryExp: 2 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 2 created as 0x560d55b65990 +[DEBUG] EvalExpr: success, result = 0x560d55b65990 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 2 +[DEBUG IRGEN] visitAddExp: 2 +[DEBUG IRGEN] visitMulExp: 2 +[DEBUG IRGEN] visitPrimaryExp: 2 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 2 created as 0x560d55b65990 +[DEBUG] EvalExpr: success, result = 0x560d55b65990 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 3 +[DEBUG IRGEN] visitMulExp: 3 +[DEBUG IRGEN] visitPrimaryExp: 3 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 3 created as 0x560d55b66cb0 +[DEBUG] visitRelExp: left=0x560d55b67120, type=int, right=0x560d55b66cb0, type=int +[DEBUG IF] Creating condbr: %t121 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[3]=3; +[DEBUG IRGEN] visitStmt: s[3]=3; +[DEBUG IRGEN] HandleAssignStmt: s[3]=3; +[DEBUG IRGEN] EvalExpr: 3 +[DEBUG IRGEN] visitAddExp: 3 +[DEBUG IRGEN] visitMulExp: 3 +[DEBUG IRGEN] visitPrimaryExp: 3 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 3 created as 0x560d55b66cb0 +[DEBUG] EvalExpr: success, result = 0x560d55b66cb0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 3 +[DEBUG IRGEN] visitAddExp: 3 +[DEBUG IRGEN] visitMulExp: 3 +[DEBUG IRGEN] visitPrimaryExp: 3 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 3 created as 0x560d55b66cb0 +[DEBUG] EvalExpr: success, result = 0x560d55b66cb0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 4 +[DEBUG IRGEN] visitMulExp: 4 +[DEBUG IRGEN] visitPrimaryExp: 4 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 4 created as 0x560d55b67400 +[DEBUG] visitRelExp: left=0x560d55b67790, type=int, right=0x560d55b67400, type=int +[DEBUG IF] Creating condbr: %t124 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[4]=4; +[DEBUG IRGEN] visitStmt: s[4]=4; +[DEBUG IRGEN] HandleAssignStmt: s[4]=4; +[DEBUG IRGEN] EvalExpr: 4 +[DEBUG IRGEN] visitAddExp: 4 +[DEBUG IRGEN] visitMulExp: 4 +[DEBUG IRGEN] visitPrimaryExp: 4 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 4 created as 0x560d55b67400 +[DEBUG] EvalExpr: success, result = 0x560d55b67400 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 4 +[DEBUG IRGEN] visitAddExp: 4 +[DEBUG IRGEN] visitMulExp: 4 +[DEBUG IRGEN] visitPrimaryExp: 4 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 4 created as 0x560d55b67400 +[DEBUG] EvalExpr: success, result = 0x560d55b67400 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 5 +[DEBUG IRGEN] visitMulExp: 5 +[DEBUG IRGEN] visitPrimaryExp: 5 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 5 created as 0x560d55b67b40 +[DEBUG] visitRelExp: left=0x560d55b67fa0, type=int, right=0x560d55b67b40, type=int +[DEBUG IF] Creating condbr: %t127 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[5]=5; +[DEBUG IRGEN] visitStmt: s[5]=5; +[DEBUG IRGEN] HandleAssignStmt: s[5]=5; +[DEBUG IRGEN] EvalExpr: 5 +[DEBUG IRGEN] visitAddExp: 5 +[DEBUG IRGEN] visitMulExp: 5 +[DEBUG IRGEN] visitPrimaryExp: 5 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 5 created as 0x560d55b67b40 +[DEBUG] EvalExpr: success, result = 0x560d55b67b40 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 5 +[DEBUG IRGEN] visitAddExp: 5 +[DEBUG IRGEN] visitMulExp: 5 +[DEBUG IRGEN] visitPrimaryExp: 5 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 5 created as 0x560d55b67b40 +[DEBUG] EvalExpr: success, result = 0x560d55b67b40 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 6 +[DEBUG IRGEN] visitMulExp: 6 +[DEBUG IRGEN] visitPrimaryExp: 6 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 6 created as 0x560d55b68280 +[DEBUG] visitRelExp: left=0x560d55b685f0, type=int, right=0x560d55b68280, type=int +[DEBUG IF] Creating condbr: %t130 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[6]=6; +[DEBUG IRGEN] visitStmt: s[6]=6; +[DEBUG IRGEN] HandleAssignStmt: s[6]=6; +[DEBUG IRGEN] EvalExpr: 6 +[DEBUG IRGEN] visitAddExp: 6 +[DEBUG IRGEN] visitMulExp: 6 +[DEBUG IRGEN] visitPrimaryExp: 6 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 6 created as 0x560d55b68280 +[DEBUG] EvalExpr: success, result = 0x560d55b68280 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 6 +[DEBUG IRGEN] visitAddExp: 6 +[DEBUG IRGEN] visitMulExp: 6 +[DEBUG IRGEN] visitPrimaryExp: 6 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 6 created as 0x560d55b68280 +[DEBUG] EvalExpr: success, result = 0x560d55b68280 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 7 +[DEBUG IRGEN] visitMulExp: 7 +[DEBUG IRGEN] visitPrimaryExp: 7 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 7 created as 0x560d55b688d0 +[DEBUG] visitRelExp: left=0x560d55b68cd0, type=int, right=0x560d55b688d0, type=int +[DEBUG IF] Creating condbr: %t133 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[7]=7; +[DEBUG IRGEN] visitStmt: s[7]=7; +[DEBUG IRGEN] HandleAssignStmt: s[7]=7; +[DEBUG IRGEN] EvalExpr: 7 +[DEBUG IRGEN] visitAddExp: 7 +[DEBUG IRGEN] visitMulExp: 7 +[DEBUG IRGEN] visitPrimaryExp: 7 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 7 created as 0x560d55b688d0 +[DEBUG] EvalExpr: success, result = 0x560d55b688d0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 7 +[DEBUG IRGEN] visitAddExp: 7 +[DEBUG IRGEN] visitMulExp: 7 +[DEBUG IRGEN] visitPrimaryExp: 7 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 7 created as 0x560d55b688d0 +[DEBUG] EvalExpr: success, result = 0x560d55b688d0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 8 +[DEBUG IRGEN] visitMulExp: 8 +[DEBUG IRGEN] visitPrimaryExp: 8 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 8 created as 0x560d55b68fb0 +[DEBUG] visitRelExp: left=0x560d55b693b0, type=int, right=0x560d55b68fb0, type=int +[DEBUG IF] Creating condbr: %t136 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[8]=8; +[DEBUG IRGEN] visitStmt: s[8]=8; +[DEBUG IRGEN] HandleAssignStmt: s[8]=8; +[DEBUG IRGEN] EvalExpr: 8 +[DEBUG IRGEN] visitAddExp: 8 +[DEBUG IRGEN] visitMulExp: 8 +[DEBUG IRGEN] visitPrimaryExp: 8 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 8 created as 0x560d55b68fb0 +[DEBUG] EvalExpr: success, result = 0x560d55b68fb0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 8 +[DEBUG IRGEN] visitAddExp: 8 +[DEBUG IRGEN] visitMulExp: 8 +[DEBUG IRGEN] visitPrimaryExp: 8 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 8 created as 0x560d55b68fb0 +[DEBUG] EvalExpr: success, result = 0x560d55b68fb0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 9 +[DEBUG IRGEN] visitMulExp: 9 +[DEBUG IRGEN] visitPrimaryExp: 9 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 9 created as 0x560d55b69820 +[DEBUG] visitRelExp: left=0x560d55b69db0, type=int, right=0x560d55b69820, type=int +[DEBUG IF] Creating condbr: %t139 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[9]=9; +[DEBUG IRGEN] visitStmt: s[9]=9; +[DEBUG IRGEN] HandleAssignStmt: s[9]=9; +[DEBUG IRGEN] EvalExpr: 9 +[DEBUG IRGEN] visitAddExp: 9 +[DEBUG IRGEN] visitMulExp: 9 +[DEBUG IRGEN] visitPrimaryExp: 9 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 9 created as 0x560d55b69820 +[DEBUG] EvalExpr: success, result = 0x560d55b69820 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 9 +[DEBUG IRGEN] visitAddExp: 9 +[DEBUG IRGEN] visitMulExp: 9 +[DEBUG IRGEN] visitPrimaryExp: 9 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 9 created as 0x560d55b69820 +[DEBUG] EvalExpr: success, result = 0x560d55b69820 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 10 +[DEBUG IRGEN] visitMulExp: 10 +[DEBUG IRGEN] visitPrimaryExp: 10 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 10 created as 0x560d55b6a090 +[DEBUG] visitRelExp: left=0x560d55b6a490, type=int, right=0x560d55b6a090, type=int +[DEBUG IF] Creating condbr: %t142 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[10]=10; +[DEBUG IRGEN] visitStmt: s[10]=10; +[DEBUG IRGEN] HandleAssignStmt: s[10]=10; +[DEBUG IRGEN] EvalExpr: 10 +[DEBUG IRGEN] visitAddExp: 10 +[DEBUG IRGEN] visitMulExp: 10 +[DEBUG IRGEN] visitPrimaryExp: 10 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 10 created as 0x560d55b6a090 +[DEBUG] EvalExpr: success, result = 0x560d55b6a090 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 10 +[DEBUG IRGEN] visitAddExp: 10 +[DEBUG IRGEN] visitMulExp: 10 +[DEBUG IRGEN] visitPrimaryExp: 10 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 10 created as 0x560d55b6a090 +[DEBUG] EvalExpr: success, result = 0x560d55b6a090 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 11 +[DEBUG IRGEN] visitMulExp: 11 +[DEBUG IRGEN] visitPrimaryExp: 11 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 11 created as 0x560d55b6a770 +[DEBUG] visitRelExp: left=0x560d55b6ab70, type=int, right=0x560d55b6a770, type=int +[DEBUG IF] Creating condbr: %t145 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[11]=11; +[DEBUG IRGEN] visitStmt: s[11]=11; +[DEBUG IRGEN] HandleAssignStmt: s[11]=11; +[DEBUG IRGEN] EvalExpr: 11 +[DEBUG IRGEN] visitAddExp: 11 +[DEBUG IRGEN] visitMulExp: 11 +[DEBUG IRGEN] visitPrimaryExp: 11 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 11 created as 0x560d55b6a770 +[DEBUG] EvalExpr: success, result = 0x560d55b6a770 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 11 +[DEBUG IRGEN] visitAddExp: 11 +[DEBUG IRGEN] visitMulExp: 11 +[DEBUG IRGEN] visitPrimaryExp: 11 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 11 created as 0x560d55b6a770 +[DEBUG] EvalExpr: success, result = 0x560d55b6a770 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 12 +[DEBUG IRGEN] visitMulExp: 12 +[DEBUG IRGEN] visitPrimaryExp: 12 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 12 created as 0x560d55b6ae50 +[DEBUG] visitRelExp: left=0x560d55b6b1e0, type=int, right=0x560d55b6ae50, type=int +[DEBUG IF] Creating condbr: %t148 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[12]=12; +[DEBUG IRGEN] visitStmt: s[12]=12; +[DEBUG IRGEN] HandleAssignStmt: s[12]=12; +[DEBUG IRGEN] EvalExpr: 12 +[DEBUG IRGEN] visitAddExp: 12 +[DEBUG IRGEN] visitMulExp: 12 +[DEBUG IRGEN] visitPrimaryExp: 12 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 12 created as 0x560d55b6ae50 +[DEBUG] EvalExpr: success, result = 0x560d55b6ae50 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 12 +[DEBUG IRGEN] visitAddExp: 12 +[DEBUG IRGEN] visitMulExp: 12 +[DEBUG IRGEN] visitPrimaryExp: 12 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 12 created as 0x560d55b6ae50 +[DEBUG] EvalExpr: success, result = 0x560d55b6ae50 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 13 +[DEBUG IRGEN] visitMulExp: 13 +[DEBUG IRGEN] visitPrimaryExp: 13 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 13 created as 0x560d55b6b4c0 +[DEBUG] visitRelExp: left=0x560d55b6b8c0, type=int, right=0x560d55b6b4c0, type=int +[DEBUG IF] Creating condbr: %t151 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[13]=13; +[DEBUG IRGEN] visitStmt: s[13]=13; +[DEBUG IRGEN] HandleAssignStmt: s[13]=13; +[DEBUG IRGEN] EvalExpr: 13 +[DEBUG IRGEN] visitAddExp: 13 +[DEBUG IRGEN] visitMulExp: 13 +[DEBUG IRGEN] visitPrimaryExp: 13 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 13 created as 0x560d55b6b4c0 +[DEBUG] EvalExpr: success, result = 0x560d55b6b4c0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 13 +[DEBUG IRGEN] visitAddExp: 13 +[DEBUG IRGEN] visitMulExp: 13 +[DEBUG IRGEN] visitPrimaryExp: 13 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 13 created as 0x560d55b6b4c0 +[DEBUG] EvalExpr: success, result = 0x560d55b6b4c0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 14 +[DEBUG IRGEN] visitMulExp: 14 +[DEBUG IRGEN] visitPrimaryExp: 14 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 14 created as 0x560d55b6bba0 +[DEBUG] visitRelExp: left=0x560d55b6bfa0, type=int, right=0x560d55b6bba0, type=int +[DEBUG IF] Creating condbr: %t154 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[14]=14; +[DEBUG IRGEN] visitStmt: s[14]=14; +[DEBUG IRGEN] HandleAssignStmt: s[14]=14; +[DEBUG IRGEN] EvalExpr: 14 +[DEBUG IRGEN] visitAddExp: 14 +[DEBUG IRGEN] visitMulExp: 14 +[DEBUG IRGEN] visitPrimaryExp: 14 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 14 created as 0x560d55b6bba0 +[DEBUG] EvalExpr: success, result = 0x560d55b6bba0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 14 +[DEBUG IRGEN] visitAddExp: 14 +[DEBUG IRGEN] visitMulExp: 14 +[DEBUG IRGEN] visitPrimaryExp: 14 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 14 created as 0x560d55b6bba0 +[DEBUG] EvalExpr: success, result = 0x560d55b6bba0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 15 +[DEBUG IRGEN] visitMulExp: 15 +[DEBUG IRGEN] visitPrimaryExp: 15 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 15 created as 0x560d55b6c280 +[DEBUG] visitRelExp: left=0x560d55b6c680, type=int, right=0x560d55b6c280, type=int +[DEBUG IF] Creating condbr: %t157 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[15]=15; +[DEBUG IRGEN] visitStmt: s[15]=15; +[DEBUG IRGEN] HandleAssignStmt: s[15]=15; +[DEBUG IRGEN] EvalExpr: 15 +[DEBUG IRGEN] visitAddExp: 15 +[DEBUG IRGEN] visitMulExp: 15 +[DEBUG IRGEN] visitPrimaryExp: 15 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 15 created as 0x560d55b6c280 +[DEBUG] EvalExpr: success, result = 0x560d55b6c280 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 15 +[DEBUG IRGEN] visitAddExp: 15 +[DEBUG IRGEN] visitMulExp: 15 +[DEBUG IRGEN] visitPrimaryExp: 15 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 15 created as 0x560d55b6c280 +[DEBUG] EvalExpr: success, result = 0x560d55b6c280 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 16 +[DEBUG IRGEN] visitMulExp: 16 +[DEBUG IRGEN] visitPrimaryExp: 16 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 16 created as 0x560d55b6c960 +[DEBUG] visitRelExp: left=0x560d55b6cd60, type=int, right=0x560d55b6c960, type=int +[DEBUG IF] Creating condbr: %t160 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[16]=16; +[DEBUG IRGEN] visitStmt: s[16]=16; +[DEBUG IRGEN] HandleAssignStmt: s[16]=16; +[DEBUG IRGEN] EvalExpr: 16 +[DEBUG IRGEN] visitAddExp: 16 +[DEBUG IRGEN] visitMulExp: 16 +[DEBUG IRGEN] visitPrimaryExp: 16 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 16 created as 0x560d55b6c960 +[DEBUG] EvalExpr: success, result = 0x560d55b6c960 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 16 +[DEBUG IRGEN] visitAddExp: 16 +[DEBUG IRGEN] visitMulExp: 16 +[DEBUG IRGEN] visitPrimaryExp: 16 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 16 created as 0x560d55b6c960 +[DEBUG] EvalExpr: success, result = 0x560d55b6c960 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 17 +[DEBUG IRGEN] visitMulExp: 17 +[DEBUG IRGEN] visitPrimaryExp: 17 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 17 created as 0x560d55b6d350 +[DEBUG] visitRelExp: left=0x560d55b6da60, type=int, right=0x560d55b6d350, type=int +[DEBUG IF] Creating condbr: %t163 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[17]=17; +[DEBUG IRGEN] visitStmt: s[17]=17; +[DEBUG IRGEN] HandleAssignStmt: s[17]=17; +[DEBUG IRGEN] EvalExpr: 17 +[DEBUG IRGEN] visitAddExp: 17 +[DEBUG IRGEN] visitMulExp: 17 +[DEBUG IRGEN] visitPrimaryExp: 17 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 17 created as 0x560d55b6d350 +[DEBUG] EvalExpr: success, result = 0x560d55b6d350 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 17 +[DEBUG IRGEN] visitAddExp: 17 +[DEBUG IRGEN] visitMulExp: 17 +[DEBUG IRGEN] visitPrimaryExp: 17 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 17 created as 0x560d55b6d350 +[DEBUG] EvalExpr: success, result = 0x560d55b6d350 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 18 +[DEBUG IRGEN] visitMulExp: 18 +[DEBUG IRGEN] visitPrimaryExp: 18 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 18 created as 0x560d55b6dd40 +[DEBUG] visitRelExp: left=0x560d55b6e140, type=int, right=0x560d55b6dd40, type=int +[DEBUG IF] Creating condbr: %t166 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[18]=18; +[DEBUG IRGEN] visitStmt: s[18]=18; +[DEBUG IRGEN] HandleAssignStmt: s[18]=18; +[DEBUG IRGEN] EvalExpr: 18 +[DEBUG IRGEN] visitAddExp: 18 +[DEBUG IRGEN] visitMulExp: 18 +[DEBUG IRGEN] visitPrimaryExp: 18 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 18 created as 0x560d55b6dd40 +[DEBUG] EvalExpr: success, result = 0x560d55b6dd40 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 18 +[DEBUG IRGEN] visitAddExp: 18 +[DEBUG IRGEN] visitMulExp: 18 +[DEBUG IRGEN] visitPrimaryExp: 18 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 18 created as 0x560d55b6dd40 +[DEBUG] EvalExpr: success, result = 0x560d55b6dd40 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 19 +[DEBUG IRGEN] visitMulExp: 19 +[DEBUG IRGEN] visitPrimaryExp: 19 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 19 created as 0x560d55b6e420 +[DEBUG] visitRelExp: left=0x560d55b6e820, type=int, right=0x560d55b6e420, type=int +[DEBUG IF] Creating condbr: %t169 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[19]=19; +[DEBUG IRGEN] visitStmt: s[19]=19; +[DEBUG IRGEN] HandleAssignStmt: s[19]=19; +[DEBUG IRGEN] EvalExpr: 19 +[DEBUG IRGEN] visitAddExp: 19 +[DEBUG IRGEN] visitMulExp: 19 +[DEBUG IRGEN] visitPrimaryExp: 19 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 19 created as 0x560d55b6e420 +[DEBUG] EvalExpr: success, result = 0x560d55b6e420 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 19 +[DEBUG IRGEN] visitAddExp: 19 +[DEBUG IRGEN] visitMulExp: 19 +[DEBUG IRGEN] visitPrimaryExp: 19 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 19 created as 0x560d55b6e420 +[DEBUG] EvalExpr: success, result = 0x560d55b6e420 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 20 +[DEBUG IRGEN] visitMulExp: 20 +[DEBUG IRGEN] visitPrimaryExp: 20 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 20 created as 0x560d55b6eb00 +[DEBUG] visitRelExp: left=0x560d55b6ef00, type=int, right=0x560d55b6eb00, type=int +[DEBUG IF] Creating condbr: %t172 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[20]=20; +[DEBUG IRGEN] visitStmt: s[20]=20; +[DEBUG IRGEN] HandleAssignStmt: s[20]=20; +[DEBUG IRGEN] EvalExpr: 20 +[DEBUG IRGEN] visitAddExp: 20 +[DEBUG IRGEN] visitMulExp: 20 +[DEBUG IRGEN] visitPrimaryExp: 20 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 20 created as 0x560d55b6eb00 +[DEBUG] EvalExpr: success, result = 0x560d55b6eb00 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 20 +[DEBUG IRGEN] visitAddExp: 20 +[DEBUG IRGEN] visitMulExp: 20 +[DEBUG IRGEN] visitPrimaryExp: 20 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 20 created as 0x560d55b6eb00 +[DEBUG] EvalExpr: success, result = 0x560d55b6eb00 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 21 +[DEBUG IRGEN] visitMulExp: 21 +[DEBUG IRGEN] visitPrimaryExp: 21 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 21 created as 0x560d55b6f1e0 +[DEBUG] visitRelExp: left=0x560d55b6f5e0, type=int, right=0x560d55b6f1e0, type=int +[DEBUG IF] Creating condbr: %t175 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[21]=21; +[DEBUG IRGEN] visitStmt: s[21]=21; +[DEBUG IRGEN] HandleAssignStmt: s[21]=21; +[DEBUG IRGEN] EvalExpr: 21 +[DEBUG IRGEN] visitAddExp: 21 +[DEBUG IRGEN] visitMulExp: 21 +[DEBUG IRGEN] visitPrimaryExp: 21 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 21 created as 0x560d55b6f1e0 +[DEBUG] EvalExpr: success, result = 0x560d55b6f1e0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 21 +[DEBUG IRGEN] visitAddExp: 21 +[DEBUG IRGEN] visitMulExp: 21 +[DEBUG IRGEN] visitPrimaryExp: 21 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 21 created as 0x560d55b6f1e0 +[DEBUG] EvalExpr: success, result = 0x560d55b6f1e0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 22 +[DEBUG IRGEN] visitMulExp: 22 +[DEBUG IRGEN] visitPrimaryExp: 22 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 22 created as 0x560d55b6f8c0 +[DEBUG] visitRelExp: left=0x560d55b6fcc0, type=int, right=0x560d55b6f8c0, type=int +[DEBUG IF] Creating condbr: %t178 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[22]=22; +[DEBUG IRGEN] visitStmt: s[22]=22; +[DEBUG IRGEN] HandleAssignStmt: s[22]=22; +[DEBUG IRGEN] EvalExpr: 22 +[DEBUG IRGEN] visitAddExp: 22 +[DEBUG IRGEN] visitMulExp: 22 +[DEBUG IRGEN] visitPrimaryExp: 22 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 22 created as 0x560d55b6f8c0 +[DEBUG] EvalExpr: success, result = 0x560d55b6f8c0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 22 +[DEBUG IRGEN] visitAddExp: 22 +[DEBUG IRGEN] visitMulExp: 22 +[DEBUG IRGEN] visitPrimaryExp: 22 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 22 created as 0x560d55b6f8c0 +[DEBUG] EvalExpr: success, result = 0x560d55b6f8c0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 23 +[DEBUG IRGEN] visitMulExp: 23 +[DEBUG IRGEN] visitPrimaryExp: 23 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 23 created as 0x560d55b6ffa0 +[DEBUG] visitRelExp: left=0x560d55b703a0, type=int, right=0x560d55b6ffa0, type=int +[DEBUG IF] Creating condbr: %t181 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[23]=23; +[DEBUG IRGEN] visitStmt: s[23]=23; +[DEBUG IRGEN] HandleAssignStmt: s[23]=23; +[DEBUG IRGEN] EvalExpr: 23 +[DEBUG IRGEN] visitAddExp: 23 +[DEBUG IRGEN] visitMulExp: 23 +[DEBUG IRGEN] visitPrimaryExp: 23 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 23 created as 0x560d55b6ffa0 +[DEBUG] EvalExpr: success, result = 0x560d55b6ffa0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 23 +[DEBUG IRGEN] visitAddExp: 23 +[DEBUG IRGEN] visitMulExp: 23 +[DEBUG IRGEN] visitPrimaryExp: 23 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 23 created as 0x560d55b6ffa0 +[DEBUG] EvalExpr: success, result = 0x560d55b6ffa0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 24 +[DEBUG IRGEN] visitMulExp: 24 +[DEBUG IRGEN] visitPrimaryExp: 24 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 24 created as 0x560d55b70680 +[DEBUG] visitRelExp: left=0x560d55b70a80, type=int, right=0x560d55b70680, type=int +[DEBUG IF] Creating condbr: %t184 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[24]=24; +[DEBUG IRGEN] visitStmt: s[24]=24; +[DEBUG IRGEN] HandleAssignStmt: s[24]=24; +[DEBUG IRGEN] EvalExpr: 24 +[DEBUG IRGEN] visitAddExp: 24 +[DEBUG IRGEN] visitMulExp: 24 +[DEBUG IRGEN] visitPrimaryExp: 24 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 24 created as 0x560d55b70680 +[DEBUG] EvalExpr: success, result = 0x560d55b70680 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 24 +[DEBUG IRGEN] visitAddExp: 24 +[DEBUG IRGEN] visitMulExp: 24 +[DEBUG IRGEN] visitPrimaryExp: 24 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 24 created as 0x560d55b70680 +[DEBUG] EvalExpr: success, result = 0x560d55b70680 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 25 +[DEBUG IRGEN] visitMulExp: 25 +[DEBUG IRGEN] visitPrimaryExp: 25 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 25 created as 0x560d55b70d60 +[DEBUG] visitRelExp: left=0x560d55b63170, type=int, right=0x560d55b70d60, type=int +[DEBUG IF] Creating condbr: %t187 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[25]=25; +[DEBUG IRGEN] visitStmt: s[25]=25; +[DEBUG IRGEN] HandleAssignStmt: s[25]=25; +[DEBUG IRGEN] EvalExpr: 25 +[DEBUG IRGEN] visitAddExp: 25 +[DEBUG IRGEN] visitMulExp: 25 +[DEBUG IRGEN] visitPrimaryExp: 25 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 25 created as 0x560d55b70d60 +[DEBUG] EvalExpr: success, result = 0x560d55b70d60 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 25 +[DEBUG IRGEN] visitAddExp: 25 +[DEBUG IRGEN] visitMulExp: 25 +[DEBUG IRGEN] visitPrimaryExp: 25 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 25 created as 0x560d55b70d60 +[DEBUG] EvalExpr: success, result = 0x560d55b70d60 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 26 +[DEBUG IRGEN] visitMulExp: 26 +[DEBUG IRGEN] visitPrimaryExp: 26 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 26 created as 0x560d55b63450 +[DEBUG] visitRelExp: left=0x560d55b63850, type=int, right=0x560d55b63450, type=int +[DEBUG IF] Creating condbr: %t190 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[26]=26; +[DEBUG IRGEN] visitStmt: s[26]=26; +[DEBUG IRGEN] HandleAssignStmt: s[26]=26; +[DEBUG IRGEN] EvalExpr: 26 +[DEBUG IRGEN] visitAddExp: 26 +[DEBUG IRGEN] visitMulExp: 26 +[DEBUG IRGEN] visitPrimaryExp: 26 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 26 created as 0x560d55b63450 +[DEBUG] EvalExpr: success, result = 0x560d55b63450 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 26 +[DEBUG IRGEN] visitAddExp: 26 +[DEBUG IRGEN] visitMulExp: 26 +[DEBUG IRGEN] visitPrimaryExp: 26 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 26 created as 0x560d55b63450 +[DEBUG] EvalExpr: success, result = 0x560d55b63450 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 27 +[DEBUG IRGEN] visitMulExp: 27 +[DEBUG IRGEN] visitPrimaryExp: 27 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 27 created as 0x560d55b63b30 +[DEBUG] visitRelExp: left=0x560d55b72b20, type=int, right=0x560d55b63b30, type=int +[DEBUG IF] Creating condbr: %t193 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[27]=27; +[DEBUG IRGEN] visitStmt: s[27]=27; +[DEBUG IRGEN] HandleAssignStmt: s[27]=27; +[DEBUG IRGEN] EvalExpr: 27 +[DEBUG IRGEN] visitAddExp: 27 +[DEBUG IRGEN] visitMulExp: 27 +[DEBUG IRGEN] visitPrimaryExp: 27 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 27 created as 0x560d55b63b30 +[DEBUG] EvalExpr: success, result = 0x560d55b63b30 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 27 +[DEBUG IRGEN] visitAddExp: 27 +[DEBUG IRGEN] visitMulExp: 27 +[DEBUG IRGEN] visitPrimaryExp: 27 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 27 created as 0x560d55b63b30 +[DEBUG] EvalExpr: success, result = 0x560d55b63b30 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 28 +[DEBUG IRGEN] visitMulExp: 28 +[DEBUG IRGEN] visitPrimaryExp: 28 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 28 created as 0x560d55b72e00 +[DEBUG] visitRelExp: left=0x560d55b733e0, type=int, right=0x560d55b72e00, type=int +[DEBUG IF] Creating condbr: %t196 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[28]=28; +[DEBUG IRGEN] visitStmt: s[28]=28; +[DEBUG IRGEN] HandleAssignStmt: s[28]=28; +[DEBUG IRGEN] EvalExpr: 28 +[DEBUG IRGEN] visitAddExp: 28 +[DEBUG IRGEN] visitMulExp: 28 +[DEBUG IRGEN] visitPrimaryExp: 28 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 28 created as 0x560d55b72e00 +[DEBUG] EvalExpr: success, result = 0x560d55b72e00 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 28 +[DEBUG IRGEN] visitAddExp: 28 +[DEBUG IRGEN] visitMulExp: 28 +[DEBUG IRGEN] visitPrimaryExp: 28 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 28 created as 0x560d55b72e00 +[DEBUG] EvalExpr: success, result = 0x560d55b72e00 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 29 +[DEBUG IRGEN] visitMulExp: 29 +[DEBUG IRGEN] visitPrimaryExp: 29 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 29 created as 0x560d55b736c0 +[DEBUG] visitRelExp: left=0x560d55b73ac0, type=int, right=0x560d55b736c0, type=int +[DEBUG IF] Creating condbr: %t199 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[29]=29; +[DEBUG IRGEN] visitStmt: s[29]=29; +[DEBUG IRGEN] HandleAssignStmt: s[29]=29; +[DEBUG IRGEN] EvalExpr: 29 +[DEBUG IRGEN] visitAddExp: 29 +[DEBUG IRGEN] visitMulExp: 29 +[DEBUG IRGEN] visitPrimaryExp: 29 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 29 created as 0x560d55b736c0 +[DEBUG] EvalExpr: success, result = 0x560d55b736c0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 29 +[DEBUG IRGEN] visitAddExp: 29 +[DEBUG IRGEN] visitMulExp: 29 +[DEBUG IRGEN] visitPrimaryExp: 29 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 29 created as 0x560d55b736c0 +[DEBUG] EvalExpr: success, result = 0x560d55b736c0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 30 +[DEBUG IRGEN] visitMulExp: 30 +[DEBUG IRGEN] visitPrimaryExp: 30 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 30 created as 0x560d55b73da0 +[DEBUG] visitRelExp: left=0x560d55b745b0, type=int, right=0x560d55b73da0, type=int +[DEBUG IF] Creating condbr: %t202 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[30]=30; +[DEBUG IRGEN] visitStmt: s[30]=30; +[DEBUG IRGEN] HandleAssignStmt: s[30]=30; +[DEBUG IRGEN] EvalExpr: 30 +[DEBUG IRGEN] visitAddExp: 30 +[DEBUG IRGEN] visitMulExp: 30 +[DEBUG IRGEN] visitPrimaryExp: 30 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 30 created as 0x560d55b73da0 +[DEBUG] EvalExpr: success, result = 0x560d55b73da0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 30 +[DEBUG IRGEN] visitAddExp: 30 +[DEBUG IRGEN] visitMulExp: 30 +[DEBUG IRGEN] visitPrimaryExp: 30 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 30 created as 0x560d55b73da0 +[DEBUG] EvalExpr: success, result = 0x560d55b73da0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 31 +[DEBUG IRGEN] visitMulExp: 31 +[DEBUG IRGEN] visitPrimaryExp: 31 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 31 created as 0x560d55b74890 +[DEBUG] visitRelExp: left=0x560d55b74c90, type=int, right=0x560d55b74890, type=int +[DEBUG IF] Creating condbr: %t205 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[31]=31; +[DEBUG IRGEN] visitStmt: s[31]=31; +[DEBUG IRGEN] HandleAssignStmt: s[31]=31; +[DEBUG IRGEN] EvalExpr: 31 +[DEBUG IRGEN] visitAddExp: 31 +[DEBUG IRGEN] visitMulExp: 31 +[DEBUG IRGEN] visitPrimaryExp: 31 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 31 created as 0x560d55b74890 +[DEBUG] EvalExpr: success, result = 0x560d55b74890 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 31 +[DEBUG IRGEN] visitAddExp: 31 +[DEBUG IRGEN] visitMulExp: 31 +[DEBUG IRGEN] visitPrimaryExp: 31 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 31 created as 0x560d55b74890 +[DEBUG] EvalExpr: success, result = 0x560d55b74890 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 32 +[DEBUG IRGEN] visitMulExp: 32 +[DEBUG IRGEN] visitPrimaryExp: 32 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 32 created as 0x560d55b74f70 +[DEBUG] visitRelExp: left=0x560d55b75980, type=int, right=0x560d55b74f70, type=int +[DEBUG IF] Creating condbr: %t208 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[32]=32; +[DEBUG IRGEN] visitStmt: s[32]=32; +[DEBUG IRGEN] HandleAssignStmt: s[32]=32; +[DEBUG IRGEN] EvalExpr: 32 +[DEBUG IRGEN] visitAddExp: 32 +[DEBUG IRGEN] visitMulExp: 32 +[DEBUG IRGEN] visitPrimaryExp: 32 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 32 created as 0x560d55b74f70 +[DEBUG] EvalExpr: success, result = 0x560d55b74f70 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 32 +[DEBUG IRGEN] visitAddExp: 32 +[DEBUG IRGEN] visitMulExp: 32 +[DEBUG IRGEN] visitPrimaryExp: 32 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 32 created as 0x560d55b74f70 +[DEBUG] EvalExpr: success, result = 0x560d55b74f70 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 33 +[DEBUG IRGEN] visitMulExp: 33 +[DEBUG IRGEN] visitPrimaryExp: 33 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 33 created as 0x560d55b76270 +[DEBUG] visitRelExp: left=0x560d55b76670, type=int, right=0x560d55b76270, type=int +[DEBUG IF] Creating condbr: %t211 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[33]=33; +[DEBUG IRGEN] visitStmt: s[33]=33; +[DEBUG IRGEN] HandleAssignStmt: s[33]=33; +[DEBUG IRGEN] EvalExpr: 33 +[DEBUG IRGEN] visitAddExp: 33 +[DEBUG IRGEN] visitMulExp: 33 +[DEBUG IRGEN] visitPrimaryExp: 33 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 33 created as 0x560d55b76270 +[DEBUG] EvalExpr: success, result = 0x560d55b76270 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 33 +[DEBUG IRGEN] visitAddExp: 33 +[DEBUG IRGEN] visitMulExp: 33 +[DEBUG IRGEN] visitPrimaryExp: 33 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 33 created as 0x560d55b76270 +[DEBUG] EvalExpr: success, result = 0x560d55b76270 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 34 +[DEBUG IRGEN] visitMulExp: 34 +[DEBUG IRGEN] visitPrimaryExp: 34 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 34 created as 0x560d55b76950 +[DEBUG] visitRelExp: left=0x560d55b76d50, type=int, right=0x560d55b76950, type=int +[DEBUG IF] Creating condbr: %t214 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[34]=34; +[DEBUG IRGEN] visitStmt: s[34]=34; +[DEBUG IRGEN] HandleAssignStmt: s[34]=34; +[DEBUG IRGEN] EvalExpr: 34 +[DEBUG IRGEN] visitAddExp: 34 +[DEBUG IRGEN] visitMulExp: 34 +[DEBUG IRGEN] visitPrimaryExp: 34 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 34 created as 0x560d55b76950 +[DEBUG] EvalExpr: success, result = 0x560d55b76950 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 34 +[DEBUG IRGEN] visitAddExp: 34 +[DEBUG IRGEN] visitMulExp: 34 +[DEBUG IRGEN] visitPrimaryExp: 34 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 34 created as 0x560d55b76950 +[DEBUG] EvalExpr: success, result = 0x560d55b76950 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 35 +[DEBUG IRGEN] visitMulExp: 35 +[DEBUG IRGEN] visitPrimaryExp: 35 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 35 created as 0x560d55b77030 +[DEBUG] visitRelExp: left=0x560d55b77430, type=int, right=0x560d55b77030, type=int +[DEBUG IF] Creating condbr: %t217 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[35]=35; +[DEBUG IRGEN] visitStmt: s[35]=35; +[DEBUG IRGEN] HandleAssignStmt: s[35]=35; +[DEBUG IRGEN] EvalExpr: 35 +[DEBUG IRGEN] visitAddExp: 35 +[DEBUG IRGEN] visitMulExp: 35 +[DEBUG IRGEN] visitPrimaryExp: 35 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 35 created as 0x560d55b77030 +[DEBUG] EvalExpr: success, result = 0x560d55b77030 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 35 +[DEBUG IRGEN] visitAddExp: 35 +[DEBUG IRGEN] visitMulExp: 35 +[DEBUG IRGEN] visitPrimaryExp: 35 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 35 created as 0x560d55b77030 +[DEBUG] EvalExpr: success, result = 0x560d55b77030 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 36 +[DEBUG IRGEN] visitMulExp: 36 +[DEBUG IRGEN] visitPrimaryExp: 36 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 36 created as 0x560d55b77710 +[DEBUG] visitRelExp: left=0x560d55b77b10, type=int, right=0x560d55b77710, type=int +[DEBUG IF] Creating condbr: %t220 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[36]=36; +[DEBUG IRGEN] visitStmt: s[36]=36; +[DEBUG IRGEN] HandleAssignStmt: s[36]=36; +[DEBUG IRGEN] EvalExpr: 36 +[DEBUG IRGEN] visitAddExp: 36 +[DEBUG IRGEN] visitMulExp: 36 +[DEBUG IRGEN] visitPrimaryExp: 36 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 36 created as 0x560d55b77710 +[DEBUG] EvalExpr: success, result = 0x560d55b77710 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 36 +[DEBUG IRGEN] visitAddExp: 36 +[DEBUG IRGEN] visitMulExp: 36 +[DEBUG IRGEN] visitPrimaryExp: 36 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 36 created as 0x560d55b77710 +[DEBUG] EvalExpr: success, result = 0x560d55b77710 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 37 +[DEBUG IRGEN] visitMulExp: 37 +[DEBUG IRGEN] visitPrimaryExp: 37 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 37 created as 0x560d55b77df0 +[DEBUG] visitRelExp: left=0x560d55b781f0, type=int, right=0x560d55b77df0, type=int +[DEBUG IF] Creating condbr: %t223 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[37]=37; +[DEBUG IRGEN] visitStmt: s[37]=37; +[DEBUG IRGEN] HandleAssignStmt: s[37]=37; +[DEBUG IRGEN] EvalExpr: 37 +[DEBUG IRGEN] visitAddExp: 37 +[DEBUG IRGEN] visitMulExp: 37 +[DEBUG IRGEN] visitPrimaryExp: 37 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 37 created as 0x560d55b77df0 +[DEBUG] EvalExpr: success, result = 0x560d55b77df0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 37 +[DEBUG IRGEN] visitAddExp: 37 +[DEBUG IRGEN] visitMulExp: 37 +[DEBUG IRGEN] visitPrimaryExp: 37 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 37 created as 0x560d55b77df0 +[DEBUG] EvalExpr: success, result = 0x560d55b77df0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 38 +[DEBUG IRGEN] visitMulExp: 38 +[DEBUG IRGEN] visitPrimaryExp: 38 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 38 created as 0x560d55b784d0 +[DEBUG] visitRelExp: left=0x560d55b788d0, type=int, right=0x560d55b784d0, type=int +[DEBUG IF] Creating condbr: %t226 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[38]=38; +[DEBUG IRGEN] visitStmt: s[38]=38; +[DEBUG IRGEN] HandleAssignStmt: s[38]=38; +[DEBUG IRGEN] EvalExpr: 38 +[DEBUG IRGEN] visitAddExp: 38 +[DEBUG IRGEN] visitMulExp: 38 +[DEBUG IRGEN] visitPrimaryExp: 38 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 38 created as 0x560d55b784d0 +[DEBUG] EvalExpr: success, result = 0x560d55b784d0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 38 +[DEBUG IRGEN] visitAddExp: 38 +[DEBUG IRGEN] visitMulExp: 38 +[DEBUG IRGEN] visitPrimaryExp: 38 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 38 created as 0x560d55b784d0 +[DEBUG] EvalExpr: success, result = 0x560d55b784d0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 39 +[DEBUG IRGEN] visitMulExp: 39 +[DEBUG IRGEN] visitPrimaryExp: 39 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 39 created as 0x560d55b78bb0 +[DEBUG] visitRelExp: left=0x560d55b78fb0, type=int, right=0x560d55b78bb0, type=int +[DEBUG IF] Creating condbr: %t229 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[39]=39; +[DEBUG IRGEN] visitStmt: s[39]=39; +[DEBUG IRGEN] HandleAssignStmt: s[39]=39; +[DEBUG IRGEN] EvalExpr: 39 +[DEBUG IRGEN] visitAddExp: 39 +[DEBUG IRGEN] visitMulExp: 39 +[DEBUG IRGEN] visitPrimaryExp: 39 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 39 created as 0x560d55b78bb0 +[DEBUG] EvalExpr: success, result = 0x560d55b78bb0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 39 +[DEBUG IRGEN] visitAddExp: 39 +[DEBUG IRGEN] visitMulExp: 39 +[DEBUG IRGEN] visitPrimaryExp: 39 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 39 created as 0x560d55b78bb0 +[DEBUG] EvalExpr: success, result = 0x560d55b78bb0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 40 +[DEBUG IRGEN] visitMulExp: 40 +[DEBUG IRGEN] visitPrimaryExp: 40 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 40 created as 0x560d55b79290 +[DEBUG] visitRelExp: left=0x560d55b79690, type=int, right=0x560d55b79290, type=int +[DEBUG IF] Creating condbr: %t232 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[40]=40; +[DEBUG IRGEN] visitStmt: s[40]=40; +[DEBUG IRGEN] HandleAssignStmt: s[40]=40; +[DEBUG IRGEN] EvalExpr: 40 +[DEBUG IRGEN] visitAddExp: 40 +[DEBUG IRGEN] visitMulExp: 40 +[DEBUG IRGEN] visitPrimaryExp: 40 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 40 created as 0x560d55b79290 +[DEBUG] EvalExpr: success, result = 0x560d55b79290 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 40 +[DEBUG IRGEN] visitAddExp: 40 +[DEBUG IRGEN] visitMulExp: 40 +[DEBUG IRGEN] visitPrimaryExp: 40 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 40 created as 0x560d55b79290 +[DEBUG] EvalExpr: success, result = 0x560d55b79290 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 41 +[DEBUG IRGEN] visitMulExp: 41 +[DEBUG IRGEN] visitPrimaryExp: 41 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 41 created as 0x560d55b79970 +[DEBUG] visitRelExp: left=0x560d55b79d70, type=int, right=0x560d55b79970, type=int +[DEBUG IF] Creating condbr: %t235 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[41]=41; +[DEBUG IRGEN] visitStmt: s[41]=41; +[DEBUG IRGEN] HandleAssignStmt: s[41]=41; +[DEBUG IRGEN] EvalExpr: 41 +[DEBUG IRGEN] visitAddExp: 41 +[DEBUG IRGEN] visitMulExp: 41 +[DEBUG IRGEN] visitPrimaryExp: 41 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 41 created as 0x560d55b79970 +[DEBUG] EvalExpr: success, result = 0x560d55b79970 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 41 +[DEBUG IRGEN] visitAddExp: 41 +[DEBUG IRGEN] visitMulExp: 41 +[DEBUG IRGEN] visitPrimaryExp: 41 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 41 created as 0x560d55b79970 +[DEBUG] EvalExpr: success, result = 0x560d55b79970 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 42 +[DEBUG IRGEN] visitMulExp: 42 +[DEBUG IRGEN] visitPrimaryExp: 42 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 42 created as 0x560d55b7a050 +[DEBUG] visitRelExp: left=0x560d55b7a450, type=int, right=0x560d55b7a050, type=int +[DEBUG IF] Creating condbr: %t238 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[42]=42; +[DEBUG IRGEN] visitStmt: s[42]=42; +[DEBUG IRGEN] HandleAssignStmt: s[42]=42; +[DEBUG IRGEN] EvalExpr: 42 +[DEBUG IRGEN] visitAddExp: 42 +[DEBUG IRGEN] visitMulExp: 42 +[DEBUG IRGEN] visitPrimaryExp: 42 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 42 created as 0x560d55b7a050 +[DEBUG] EvalExpr: success, result = 0x560d55b7a050 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 42 +[DEBUG IRGEN] visitAddExp: 42 +[DEBUG IRGEN] visitMulExp: 42 +[DEBUG IRGEN] visitPrimaryExp: 42 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 42 created as 0x560d55b7a050 +[DEBUG] EvalExpr: success, result = 0x560d55b7a050 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 43 +[DEBUG IRGEN] visitMulExp: 43 +[DEBUG IRGEN] visitPrimaryExp: 43 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 43 created as 0x560d55b7a730 +[DEBUG] visitRelExp: left=0x560d55b7ab30, type=int, right=0x560d55b7a730, type=int +[DEBUG IF] Creating condbr: %t241 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[43]=43; +[DEBUG IRGEN] visitStmt: s[43]=43; +[DEBUG IRGEN] HandleAssignStmt: s[43]=43; +[DEBUG IRGEN] EvalExpr: 43 +[DEBUG IRGEN] visitAddExp: 43 +[DEBUG IRGEN] visitMulExp: 43 +[DEBUG IRGEN] visitPrimaryExp: 43 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 43 created as 0x560d55b7a730 +[DEBUG] EvalExpr: success, result = 0x560d55b7a730 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 43 +[DEBUG IRGEN] visitAddExp: 43 +[DEBUG IRGEN] visitMulExp: 43 +[DEBUG IRGEN] visitPrimaryExp: 43 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 43 created as 0x560d55b7a730 +[DEBUG] EvalExpr: success, result = 0x560d55b7a730 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 44 +[DEBUG IRGEN] visitMulExp: 44 +[DEBUG IRGEN] visitPrimaryExp: 44 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 44 created as 0x560d55b7ae10 +[DEBUG] visitRelExp: left=0x560d55b7b210, type=int, right=0x560d55b7ae10, type=int +[DEBUG IF] Creating condbr: %t244 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[44]=44; +[DEBUG IRGEN] visitStmt: s[44]=44; +[DEBUG IRGEN] HandleAssignStmt: s[44]=44; +[DEBUG IRGEN] EvalExpr: 44 +[DEBUG IRGEN] visitAddExp: 44 +[DEBUG IRGEN] visitMulExp: 44 +[DEBUG IRGEN] visitPrimaryExp: 44 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 44 created as 0x560d55b7ae10 +[DEBUG] EvalExpr: success, result = 0x560d55b7ae10 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 44 +[DEBUG IRGEN] visitAddExp: 44 +[DEBUG IRGEN] visitMulExp: 44 +[DEBUG IRGEN] visitPrimaryExp: 44 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 44 created as 0x560d55b7ae10 +[DEBUG] EvalExpr: success, result = 0x560d55b7ae10 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 45 +[DEBUG IRGEN] visitMulExp: 45 +[DEBUG IRGEN] visitPrimaryExp: 45 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 45 created as 0x560d55b7b4f0 +[DEBUG] visitRelExp: left=0x560d55b7b8f0, type=int, right=0x560d55b7b4f0, type=int +[DEBUG IF] Creating condbr: %t247 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[45]=45; +[DEBUG IRGEN] visitStmt: s[45]=45; +[DEBUG IRGEN] HandleAssignStmt: s[45]=45; +[DEBUG IRGEN] EvalExpr: 45 +[DEBUG IRGEN] visitAddExp: 45 +[DEBUG IRGEN] visitMulExp: 45 +[DEBUG IRGEN] visitPrimaryExp: 45 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 45 created as 0x560d55b7b4f0 +[DEBUG] EvalExpr: success, result = 0x560d55b7b4f0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 45 +[DEBUG IRGEN] visitAddExp: 45 +[DEBUG IRGEN] visitMulExp: 45 +[DEBUG IRGEN] visitPrimaryExp: 45 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 45 created as 0x560d55b7b4f0 +[DEBUG] EvalExpr: success, result = 0x560d55b7b4f0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 46 +[DEBUG IRGEN] visitMulExp: 46 +[DEBUG IRGEN] visitPrimaryExp: 46 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 46 created as 0x560d55b7bbd0 +[DEBUG] visitRelExp: left=0x560d55b7bfd0, type=int, right=0x560d55b7bbd0, type=int +[DEBUG IF] Creating condbr: %t250 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[46]=46; +[DEBUG IRGEN] visitStmt: s[46]=46; +[DEBUG IRGEN] HandleAssignStmt: s[46]=46; +[DEBUG IRGEN] EvalExpr: 46 +[DEBUG IRGEN] visitAddExp: 46 +[DEBUG IRGEN] visitMulExp: 46 +[DEBUG IRGEN] visitPrimaryExp: 46 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 46 created as 0x560d55b7bbd0 +[DEBUG] EvalExpr: success, result = 0x560d55b7bbd0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 46 +[DEBUG IRGEN] visitAddExp: 46 +[DEBUG IRGEN] visitMulExp: 46 +[DEBUG IRGEN] visitPrimaryExp: 46 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 46 created as 0x560d55b7bbd0 +[DEBUG] EvalExpr: success, result = 0x560d55b7bbd0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 47 +[DEBUG IRGEN] visitMulExp: 47 +[DEBUG IRGEN] visitPrimaryExp: 47 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 47 created as 0x560d55b7c2b0 +[DEBUG] visitRelExp: left=0x560d55b7c6b0, type=int, right=0x560d55b7c2b0, type=int +[DEBUG IF] Creating condbr: %t253 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[47]=47; +[DEBUG IRGEN] visitStmt: s[47]=47; +[DEBUG IRGEN] HandleAssignStmt: s[47]=47; +[DEBUG IRGEN] EvalExpr: 47 +[DEBUG IRGEN] visitAddExp: 47 +[DEBUG IRGEN] visitMulExp: 47 +[DEBUG IRGEN] visitPrimaryExp: 47 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 47 created as 0x560d55b7c2b0 +[DEBUG] EvalExpr: success, result = 0x560d55b7c2b0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 47 +[DEBUG IRGEN] visitAddExp: 47 +[DEBUG IRGEN] visitMulExp: 47 +[DEBUG IRGEN] visitPrimaryExp: 47 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 47 created as 0x560d55b7c2b0 +[DEBUG] EvalExpr: success, result = 0x560d55b7c2b0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 48 +[DEBUG IRGEN] visitMulExp: 48 +[DEBUG IRGEN] visitPrimaryExp: 48 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 48 created as 0x560d55b7c990 +[DEBUG] visitRelExp: left=0x560d55b7cd90, type=int, right=0x560d55b7c990, type=int +[DEBUG IF] Creating condbr: %t256 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[48]=48; +[DEBUG IRGEN] visitStmt: s[48]=48; +[DEBUG IRGEN] HandleAssignStmt: s[48]=48; +[DEBUG IRGEN] EvalExpr: 48 +[DEBUG IRGEN] visitAddExp: 48 +[DEBUG IRGEN] visitMulExp: 48 +[DEBUG IRGEN] visitPrimaryExp: 48 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 48 created as 0x560d55b7c990 +[DEBUG] EvalExpr: success, result = 0x560d55b7c990 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 48 +[DEBUG IRGEN] visitAddExp: 48 +[DEBUG IRGEN] visitMulExp: 48 +[DEBUG IRGEN] visitPrimaryExp: 48 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 48 created as 0x560d55b7c990 +[DEBUG] EvalExpr: success, result = 0x560d55b7c990 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 49 +[DEBUG IRGEN] visitMulExp: 49 +[DEBUG IRGEN] visitPrimaryExp: 49 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 49 created as 0x560d55b7d070 +[DEBUG] visitRelExp: left=0x560d55b7d470, type=int, right=0x560d55b7d070, type=int +[DEBUG IF] Creating condbr: %t259 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[49]=49; +[DEBUG IRGEN] visitStmt: s[49]=49; +[DEBUG IRGEN] HandleAssignStmt: s[49]=49; +[DEBUG IRGEN] EvalExpr: 49 +[DEBUG IRGEN] visitAddExp: 49 +[DEBUG IRGEN] visitMulExp: 49 +[DEBUG IRGEN] visitPrimaryExp: 49 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 49 created as 0x560d55b7d070 +[DEBUG] EvalExpr: success, result = 0x560d55b7d070 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 49 +[DEBUG IRGEN] visitAddExp: 49 +[DEBUG IRGEN] visitMulExp: 49 +[DEBUG IRGEN] visitPrimaryExp: 49 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 49 created as 0x560d55b7d070 +[DEBUG] EvalExpr: success, result = 0x560d55b7d070 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 50 +[DEBUG IRGEN] visitMulExp: 50 +[DEBUG IRGEN] visitPrimaryExp: 50 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 50 created as 0x560d55b7d750 +[DEBUG] visitRelExp: left=0x560d55b7db50, type=int, right=0x560d55b7d750, type=int +[DEBUG IF] Creating condbr: %t262 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[50]=50; +[DEBUG IRGEN] visitStmt: s[50]=50; +[DEBUG IRGEN] HandleAssignStmt: s[50]=50; +[DEBUG IRGEN] EvalExpr: 50 +[DEBUG IRGEN] visitAddExp: 50 +[DEBUG IRGEN] visitMulExp: 50 +[DEBUG IRGEN] visitPrimaryExp: 50 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 50 created as 0x560d55b7d750 +[DEBUG] EvalExpr: success, result = 0x560d55b7d750 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 50 +[DEBUG IRGEN] visitAddExp: 50 +[DEBUG IRGEN] visitMulExp: 50 +[DEBUG IRGEN] visitPrimaryExp: 50 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 50 created as 0x560d55b7d750 +[DEBUG] EvalExpr: success, result = 0x560d55b7d750 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 51 +[DEBUG IRGEN] visitMulExp: 51 +[DEBUG IRGEN] visitPrimaryExp: 51 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 51 created as 0x560d55b7de30 +[DEBUG] visitRelExp: left=0x560d55b7e230, type=int, right=0x560d55b7de30, type=int +[DEBUG IF] Creating condbr: %t265 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[51]=51; +[DEBUG IRGEN] visitStmt: s[51]=51; +[DEBUG IRGEN] HandleAssignStmt: s[51]=51; +[DEBUG IRGEN] EvalExpr: 51 +[DEBUG IRGEN] visitAddExp: 51 +[DEBUG IRGEN] visitMulExp: 51 +[DEBUG IRGEN] visitPrimaryExp: 51 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 51 created as 0x560d55b7de30 +[DEBUG] EvalExpr: success, result = 0x560d55b7de30 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 51 +[DEBUG IRGEN] visitAddExp: 51 +[DEBUG IRGEN] visitMulExp: 51 +[DEBUG IRGEN] visitPrimaryExp: 51 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 51 created as 0x560d55b7de30 +[DEBUG] EvalExpr: success, result = 0x560d55b7de30 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 52 +[DEBUG IRGEN] visitMulExp: 52 +[DEBUG IRGEN] visitPrimaryExp: 52 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 52 created as 0x560d55b7e510 +[DEBUG] visitRelExp: left=0x560d55b7e910, type=int, right=0x560d55b7e510, type=int +[DEBUG IF] Creating condbr: %t268 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[52]=52; +[DEBUG IRGEN] visitStmt: s[52]=52; +[DEBUG IRGEN] HandleAssignStmt: s[52]=52; +[DEBUG IRGEN] EvalExpr: 52 +[DEBUG IRGEN] visitAddExp: 52 +[DEBUG IRGEN] visitMulExp: 52 +[DEBUG IRGEN] visitPrimaryExp: 52 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 52 created as 0x560d55b7e510 +[DEBUG] EvalExpr: success, result = 0x560d55b7e510 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 52 +[DEBUG IRGEN] visitAddExp: 52 +[DEBUG IRGEN] visitMulExp: 52 +[DEBUG IRGEN] visitPrimaryExp: 52 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 52 created as 0x560d55b7e510 +[DEBUG] EvalExpr: success, result = 0x560d55b7e510 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 53 +[DEBUG IRGEN] visitMulExp: 53 +[DEBUG IRGEN] visitPrimaryExp: 53 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 53 created as 0x560d55b7ebf0 +[DEBUG] visitRelExp: left=0x560d55b7eff0, type=int, right=0x560d55b7ebf0, type=int +[DEBUG IF] Creating condbr: %t271 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[53]=53; +[DEBUG IRGEN] visitStmt: s[53]=53; +[DEBUG IRGEN] HandleAssignStmt: s[53]=53; +[DEBUG IRGEN] EvalExpr: 53 +[DEBUG IRGEN] visitAddExp: 53 +[DEBUG IRGEN] visitMulExp: 53 +[DEBUG IRGEN] visitPrimaryExp: 53 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 53 created as 0x560d55b7ebf0 +[DEBUG] EvalExpr: success, result = 0x560d55b7ebf0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 53 +[DEBUG IRGEN] visitAddExp: 53 +[DEBUG IRGEN] visitMulExp: 53 +[DEBUG IRGEN] visitPrimaryExp: 53 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 53 created as 0x560d55b7ebf0 +[DEBUG] EvalExpr: success, result = 0x560d55b7ebf0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 54 +[DEBUG IRGEN] visitMulExp: 54 +[DEBUG IRGEN] visitPrimaryExp: 54 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 54 created as 0x560d55b7f2d0 +[DEBUG] visitRelExp: left=0x560d55b7f6d0, type=int, right=0x560d55b7f2d0, type=int +[DEBUG IF] Creating condbr: %t274 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[54]=54; +[DEBUG IRGEN] visitStmt: s[54]=54; +[DEBUG IRGEN] HandleAssignStmt: s[54]=54; +[DEBUG IRGEN] EvalExpr: 54 +[DEBUG IRGEN] visitAddExp: 54 +[DEBUG IRGEN] visitMulExp: 54 +[DEBUG IRGEN] visitPrimaryExp: 54 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 54 created as 0x560d55b7f2d0 +[DEBUG] EvalExpr: success, result = 0x560d55b7f2d0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 54 +[DEBUG IRGEN] visitAddExp: 54 +[DEBUG IRGEN] visitMulExp: 54 +[DEBUG IRGEN] visitPrimaryExp: 54 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 54 created as 0x560d55b7f2d0 +[DEBUG] EvalExpr: success, result = 0x560d55b7f2d0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 55 +[DEBUG IRGEN] visitMulExp: 55 +[DEBUG IRGEN] visitPrimaryExp: 55 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 55 created as 0x560d55b7f9b0 +[DEBUG] visitRelExp: left=0x560d55b7fdb0, type=int, right=0x560d55b7f9b0, type=int +[DEBUG IF] Creating condbr: %t277 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[55]=55; +[DEBUG IRGEN] visitStmt: s[55]=55; +[DEBUG IRGEN] HandleAssignStmt: s[55]=55; +[DEBUG IRGEN] EvalExpr: 55 +[DEBUG IRGEN] visitAddExp: 55 +[DEBUG IRGEN] visitMulExp: 55 +[DEBUG IRGEN] visitPrimaryExp: 55 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 55 created as 0x560d55b7f9b0 +[DEBUG] EvalExpr: success, result = 0x560d55b7f9b0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 55 +[DEBUG IRGEN] visitAddExp: 55 +[DEBUG IRGEN] visitMulExp: 55 +[DEBUG IRGEN] visitPrimaryExp: 55 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 55 created as 0x560d55b7f9b0 +[DEBUG] EvalExpr: success, result = 0x560d55b7f9b0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 56 +[DEBUG IRGEN] visitMulExp: 56 +[DEBUG IRGEN] visitPrimaryExp: 56 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 56 created as 0x560d55b80090 +[DEBUG] visitRelExp: left=0x560d55b80490, type=int, right=0x560d55b80090, type=int +[DEBUG IF] Creating condbr: %t280 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[56]=56; +[DEBUG IRGEN] visitStmt: s[56]=56; +[DEBUG IRGEN] HandleAssignStmt: s[56]=56; +[DEBUG IRGEN] EvalExpr: 56 +[DEBUG IRGEN] visitAddExp: 56 +[DEBUG IRGEN] visitMulExp: 56 +[DEBUG IRGEN] visitPrimaryExp: 56 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 56 created as 0x560d55b80090 +[DEBUG] EvalExpr: success, result = 0x560d55b80090 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 56 +[DEBUG IRGEN] visitAddExp: 56 +[DEBUG IRGEN] visitMulExp: 56 +[DEBUG IRGEN] visitPrimaryExp: 56 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 56 created as 0x560d55b80090 +[DEBUG] EvalExpr: success, result = 0x560d55b80090 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 57 +[DEBUG IRGEN] visitMulExp: 57 +[DEBUG IRGEN] visitPrimaryExp: 57 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 57 created as 0x560d55b80770 +[DEBUG] visitRelExp: left=0x560d55b80b70, type=int, right=0x560d55b80770, type=int +[DEBUG IF] Creating condbr: %t283 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[57]=57; +[DEBUG IRGEN] visitStmt: s[57]=57; +[DEBUG IRGEN] HandleAssignStmt: s[57]=57; +[DEBUG IRGEN] EvalExpr: 57 +[DEBUG IRGEN] visitAddExp: 57 +[DEBUG IRGEN] visitMulExp: 57 +[DEBUG IRGEN] visitPrimaryExp: 57 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 57 created as 0x560d55b80770 +[DEBUG] EvalExpr: success, result = 0x560d55b80770 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 57 +[DEBUG IRGEN] visitAddExp: 57 +[DEBUG IRGEN] visitMulExp: 57 +[DEBUG IRGEN] visitPrimaryExp: 57 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 57 created as 0x560d55b80770 +[DEBUG] EvalExpr: success, result = 0x560d55b80770 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 58 +[DEBUG IRGEN] visitMulExp: 58 +[DEBUG IRGEN] visitPrimaryExp: 58 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 58 created as 0x560d55b80e50 +[DEBUG] visitRelExp: left=0x560d55b81250, type=int, right=0x560d55b80e50, type=int +[DEBUG IF] Creating condbr: %t286 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[58]=58; +[DEBUG IRGEN] visitStmt: s[58]=58; +[DEBUG IRGEN] HandleAssignStmt: s[58]=58; +[DEBUG IRGEN] EvalExpr: 58 +[DEBUG IRGEN] visitAddExp: 58 +[DEBUG IRGEN] visitMulExp: 58 +[DEBUG IRGEN] visitPrimaryExp: 58 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 58 created as 0x560d55b80e50 +[DEBUG] EvalExpr: success, result = 0x560d55b80e50 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 58 +[DEBUG IRGEN] visitAddExp: 58 +[DEBUG IRGEN] visitMulExp: 58 +[DEBUG IRGEN] visitPrimaryExp: 58 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 58 created as 0x560d55b80e50 +[DEBUG] EvalExpr: success, result = 0x560d55b80e50 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 59 +[DEBUG IRGEN] visitMulExp: 59 +[DEBUG IRGEN] visitPrimaryExp: 59 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 59 created as 0x560d55b81530 +[DEBUG] visitRelExp: left=0x560d55b81930, type=int, right=0x560d55b81530, type=int +[DEBUG IF] Creating condbr: %t289 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[59]=59; +[DEBUG IRGEN] visitStmt: s[59]=59; +[DEBUG IRGEN] HandleAssignStmt: s[59]=59; +[DEBUG IRGEN] EvalExpr: 59 +[DEBUG IRGEN] visitAddExp: 59 +[DEBUG IRGEN] visitMulExp: 59 +[DEBUG IRGEN] visitPrimaryExp: 59 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 59 created as 0x560d55b81530 +[DEBUG] EvalExpr: success, result = 0x560d55b81530 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 59 +[DEBUG IRGEN] visitAddExp: 59 +[DEBUG IRGEN] visitMulExp: 59 +[DEBUG IRGEN] visitPrimaryExp: 59 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 59 created as 0x560d55b81530 +[DEBUG] EvalExpr: success, result = 0x560d55b81530 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 60 +[DEBUG IRGEN] visitMulExp: 60 +[DEBUG IRGEN] visitPrimaryExp: 60 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 60 created as 0x560d55b81c10 +[DEBUG] visitRelExp: left=0x560d55b82010, type=int, right=0x560d55b81c10, type=int +[DEBUG IF] Creating condbr: %t292 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[60]=60; +[DEBUG IRGEN] visitStmt: s[60]=60; +[DEBUG IRGEN] HandleAssignStmt: s[60]=60; +[DEBUG IRGEN] EvalExpr: 60 +[DEBUG IRGEN] visitAddExp: 60 +[DEBUG IRGEN] visitMulExp: 60 +[DEBUG IRGEN] visitPrimaryExp: 60 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 60 created as 0x560d55b81c10 +[DEBUG] EvalExpr: success, result = 0x560d55b81c10 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 60 +[DEBUG IRGEN] visitAddExp: 60 +[DEBUG IRGEN] visitMulExp: 60 +[DEBUG IRGEN] visitPrimaryExp: 60 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 60 created as 0x560d55b81c10 +[DEBUG] EvalExpr: success, result = 0x560d55b81c10 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 61 +[DEBUG IRGEN] visitMulExp: 61 +[DEBUG IRGEN] visitPrimaryExp: 61 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 61 created as 0x560d55b822f0 +[DEBUG] visitRelExp: left=0x560d55b826f0, type=int, right=0x560d55b822f0, type=int +[DEBUG IF] Creating condbr: %t295 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[61]=61; +[DEBUG IRGEN] visitStmt: s[61]=61; +[DEBUG IRGEN] HandleAssignStmt: s[61]=61; +[DEBUG IRGEN] EvalExpr: 61 +[DEBUG IRGEN] visitAddExp: 61 +[DEBUG IRGEN] visitMulExp: 61 +[DEBUG IRGEN] visitPrimaryExp: 61 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 61 created as 0x560d55b822f0 +[DEBUG] EvalExpr: success, result = 0x560d55b822f0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 61 +[DEBUG IRGEN] visitAddExp: 61 +[DEBUG IRGEN] visitMulExp: 61 +[DEBUG IRGEN] visitPrimaryExp: 61 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 61 created as 0x560d55b822f0 +[DEBUG] EvalExpr: success, result = 0x560d55b822f0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 62 +[DEBUG IRGEN] visitMulExp: 62 +[DEBUG IRGEN] visitPrimaryExp: 62 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 62 created as 0x560d55b831e0 +[DEBUG] visitRelExp: left=0x560d55b835e0, type=int, right=0x560d55b831e0, type=int +[DEBUG IF] Creating condbr: %t298 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[62]=62; +[DEBUG IRGEN] visitStmt: s[62]=62; +[DEBUG IRGEN] HandleAssignStmt: s[62]=62; +[DEBUG IRGEN] EvalExpr: 62 +[DEBUG IRGEN] visitAddExp: 62 +[DEBUG IRGEN] visitMulExp: 62 +[DEBUG IRGEN] visitPrimaryExp: 62 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 62 created as 0x560d55b831e0 +[DEBUG] EvalExpr: success, result = 0x560d55b831e0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 62 +[DEBUG IRGEN] visitAddExp: 62 +[DEBUG IRGEN] visitMulExp: 62 +[DEBUG IRGEN] visitPrimaryExp: 62 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 62 created as 0x560d55b831e0 +[DEBUG] EvalExpr: success, result = 0x560d55b831e0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 63 +[DEBUG IRGEN] visitMulExp: 63 +[DEBUG IRGEN] visitPrimaryExp: 63 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 63 created as 0x560d55b838c0 +[DEBUG] visitRelExp: left=0x560d55b83cc0, type=int, right=0x560d55b838c0, type=int +[DEBUG IF] Creating condbr: %t301 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[63]=63; +[DEBUG IRGEN] visitStmt: s[63]=63; +[DEBUG IRGEN] HandleAssignStmt: s[63]=63; +[DEBUG IRGEN] EvalExpr: 63 +[DEBUG IRGEN] visitAddExp: 63 +[DEBUG IRGEN] visitMulExp: 63 +[DEBUG IRGEN] visitPrimaryExp: 63 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 63 created as 0x560d55b838c0 +[DEBUG] EvalExpr: success, result = 0x560d55b838c0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 63 +[DEBUG IRGEN] visitAddExp: 63 +[DEBUG IRGEN] visitMulExp: 63 +[DEBUG IRGEN] visitPrimaryExp: 63 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 63 created as 0x560d55b838c0 +[DEBUG] EvalExpr: success, result = 0x560d55b838c0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 64 +[DEBUG IRGEN] visitMulExp: 64 +[DEBUG IRGEN] visitPrimaryExp: 64 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 64 created as 0x560d55b83fa0 +[DEBUG] visitRelExp: left=0x560d55b75370, type=int, right=0x560d55b83fa0, type=int +[DEBUG IF] Creating condbr: %t304 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[64]=64; +[DEBUG IRGEN] visitStmt: s[64]=64; +[DEBUG IRGEN] HandleAssignStmt: s[64]=64; +[DEBUG IRGEN] EvalExpr: 64 +[DEBUG IRGEN] visitAddExp: 64 +[DEBUG IRGEN] visitMulExp: 64 +[DEBUG IRGEN] visitPrimaryExp: 64 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 64 created as 0x560d55b83fa0 +[DEBUG] EvalExpr: success, result = 0x560d55b83fa0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 64 +[DEBUG IRGEN] visitAddExp: 64 +[DEBUG IRGEN] visitMulExp: 64 +[DEBUG IRGEN] visitPrimaryExp: 64 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 64 created as 0x560d55b83fa0 +[DEBUG] EvalExpr: success, result = 0x560d55b83fa0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 65 +[DEBUG IRGEN] visitMulExp: 65 +[DEBUG IRGEN] visitPrimaryExp: 65 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 65 created as 0x560d55b75650 +[DEBUG] visitRelExp: left=0x560d55b75d40, type=int, right=0x560d55b75650, type=int +[DEBUG IF] Creating condbr: %t307 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[65]=65; +[DEBUG IRGEN] visitStmt: s[65]=65; +[DEBUG IRGEN] HandleAssignStmt: s[65]=65; +[DEBUG IRGEN] EvalExpr: 65 +[DEBUG IRGEN] visitAddExp: 65 +[DEBUG IRGEN] visitMulExp: 65 +[DEBUG IRGEN] visitPrimaryExp: 65 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 65 created as 0x560d55b75650 +[DEBUG] EvalExpr: success, result = 0x560d55b75650 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 65 +[DEBUG IRGEN] visitAddExp: 65 +[DEBUG IRGEN] visitMulExp: 65 +[DEBUG IRGEN] visitPrimaryExp: 65 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 65 created as 0x560d55b75650 +[DEBUG] EvalExpr: success, result = 0x560d55b75650 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 66 +[DEBUG IRGEN] visitMulExp: 66 +[DEBUG IRGEN] visitPrimaryExp: 66 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 66 created as 0x560d55b757c0 +[DEBUG] visitRelExp: left=0x560d55b85d60, type=int, right=0x560d55b757c0, type=int +[DEBUG IF] Creating condbr: %t310 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[66]=66; +[DEBUG IRGEN] visitStmt: s[66]=66; +[DEBUG IRGEN] HandleAssignStmt: s[66]=66; +[DEBUG IRGEN] EvalExpr: 66 +[DEBUG IRGEN] visitAddExp: 66 +[DEBUG IRGEN] visitMulExp: 66 +[DEBUG IRGEN] visitPrimaryExp: 66 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 66 created as 0x560d55b757c0 +[DEBUG] EvalExpr: success, result = 0x560d55b757c0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 66 +[DEBUG IRGEN] visitAddExp: 66 +[DEBUG IRGEN] visitMulExp: 66 +[DEBUG IRGEN] visitPrimaryExp: 66 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 66 created as 0x560d55b757c0 +[DEBUG] EvalExpr: success, result = 0x560d55b757c0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 67 +[DEBUG IRGEN] visitMulExp: 67 +[DEBUG IRGEN] visitPrimaryExp: 67 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 67 created as 0x560d55b86040 +[DEBUG] visitRelExp: left=0x560d55b86440, type=int, right=0x560d55b86040, type=int +[DEBUG IF] Creating condbr: %t313 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[67]=67; +[DEBUG IRGEN] visitStmt: s[67]=67; +[DEBUG IRGEN] HandleAssignStmt: s[67]=67; +[DEBUG IRGEN] EvalExpr: 67 +[DEBUG IRGEN] visitAddExp: 67 +[DEBUG IRGEN] visitMulExp: 67 +[DEBUG IRGEN] visitPrimaryExp: 67 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 67 created as 0x560d55b86040 +[DEBUG] EvalExpr: success, result = 0x560d55b86040 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 67 +[DEBUG IRGEN] visitAddExp: 67 +[DEBUG IRGEN] visitMulExp: 67 +[DEBUG IRGEN] visitPrimaryExp: 67 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 67 created as 0x560d55b86040 +[DEBUG] EvalExpr: success, result = 0x560d55b86040 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 68 +[DEBUG IRGEN] visitMulExp: 68 +[DEBUG IRGEN] visitPrimaryExp: 68 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 68 created as 0x560d55b86720 +[DEBUG] visitRelExp: left=0x560d55b86b20, type=int, right=0x560d55b86720, type=int +[DEBUG IF] Creating condbr: %t316 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[68]=68; +[DEBUG IRGEN] visitStmt: s[68]=68; +[DEBUG IRGEN] HandleAssignStmt: s[68]=68; +[DEBUG IRGEN] EvalExpr: 68 +[DEBUG IRGEN] visitAddExp: 68 +[DEBUG IRGEN] visitMulExp: 68 +[DEBUG IRGEN] visitPrimaryExp: 68 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 68 created as 0x560d55b86720 +[DEBUG] EvalExpr: success, result = 0x560d55b86720 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 68 +[DEBUG IRGEN] visitAddExp: 68 +[DEBUG IRGEN] visitMulExp: 68 +[DEBUG IRGEN] visitPrimaryExp: 68 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 68 created as 0x560d55b86720 +[DEBUG] EvalExpr: success, result = 0x560d55b86720 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 69 +[DEBUG IRGEN] visitMulExp: 69 +[DEBUG IRGEN] visitPrimaryExp: 69 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 69 created as 0x560d55b86e00 +[DEBUG] visitRelExp: left=0x560d55b87200, type=int, right=0x560d55b86e00, type=int +[DEBUG IF] Creating condbr: %t319 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[69]=69; +[DEBUG IRGEN] visitStmt: s[69]=69; +[DEBUG IRGEN] HandleAssignStmt: s[69]=69; +[DEBUG IRGEN] EvalExpr: 69 +[DEBUG IRGEN] visitAddExp: 69 +[DEBUG IRGEN] visitMulExp: 69 +[DEBUG IRGEN] visitPrimaryExp: 69 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 69 created as 0x560d55b86e00 +[DEBUG] EvalExpr: success, result = 0x560d55b86e00 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 69 +[DEBUG IRGEN] visitAddExp: 69 +[DEBUG IRGEN] visitMulExp: 69 +[DEBUG IRGEN] visitPrimaryExp: 69 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 69 created as 0x560d55b86e00 +[DEBUG] EvalExpr: success, result = 0x560d55b86e00 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 70 +[DEBUG IRGEN] visitMulExp: 70 +[DEBUG IRGEN] visitPrimaryExp: 70 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 70 created as 0x560d55b874e0 +[DEBUG] visitRelExp: left=0x560d55b878e0, type=int, right=0x560d55b874e0, type=int +[DEBUG IF] Creating condbr: %t322 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[70]=70; +[DEBUG IRGEN] visitStmt: s[70]=70; +[DEBUG IRGEN] HandleAssignStmt: s[70]=70; +[DEBUG IRGEN] EvalExpr: 70 +[DEBUG IRGEN] visitAddExp: 70 +[DEBUG IRGEN] visitMulExp: 70 +[DEBUG IRGEN] visitPrimaryExp: 70 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 70 created as 0x560d55b874e0 +[DEBUG] EvalExpr: success, result = 0x560d55b874e0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 70 +[DEBUG IRGEN] visitAddExp: 70 +[DEBUG IRGEN] visitMulExp: 70 +[DEBUG IRGEN] visitPrimaryExp: 70 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 70 created as 0x560d55b874e0 +[DEBUG] EvalExpr: success, result = 0x560d55b874e0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 71 +[DEBUG IRGEN] visitMulExp: 71 +[DEBUG IRGEN] visitPrimaryExp: 71 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 71 created as 0x560d55b87bc0 +[DEBUG] visitRelExp: left=0x560d55b87fc0, type=int, right=0x560d55b87bc0, type=int +[DEBUG IF] Creating condbr: %t325 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[71]=71; +[DEBUG IRGEN] visitStmt: s[71]=71; +[DEBUG IRGEN] HandleAssignStmt: s[71]=71; +[DEBUG IRGEN] EvalExpr: 71 +[DEBUG IRGEN] visitAddExp: 71 +[DEBUG IRGEN] visitMulExp: 71 +[DEBUG IRGEN] visitPrimaryExp: 71 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 71 created as 0x560d55b87bc0 +[DEBUG] EvalExpr: success, result = 0x560d55b87bc0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 71 +[DEBUG IRGEN] visitAddExp: 71 +[DEBUG IRGEN] visitMulExp: 71 +[DEBUG IRGEN] visitPrimaryExp: 71 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 71 created as 0x560d55b87bc0 +[DEBUG] EvalExpr: success, result = 0x560d55b87bc0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 72 +[DEBUG IRGEN] visitMulExp: 72 +[DEBUG IRGEN] visitPrimaryExp: 72 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 72 created as 0x560d55b882a0 +[DEBUG] visitRelExp: left=0x560d55b886a0, type=int, right=0x560d55b882a0, type=int +[DEBUG IF] Creating condbr: %t328 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[72]=72; +[DEBUG IRGEN] visitStmt: s[72]=72; +[DEBUG IRGEN] HandleAssignStmt: s[72]=72; +[DEBUG IRGEN] EvalExpr: 72 +[DEBUG IRGEN] visitAddExp: 72 +[DEBUG IRGEN] visitMulExp: 72 +[DEBUG IRGEN] visitPrimaryExp: 72 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 72 created as 0x560d55b882a0 +[DEBUG] EvalExpr: success, result = 0x560d55b882a0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 72 +[DEBUG IRGEN] visitAddExp: 72 +[DEBUG IRGEN] visitMulExp: 72 +[DEBUG IRGEN] visitPrimaryExp: 72 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 72 created as 0x560d55b882a0 +[DEBUG] EvalExpr: success, result = 0x560d55b882a0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 73 +[DEBUG IRGEN] visitMulExp: 73 +[DEBUG IRGEN] visitPrimaryExp: 73 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 73 created as 0x560d55b88980 +[DEBUG] visitRelExp: left=0x560d55b88d80, type=int, right=0x560d55b88980, type=int +[DEBUG IF] Creating condbr: %t331 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[73]=73; +[DEBUG IRGEN] visitStmt: s[73]=73; +[DEBUG IRGEN] HandleAssignStmt: s[73]=73; +[DEBUG IRGEN] EvalExpr: 73 +[DEBUG IRGEN] visitAddExp: 73 +[DEBUG IRGEN] visitMulExp: 73 +[DEBUG IRGEN] visitPrimaryExp: 73 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 73 created as 0x560d55b88980 +[DEBUG] EvalExpr: success, result = 0x560d55b88980 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 73 +[DEBUG IRGEN] visitAddExp: 73 +[DEBUG IRGEN] visitMulExp: 73 +[DEBUG IRGEN] visitPrimaryExp: 73 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 73 created as 0x560d55b88980 +[DEBUG] EvalExpr: success, result = 0x560d55b88980 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 74 +[DEBUG IRGEN] visitMulExp: 74 +[DEBUG IRGEN] visitPrimaryExp: 74 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 74 created as 0x560d55b89060 +[DEBUG] visitRelExp: left=0x560d55b89460, type=int, right=0x560d55b89060, type=int +[DEBUG IF] Creating condbr: %t334 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[74]=74; +[DEBUG IRGEN] visitStmt: s[74]=74; +[DEBUG IRGEN] HandleAssignStmt: s[74]=74; +[DEBUG IRGEN] EvalExpr: 74 +[DEBUG IRGEN] visitAddExp: 74 +[DEBUG IRGEN] visitMulExp: 74 +[DEBUG IRGEN] visitPrimaryExp: 74 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 74 created as 0x560d55b89060 +[DEBUG] EvalExpr: success, result = 0x560d55b89060 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 74 +[DEBUG IRGEN] visitAddExp: 74 +[DEBUG IRGEN] visitMulExp: 74 +[DEBUG IRGEN] visitPrimaryExp: 74 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 74 created as 0x560d55b89060 +[DEBUG] EvalExpr: success, result = 0x560d55b89060 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 75 +[DEBUG IRGEN] visitMulExp: 75 +[DEBUG IRGEN] visitPrimaryExp: 75 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 75 created as 0x560d55b89740 +[DEBUG] visitRelExp: left=0x560d55b89b40, type=int, right=0x560d55b89740, type=int +[DEBUG IF] Creating condbr: %t337 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[75]=75; +[DEBUG IRGEN] visitStmt: s[75]=75; +[DEBUG IRGEN] HandleAssignStmt: s[75]=75; +[DEBUG IRGEN] EvalExpr: 75 +[DEBUG IRGEN] visitAddExp: 75 +[DEBUG IRGEN] visitMulExp: 75 +[DEBUG IRGEN] visitPrimaryExp: 75 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 75 created as 0x560d55b89740 +[DEBUG] EvalExpr: success, result = 0x560d55b89740 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 75 +[DEBUG IRGEN] visitAddExp: 75 +[DEBUG IRGEN] visitMulExp: 75 +[DEBUG IRGEN] visitPrimaryExp: 75 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 75 created as 0x560d55b89740 +[DEBUG] EvalExpr: success, result = 0x560d55b89740 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 76 +[DEBUG IRGEN] visitMulExp: 76 +[DEBUG IRGEN] visitPrimaryExp: 76 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 76 created as 0x560d55b89e20 +[DEBUG] visitRelExp: left=0x560d55b8a220, type=int, right=0x560d55b89e20, type=int +[DEBUG IF] Creating condbr: %t340 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[76]=76; +[DEBUG IRGEN] visitStmt: s[76]=76; +[DEBUG IRGEN] HandleAssignStmt: s[76]=76; +[DEBUG IRGEN] EvalExpr: 76 +[DEBUG IRGEN] visitAddExp: 76 +[DEBUG IRGEN] visitMulExp: 76 +[DEBUG IRGEN] visitPrimaryExp: 76 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 76 created as 0x560d55b89e20 +[DEBUG] EvalExpr: success, result = 0x560d55b89e20 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 76 +[DEBUG IRGEN] visitAddExp: 76 +[DEBUG IRGEN] visitMulExp: 76 +[DEBUG IRGEN] visitPrimaryExp: 76 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 76 created as 0x560d55b89e20 +[DEBUG] EvalExpr: success, result = 0x560d55b89e20 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 77 +[DEBUG IRGEN] visitMulExp: 77 +[DEBUG IRGEN] visitPrimaryExp: 77 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 77 created as 0x560d55b8a500 +[DEBUG] visitRelExp: left=0x560d55b8a900, type=int, right=0x560d55b8a500, type=int +[DEBUG IF] Creating condbr: %t343 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[77]=77; +[DEBUG IRGEN] visitStmt: s[77]=77; +[DEBUG IRGEN] HandleAssignStmt: s[77]=77; +[DEBUG IRGEN] EvalExpr: 77 +[DEBUG IRGEN] visitAddExp: 77 +[DEBUG IRGEN] visitMulExp: 77 +[DEBUG IRGEN] visitPrimaryExp: 77 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 77 created as 0x560d55b8a500 +[DEBUG] EvalExpr: success, result = 0x560d55b8a500 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 77 +[DEBUG IRGEN] visitAddExp: 77 +[DEBUG IRGEN] visitMulExp: 77 +[DEBUG IRGEN] visitPrimaryExp: 77 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 77 created as 0x560d55b8a500 +[DEBUG] EvalExpr: success, result = 0x560d55b8a500 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 78 +[DEBUG IRGEN] visitMulExp: 78 +[DEBUG IRGEN] visitPrimaryExp: 78 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 78 created as 0x560d55b8abe0 +[DEBUG] visitRelExp: left=0x560d55b8afe0, type=int, right=0x560d55b8abe0, type=int +[DEBUG IF] Creating condbr: %t346 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[78]=78; +[DEBUG IRGEN] visitStmt: s[78]=78; +[DEBUG IRGEN] HandleAssignStmt: s[78]=78; +[DEBUG IRGEN] EvalExpr: 78 +[DEBUG IRGEN] visitAddExp: 78 +[DEBUG IRGEN] visitMulExp: 78 +[DEBUG IRGEN] visitPrimaryExp: 78 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 78 created as 0x560d55b8abe0 +[DEBUG] EvalExpr: success, result = 0x560d55b8abe0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 78 +[DEBUG IRGEN] visitAddExp: 78 +[DEBUG IRGEN] visitMulExp: 78 +[DEBUG IRGEN] visitPrimaryExp: 78 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 78 created as 0x560d55b8abe0 +[DEBUG] EvalExpr: success, result = 0x560d55b8abe0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 79 +[DEBUG IRGEN] visitMulExp: 79 +[DEBUG IRGEN] visitPrimaryExp: 79 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 79 created as 0x560d55b8b2c0 +[DEBUG] visitRelExp: left=0x560d55b8b6c0, type=int, right=0x560d55b8b2c0, type=int +[DEBUG IF] Creating condbr: %t349 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[79]=79; +[DEBUG IRGEN] visitStmt: s[79]=79; +[DEBUG IRGEN] HandleAssignStmt: s[79]=79; +[DEBUG IRGEN] EvalExpr: 79 +[DEBUG IRGEN] visitAddExp: 79 +[DEBUG IRGEN] visitMulExp: 79 +[DEBUG IRGEN] visitPrimaryExp: 79 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 79 created as 0x560d55b8b2c0 +[DEBUG] EvalExpr: success, result = 0x560d55b8b2c0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 79 +[DEBUG IRGEN] visitAddExp: 79 +[DEBUG IRGEN] visitMulExp: 79 +[DEBUG IRGEN] visitPrimaryExp: 79 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 79 created as 0x560d55b8b2c0 +[DEBUG] EvalExpr: success, result = 0x560d55b8b2c0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 80 +[DEBUG IRGEN] visitMulExp: 80 +[DEBUG IRGEN] visitPrimaryExp: 80 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 80 created as 0x560d55b8b9a0 +[DEBUG] visitRelExp: left=0x560d55b8bda0, type=int, right=0x560d55b8b9a0, type=int +[DEBUG IF] Creating condbr: %t352 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[80]=80; +[DEBUG IRGEN] visitStmt: s[80]=80; +[DEBUG IRGEN] HandleAssignStmt: s[80]=80; +[DEBUG IRGEN] EvalExpr: 80 +[DEBUG IRGEN] visitAddExp: 80 +[DEBUG IRGEN] visitMulExp: 80 +[DEBUG IRGEN] visitPrimaryExp: 80 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 80 created as 0x560d55b8b9a0 +[DEBUG] EvalExpr: success, result = 0x560d55b8b9a0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 80 +[DEBUG IRGEN] visitAddExp: 80 +[DEBUG IRGEN] visitMulExp: 80 +[DEBUG IRGEN] visitPrimaryExp: 80 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 80 created as 0x560d55b8b9a0 +[DEBUG] EvalExpr: success, result = 0x560d55b8b9a0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 81 +[DEBUG IRGEN] visitMulExp: 81 +[DEBUG IRGEN] visitPrimaryExp: 81 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 81 created as 0x560d55b8c080 +[DEBUG] visitRelExp: left=0x560d55b8c480, type=int, right=0x560d55b8c080, type=int +[DEBUG IF] Creating condbr: %t355 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[81]=81; +[DEBUG IRGEN] visitStmt: s[81]=81; +[DEBUG IRGEN] HandleAssignStmt: s[81]=81; +[DEBUG IRGEN] EvalExpr: 81 +[DEBUG IRGEN] visitAddExp: 81 +[DEBUG IRGEN] visitMulExp: 81 +[DEBUG IRGEN] visitPrimaryExp: 81 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 81 created as 0x560d55b8c080 +[DEBUG] EvalExpr: success, result = 0x560d55b8c080 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 81 +[DEBUG IRGEN] visitAddExp: 81 +[DEBUG IRGEN] visitMulExp: 81 +[DEBUG IRGEN] visitPrimaryExp: 81 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 81 created as 0x560d55b8c080 +[DEBUG] EvalExpr: success, result = 0x560d55b8c080 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 82 +[DEBUG IRGEN] visitMulExp: 82 +[DEBUG IRGEN] visitPrimaryExp: 82 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 82 created as 0x560d55b8c760 +[DEBUG] visitRelExp: left=0x560d55b8cb60, type=int, right=0x560d55b8c760, type=int +[DEBUG IF] Creating condbr: %t358 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[82]=82; +[DEBUG IRGEN] visitStmt: s[82]=82; +[DEBUG IRGEN] HandleAssignStmt: s[82]=82; +[DEBUG IRGEN] EvalExpr: 82 +[DEBUG IRGEN] visitAddExp: 82 +[DEBUG IRGEN] visitMulExp: 82 +[DEBUG IRGEN] visitPrimaryExp: 82 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 82 created as 0x560d55b8c760 +[DEBUG] EvalExpr: success, result = 0x560d55b8c760 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 82 +[DEBUG IRGEN] visitAddExp: 82 +[DEBUG IRGEN] visitMulExp: 82 +[DEBUG IRGEN] visitPrimaryExp: 82 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 82 created as 0x560d55b8c760 +[DEBUG] EvalExpr: success, result = 0x560d55b8c760 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 83 +[DEBUG IRGEN] visitMulExp: 83 +[DEBUG IRGEN] visitPrimaryExp: 83 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 83 created as 0x560d55b8ce40 +[DEBUG] visitRelExp: left=0x560d55b8d240, type=int, right=0x560d55b8ce40, type=int +[DEBUG IF] Creating condbr: %t361 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[83]=83; +[DEBUG IRGEN] visitStmt: s[83]=83; +[DEBUG IRGEN] HandleAssignStmt: s[83]=83; +[DEBUG IRGEN] EvalExpr: 83 +[DEBUG IRGEN] visitAddExp: 83 +[DEBUG IRGEN] visitMulExp: 83 +[DEBUG IRGEN] visitPrimaryExp: 83 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 83 created as 0x560d55b8ce40 +[DEBUG] EvalExpr: success, result = 0x560d55b8ce40 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 83 +[DEBUG IRGEN] visitAddExp: 83 +[DEBUG IRGEN] visitMulExp: 83 +[DEBUG IRGEN] visitPrimaryExp: 83 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 83 created as 0x560d55b8ce40 +[DEBUG] EvalExpr: success, result = 0x560d55b8ce40 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 84 +[DEBUG IRGEN] visitMulExp: 84 +[DEBUG IRGEN] visitPrimaryExp: 84 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 84 created as 0x560d55b8d520 +[DEBUG] visitRelExp: left=0x560d55b8d920, type=int, right=0x560d55b8d520, type=int +[DEBUG IF] Creating condbr: %t364 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[84]=84; +[DEBUG IRGEN] visitStmt: s[84]=84; +[DEBUG IRGEN] HandleAssignStmt: s[84]=84; +[DEBUG IRGEN] EvalExpr: 84 +[DEBUG IRGEN] visitAddExp: 84 +[DEBUG IRGEN] visitMulExp: 84 +[DEBUG IRGEN] visitPrimaryExp: 84 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 84 created as 0x560d55b8d520 +[DEBUG] EvalExpr: success, result = 0x560d55b8d520 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 84 +[DEBUG IRGEN] visitAddExp: 84 +[DEBUG IRGEN] visitMulExp: 84 +[DEBUG IRGEN] visitPrimaryExp: 84 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 84 created as 0x560d55b8d520 +[DEBUG] EvalExpr: success, result = 0x560d55b8d520 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 85 +[DEBUG IRGEN] visitMulExp: 85 +[DEBUG IRGEN] visitPrimaryExp: 85 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 85 created as 0x560d55b8dc00 +[DEBUG] visitRelExp: left=0x560d55b8e000, type=int, right=0x560d55b8dc00, type=int +[DEBUG IF] Creating condbr: %t367 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[85]=85; +[DEBUG IRGEN] visitStmt: s[85]=85; +[DEBUG IRGEN] HandleAssignStmt: s[85]=85; +[DEBUG IRGEN] EvalExpr: 85 +[DEBUG IRGEN] visitAddExp: 85 +[DEBUG IRGEN] visitMulExp: 85 +[DEBUG IRGEN] visitPrimaryExp: 85 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 85 created as 0x560d55b8dc00 +[DEBUG] EvalExpr: success, result = 0x560d55b8dc00 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 85 +[DEBUG IRGEN] visitAddExp: 85 +[DEBUG IRGEN] visitMulExp: 85 +[DEBUG IRGEN] visitPrimaryExp: 85 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 85 created as 0x560d55b8dc00 +[DEBUG] EvalExpr: success, result = 0x560d55b8dc00 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 86 +[DEBUG IRGEN] visitMulExp: 86 +[DEBUG IRGEN] visitPrimaryExp: 86 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 86 created as 0x560d55b8e2e0 +[DEBUG] visitRelExp: left=0x560d55b8e6e0, type=int, right=0x560d55b8e2e0, type=int +[DEBUG IF] Creating condbr: %t370 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[86]=86; +[DEBUG IRGEN] visitStmt: s[86]=86; +[DEBUG IRGEN] HandleAssignStmt: s[86]=86; +[DEBUG IRGEN] EvalExpr: 86 +[DEBUG IRGEN] visitAddExp: 86 +[DEBUG IRGEN] visitMulExp: 86 +[DEBUG IRGEN] visitPrimaryExp: 86 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 86 created as 0x560d55b8e2e0 +[DEBUG] EvalExpr: success, result = 0x560d55b8e2e0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 86 +[DEBUG IRGEN] visitAddExp: 86 +[DEBUG IRGEN] visitMulExp: 86 +[DEBUG IRGEN] visitPrimaryExp: 86 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 86 created as 0x560d55b8e2e0 +[DEBUG] EvalExpr: success, result = 0x560d55b8e2e0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 87 +[DEBUG IRGEN] visitMulExp: 87 +[DEBUG IRGEN] visitPrimaryExp: 87 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 87 created as 0x560d55b8e9c0 +[DEBUG] visitRelExp: left=0x560d55b8edc0, type=int, right=0x560d55b8e9c0, type=int +[DEBUG IF] Creating condbr: %t373 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[87]=87; +[DEBUG IRGEN] visitStmt: s[87]=87; +[DEBUG IRGEN] HandleAssignStmt: s[87]=87; +[DEBUG IRGEN] EvalExpr: 87 +[DEBUG IRGEN] visitAddExp: 87 +[DEBUG IRGEN] visitMulExp: 87 +[DEBUG IRGEN] visitPrimaryExp: 87 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 87 created as 0x560d55b8e9c0 +[DEBUG] EvalExpr: success, result = 0x560d55b8e9c0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 87 +[DEBUG IRGEN] visitAddExp: 87 +[DEBUG IRGEN] visitMulExp: 87 +[DEBUG IRGEN] visitPrimaryExp: 87 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 87 created as 0x560d55b8e9c0 +[DEBUG] EvalExpr: success, result = 0x560d55b8e9c0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 88 +[DEBUG IRGEN] visitMulExp: 88 +[DEBUG IRGEN] visitPrimaryExp: 88 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 88 created as 0x560d55b8f0a0 +[DEBUG] visitRelExp: left=0x560d55b8f4a0, type=int, right=0x560d55b8f0a0, type=int +[DEBUG IF] Creating condbr: %t376 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[88]=88; +[DEBUG IRGEN] visitStmt: s[88]=88; +[DEBUG IRGEN] HandleAssignStmt: s[88]=88; +[DEBUG IRGEN] EvalExpr: 88 +[DEBUG IRGEN] visitAddExp: 88 +[DEBUG IRGEN] visitMulExp: 88 +[DEBUG IRGEN] visitPrimaryExp: 88 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 88 created as 0x560d55b8f0a0 +[DEBUG] EvalExpr: success, result = 0x560d55b8f0a0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 88 +[DEBUG IRGEN] visitAddExp: 88 +[DEBUG IRGEN] visitMulExp: 88 +[DEBUG IRGEN] visitPrimaryExp: 88 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 88 created as 0x560d55b8f0a0 +[DEBUG] EvalExpr: success, result = 0x560d55b8f0a0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 89 +[DEBUG IRGEN] visitMulExp: 89 +[DEBUG IRGEN] visitPrimaryExp: 89 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 89 created as 0x560d55b8f780 +[DEBUG] visitRelExp: left=0x560d55b8fb80, type=int, right=0x560d55b8f780, type=int +[DEBUG IF] Creating condbr: %t379 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[89]=89; +[DEBUG IRGEN] visitStmt: s[89]=89; +[DEBUG IRGEN] HandleAssignStmt: s[89]=89; +[DEBUG IRGEN] EvalExpr: 89 +[DEBUG IRGEN] visitAddExp: 89 +[DEBUG IRGEN] visitMulExp: 89 +[DEBUG IRGEN] visitPrimaryExp: 89 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 89 created as 0x560d55b8f780 +[DEBUG] EvalExpr: success, result = 0x560d55b8f780 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 89 +[DEBUG IRGEN] visitAddExp: 89 +[DEBUG IRGEN] visitMulExp: 89 +[DEBUG IRGEN] visitPrimaryExp: 89 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 89 created as 0x560d55b8f780 +[DEBUG] EvalExpr: success, result = 0x560d55b8f780 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 90 +[DEBUG IRGEN] visitMulExp: 90 +[DEBUG IRGEN] visitPrimaryExp: 90 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 90 created as 0x560d55b8fe60 +[DEBUG] visitRelExp: left=0x560d55b90260, type=int, right=0x560d55b8fe60, type=int +[DEBUG IF] Creating condbr: %t382 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[90]=90; +[DEBUG IRGEN] visitStmt: s[90]=90; +[DEBUG IRGEN] HandleAssignStmt: s[90]=90; +[DEBUG IRGEN] EvalExpr: 90 +[DEBUG IRGEN] visitAddExp: 90 +[DEBUG IRGEN] visitMulExp: 90 +[DEBUG IRGEN] visitPrimaryExp: 90 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 90 created as 0x560d55b8fe60 +[DEBUG] EvalExpr: success, result = 0x560d55b8fe60 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 90 +[DEBUG IRGEN] visitAddExp: 90 +[DEBUG IRGEN] visitMulExp: 90 +[DEBUG IRGEN] visitPrimaryExp: 90 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 90 created as 0x560d55b8fe60 +[DEBUG] EvalExpr: success, result = 0x560d55b8fe60 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 91 +[DEBUG IRGEN] visitMulExp: 91 +[DEBUG IRGEN] visitPrimaryExp: 91 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 91 created as 0x560d55b90540 +[DEBUG] visitRelExp: left=0x560d55b90940, type=int, right=0x560d55b90540, type=int +[DEBUG IF] Creating condbr: %t385 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[91]=91; +[DEBUG IRGEN] visitStmt: s[91]=91; +[DEBUG IRGEN] HandleAssignStmt: s[91]=91; +[DEBUG IRGEN] EvalExpr: 91 +[DEBUG IRGEN] visitAddExp: 91 +[DEBUG IRGEN] visitMulExp: 91 +[DEBUG IRGEN] visitPrimaryExp: 91 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 91 created as 0x560d55b90540 +[DEBUG] EvalExpr: success, result = 0x560d55b90540 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 91 +[DEBUG IRGEN] visitAddExp: 91 +[DEBUG IRGEN] visitMulExp: 91 +[DEBUG IRGEN] visitPrimaryExp: 91 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 91 created as 0x560d55b90540 +[DEBUG] EvalExpr: success, result = 0x560d55b90540 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 92 +[DEBUG IRGEN] visitMulExp: 92 +[DEBUG IRGEN] visitPrimaryExp: 92 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 92 created as 0x560d55b90c20 +[DEBUG] visitRelExp: left=0x560d55b91020, type=int, right=0x560d55b90c20, type=int +[DEBUG IF] Creating condbr: %t388 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[92]=92; +[DEBUG IRGEN] visitStmt: s[92]=92; +[DEBUG IRGEN] HandleAssignStmt: s[92]=92; +[DEBUG IRGEN] EvalExpr: 92 +[DEBUG IRGEN] visitAddExp: 92 +[DEBUG IRGEN] visitMulExp: 92 +[DEBUG IRGEN] visitPrimaryExp: 92 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 92 created as 0x560d55b90c20 +[DEBUG] EvalExpr: success, result = 0x560d55b90c20 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 92 +[DEBUG IRGEN] visitAddExp: 92 +[DEBUG IRGEN] visitMulExp: 92 +[DEBUG IRGEN] visitPrimaryExp: 92 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 92 created as 0x560d55b90c20 +[DEBUG] EvalExpr: success, result = 0x560d55b90c20 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 93 +[DEBUG IRGEN] visitMulExp: 93 +[DEBUG IRGEN] visitPrimaryExp: 93 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 93 created as 0x560d55b91300 +[DEBUG] visitRelExp: left=0x560d55b91650, type=int, right=0x560d55b91300, type=int +[DEBUG IF] Creating condbr: %t391 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}} +[DEBUG IRGEN] visitBlock: {s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[93]=93; +[DEBUG IRGEN] visitStmt: s[93]=93; +[DEBUG IRGEN] HandleAssignStmt: s[93]=93; +[DEBUG IRGEN] EvalExpr: 93 +[DEBUG IRGEN] visitAddExp: 93 +[DEBUG IRGEN] visitMulExp: 93 +[DEBUG IRGEN] visitPrimaryExp: 93 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 93 created as 0x560d55b91300 +[DEBUG] EvalExpr: success, result = 0x560d55b91300 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 93 +[DEBUG IRGEN] visitAddExp: 93 +[DEBUG IRGEN] visitMulExp: 93 +[DEBUG IRGEN] visitPrimaryExp: 93 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 93 created as 0x560d55b91300 +[DEBUG] EvalExpr: success, result = 0x560d55b91300 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}} +[DEBUG IRGEN] visitStmt: if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 94 +[DEBUG IRGEN] visitMulExp: 94 +[DEBUG IRGEN] visitPrimaryExp: 94 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 94 created as 0x560d55b919e0 +[DEBUG] visitRelExp: left=0x560d55b91d30, type=int, right=0x560d55b919e0, type=int +[DEBUG IF] Creating condbr: %t394 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}} +[DEBUG IRGEN] visitBlock: {s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}} +[DEBUG IRGEN] visitBlockItem: s[94]=94; +[DEBUG IRGEN] visitStmt: s[94]=94; +[DEBUG IRGEN] HandleAssignStmt: s[94]=94; +[DEBUG IRGEN] EvalExpr: 94 +[DEBUG IRGEN] visitAddExp: 94 +[DEBUG IRGEN] visitMulExp: 94 +[DEBUG IRGEN] visitPrimaryExp: 94 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 94 created as 0x560d55b919e0 +[DEBUG] EvalExpr: success, result = 0x560d55b919e0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 94 +[DEBUG IRGEN] visitAddExp: 94 +[DEBUG IRGEN] visitMulExp: 94 +[DEBUG IRGEN] visitPrimaryExp: 94 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 94 created as 0x560d55b919e0 +[DEBUG] EvalExpr: success, result = 0x560d55b919e0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}} +[DEBUG IRGEN] visitStmt: if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 95 +[DEBUG IRGEN] visitMulExp: 95 +[DEBUG IRGEN] visitPrimaryExp: 95 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 95 created as 0x560d55b920c0 +[DEBUG] visitRelExp: left=0x560d55b924e0, type=int, right=0x560d55b920c0, type=int +[DEBUG IF] Creating condbr: %t397 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}} +[DEBUG IRGEN] visitBlock: {s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}} +[DEBUG IRGEN] visitBlockItem: s[95]=95; +[DEBUG IRGEN] visitStmt: s[95]=95; +[DEBUG IRGEN] HandleAssignStmt: s[95]=95; +[DEBUG IRGEN] EvalExpr: 95 +[DEBUG IRGEN] visitAddExp: 95 +[DEBUG IRGEN] visitMulExp: 95 +[DEBUG IRGEN] visitPrimaryExp: 95 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 95 created as 0x560d55b920c0 +[DEBUG] EvalExpr: success, result = 0x560d55b920c0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 95 +[DEBUG IRGEN] visitAddExp: 95 +[DEBUG IRGEN] visitMulExp: 95 +[DEBUG IRGEN] visitPrimaryExp: 95 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 95 created as 0x560d55b920c0 +[DEBUG] EvalExpr: success, result = 0x560d55b920c0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}} +[DEBUG IRGEN] visitStmt: if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 96 +[DEBUG IRGEN] visitMulExp: 96 +[DEBUG IRGEN] visitPrimaryExp: 96 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 96 created as 0x560d55b927a0 +[DEBUG] visitRelExp: left=0x560d55b92b50, type=int, right=0x560d55b927a0, type=int +[DEBUG IF] Creating condbr: %t400 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}} +[DEBUG IRGEN] visitBlock: {s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}} +[DEBUG IRGEN] visitBlockItem: s[96]=96; +[DEBUG IRGEN] visitStmt: s[96]=96; +[DEBUG IRGEN] HandleAssignStmt: s[96]=96; +[DEBUG IRGEN] EvalExpr: 96 +[DEBUG IRGEN] visitAddExp: 96 +[DEBUG IRGEN] visitMulExp: 96 +[DEBUG IRGEN] visitPrimaryExp: 96 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 96 created as 0x560d55b927a0 +[DEBUG] EvalExpr: success, result = 0x560d55b927a0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 96 +[DEBUG IRGEN] visitAddExp: 96 +[DEBUG IRGEN] visitMulExp: 96 +[DEBUG IRGEN] visitPrimaryExp: 96 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 96 created as 0x560d55b927a0 +[DEBUG] EvalExpr: success, result = 0x560d55b927a0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}} +[DEBUG IRGEN] visitStmt: if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}} +[DEBUG IRGEN] HandleIfStmt: if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 97 +[DEBUG IRGEN] visitMulExp: 97 +[DEBUG IRGEN] visitPrimaryExp: 97 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 97 created as 0x560d55b93250 +[DEBUG] visitRelExp: left=0x560d55b931d0, type=int, right=0x560d55b93250, type=int +[DEBUG IF] Creating condbr: %t403 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}} +[DEBUG IRGEN] visitBlock: {s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}} +[DEBUG IRGEN] visitBlockItem: s[97]=97; +[DEBUG IRGEN] visitStmt: s[97]=97; +[DEBUG IRGEN] HandleAssignStmt: s[97]=97; +[DEBUG IRGEN] EvalExpr: 97 +[DEBUG IRGEN] visitAddExp: 97 +[DEBUG IRGEN] visitMulExp: 97 +[DEBUG IRGEN] visitPrimaryExp: 97 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 97 created as 0x560d55b93250 +[DEBUG] EvalExpr: success, result = 0x560d55b93250 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 97 +[DEBUG IRGEN] visitAddExp: 97 +[DEBUG IRGEN] visitMulExp: 97 +[DEBUG IRGEN] visitPrimaryExp: 97 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 97 created as 0x560d55b93250 +[DEBUG] EvalExpr: success, result = 0x560d55b93250 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>98){s[98]=98;if(i>99){s[99]=99;}} +[DEBUG IRGEN] visitStmt: if(i>98){s[98]=98;if(i>99){s[99]=99;}} +[DEBUG IRGEN] HandleIfStmt: if(i>98){s[98]=98;if(i>99){s[99]=99;}} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 98 +[DEBUG IRGEN] visitMulExp: 98 +[DEBUG IRGEN] visitPrimaryExp: 98 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 98 created as 0x560d55b938e0 +[DEBUG] visitRelExp: left=0x560d55b93860, type=int, right=0x560d55b938e0, type=int +[DEBUG IF] Creating condbr: %t406 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[98]=98;if(i>99){s[99]=99;}} +[DEBUG IRGEN] visitBlock: {s[98]=98;if(i>99){s[99]=99;}} +[DEBUG IRGEN] visitBlockItem: s[98]=98; +[DEBUG IRGEN] visitStmt: s[98]=98; +[DEBUG IRGEN] HandleAssignStmt: s[98]=98; +[DEBUG IRGEN] EvalExpr: 98 +[DEBUG IRGEN] visitAddExp: 98 +[DEBUG IRGEN] visitMulExp: 98 +[DEBUG IRGEN] visitPrimaryExp: 98 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 98 created as 0x560d55b938e0 +[DEBUG] EvalExpr: success, result = 0x560d55b938e0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 98 +[DEBUG IRGEN] visitAddExp: 98 +[DEBUG IRGEN] visitMulExp: 98 +[DEBUG IRGEN] visitPrimaryExp: 98 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 98 created as 0x560d55b938e0 +[DEBUG] EvalExpr: success, result = 0x560d55b938e0 +[DEBUG] current insert block: then +[DEBUG IRGEN] visitBlockItem: if(i>99){s[99]=99;} +[DEBUG IRGEN] visitStmt: if(i>99){s[99]=99;} +[DEBUG IRGEN] HandleIfStmt: if(i>99){s[99]=99;} +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: then +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: 99 +[DEBUG IRGEN] visitMulExp: 99 +[DEBUG IRGEN] visitPrimaryExp: 99 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 99 created as 0x560d55b93fc0 +[DEBUG] visitRelExp: left=0x560d55b93f40, type=int, right=0x560d55b93fc0, type=int +[DEBUG IF] Creating condbr: %t409 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {s[99]=99;} +[DEBUG IRGEN] visitBlock: {s[99]=99;} +[DEBUG IRGEN] visitBlockItem: s[99]=99; +[DEBUG IRGEN] visitStmt: s[99]=99; +[DEBUG IRGEN] HandleAssignStmt: s[99]=99; +[DEBUG IRGEN] EvalExpr: 99 +[DEBUG IRGEN] visitAddExp: 99 +[DEBUG IRGEN] visitMulExp: 99 +[DEBUG IRGEN] visitPrimaryExp: 99 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 99 created as 0x560d55b93fc0 +[DEBUG] EvalExpr: success, result = 0x560d55b93fc0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 +[DEBUG IRGEN] EvalExpr: 99 +[DEBUG IRGEN] visitAddExp: 99 +[DEBUG IRGEN] visitMulExp: 99 +[DEBUG IRGEN] visitPrimaryExp: 99 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 99 created as 0x560d55b93fc0 +[DEBUG] EvalExpr: success, result = 0x560d55b93fc0 +[DEBUG] current insert block: then +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IF] then branch terminated: 0 +[DEBUG IF] Adding br to merge block from then +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=0, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IRGEN] visitBlockItem: j=j+1; +[DEBUG IRGEN] visitStmt: j=j+1; +[DEBUG IRGEN] HandleAssignStmt: j=j+1; +[DEBUG IRGEN] EvalExpr: j+1 +[DEBUG IRGEN] visitAddExp: j+1 +[DEBUG IRGEN] visitAddExp: j +[DEBUG IRGEN] visitMulExp: j +[DEBUG IRGEN] visitPrimaryExp: j +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: j +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x560d55b656a0 +[DEBUG] visitAddExp: left=0x560d55b988d0, type=int, right=0x560d55b656a0, type=int +[DEBUG] EvalExpr: success, result = 0x560d55b989c0 +[DEBUG] HandleAssignStmt: assigning to j +[DEBUG] HandleAssignStmt: found in storage_map_ for j, ptr = 0x560d55b5cd80 +[DEBUG] HandleAssignStmt: scalar assignment to j, ptr = 0x560d55b5cd80, rhs = 0x560d55b989c0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: merge +[DEBUG IRGEN] visitBlockItem: intm=0; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: m +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 m +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 0 +[DEBUG IRGEN] visitAddExp: 0 +[DEBUG IRGEN] visitMulExp: 0 +[DEBUG IRGEN] visitPrimaryExp: 0 +[DEBUG] visitPrimaryExp +[DEBUG] EvalExpr: success, result = 0x560d55b3f750 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: merge +[DEBUG IRGEN] visitBlockItem: while(m<100){sum=sum+s[m];m=m+1;} +[DEBUG IRGEN] visitStmt: while(m<100){sum=sum+s[m];m=m+1;} +[DEBUG IRGEN] HandleWhileStmt: while(m<100){sum=sum+s[m];m=m+1;} +[DEBUG WHILE] Current insert block before while: merge +[DEBUG WHILE] condBlock: while.cond +[DEBUG WHILE] bodyBlock: while.body +[DEBUG WHILE] exitBlock: while.exit +[DEBUG WHILE] Adding br to condBlock from current block +[DEBUG WHILE] loopStack size: 2 +[DEBUG WHILE] Generating condition in block: while.cond +[DEBUG IRGEN] visitAddExp: m +[DEBUG IRGEN] visitMulExp: m +[DEBUG IRGEN] visitPrimaryExp: m +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: m +[DEBUG IRGEN] visitAddExp: 100 +[DEBUG IRGEN] visitMulExp: 100 +[DEBUG IRGEN] visitPrimaryExp: 100 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 100 created as 0x560d55b651b0 +[DEBUG] visitRelExp: left=0x560d55b98f80, type=int, right=0x560d55b651b0, type=int +[DEBUG WHILE] condBlock has terminator: 1 +[DEBUG WHILE] Generating body in block: while.body +[DEBUG IRGEN] visitStmt: {sum=sum+s[m];m=m+1;} +[DEBUG IRGEN] visitBlock: {sum=sum+s[m];m=m+1;} +[DEBUG IRGEN] visitBlockItem: sum=sum+s[m]; +[DEBUG IRGEN] visitStmt: sum=sum+s[m]; +[DEBUG IRGEN] HandleAssignStmt: sum=sum+s[m]; +[DEBUG IRGEN] EvalExpr: sum+s[m] +[DEBUG IRGEN] visitAddExp: sum+s[m] +[DEBUG IRGEN] visitAddExp: sum +[DEBUG IRGEN] visitMulExp: sum +[DEBUG IRGEN] visitPrimaryExp: sum +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: sum +[DEBUG IRGEN] visitMulExp: s[m] +[DEBUG IRGEN] visitPrimaryExp: s[m] +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: s +[DEBUG IRGEN] EvalExpr: m +[DEBUG IRGEN] visitAddExp: m +[DEBUG IRGEN] visitMulExp: m +[DEBUG IRGEN] visitPrimaryExp: m +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: m +[DEBUG] EvalExpr: success, result = 0x560d55b992e0 +[DEBUG] visitAddExp: left=0x560d55b99220, type=int, right=0x560d55b99450, type=int +[DEBUG] EvalExpr: success, result = 0x560d55b994d0 +[DEBUG] HandleAssignStmt: assigning to sum +[DEBUG] HandleAssignStmt: found in storage_map_ for sum, ptr = 0x560d559ff670 +[DEBUG] HandleAssignStmt: scalar assignment to sum, ptr = 0x560d559ff670, rhs = 0x560d55b994d0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: while.body +[DEBUG IRGEN] visitBlockItem: m=m+1; +[DEBUG IRGEN] visitStmt: m=m+1; +[DEBUG IRGEN] HandleAssignStmt: m=m+1; +[DEBUG IRGEN] EvalExpr: m+1 +[DEBUG IRGEN] visitAddExp: m+1 +[DEBUG IRGEN] visitAddExp: m +[DEBUG IRGEN] visitMulExp: m +[DEBUG IRGEN] visitPrimaryExp: m +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: m +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x560d55b656a0 +[DEBUG] visitAddExp: left=0x560d55b99730, type=int, right=0x560d55b656a0, type=int +[DEBUG] EvalExpr: success, result = 0x560d55b997b0 +[DEBUG] HandleAssignStmt: assigning to m +[DEBUG] HandleAssignStmt: found in storage_map_ for m, ptr = 0x560d55b98b30 +[DEBUG] HandleAssignStmt: scalar assignment to m, ptr = 0x560d55b98b30, rhs = 0x560d55b997b0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: while.body +[DEBUG WHILE] body terminated: 0 +[DEBUG WHILE] Adding br to condBlock from body +[DEBUG WHILE] bodyBlock has terminator: 1 +[DEBUG WHILE] loopStack size after pop: 1 +[DEBUG WHILE] Setting insert point to exitBlock: while.exit +[DEBUG WHILE] exitBlock has terminator before return: 0 +[DEBUG] current insert block: while.exit +[DEBUG IRGEN] visitBlockItem: sum=sum%65535; +[DEBUG IRGEN] visitStmt: sum=sum%65535; +[DEBUG IRGEN] HandleAssignStmt: sum=sum%65535; +[DEBUG IRGEN] EvalExpr: sum%65535 +[DEBUG IRGEN] visitAddExp: sum%65535 +[DEBUG IRGEN] visitMulExp: sum%65535 +[DEBUG IRGEN] visitMulExp: sum +[DEBUG IRGEN] visitPrimaryExp: sum +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: sum +[DEBUG IRGEN] visitPrimaryExp: 65535 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 65535 created as 0x560d55b99b10 +[DEBUG] visitMulExp: left=0x560d55b99a90, type=int, right=0x560d55b99b10, type=int +[DEBUG] EvalExpr: success, result = 0x560d55b99b90 +[DEBUG] HandleAssignStmt: assigning to sum +[DEBUG] HandleAssignStmt: found in storage_map_ for sum, ptr = 0x560d559ff670 +[DEBUG] HandleAssignStmt: scalar assignment to sum, ptr = 0x560d559ff670, rhs = 0x560d55b99b90 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: while.exit +[DEBUG WHILE] body terminated: 0 +[DEBUG WHILE] Adding br to condBlock from body +[DEBUG WHILE] bodyBlock has terminator: 1 +[DEBUG WHILE] loopStack size after pop: 0 +[DEBUG WHILE] Setting insert point to exitBlock: while.exit +[DEBUG WHILE] exitBlock has terminator before return: 0 +[DEBUG] current insert block: while.exit +[DEBUG IRGEN] visitBlockItem: returnsum; +[DEBUG IRGEN] visitStmt: returnsum; +[DEBUG IRGEN] HandleReturnStmt: returnsum; +[DEBUG IRGEN] EvalExpr: sum +[DEBUG IRGEN] visitAddExp: sum +[DEBUG IRGEN] visitMulExp: sum +[DEBUG IRGEN] visitPrimaryExp: sum +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: sum +[DEBUG] EvalExpr: success, result = 0x560d55b99e30 +[DEBUG] visitFuncDef: 函数 func 生成完成 +[DEBUG IRGEN] visitFuncDef: main +[DEBUG] visitFuncDef: 创建函数 main,返回类型: int,参数数量: 0 +[DEBUG] visitFuncDef: 函数对象地址: 0x560d55b99f90 +[DEBUG] visitFuncDef: 开始生成函数体 +[DEBUG IRGEN] visitBlock: {starttime();intloopcount=getint();putint(func(loopcount));putch(10);stoptime();return0;} +[DEBUG IRGEN] visitBlockItem: starttime(); +[DEBUG IRGEN] visitStmt: starttime(); +[DEBUG IRGEN] EvalExpr: starttime() +[DEBUG IRGEN] visitAddExp: starttime() +[DEBUG IRGEN] visitMulExp: starttime() +[DEBUG IRGEN] visitCallExp: 调用函数 starttime +[DEBUG] EvalExpr: success, result = 0x560d55b3f750 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: intloopcount=getint(); +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: loopcount +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 loopcount +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: getint() +[DEBUG IRGEN] visitAddExp: getint() +[DEBUG IRGEN] visitMulExp: getint() +[DEBUG IRGEN] visitCallExp: 调用函数 getint +[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 0x560d55b9a150 +[DEBUG] EvalExpr: success, result = 0x560d55b9a150 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: putint(func(loopcount)); +[DEBUG IRGEN] visitStmt: putint(func(loopcount)); +[DEBUG IRGEN] EvalExpr: putint(func(loopcount)) +[DEBUG IRGEN] visitAddExp: putint(func(loopcount)) +[DEBUG IRGEN] visitMulExp: putint(func(loopcount)) +[DEBUG IRGEN] visitCallExp: 调用函数 putint +[DEBUG IRGEN] EvalExpr: func(loopcount) +[DEBUG IRGEN] visitAddExp: func(loopcount) +[DEBUG IRGEN] visitMulExp: func(loopcount) +[DEBUG IRGEN] visitCallExp: 调用函数 func +[DEBUG IRGEN] EvalExpr: loopcount +[DEBUG IRGEN] visitAddExp: loopcount +[DEBUG IRGEN] visitMulExp: loopcount +[DEBUG IRGEN] visitPrimaryExp: loopcount +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: loopcount +[DEBUG] EvalExpr: success, result = 0x560d55b9a2a0 +[DEBUG IRGEN] visitCallExp: 收集到 1 个参数 +[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 0x560d55b9a340 +[DEBUG] EvalExpr: success, result = 0x560d55b9a340 +[DEBUG IRGEN] visitCallExp: 收集到 1 个参数 +[DEBUG] EvalExpr: success, result = 0x560d55b3f750 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: putch(10); +[DEBUG IRGEN] visitStmt: putch(10); +[DEBUG IRGEN] EvalExpr: putch(10) +[DEBUG IRGEN] visitAddExp: putch(10) +[DEBUG IRGEN] visitMulExp: putch(10) +[DEBUG IRGEN] visitCallExp: 调用函数 putch +[DEBUG IRGEN] EvalExpr: 10 +[DEBUG IRGEN] visitAddExp: 10 +[DEBUG IRGEN] visitMulExp: 10 +[DEBUG IRGEN] visitPrimaryExp: 10 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 10 created as 0x560d55b6a090 +[DEBUG] EvalExpr: success, result = 0x560d55b6a090 +[DEBUG IRGEN] visitCallExp: 收集到 1 个参数 +[DEBUG] EvalExpr: success, result = 0x560d55b3f750 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: stoptime(); +[DEBUG IRGEN] visitStmt: stoptime(); +[DEBUG IRGEN] EvalExpr: stoptime() +[DEBUG IRGEN] visitAddExp: stoptime() +[DEBUG IRGEN] visitMulExp: stoptime() +[DEBUG IRGEN] visitCallExp: 调用函数 stoptime +[DEBUG] EvalExpr: success, result = 0x560d55b3f750 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: return0; +[DEBUG IRGEN] visitStmt: return0; +[DEBUG IRGEN] HandleReturnStmt: return0; +[DEBUG IRGEN] EvalExpr: 0 +[DEBUG IRGEN] visitAddExp: 0 +[DEBUG IRGEN] visitMulExp: 0 +[DEBUG IRGEN] visitPrimaryExp: 0 +[DEBUG] visitPrimaryExp +[DEBUG] EvalExpr: success, result = 0x560d55b3f750 +[DEBUG] visitFuncDef: 函数 main 生成完成 +define i32 @getint() { +entry: +} +define i32 @getch() { +entry: +} +define i32 @getarray() { +entry: +} +define void @putint() { +entry: +} +define void @putch() { +entry: +} +define void @putarray() { +entry: +} +define void @puts() { +entry: +} +define void @_sysy_starttime() { +entry: +} +define void @_sysy_stoptime() { +entry: +} +define void @starttime() { +entry: +} +define void @stoptime() { +entry: +} +define i32 @read_map() { +entry: +} +define i32 @float_eq() { +entry: +} +define i32* @memset() { +entry: +} +define i32 @func(i32 %n) { +entry: + %t0 = alloca i32 + store i32 %n, i32* %t0 + %t1_sum = alloca i32 + store i32 0, i32* %t1_sum + %t2_i = alloca i32 + store i32 200, i32* %t2_i + %t3_j = alloca i32 + store i32 0, i32* %t3_j + %t4_s_0 = alloca i32 + %t5_s_1 = alloca i32 + %t6_s_2 = alloca i32 + %t7_s_3 = alloca i32 + %t8_s_4 = alloca i32 + %t9_s_5 = alloca i32 + %t10_s_6 = alloca i32 + %t11_s_7 = alloca i32 + %t12_s_8 = alloca i32 + %t13_s_9 = alloca i32 + %t14_s_10 = alloca i32 + %t15_s_11 = alloca i32 + %t16_s_12 = alloca i32 + %t17_s_13 = alloca i32 + %t18_s_14 = alloca i32 + %t19_s_15 = alloca i32 + %t20_s_16 = alloca i32 + %t21_s_17 = alloca i32 + %t22_s_18 = alloca i32 + %t23_s_19 = alloca i32 + %t24_s_20 = alloca i32 + %t25_s_21 = alloca i32 + %t26_s_22 = alloca i32 + %t27_s_23 = alloca i32 + %t28_s_24 = alloca i32 + %t29_s_25 = alloca i32 + %t30_s_26 = alloca i32 + %t31_s_27 = alloca i32 + %t32_s_28 = alloca i32 + %t33_s_29 = alloca i32 + %t34_s_30 = alloca i32 + %t35_s_31 = alloca i32 + %t36_s_32 = alloca i32 + %t37_s_33 = alloca i32 + %t38_s_34 = alloca i32 + %t39_s_35 = alloca i32 + %t40_s_36 = alloca i32 + %t41_s_37 = alloca i32 + %t42_s_38 = alloca i32 + %t43_s_39 = alloca i32 + %t44_s_40 = alloca i32 + %t45_s_41 = alloca i32 + %t46_s_42 = alloca i32 + %t47_s_43 = alloca i32 + %t48_s_44 = alloca i32 + %t49_s_45 = alloca i32 + %t50_s_46 = alloca i32 + %t51_s_47 = alloca i32 + %t52_s_48 = alloca i32 + %t53_s_49 = alloca i32 + %t54_s_50 = alloca i32 + %t55_s_51 = alloca i32 + %t56_s_52 = alloca i32 + %t57_s_53 = alloca i32 + %t58_s_54 = alloca i32 + %t59_s_55 = alloca i32 + %t60_s_56 = alloca i32 + %t61_s_57 = alloca i32 + %t62_s_58 = alloca i32 + %t63_s_59 = alloca i32 + %t64_s_60 = alloca i32 + %t65_s_61 = alloca i32 + %t66_s_62 = alloca i32 + %t67_s_63 = alloca i32 + %t68_s_64 = alloca i32 + %t69_s_65 = alloca i32 + %t70_s_66 = alloca i32 + %t71_s_67 = alloca i32 + %t72_s_68 = alloca i32 + %t73_s_69 = alloca i32 + %t74_s_70 = alloca i32 + %t75_s_71 = alloca i32 + %t76_s_72 = alloca i32 + %t77_s_73 = alloca i32 + %t78_s_74 = alloca i32 + %t79_s_75 = alloca i32 + %t80_s_76 = alloca i32 + %t81_s_77 = alloca i32 + %t82_s_78 = alloca i32 + %t83_s_79 = alloca i32 + %t84_s_80 = alloca i32 + %t85_s_81 = alloca i32 + %t86_s_82 = alloca i32 + %t87_s_83 = alloca i32 + %t88_s_84 = alloca i32 + %t89_s_85 = alloca i32 + %t90_s_86 = alloca i32 + %t91_s_87 = alloca i32 + %t92_s_88 = alloca i32 + %t93_s_89 = alloca i32 + %t94_s_90 = alloca i32 + %t95_s_91 = alloca i32 + %t96_s_92 = alloca i32 + %t97_s_93 = alloca i32 + %t98_s_94 = alloca i32 + %t99_s_95 = alloca i32 + %t100_s_96 = alloca i32 + %t101_s_97 = alloca i32 + %t102_s_98 = alloca i32 + %t103_s_99 = alloca i32 + store i32 0, i32* %t4_s_0 + store i32 0, i32* %t5_s_1 + store i32 0, i32* %t6_s_2 + store i32 0, i32* %t7_s_3 + store i32 0, i32* %t8_s_4 + store i32 0, i32* %t9_s_5 + store i32 0, i32* %t10_s_6 + store i32 0, i32* %t11_s_7 + store i32 0, i32* %t12_s_8 + store i32 0, i32* %t13_s_9 + store i32 0, i32* %t14_s_10 + store i32 0, i32* %t15_s_11 + store i32 0, i32* %t16_s_12 + store i32 0, i32* %t17_s_13 + store i32 0, i32* %t18_s_14 + store i32 0, i32* %t19_s_15 + store i32 0, i32* %t20_s_16 + store i32 0, i32* %t21_s_17 + store i32 0, i32* %t22_s_18 + store i32 0, i32* %t23_s_19 + store i32 0, i32* %t24_s_20 + store i32 0, i32* %t25_s_21 + store i32 0, i32* %t26_s_22 + store i32 0, i32* %t27_s_23 + store i32 0, i32* %t28_s_24 + store i32 0, i32* %t29_s_25 + store i32 0, i32* %t30_s_26 + store i32 0, i32* %t31_s_27 + store i32 0, i32* %t32_s_28 + store i32 0, i32* %t33_s_29 + store i32 0, i32* %t34_s_30 + store i32 0, i32* %t35_s_31 + store i32 0, i32* %t36_s_32 + store i32 0, i32* %t37_s_33 + store i32 0, i32* %t38_s_34 + store i32 0, i32* %t39_s_35 + store i32 0, i32* %t40_s_36 + store i32 0, i32* %t41_s_37 + store i32 0, i32* %t42_s_38 + store i32 0, i32* %t43_s_39 + store i32 0, i32* %t44_s_40 + store i32 0, i32* %t45_s_41 + store i32 0, i32* %t46_s_42 + store i32 0, i32* %t47_s_43 + store i32 0, i32* %t48_s_44 + store i32 0, i32* %t49_s_45 + store i32 0, i32* %t50_s_46 + store i32 0, i32* %t51_s_47 + store i32 0, i32* %t52_s_48 + store i32 0, i32* %t53_s_49 + store i32 0, i32* %t54_s_50 + store i32 0, i32* %t55_s_51 + store i32 0, i32* %t56_s_52 + store i32 0, i32* %t57_s_53 + store i32 0, i32* %t58_s_54 + store i32 0, i32* %t59_s_55 + store i32 0, i32* %t60_s_56 + store i32 0, i32* %t61_s_57 + store i32 0, i32* %t62_s_58 + store i32 0, i32* %t63_s_59 + store i32 0, i32* %t64_s_60 + store i32 0, i32* %t65_s_61 + store i32 0, i32* %t66_s_62 + store i32 0, i32* %t67_s_63 + store i32 0, i32* %t68_s_64 + store i32 0, i32* %t69_s_65 + store i32 0, i32* %t70_s_66 + store i32 0, i32* %t71_s_67 + store i32 0, i32* %t72_s_68 + store i32 0, i32* %t73_s_69 + store i32 0, i32* %t74_s_70 + store i32 0, i32* %t75_s_71 + store i32 0, i32* %t76_s_72 + store i32 0, i32* %t77_s_73 + store i32 0, i32* %t78_s_74 + store i32 0, i32* %t79_s_75 + store i32 0, i32* %t80_s_76 + store i32 0, i32* %t81_s_77 + store i32 0, i32* %t82_s_78 + store i32 0, i32* %t83_s_79 + store i32 0, i32* %t84_s_80 + store i32 0, i32* %t85_s_81 + store i32 0, i32* %t86_s_82 + store i32 0, i32* %t87_s_83 + store i32 0, i32* %t88_s_84 + store i32 0, i32* %t89_s_85 + store i32 0, i32* %t90_s_86 + store i32 0, i32* %t91_s_87 + store i32 0, i32* %t92_s_88 + store i32 0, i32* %t93_s_89 + store i32 0, i32* %t94_s_90 + store i32 0, i32* %t95_s_91 + store i32 0, i32* %t96_s_92 + store i32 0, i32* %t97_s_93 + store i32 0, i32* %t98_s_94 + store i32 0, i32* %t99_s_95 + store i32 0, i32* %t100_s_96 + store i32 0, i32* %t101_s_97 + store i32 0, i32* %t102_s_98 + store i32 0, i32* %t103_s_99 + %t104_m = alloca i32 + store i32 0, i32* %t104_m + br label %while.cond +while.cond: + %t105 = load i32, i32* %t104_m + %t106 = icmp slt i32 %t105, 100 + br i1 %t106, label %while.body, label %while.exit +while.body: + %t107 = load i32, i32* %t104_m + %t108 = getelementptr i32* (%t4_s_0, 0, %t107) + store i32 0, i32* %t108 + %t109 = load i32, i32* %t104_m + %t110 = add i32 %t109, 1 + store i32 %t110, i32* %t104_m + br label %while.cond +while.exit: + br label %while.cond +while.cond: + %t111 = load i32, i32* %t3_j + %t112 = load i32, i32* %t0 + %t113 = icmp slt i32 %t111, %t112 + br i1 %t113, label %while.body, label %while.exit +while.body: + %t114 = load i32, i32* %t2_i + %t115 = icmp sgt i32 %t114, 1 + br i1 %t115, label %then, label %merge +while.exit: + %t425 = load i32, i32* %t1_sum + ret i32 %t425 +then: + %t116 = getelementptr i32* (%t4_s_0, 0, 1) + store i32 1, i32* %t116 + %t117 = load i32, i32* %t2_i + %t118 = icmp sgt i32 %t117, 2 + br i1 %t118, label %then, label %merge +merge: + %t411 = load i32, i32* %t3_j + %t412 = add i32 %t411, 1 + store i32 %t412, i32* %t3_j + %t413_m = alloca i32 + store i32 0, i32* %t413_m + br label %while.cond +then: + %t119 = getelementptr i32* (%t4_s_0, 0, 2) + store i32 2, i32* %t119 + %t120 = load i32, i32* %t2_i + %t121 = icmp sgt i32 %t120, 3 + br i1 %t121, label %then, label %merge +merge: + br label %merge +then: + %t122 = getelementptr i32* (%t4_s_0, 0, 3) + store i32 3, i32* %t122 + %t123 = load i32, i32* %t2_i + %t124 = icmp sgt i32 %t123, 4 + br i1 %t124, label %then, label %merge +merge: + br label %merge +then: + %t125 = getelementptr i32* (%t4_s_0, 0, 4) + store i32 4, i32* %t125 + %t126 = load i32, i32* %t2_i + %t127 = icmp sgt i32 %t126, 5 + br i1 %t127, label %then, label %merge +merge: + br label %merge +then: + %t128 = getelementptr i32* (%t4_s_0, 0, 5) + store i32 5, i32* %t128 + %t129 = load i32, i32* %t2_i + %t130 = icmp sgt i32 %t129, 6 + br i1 %t130, label %then, label %merge +merge: + br label %merge +then: + %t131 = getelementptr i32* (%t4_s_0, 0, 6) + store i32 6, i32* %t131 + %t132 = load i32, i32* %t2_i + %t133 = icmp sgt i32 %t132, 7 + br i1 %t133, label %then, label %merge +merge: + br label %merge +then: + %t134 = getelementptr i32* (%t4_s_0, 0, 7) + store i32 7, i32* %t134 + %t135 = load i32, i32* %t2_i + %t136 = icmp sgt i32 %t135, 8 + br i1 %t136, label %then, label %merge +merge: + br label %merge +then: + %t137 = getelementptr i32* (%t4_s_0, 0, 8) + store i32 8, i32* %t137 + %t138 = load i32, i32* %t2_i + %t139 = icmp sgt i32 %t138, 9 + br i1 %t139, label %then, label %merge +merge: + br label %merge +then: + %t140 = getelementptr i32* (%t4_s_0, 0, 9) + store i32 9, i32* %t140 + %t141 = load i32, i32* %t2_i + %t142 = icmp sgt i32 %t141, 10 + br i1 %t142, label %then, label %merge +merge: + br label %merge +then: + %t143 = getelementptr i32* (%t4_s_0, 0, 10) + store i32 10, i32* %t143 + %t144 = load i32, i32* %t2_i + %t145 = icmp sgt i32 %t144, 11 + br i1 %t145, label %then, label %merge +merge: + br label %merge +then: + %t146 = getelementptr i32* (%t4_s_0, 0, 11) + store i32 11, i32* %t146 + %t147 = load i32, i32* %t2_i + %t148 = icmp sgt i32 %t147, 12 + br i1 %t148, label %then, label %merge +merge: + br label %merge +then: + %t149 = getelementptr i32* (%t4_s_0, 0, 12) + store i32 12, i32* %t149 + %t150 = load i32, i32* %t2_i + %t151 = icmp sgt i32 %t150, 13 + br i1 %t151, label %then, label %merge +merge: + br label %merge +then: + %t152 = getelementptr i32* (%t4_s_0, 0, 13) + store i32 13, i32* %t152 + %t153 = load i32, i32* %t2_i + %t154 = icmp sgt i32 %t153, 14 + br i1 %t154, label %then, label %merge +merge: + br label %merge +then: + %t155 = getelementptr i32* (%t4_s_0, 0, 14) + store i32 14, i32* %t155 + %t156 = load i32, i32* %t2_i + %t157 = icmp sgt i32 %t156, 15 + br i1 %t157, label %then, label %merge +merge: + br label %merge +then: + %t158 = getelementptr i32* (%t4_s_0, 0, 15) + store i32 15, i32* %t158 + %t159 = load i32, i32* %t2_i + %t160 = icmp sgt i32 %t159, 16 + br i1 %t160, label %then, label %merge +merge: + br label %merge +then: + %t161 = getelementptr i32* (%t4_s_0, 0, 16) + store i32 16, i32* %t161 + %t162 = load i32, i32* %t2_i + %t163 = icmp sgt i32 %t162, 17 + br i1 %t163, label %then, label %merge +merge: + br label %merge +then: + %t164 = getelementptr i32* (%t4_s_0, 0, 17) + store i32 17, i32* %t164 + %t165 = load i32, i32* %t2_i + %t166 = icmp sgt i32 %t165, 18 + br i1 %t166, label %then, label %merge +merge: + br label %merge +then: + %t167 = getelementptr i32* (%t4_s_0, 0, 18) + store i32 18, i32* %t167 + %t168 = load i32, i32* %t2_i + %t169 = icmp sgt i32 %t168, 19 + br i1 %t169, label %then, label %merge +merge: + br label %merge +then: + %t170 = getelementptr i32* (%t4_s_0, 0, 19) + store i32 19, i32* %t170 + %t171 = load i32, i32* %t2_i + %t172 = icmp sgt i32 %t171, 20 + br i1 %t172, label %then, label %merge +merge: + br label %merge +then: + %t173 = getelementptr i32* (%t4_s_0, 0, 20) + store i32 20, i32* %t173 + %t174 = load i32, i32* %t2_i + %t175 = icmp sgt i32 %t174, 21 + br i1 %t175, label %then, label %merge +merge: + br label %merge +then: + %t176 = getelementptr i32* (%t4_s_0, 0, 21) + store i32 21, i32* %t176 + %t177 = load i32, i32* %t2_i + %t178 = icmp sgt i32 %t177, 22 + br i1 %t178, label %then, label %merge +merge: + br label %merge +then: + %t179 = getelementptr i32* (%t4_s_0, 0, 22) + store i32 22, i32* %t179 + %t180 = load i32, i32* %t2_i + %t181 = icmp sgt i32 %t180, 23 + br i1 %t181, label %then, label %merge +merge: + br label %merge +then: + %t182 = getelementptr i32* (%t4_s_0, 0, 23) + store i32 23, i32* %t182 + %t183 = load i32, i32* %t2_i + %t184 = icmp sgt i32 %t183, 24 + br i1 %t184, label %then, label %merge +merge: + br label %merge +then: + %t185 = getelementptr i32* (%t4_s_0, 0, 24) + store i32 24, i32* %t185 + %t186 = load i32, i32* %t2_i + %t187 = icmp sgt i32 %t186, 25 + br i1 %t187, label %then, label %merge +merge: + br label %merge +then: + %t188 = getelementptr i32* (%t4_s_0, 0, 25) + store i32 25, i32* %t188 + %t189 = load i32, i32* %t2_i + %t190 = icmp sgt i32 %t189, 26 + br i1 %t190, label %then, label %merge +merge: + br label %merge +then: + %t191 = getelementptr i32* (%t4_s_0, 0, 26) + store i32 26, i32* %t191 + %t192 = load i32, i32* %t2_i + %t193 = icmp sgt i32 %t192, 27 + br i1 %t193, label %then, label %merge +merge: + br label %merge +then: + %t194 = getelementptr i32* (%t4_s_0, 0, 27) + store i32 27, i32* %t194 + %t195 = load i32, i32* %t2_i + %t196 = icmp sgt i32 %t195, 28 + br i1 %t196, label %then, label %merge +merge: + br label %merge +then: + %t197 = getelementptr i32* (%t4_s_0, 0, 28) + store i32 28, i32* %t197 + %t198 = load i32, i32* %t2_i + %t199 = icmp sgt i32 %t198, 29 + br i1 %t199, label %then, label %merge +merge: + br label %merge +then: + %t200 = getelementptr i32* (%t4_s_0, 0, 29) + store i32 29, i32* %t200 + %t201 = load i32, i32* %t2_i + %t202 = icmp sgt i32 %t201, 30 + br i1 %t202, label %then, label %merge +merge: + br label %merge +then: + %t203 = getelementptr i32* (%t4_s_0, 0, 30) + store i32 30, i32* %t203 + %t204 = load i32, i32* %t2_i + %t205 = icmp sgt i32 %t204, 31 + br i1 %t205, label %then, label %merge +merge: + br label %merge +then: + %t206 = getelementptr i32* (%t4_s_0, 0, 31) + store i32 31, i32* %t206 + %t207 = load i32, i32* %t2_i + %t208 = icmp sgt i32 %t207, 32 + br i1 %t208, label %then, label %merge +merge: + br label %merge +then: + %t209 = getelementptr i32* (%t4_s_0, 0, 32) + store i32 32, i32* %t209 + %t210 = load i32, i32* %t2_i + %t211 = icmp sgt i32 %t210, 33 + br i1 %t211, label %then, label %merge +merge: + br label %merge +then: + %t212 = getelementptr i32* (%t4_s_0, 0, 33) + store i32 33, i32* %t212 + %t213 = load i32, i32* %t2_i + %t214 = icmp sgt i32 %t213, 34 + br i1 %t214, label %then, label %merge +merge: + br label %merge +then: + %t215 = getelementptr i32* (%t4_s_0, 0, 34) + store i32 34, i32* %t215 + %t216 = load i32, i32* %t2_i + %t217 = icmp sgt i32 %t216, 35 + br i1 %t217, label %then, label %merge +merge: + br label %merge +then: + %t218 = getelementptr i32* (%t4_s_0, 0, 35) + store i32 35, i32* %t218 + %t219 = load i32, i32* %t2_i + %t220 = icmp sgt i32 %t219, 36 + br i1 %t220, label %then, label %merge +merge: + br label %merge +then: + %t221 = getelementptr i32* (%t4_s_0, 0, 36) + store i32 36, i32* %t221 + %t222 = load i32, i32* %t2_i + %t223 = icmp sgt i32 %t222, 37 + br i1 %t223, label %then, label %merge +merge: + br label %merge +then: + %t224 = getelementptr i32* (%t4_s_0, 0, 37) + store i32 37, i32* %t224 + %t225 = load i32, i32* %t2_i + %t226 = icmp sgt i32 %t225, 38 + br i1 %t226, label %then, label %merge +merge: + br label %merge +then: + %t227 = getelementptr i32* (%t4_s_0, 0, 38) + store i32 38, i32* %t227 + %t228 = load i32, i32* %t2_i + %t229 = icmp sgt i32 %t228, 39 + br i1 %t229, label %then, label %merge +merge: + br label %merge +then: + %t230 = getelementptr i32* (%t4_s_0, 0, 39) + store i32 39, i32* %t230 + %t231 = load i32, i32* %t2_i + %t232 = icmp sgt i32 %t231, 40 + br i1 %t232, label %then, label %merge +merge: + br label %merge +then: + %t233 = getelementptr i32* (%t4_s_0, 0, 40) + store i32 40, i32* %t233 + %t234 = load i32, i32* %t2_i + %t235 = icmp sgt i32 %t234, 41 + br i1 %t235, label %then, label %merge +merge: + br label %merge +then: + %t236 = getelementptr i32* (%t4_s_0, 0, 41) + store i32 41, i32* %t236 + %t237 = load i32, i32* %t2_i + %t238 = icmp sgt i32 %t237, 42 + br i1 %t238, label %then, label %merge +merge: + br label %merge +then: + %t239 = getelementptr i32* (%t4_s_0, 0, 42) + store i32 42, i32* %t239 + %t240 = load i32, i32* %t2_i + %t241 = icmp sgt i32 %t240, 43 + br i1 %t241, label %then, label %merge +merge: + br label %merge +then: + %t242 = getelementptr i32* (%t4_s_0, 0, 43) + store i32 43, i32* %t242 + %t243 = load i32, i32* %t2_i + %t244 = icmp sgt i32 %t243, 44 + br i1 %t244, label %then, label %merge +merge: + br label %merge +then: + %t245 = getelementptr i32* (%t4_s_0, 0, 44) + store i32 44, i32* %t245 + %t246 = load i32, i32* %t2_i + %t247 = icmp sgt i32 %t246, 45 + br i1 %t247, label %then, label %merge +merge: + br label %merge +then: + %t248 = getelementptr i32* (%t4_s_0, 0, 45) + store i32 45, i32* %t248 + %t249 = load i32, i32* %t2_i + %t250 = icmp sgt i32 %t249, 46 + br i1 %t250, label %then, label %merge +merge: + br label %merge +then: + %t251 = getelementptr i32* (%t4_s_0, 0, 46) + store i32 46, i32* %t251 + %t252 = load i32, i32* %t2_i + %t253 = icmp sgt i32 %t252, 47 + br i1 %t253, label %then, label %merge +merge: + br label %merge +then: + %t254 = getelementptr i32* (%t4_s_0, 0, 47) + store i32 47, i32* %t254 + %t255 = load i32, i32* %t2_i + %t256 = icmp sgt i32 %t255, 48 + br i1 %t256, label %then, label %merge +merge: + br label %merge +then: + %t257 = getelementptr i32* (%t4_s_0, 0, 48) + store i32 48, i32* %t257 + %t258 = load i32, i32* %t2_i + %t259 = icmp sgt i32 %t258, 49 + br i1 %t259, label %then, label %merge +merge: + br label %merge +then: + %t260 = getelementptr i32* (%t4_s_0, 0, 49) + store i32 49, i32* %t260 + %t261 = load i32, i32* %t2_i + %t262 = icmp sgt i32 %t261, 50 + br i1 %t262, label %then, label %merge +merge: + br label %merge +then: + %t263 = getelementptr i32* (%t4_s_0, 0, 50) + store i32 50, i32* %t263 + %t264 = load i32, i32* %t2_i + %t265 = icmp sgt i32 %t264, 51 + br i1 %t265, label %then, label %merge +merge: + br label %merge +then: + %t266 = getelementptr i32* (%t4_s_0, 0, 51) + store i32 51, i32* %t266 + %t267 = load i32, i32* %t2_i + %t268 = icmp sgt i32 %t267, 52 + br i1 %t268, label %then, label %merge +merge: + br label %merge +then: + %t269 = getelementptr i32* (%t4_s_0, 0, 52) + store i32 52, i32* %t269 + %t270 = load i32, i32* %t2_i + %t271 = icmp sgt i32 %t270, 53 + br i1 %t271, label %then, label %merge +merge: + br label %merge +then: + %t272 = getelementptr i32* (%t4_s_0, 0, 53) + store i32 53, i32* %t272 + %t273 = load i32, i32* %t2_i + %t274 = icmp sgt i32 %t273, 54 + br i1 %t274, label %then, label %merge +merge: + br label %merge +then: + %t275 = getelementptr i32* (%t4_s_0, 0, 54) + store i32 54, i32* %t275 + %t276 = load i32, i32* %t2_i + %t277 = icmp sgt i32 %t276, 55 + br i1 %t277, label %then, label %merge +merge: + br label %merge +then: + %t278 = getelementptr i32* (%t4_s_0, 0, 55) + store i32 55, i32* %t278 + %t279 = load i32, i32* %t2_i + %t280 = icmp sgt i32 %t279, 56 + br i1 %t280, label %then, label %merge +merge: + br label %merge +then: + %t281 = getelementptr i32* (%t4_s_0, 0, 56) + store i32 56, i32* %t281 + %t282 = load i32, i32* %t2_i + %t283 = icmp sgt i32 %t282, 57 + br i1 %t283, label %then, label %merge +merge: + br label %merge +then: + %t284 = getelementptr i32* (%t4_s_0, 0, 57) + store i32 57, i32* %t284 + %t285 = load i32, i32* %t2_i + %t286 = icmp sgt i32 %t285, 58 + br i1 %t286, label %then, label %merge +merge: + br label %merge +then: + %t287 = getelementptr i32* (%t4_s_0, 0, 58) + store i32 58, i32* %t287 + %t288 = load i32, i32* %t2_i + %t289 = icmp sgt i32 %t288, 59 + br i1 %t289, label %then, label %merge +merge: + br label %merge +then: + %t290 = getelementptr i32* (%t4_s_0, 0, 59) + store i32 59, i32* %t290 + %t291 = load i32, i32* %t2_i + %t292 = icmp sgt i32 %t291, 60 + br i1 %t292, label %then, label %merge +merge: + br label %merge +then: + %t293 = getelementptr i32* (%t4_s_0, 0, 60) + store i32 60, i32* %t293 + %t294 = load i32, i32* %t2_i + %t295 = icmp sgt i32 %t294, 61 + br i1 %t295, label %then, label %merge +merge: + br label %merge +then: + %t296 = getelementptr i32* (%t4_s_0, 0, 61) + store i32 61, i32* %t296 + %t297 = load i32, i32* %t2_i + %t298 = icmp sgt i32 %t297, 62 + br i1 %t298, label %then, label %merge +merge: + br label %merge +then: + %t299 = getelementptr i32* (%t4_s_0, 0, 62) + store i32 62, i32* %t299 + %t300 = load i32, i32* %t2_i + %t301 = icmp sgt i32 %t300, 63 + br i1 %t301, label %then, label %merge +merge: + br label %merge +then: + %t302 = getelementptr i32* (%t4_s_0, 0, 63) + store i32 63, i32* %t302 + %t303 = load i32, i32* %t2_i + %t304 = icmp sgt i32 %t303, 64 + br i1 %t304, label %then, label %merge +merge: + br label %merge +then: + %t305 = getelementptr i32* (%t4_s_0, 0, 64) + store i32 64, i32* %t305 + %t306 = load i32, i32* %t2_i + %t307 = icmp sgt i32 %t306, 65 + br i1 %t307, label %then, label %merge +merge: + br label %merge +then: + %t308 = getelementptr i32* (%t4_s_0, 0, 65) + store i32 65, i32* %t308 + %t309 = load i32, i32* %t2_i + %t310 = icmp sgt i32 %t309, 66 + br i1 %t310, label %then, label %merge +merge: + br label %merge +then: + %t311 = getelementptr i32* (%t4_s_0, 0, 66) + store i32 66, i32* %t311 + %t312 = load i32, i32* %t2_i + %t313 = icmp sgt i32 %t312, 67 + br i1 %t313, label %then, label %merge +merge: + br label %merge +then: + %t314 = getelementptr i32* (%t4_s_0, 0, 67) + store i32 67, i32* %t314 + %t315 = load i32, i32* %t2_i + %t316 = icmp sgt i32 %t315, 68 + br i1 %t316, label %then, label %merge +merge: + br label %merge +then: + %t317 = getelementptr i32* (%t4_s_0, 0, 68) + store i32 68, i32* %t317 + %t318 = load i32, i32* %t2_i + %t319 = icmp sgt i32 %t318, 69 + br i1 %t319, label %then, label %merge +merge: + br label %merge +then: + %t320 = getelementptr i32* (%t4_s_0, 0, 69) + store i32 69, i32* %t320 + %t321 = load i32, i32* %t2_i + %t322 = icmp sgt i32 %t321, 70 + br i1 %t322, label %then, label %merge +merge: + br label %merge +then: + %t323 = getelementptr i32* (%t4_s_0, 0, 70) + store i32 70, i32* %t323 + %t324 = load i32, i32* %t2_i + %t325 = icmp sgt i32 %t324, 71 + br i1 %t325, label %then, label %merge +merge: + br label %merge +then: + %t326 = getelementptr i32* (%t4_s_0, 0, 71) + store i32 71, i32* %t326 + %t327 = load i32, i32* %t2_i + %t328 = icmp sgt i32 %t327, 72 + br i1 %t328, label %then, label %merge +merge: + br label %merge +then: + %t329 = getelementptr i32* (%t4_s_0, 0, 72) + store i32 72, i32* %t329 + %t330 = load i32, i32* %t2_i + %t331 = icmp sgt i32 %t330, 73 + br i1 %t331, label %then, label %merge +merge: + br label %merge +then: + %t332 = getelementptr i32* (%t4_s_0, 0, 73) + store i32 73, i32* %t332 + %t333 = load i32, i32* %t2_i + %t334 = icmp sgt i32 %t333, 74 + br i1 %t334, label %then, label %merge +merge: + br label %merge +then: + %t335 = getelementptr i32* (%t4_s_0, 0, 74) + store i32 74, i32* %t335 + %t336 = load i32, i32* %t2_i + %t337 = icmp sgt i32 %t336, 75 + br i1 %t337, label %then, label %merge +merge: + br label %merge +then: + %t338 = getelementptr i32* (%t4_s_0, 0, 75) + store i32 75, i32* %t338 + %t339 = load i32, i32* %t2_i + %t340 = icmp sgt i32 %t339, 76 + br i1 %t340, label %then, label %merge +merge: + br label %merge +then: + %t341 = getelementptr i32* (%t4_s_0, 0, 76) + store i32 76, i32* %t341 + %t342 = load i32, i32* %t2_i + %t343 = icmp sgt i32 %t342, 77 + br i1 %t343, label %then, label %merge +merge: + br label %merge +then: + %t344 = getelementptr i32* (%t4_s_0, 0, 77) + store i32 77, i32* %t344 + %t345 = load i32, i32* %t2_i + %t346 = icmp sgt i32 %t345, 78 + br i1 %t346, label %then, label %merge +merge: + br label %merge +then: + %t347 = getelementptr i32* (%t4_s_0, 0, 78) + store i32 78, i32* %t347 + %t348 = load i32, i32* %t2_i + %t349 = icmp sgt i32 %t348, 79 + br i1 %t349, label %then, label %merge +merge: + br label %merge +then: + %t350 = getelementptr i32* (%t4_s_0, 0, 79) + store i32 79, i32* %t350 + %t351 = load i32, i32* %t2_i + %t352 = icmp sgt i32 %t351, 80 + br i1 %t352, label %then, label %merge +merge: + br label %merge +then: + %t353 = getelementptr i32* (%t4_s_0, 0, 80) + store i32 80, i32* %t353 + %t354 = load i32, i32* %t2_i + %t355 = icmp sgt i32 %t354, 81 + br i1 %t355, label %then, label %merge +merge: + br label %merge +then: + %t356 = getelementptr i32* (%t4_s_0, 0, 81) + store i32 81, i32* %t356 + %t357 = load i32, i32* %t2_i + %t358 = icmp sgt i32 %t357, 82 + br i1 %t358, label %then, label %merge +merge: + br label %merge +then: + %t359 = getelementptr i32* (%t4_s_0, 0, 82) + store i32 82, i32* %t359 + %t360 = load i32, i32* %t2_i + %t361 = icmp sgt i32 %t360, 83 + br i1 %t361, label %then, label %merge +merge: + br label %merge +then: + %t362 = getelementptr i32* (%t4_s_0, 0, 83) + store i32 83, i32* %t362 + %t363 = load i32, i32* %t2_i + %t364 = icmp sgt i32 %t363, 84 + br i1 %t364, label %then, label %merge +merge: + br label %merge +then: + %t365 = getelementptr i32* (%t4_s_0, 0, 84) + store i32 84, i32* %t365 + %t366 = load i32, i32* %t2_i + %t367 = icmp sgt i32 %t366, 85 + br i1 %t367, label %then, label %merge +merge: + br label %merge +then: + %t368 = getelementptr i32* (%t4_s_0, 0, 85) + store i32 85, i32* %t368 + %t369 = load i32, i32* %t2_i + %t370 = icmp sgt i32 %t369, 86 + br i1 %t370, label %then, label %merge +merge: + br label %merge +then: + %t371 = getelementptr i32* (%t4_s_0, 0, 86) + store i32 86, i32* %t371 + %t372 = load i32, i32* %t2_i + %t373 = icmp sgt i32 %t372, 87 + br i1 %t373, label %then, label %merge +merge: + br label %merge +then: + %t374 = getelementptr i32* (%t4_s_0, 0, 87) + store i32 87, i32* %t374 + %t375 = load i32, i32* %t2_i + %t376 = icmp sgt i32 %t375, 88 + br i1 %t376, label %then, label %merge +merge: + br label %merge +then: + %t377 = getelementptr i32* (%t4_s_0, 0, 88) + store i32 88, i32* %t377 + %t378 = load i32, i32* %t2_i + %t379 = icmp sgt i32 %t378, 89 + br i1 %t379, label %then, label %merge +merge: + br label %merge +then: + %t380 = getelementptr i32* (%t4_s_0, 0, 89) + store i32 89, i32* %t380 + %t381 = load i32, i32* %t2_i + %t382 = icmp sgt i32 %t381, 90 + br i1 %t382, label %then, label %merge +merge: + br label %merge +then: + %t383 = getelementptr i32* (%t4_s_0, 0, 90) + store i32 90, i32* %t383 + %t384 = load i32, i32* %t2_i + %t385 = icmp sgt i32 %t384, 91 + br i1 %t385, label %then, label %merge +merge: + br label %merge +then: + %t386 = getelementptr i32* (%t4_s_0, 0, 91) + store i32 91, i32* %t386 + %t387 = load i32, i32* %t2_i + %t388 = icmp sgt i32 %t387, 92 + br i1 %t388, label %then, label %merge +merge: + br label %merge +then: + %t389 = getelementptr i32* (%t4_s_0, 0, 92) + store i32 92, i32* %t389 + %t390 = load i32, i32* %t2_i + %t391 = icmp sgt i32 %t390, 93 + br i1 %t391, label %then, label %merge +merge: + br label %merge +then: + %t392 = getelementptr i32* (%t4_s_0, 0, 93) + store i32 93, i32* %t392 + %t393 = load i32, i32* %t2_i + %t394 = icmp sgt i32 %t393, 94 + br i1 %t394, label %then, label %merge +merge: + br label %merge +then: + %t395 = getelementptr i32* (%t4_s_0, 0, 94) + store i32 94, i32* %t395 + %t396 = load i32, i32* %t2_i + %t397 = icmp sgt i32 %t396, 95 + br i1 %t397, label %then, label %merge +merge: + br label %merge +then: + %t398 = getelementptr i32* (%t4_s_0, 0, 95) + store i32 95, i32* %t398 + %t399 = load i32, i32* %t2_i + %t400 = icmp sgt i32 %t399, 96 + br i1 %t400, label %then, label %merge +merge: + br label %merge +then: + %t401 = getelementptr i32* (%t4_s_0, 0, 96) + store i32 96, i32* %t401 + %t402 = load i32, i32* %t2_i + %t403 = icmp sgt i32 %t402, 97 + br i1 %t403, label %then, label %merge +merge: + br label %merge +then: + %t404 = getelementptr i32* (%t4_s_0, 0, 97) + store i32 97, i32* %t404 + %t405 = load i32, i32* %t2_i + %t406 = icmp sgt i32 %t405, 98 + br i1 %t406, label %then, label %merge +merge: + br label %merge +then: + %t407 = getelementptr i32* (%t4_s_0, 0, 98) + store i32 98, i32* %t407 + %t408 = load i32, i32* %t2_i + %t409 = icmp sgt i32 %t408, 99 + br i1 %t409, label %then, label %merge +merge: + br label %merge +then: + %t410 = getelementptr i32* (%t4_s_0, 0, 99) + store i32 99, i32* %t410 + br label %merge +merge: + br label %merge +while.cond: + %t414 = load i32, i32* %t413_m + %t415 = icmp slt i32 %t414, 100 + br i1 %t415, label %while.body, label %while.exit +while.body: + %t416 = load i32, i32* %t1_sum + %t417 = load i32, i32* %t413_m + %t418 = getelementptr i32* (%t4_s_0, 0, %t417) + %t419 = load i32, i32* %t418 + %t420 = add i32 %t416, %t419 + store i32 %t420, i32* %t1_sum + %t421 = load i32, i32* %t413_m + %t422 = add i32 %t421, 1 + store i32 %t422, i32* %t413_m + br label %while.cond +while.exit: + %t423 = load i32, i32* %t1_sum + %t424 = mod i32 %t423, 65535 + store i32 %t424, i32* %t1_sum + br label %while.cond +} +define i32 @main() { +entry: + %t426 = call void @starttime() + %t427_loopcount = alloca i32 + %t428 = call i32 @getint() + store i32 %t428, i32* %t427_loopcount + %t429 = load i32, i32* %t427_loopcount + %t430 = call i32 @func(i32 %t429) + %t431 = call void @putint(i32 %t430) + %t432 = call void @putch(i32 10) + %t433 = call void @stoptime() + ret i32 0 +} + +========== test/test_case/performance/large_loop_array_2.sy ========== +SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored starttime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored stoptime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored loop with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 +[DEBUG] CheckVarDef: COUNT base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 500000 +[DEBUG] visitUnaryExp: 500000 +[DEBUG] visitPrimaryExp: 500000 +SymbolTable::addSymbol: stored COUNT with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: COUNT type_kind: 1 is_array: 0 +[DEBUG] 进入函数: loop 返回类型: float +SymbolTable::addSymbol: stored x with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: x type_kind: 4 is_array: 1 dims: 0 +SymbolTable::addSymbol: stored y with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: y type_kind: 4 is_array: 1 dims: 0 +SymbolTable::addSymbol: stored length with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: length type_kind: 1 is_array: 0 dims: +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: accumulator base_type: float is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0.0 +[DEBUG] visitUnaryExp: 0.0 +[DEBUG] visitPrimaryExp: 0.0 +SymbolTable::addSymbol: stored accumulator with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: accumulator type_kind: 2 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555b8a5db2c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: length +[DEBUG] visitPrimaryExp: length +SymbolTable::lookup: found length in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = length, sym->kind = 2 +CheckLValue 绑定变量: length, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found accumulator in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = accumulator, sym->kind = 0 +绑定变量: accumulator -> VarDefContext +CheckLValue 绑定变量: accumulator, sym->kind: 0, sym->var_def_ctx: 0x555b8a5d86f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: accumulator+x[i]*y[i] +[DEBUG] visitUnaryExp: accumulator +[DEBUG] visitPrimaryExp: accumulator +SymbolTable::lookup: found accumulator in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = accumulator, sym->kind = 0 +绑定变量: accumulator -> VarDefContext +CheckLValue 绑定变量: accumulator, sym->kind: 0, sym->var_def_ctx: 0x555b8a5d86f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: x[i] +[DEBUG] visitPrimaryExp: x[i] +SymbolTable::lookup: found x in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = x, sym->kind = 2 +CheckLValue 绑定变量: x, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555b8a5db2c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: y[i] +[DEBUG] visitPrimaryExp: y[i] +SymbolTable::lookup: found y in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = y, sym->kind = 2 +CheckLValue 绑定变量: y, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555b8a5db2c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555b8a5db2c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555b8a5db2c0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: accumulator +[DEBUG] visitUnaryExp: accumulator +[DEBUG] visitPrimaryExp: accumulator +SymbolTable::lookup: found accumulator in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = accumulator, sym->kind = 0 +绑定变量: accumulator -> VarDefContext +CheckLValue 绑定变量: accumulator, sym->kind: 0, sym->var_def_ctx: 0x555b8a5d86f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 loop has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: len base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: getint() +[DEBUG] visitUnaryExp: getint() +[DEBUG] 函数调用: getint +[DEBUG] CheckFuncCall: getint +SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored len with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: len type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: x base_type: float is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: 4096 +[DEBUG] visitPrimaryExp: 4096 +[DEBUG] dim[0] = 4096 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 4096 +[DEBUG] Element type: float +SymbolTable::addSymbol: stored x with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: x type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: y base_type: float is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: 4096 +[DEBUG] visitPrimaryExp: 4096 +[DEBUG] dim[0] = 4096 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 4096 +[DEBUG] Element type: float +SymbolTable::addSymbol: stored y with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: y type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: total base_type: float is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0.0 +[DEBUG] visitUnaryExp: 0.0 +[DEBUG] visitPrimaryExp: 0.0 +SymbolTable::addSymbol: stored total with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: total type_kind: 2 is_array: 0 +[DEBUG] CheckVarDef: a base_type: float is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0.0 +[DEBUG] visitUnaryExp: 0.0 +[DEBUG] visitPrimaryExp: 0.0 +SymbolTable::addSymbol: stored a with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: a type_kind: 2 is_array: 0 +[DEBUG] CheckVarDef: b base_type: float is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 1.0 +[DEBUG] visitUnaryExp: 1.0 +[DEBUG] visitPrimaryExp: 1.0 +SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: b type_kind: 2 is_array: 0 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: starttime() +[DEBUG] visitUnaryExp: starttime() +[DEBUG] 函数调用: starttime +[DEBUG] CheckFuncCall: starttime +SymbolTable::lookup: found starttime in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f7000, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: COUNT +[DEBUG] visitPrimaryExp: COUNT +SymbolTable::lookup: found COUNT in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = COUNT, sym->kind = 0 +绑定变量: COUNT -> VarDefContext +CheckLValue 绑定变量: COUNT, sym->kind: 0, sym->var_def_ctx: 0x555b8a5d5c30, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f7000, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x555b8a5fbf70, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0.0 +[DEBUG] visitUnaryExp: 0.0 +[DEBUG] visitPrimaryExp: 0.0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x555b8a5fcb90, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 1.0 +[DEBUG] visitUnaryExp: 1.0 +[DEBUG] visitPrimaryExp: 1.0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x555b8a5fbf70, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: a+0.1 +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x555b8a5fbf70, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 0.1 +[DEBUG] visitPrimaryExp: 0.1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x555b8a5fcb90, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: b+0.2 +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x555b8a5fcb90, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 0.2 +[DEBUG] visitPrimaryExp: 0.2 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f8070, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: len +[DEBUG] visitPrimaryExp: len +SymbolTable::lookup: found len in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = len, sym->kind = 0 +绑定变量: len -> VarDefContext +CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f8940, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found x in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = x, sym->kind = 0 +绑定变量: x -> VarDefContext +CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f96e0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f8070, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: a+j +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x555b8a5fbf70, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f8070, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found y in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = y, sym->kind = 0 +绑定变量: y -> VarDefContext +CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x555b8a5fa5f0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f8070, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: b+j +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = b, sym->kind = 0 +绑定变量: b -> VarDefContext +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x555b8a5fcb90, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f8070, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f8070, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f8070, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found total in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = total, sym->kind = 0 +绑定变量: total -> VarDefContext +CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f0430, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: total+loop(x,y,len) +[DEBUG] visitUnaryExp: total +[DEBUG] visitPrimaryExp: total +SymbolTable::lookup: found total in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = total, sym->kind = 0 +绑定变量: total -> VarDefContext +CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f0430, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: loop(x,y,len) +[DEBUG] 函数调用: loop +[DEBUG] CheckFuncCall: loop +SymbolTable::lookup: found loop in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: x +[DEBUG] visitUnaryExp: x +[DEBUG] visitPrimaryExp: x +SymbolTable::lookup: found x in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = x, sym->kind = 0 +绑定变量: x -> VarDefContext +CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f96e0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: y +[DEBUG] visitUnaryExp: y +[DEBUG] visitPrimaryExp: y +SymbolTable::lookup: found y in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = y, sym->kind = 0 +绑定变量: y -> VarDefContext +CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x555b8a5fa5f0, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: len +[DEBUG] visitUnaryExp: len +[DEBUG] visitPrimaryExp: len +SymbolTable::lookup: found len in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = len, sym->kind = 0 +绑定变量: len -> VarDefContext +CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f8940, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 4 形参类型 4 +[DEBUG] 检查参数 1: 实参类型 4 形参类型 4 +[DEBUG] 检查参数 2: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f7000, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f7000, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: stoptime() +[DEBUG] visitUnaryExp: stoptime() +[DEBUG] 函数调用: stoptime +[DEBUG] CheckFuncCall: stoptime +SymbolTable::lookup: found stoptime in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: (total-11442437121638400.000000) +[DEBUG] visitPrimaryExp: (total-11442437121638400.000000) +[DEBUG] CheckExp: total-11442437121638400.000000 +[DEBUG] visitUnaryExp: total +[DEBUG] visitPrimaryExp: total +SymbolTable::lookup: found total in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = total, sym->kind = 0 +绑定变量: total -> VarDefContext +CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f0430, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 11442437121638400.000000 +[DEBUG] visitPrimaryExp: 11442437121638400.000000 +[DEBUG] visitUnaryExp: 0.000001 +[DEBUG] visitPrimaryExp: 0.000001 +[DEBUG] visitUnaryExp: (total-11442437121638400.000000) +[DEBUG] visitPrimaryExp: (total-11442437121638400.000000) +[DEBUG] CheckExp: total-11442437121638400.000000 +[DEBUG] visitUnaryExp: total +[DEBUG] visitPrimaryExp: total +SymbolTable::lookup: found total in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = total, sym->kind = 0 +绑定变量: total -> VarDefContext +CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f0430, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 11442437121638400.000000 +[DEBUG] visitPrimaryExp: 11442437121638400.000000 +[DEBUG] visitUnaryExp: -0.000001 +[DEBUG] visitUnaryExp: 0.000001 +[DEBUG] visitPrimaryExp: 0.000001 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putint(0) +[DEBUG] visitUnaryExp: putint(0) +[DEBUG] 函数调用: putint +[DEBUG] CheckFuncCall: putint +SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putint(1) +[DEBUG] visitUnaryExp: putint(1) +[DEBUG] 函数调用: putint +[DEBUG] CheckFuncCall: putint +SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 +[DEBUG IRGEN] visitCompUnit +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: COUNT +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 COUNT +[DEBUG] HandleGlobalVariable: 变量 COUNT 是 int 类型 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: COUNT +[DEBUG] HandleGlobalVariable: 处理标量初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 500000 +[DEBUG IRGEN] visitAddExp: 500000 +[DEBUG IRGEN] visitMulExp: 500000 +[DEBUG IRGEN] visitPrimaryExp: 500000 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 500000 created as 0x555b8a619190 +[DEBUG] EvalExpr: success, result = 0x555b8a619190 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG IRGEN] visitFuncDef: loop +[DEBUG] visitFuncDef: 创建函数 loop,返回类型: float,参数数量: 3 +[DEBUG] visitFuncDef: 函数对象地址: 0x555b8a622250 +[DEBUG] visitFuncDef: 为函数 loop 添加参数 x,类型: ptr_float +[error] [ir] AllocaInst 当前只支持 i32* + +========== test/test_case/performance/transpose0.sy ========== +SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored starttime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored stoptime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored transpose with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 +[DEBUG] CheckVarDef: matrix base_type: int is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: 20000000 +[DEBUG] visitPrimaryExp: 20000000 +[DEBUG] dim[0] = 20000000 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 20000000 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored matrix with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: matrix type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: a base_type: int is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: 100000 +[DEBUG] visitPrimaryExp: 100000 +[DEBUG] dim[0] = 100000 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 100000 +[DEBUG] Element type: int +SymbolTable::addSymbol: stored a with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: a type_kind: 6 is_array: 1 +[DEBUG] 进入函数: transpose 返回类型: int +SymbolTable::addSymbol: stored n with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: n type_kind: 1 is_array: 0 dims: +SymbolTable::addSymbol: stored matrix with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: matrix type_kind: 3 is_array: 1 dims: 0 +SymbolTable::addSymbol: stored rowsize with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: rowsize type_kind: 1 is_array: 0 dims: +[DEBUG] CheckVarDef: colsize base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: n/rowsize +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: rowsize +[DEBUG] visitPrimaryExp: rowsize +SymbolTable::lookup: found rowsize in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = rowsize, sym->kind = 2 +CheckLValue 绑定变量: rowsize, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +SymbolTable::addSymbol: stored colsize with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: colsize type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606967f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: colsize +[DEBUG] visitPrimaryExp: colsize +SymbolTable::lookup: found colsize in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = colsize, sym->kind = 0 +绑定变量: colsize -> VarDefContext +CheckLValue 绑定变量: colsize, sym->kind: 0, sym->var_def_ctx: 0x56536068e5e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x565360696200, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x565360696200, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: rowsize +[DEBUG] visitPrimaryExp: rowsize +SymbolTable::lookup: found rowsize in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = rowsize, sym->kind = 2 +CheckLValue 绑定变量: rowsize, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606967f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x565360696200, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x565360696200, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x565360696200, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Continue +[DEBUG] CheckVarDef: curr base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: matrix[i*rowsize+j] +[DEBUG] visitUnaryExp: matrix[i*rowsize+j] +[DEBUG] visitPrimaryExp: matrix[i*rowsize+j] +SymbolTable::lookup: found matrix in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = matrix, sym->kind = 2 +CheckLValue 绑定变量: matrix, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i*rowsize+j +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606967f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: rowsize +[DEBUG] visitPrimaryExp: rowsize +SymbolTable::lookup: found rowsize in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = rowsize, sym->kind = 2 +CheckLValue 绑定变量: rowsize, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x565360696200, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +SymbolTable::addSymbol: stored curr with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: curr type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found matrix in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = matrix, sym->kind = 2 +CheckLValue 绑定变量: matrix, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: j*colsize+i +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x565360696200, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: colsize +[DEBUG] visitPrimaryExp: colsize +SymbolTable::lookup: found colsize in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = colsize, sym->kind = 0 +绑定变量: colsize -> VarDefContext +CheckLValue 绑定变量: colsize, sym->kind: 0, sym->var_def_ctx: 0x56536068e5e0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606967f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: matrix[i*rowsize+j] +[DEBUG] visitUnaryExp: matrix[i*rowsize+j] +[DEBUG] visitPrimaryExp: matrix[i*rowsize+j] +SymbolTable::lookup: found matrix in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = matrix, sym->kind = 2 +CheckLValue 绑定变量: matrix, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i*rowsize+j +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606967f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: rowsize +[DEBUG] visitPrimaryExp: rowsize +SymbolTable::lookup: found rowsize in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = rowsize, sym->kind = 2 +CheckLValue 绑定变量: rowsize, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x565360696200, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found matrix in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = matrix, sym->kind = 2 +CheckLValue 绑定变量: matrix, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i*rowsize+j +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606967f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: rowsize +[DEBUG] visitPrimaryExp: rowsize +SymbolTable::lookup: found rowsize in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = rowsize, sym->kind = 2 +CheckLValue 绑定变量: rowsize, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x565360696200, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: curr +[DEBUG] visitUnaryExp: curr +[DEBUG] visitPrimaryExp: curr +SymbolTable::lookup: found curr in scope level 5, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = curr, sym->kind = 0 +绑定变量: curr -> VarDefContext +CheckLValue 绑定变量: curr, sym->kind: 0, sym->var_def_ctx: 0x5653606ac5a0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x565360696200, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x565360696200, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606967f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606967f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: -1 +[DEBUG] visitUnaryExp: -1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 transpose has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: n base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: getint() +[DEBUG] visitUnaryExp: getint() +[DEBUG] 函数调用: getint +[DEBUG] CheckFuncCall: getint +SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored n with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: n type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: len base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: getarray(a) +[DEBUG] visitUnaryExp: getarray(a) +[DEBUG] 函数调用: getarray +[DEBUG] CheckFuncCall: getarray +SymbolTable::lookup: found getarray in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: a +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x565360690140, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] 检查参数 0: 实参类型 3 形参类型 3 +SymbolTable::addSymbol: stored len with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: len type_kind: 1 is_array: 0 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: starttime() +[DEBUG] visitUnaryExp: starttime() +[DEBUG] 函数调用: starttime +[DEBUG] CheckFuncCall: starttime +SymbolTable::lookup: found starttime in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5653606be2f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found matrix in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = matrix, sym->kind = 0 +绑定变量: matrix -> VarDefContext +CheckLValue 绑定变量: matrix, sym->kind: 0, sym->var_def_ctx: 0x56536068ad40, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: len +[DEBUG] visitPrimaryExp: len +SymbolTable::lookup: found len in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = len, sym->kind = 0 +绑定变量: len -> VarDefContext +CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x5653606bf250, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: transpose(n,matrix,a[i]) +[DEBUG] visitUnaryExp: transpose(n,matrix,a[i]) +[DEBUG] 函数调用: transpose +[DEBUG] CheckFuncCall: transpose +SymbolTable::lookup: found transpose in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: n +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5653606be2f0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: matrix +[DEBUG] visitUnaryExp: matrix +[DEBUG] visitPrimaryExp: matrix +SymbolTable::lookup: found matrix in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = matrix, sym->kind = 0 +绑定变量: matrix -> VarDefContext +CheckLValue 绑定变量: matrix, sym->kind: 0, sym->var_def_ctx: 0x56536068ad40, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: a[i] +[DEBUG] visitUnaryExp: a[i] +[DEBUG] visitPrimaryExp: a[i] +SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x565360690140, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 3 形参类型 3 +[DEBUG] 检查参数 2: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckVarDef: ans base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored ans with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: ans type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: len +[DEBUG] visitPrimaryExp: len +SymbolTable::lookup: found len in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = len, sym->kind = 0 +绑定变量: len -> VarDefContext +CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x5653606bf250, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = ans, sym->kind = 0 +绑定变量: ans -> VarDefContext +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5653606c9c40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: ans+i*i*matrix[i] +[DEBUG] visitUnaryExp: ans +[DEBUG] visitPrimaryExp: ans +SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = ans, sym->kind = 0 +绑定变量: ans -> VarDefContext +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5653606c9c40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: matrix[i] +[DEBUG] visitPrimaryExp: matrix[i] +SymbolTable::lookup: found matrix in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = matrix, sym->kind = 0 +绑定变量: matrix -> VarDefContext +CheckLValue 绑定变量: matrix, sym->kind: 0, sym->var_def_ctx: 0x56536068ad40, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: ans +[DEBUG] visitPrimaryExp: ans +SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = ans, sym->kind = 0 +绑定变量: ans -> VarDefContext +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5653606c9c40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = ans, sym->kind = 0 +绑定变量: ans -> VarDefContext +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5653606c9c40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: -ans +[DEBUG] visitUnaryExp: -ans +[DEBUG] visitUnaryExp: ans +[DEBUG] visitPrimaryExp: ans +SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = ans, sym->kind = 0 +绑定变量: ans -> VarDefContext +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5653606c9c40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: stoptime() +[DEBUG] visitUnaryExp: stoptime() +[DEBUG] 函数调用: stoptime +[DEBUG] CheckFuncCall: stoptime +SymbolTable::lookup: found stoptime in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putint(ans) +[DEBUG] visitUnaryExp: putint(ans) +[DEBUG] 函数调用: putint +[DEBUG] CheckFuncCall: putint +SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: ans +[DEBUG] visitUnaryExp: ans +[DEBUG] visitPrimaryExp: ans +SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = ans, sym->kind = 0 +绑定变量: ans -> VarDefContext +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5653606c9c40, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(10) +[DEBUG] visitUnaryExp: putch(10) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 +[DEBUG IRGEN] visitCompUnit +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: matrix +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 matrix +[DEBUG] HandleGlobalVariable: 变量 matrix 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 20000000 +[DEBUG] HandleGlobalVariable: 创建全局数组: matrix +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: a +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 a +[DEBUG] HandleGlobalVariable: 变量 a 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 100000 +[DEBUG] HandleGlobalVariable: 创建全局数组: a +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG IRGEN] visitFuncDef: transpose +[DEBUG] visitFuncDef: 创建函数 transpose,返回类型: int,参数数量: 3 +[DEBUG] visitFuncDef: 函数对象地址: 0x5653606dbd50 +[DEBUG] visitFuncDef: 为函数 transpose 添加参数 n,类型: int32 +[DEBUG] visitFuncDef: 参数 n 处理完成 +[DEBUG] visitFuncDef: 为函数 transpose 添加参数 matrix,类型: ptr_int32 +[error] [ir] 存储类型不匹配:期望 int32 + +========== test/test_case/performance/vector_mul3.sy ========== +SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putint with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfloat with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putch with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored starttime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored stoptime with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored getfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored putfarray with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored func with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored Vectordot with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored mult1 with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored mult2 with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored mult_combin with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored my_sqrt with kind=1, const_def_ctx=0 +SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 +[DEBUG] CheckVarDef: temp base_type: float is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +SymbolTable::addSymbol: stored temp with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: temp type_kind: 2 is_array: 0 +[DEBUG] 进入函数: func 返回类型: int +SymbolTable::addSymbol: stored i with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: i type_kind: 1 is_array: 0 dims: +SymbolTable::addSymbol: stored j with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: j type_kind: 1 is_array: 0 dims: +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: ((i+j)*(i+j+1)/2+i+1) +[DEBUG] visitUnaryExp: ((i+j)*(i+j+1)/2+i+1) +[DEBUG] visitPrimaryExp: ((i+j)*(i+j+1)/2+i+1) +[DEBUG] CheckExp: (i+j)*(i+j+1)/2+i+1 +[DEBUG] visitUnaryExp: (i+j) +[DEBUG] visitPrimaryExp: (i+j) +[DEBUG] CheckExp: i+j +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 2 +CheckLValue 绑定变量: i, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 2 +CheckLValue 绑定变量: j, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: (i+j+1) +[DEBUG] visitPrimaryExp: (i+j+1) +[DEBUG] CheckExp: i+j+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 2 +CheckLValue 绑定变量: i, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 2 +CheckLValue 绑定变量: j, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 2 +CheckLValue 绑定变量: i, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 func has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: Vectordot 返回类型: float +SymbolTable::addSymbol: stored v with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: v type_kind: 4 is_array: 1 dims: 0 +SymbolTable::addSymbol: stored u with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: u type_kind: 4 is_array: 1 dims: 0 +SymbolTable::addSymbol: stored n with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: n type_kind: 1 is_array: 0 dims: +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: sum base_type: float is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored sum with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: sum type_kind: 2 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce294de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sum, sym->kind = 0 +绑定变量: sum -> VarDefContext +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55d0ce296c10, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: sum+v[i]*u[i] +[DEBUG] visitUnaryExp: sum +[DEBUG] visitPrimaryExp: sum +SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sum, sym->kind = 0 +绑定变量: sum -> VarDefContext +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55d0ce296c10, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: v[i] +[DEBUG] visitPrimaryExp: v[i] +SymbolTable::lookup: found v in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = v, sym->kind = 2 +CheckLValue 绑定变量: v, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce294de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: u[i] +[DEBUG] visitPrimaryExp: u[i] +SymbolTable::lookup: found u in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = u, sym->kind = 2 +CheckLValue 绑定变量: u, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce294de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce294de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce294de0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: sum +[DEBUG] visitUnaryExp: sum +[DEBUG] visitPrimaryExp: sum +SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sum, sym->kind = 0 +绑定变量: sum -> VarDefContext +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55d0ce296c10, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 Vectordot has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: mult1 返回类型: void +SymbolTable::addSymbol: stored v with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: v type_kind: 4 is_array: 1 dims: 0 +SymbolTable::addSymbol: stored out with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: out type_kind: 4 is_array: 1 dims: 0 +SymbolTable::addSymbol: stored n with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: n type_kind: 1 is_array: 0 dims: +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: sum base_type: float is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored sum with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: sum type_kind: 2 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a6500, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a7420, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sum, sym->kind = 0 +绑定变量: sum -> VarDefContext +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a7cd0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: sum+v[j]/func(i,j) +[DEBUG] visitUnaryExp: sum +[DEBUG] visitPrimaryExp: sum +SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sum, sym->kind = 0 +绑定变量: sum -> VarDefContext +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a7cd0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: v[j] +[DEBUG] visitPrimaryExp: v[j] +SymbolTable::lookup: found v in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = v, sym->kind = 2 +CheckLValue 绑定变量: v, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a7420, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: func(i,j) +[DEBUG] 函数调用: func +[DEBUG] CheckFuncCall: func +SymbolTable::lookup: found func in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a6500, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a7420, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a7420, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a7420, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found out in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = out, sym->kind = 2 +CheckLValue 绑定变量: out, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a6500, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: sum +[DEBUG] visitUnaryExp: sum +[DEBUG] visitPrimaryExp: sum +SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sum, sym->kind = 0 +绑定变量: sum -> VarDefContext +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a7cd0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a6500, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a6500, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 函数 mult1 has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: mult2 返回类型: void +SymbolTable::addSymbol: stored v with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: v type_kind: 4 is_array: 1 dims: 0 +SymbolTable::addSymbol: stored out with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: out type_kind: 4 is_array: 1 dims: 0 +SymbolTable::addSymbol: stored n with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: n type_kind: 1 is_array: 0 dims: +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: sum base_type: float is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +SymbolTable::addSymbol: stored sum with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: sum type_kind: 2 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a3a10, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4a50, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sum, sym->kind = 0 +绑定变量: sum -> VarDefContext +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b53b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: sum+v[j]/func(j,i) +[DEBUG] visitUnaryExp: sum +[DEBUG] visitPrimaryExp: sum +SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sum, sym->kind = 0 +绑定变量: sum -> VarDefContext +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b53b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: v[j] +[DEBUG] visitPrimaryExp: v[j] +SymbolTable::lookup: found v in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = v, sym->kind = 2 +CheckLValue 绑定变量: v, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4a50, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] visitUnaryExp: func(j,i) +[DEBUG] 函数调用: func +[DEBUG] CheckFuncCall: func +SymbolTable::lookup: found func in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4a50, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a3a10, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4a50, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = j, sym->kind = 0 +绑定变量: j -> VarDefContext +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4a50, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found out in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = out, sym->kind = 2 +CheckLValue 绑定变量: out, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a3a10, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: sum +[DEBUG] visitUnaryExp: sum +[DEBUG] visitPrimaryExp: sum +SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = sum, sym->kind = 0 +绑定变量: sum -> VarDefContext +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b53b0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a3a10, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a3a10, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 函数 mult2 has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: mult_combin 返回类型: void +SymbolTable::addSymbol: stored v with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: v type_kind: 4 is_array: 1 dims: 0 +SymbolTable::addSymbol: stored out with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: out type_kind: 4 is_array: 1 dims: 0 +SymbolTable::addSymbol: stored n with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: n type_kind: 1 is_array: 0 dims: +SymbolTable::addSymbol: stored tmp with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: tmp type_kind: 4 is_array: 1 dims: 0 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: mult1(v,tmp,n) +[DEBUG] visitUnaryExp: mult1(v,tmp,n) +[DEBUG] 函数调用: mult1 +[DEBUG] CheckFuncCall: mult1 +SymbolTable::lookup: found mult1 in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: v +[DEBUG] visitUnaryExp: v +[DEBUG] visitPrimaryExp: v +SymbolTable::lookup: found v in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = v, sym->kind = 2 +CheckLValue 绑定变量: v, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 0 +数组参数名作为地址 +[DEBUG] CheckExp: tmp +[DEBUG] visitUnaryExp: tmp +[DEBUG] visitPrimaryExp: tmp +SymbolTable::lookup: found tmp in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = tmp, sym->kind = 2 +CheckLValue 绑定变量: tmp, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 0 +数组参数名作为地址 +[DEBUG] CheckExp: n +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 4 形参类型 4 +[DEBUG] 检查参数 1: 实参类型 4 形参类型 4 +[DEBUG] 检查参数 2: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: mult2(tmp,out,n) +[DEBUG] visitUnaryExp: mult2(tmp,out,n) +[DEBUG] 函数调用: mult2 +[DEBUG] CheckFuncCall: mult2 +SymbolTable::lookup: found mult2 in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: tmp +[DEBUG] visitUnaryExp: tmp +[DEBUG] visitPrimaryExp: tmp +SymbolTable::lookup: found tmp in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = tmp, sym->kind = 2 +CheckLValue 绑定变量: tmp, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 0 +数组参数名作为地址 +[DEBUG] CheckExp: out +[DEBUG] visitUnaryExp: out +[DEBUG] visitPrimaryExp: out +SymbolTable::lookup: found out in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = out, sym->kind = 2 +CheckLValue 绑定变量: out, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +数组参数维度: 1 维, dims: 0 +dim_count: 1, subscript_count: 0 +数组参数名作为地址 +[DEBUG] CheckExp: n +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 2 +CheckLValue 绑定变量: n, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 4 形参类型 4 +[DEBUG] 检查参数 1: 实参类型 4 形参类型 4 +[DEBUG] 检查参数 2: 实参类型 1 形参类型 1 +[DEBUG] 函数 mult_combin has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: my_sqrt 返回类型: float +SymbolTable::addSymbol: stored input with kind=2, const_def_ctx=0 +[DEBUG] 添加参数: input type_kind: 2 is_array: 0 dims: +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: temp +[DEBUG] visitPrimaryExp: temp +SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = temp, sym->kind = 0 +绑定变量: temp -> VarDefContext +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2c0c50, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: input +[DEBUG] visitPrimaryExp: input +SymbolTable::lookup: found input in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = input, sym->kind = 2 +CheckLValue 绑定变量: input, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: temp +[DEBUG] visitPrimaryExp: temp +SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = temp, sym->kind = 0 +绑定变量: temp -> VarDefContext +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2c0c50, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1e-6 +[DEBUG] visitPrimaryExp: 1e-6 +[DEBUG] visitUnaryExp: temp +[DEBUG] visitPrimaryExp: temp +SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = temp, sym->kind = 0 +绑定变量: temp -> VarDefContext +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2c0c50, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: input +[DEBUG] visitPrimaryExp: input +SymbolTable::lookup: found input in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = input, sym->kind = 2 +CheckLValue 绑定变量: input, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: temp +[DEBUG] visitPrimaryExp: temp +SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = temp, sym->kind = 0 +绑定变量: temp -> VarDefContext +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2c0c50, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: -1e-6 +[DEBUG] visitUnaryExp: 1e-6 +[DEBUG] visitPrimaryExp: 1e-6 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = temp, sym->kind = 0 +绑定变量: temp -> VarDefContext +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2c0c50, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: (temp+input/temp)/2 +[DEBUG] visitUnaryExp: (temp+input/temp) +[DEBUG] visitPrimaryExp: (temp+input/temp) +[DEBUG] CheckExp: temp+input/temp +[DEBUG] visitUnaryExp: temp +[DEBUG] visitPrimaryExp: temp +SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = temp, sym->kind = 0 +绑定变量: temp -> VarDefContext +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2c0c50, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: input +[DEBUG] visitPrimaryExp: input +SymbolTable::lookup: found input in scope level 2, kind=2, const_def_ctx=0 +CheckLValue: found sym->name = input, sym->kind = 2 +CheckLValue 绑定变量: input, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: temp +[DEBUG] visitPrimaryExp: temp +SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = temp, sym->kind = 0 +绑定变量: temp -> VarDefContext +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2c0c50, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: temp +[DEBUG] visitUnaryExp: temp +[DEBUG] visitPrimaryExp: temp +SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = temp, sym->kind = 0 +绑定变量: temp -> VarDefContext +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2c0c50, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 my_sqrt has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: n base_type: int is_array: 0 dim_count: 0 +[DEBUG] CheckExp: 100000 +[DEBUG] visitUnaryExp: 100000 +[DEBUG] visitPrimaryExp: 100000 +SymbolTable::addSymbol: stored n with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: n type_kind: 1 is_array: 0 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2ca180, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2ca180, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 2000 +[DEBUG] visitUnaryExp: 2000 +[DEBUG] visitPrimaryExp: 2000 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: starttime() +[DEBUG] visitUnaryExp: starttime() +[DEBUG] 函数调用: starttime +[DEBUG] CheckFuncCall: starttime +SymbolTable::lookup: found starttime in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] CheckVarDef: vectorA base_type: float is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: 100000 +[DEBUG] visitPrimaryExp: 100000 +[DEBUG] dim[0] = 100000 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 100000 +[DEBUG] Element type: float +SymbolTable::addSymbol: stored vectorA with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: vectorA type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: vectorB base_type: float is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: 100000 +[DEBUG] visitPrimaryExp: 100000 +[DEBUG] dim[0] = 100000 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 100000 +[DEBUG] Element type: float +SymbolTable::addSymbol: stored vectorB with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: vectorB type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: Vectortmp base_type: float is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: 100000 +[DEBUG] visitPrimaryExp: 100000 +[DEBUG] dim[0] = 100000 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 100000 +[DEBUG] Element type: float +SymbolTable::addSymbol: stored Vectortmp with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: Vectortmp type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2d2670, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2ca180, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found vectorA in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = vectorA, sym->kind = 0 +绑定变量: vectorA -> VarDefContext +CheckLValue 绑定变量: vectorA, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4190, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 1 +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2d2670, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +完全索引,返回元素类型 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2d2670, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2d2670, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2d2670, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2d2670, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1000 +[DEBUG] visitPrimaryExp: 1000 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: mult_combin(vectorA,vectorB,n,Vectortmp) +[DEBUG] visitUnaryExp: mult_combin(vectorA,vectorB,n,Vectortmp) +[DEBUG] 函数调用: mult_combin +[DEBUG] CheckFuncCall: mult_combin +SymbolTable::lookup: found mult_combin in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: vectorA +[DEBUG] visitUnaryExp: vectorA +[DEBUG] visitPrimaryExp: vectorA +SymbolTable::lookup: found vectorA in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = vectorA, sym->kind = 0 +绑定变量: vectorA -> VarDefContext +CheckLValue 绑定变量: vectorA, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4190, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: vectorB +[DEBUG] visitUnaryExp: vectorB +[DEBUG] visitPrimaryExp: vectorB +SymbolTable::lookup: found vectorB in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = vectorB, sym->kind = 0 +绑定变量: vectorB -> VarDefContext +CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4420, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: n +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2ca180, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: Vectortmp +[DEBUG] visitUnaryExp: Vectortmp +[DEBUG] visitPrimaryExp: Vectortmp +SymbolTable::lookup: found Vectortmp in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = Vectortmp, sym->kind = 0 +绑定变量: Vectortmp -> VarDefContext +CheckLValue 绑定变量: Vectortmp, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2d1d30, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] 检查参数 0: 实参类型 4 形参类型 4 +[DEBUG] 检查参数 1: 实参类型 4 形参类型 4 +[DEBUG] 检查参数 2: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 3: 实参类型 4 形参类型 4 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: mult_combin(vectorB,vectorA,n,Vectortmp) +[DEBUG] visitUnaryExp: mult_combin(vectorB,vectorA,n,Vectortmp) +[DEBUG] 函数调用: mult_combin +[DEBUG] CheckFuncCall: mult_combin +SymbolTable::lookup: found mult_combin in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: vectorB +[DEBUG] visitUnaryExp: vectorB +[DEBUG] visitPrimaryExp: vectorB +SymbolTable::lookup: found vectorB in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = vectorB, sym->kind = 0 +绑定变量: vectorB -> VarDefContext +CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4420, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: vectorA +[DEBUG] visitUnaryExp: vectorA +[DEBUG] visitPrimaryExp: vectorA +SymbolTable::lookup: found vectorA in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = vectorA, sym->kind = 0 +绑定变量: vectorA -> VarDefContext +CheckLValue 绑定变量: vectorA, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4190, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: n +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2ca180, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: Vectortmp +[DEBUG] visitUnaryExp: Vectortmp +[DEBUG] visitPrimaryExp: Vectortmp +SymbolTable::lookup: found Vectortmp in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = Vectortmp, sym->kind = 0 +绑定变量: Vectortmp -> VarDefContext +CheckLValue 绑定变量: Vectortmp, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2d1d30, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] 检查参数 0: 实参类型 4 形参类型 4 +[DEBUG] 检查参数 1: 实参类型 4 形参类型 4 +[DEBUG] 检查参数 2: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 3: 实参类型 4 形参类型 4 +[DEBUG] visitStmt: Assign ExpStmt +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2d2670, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = i, sym->kind = 0 +绑定变量: i -> VarDefContext +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2d2670, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: stoptime() +[DEBUG] visitUnaryExp: stoptime() +[DEBUG] 函数调用: stoptime +[DEBUG] CheckFuncCall: stoptime +SymbolTable::lookup: found stoptime in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] CheckVarDef: result base_type: float is_array: 0 dim_count: 0 +[DEBUG] CheckExp: my_sqrt(Vectordot(vectorA,vectorB,n)/Vectordot(vectorB,vectorB,n)) +[DEBUG] visitUnaryExp: my_sqrt(Vectordot(vectorA,vectorB,n)/Vectordot(vectorB,vectorB,n)) +[DEBUG] 函数调用: my_sqrt +[DEBUG] CheckFuncCall: my_sqrt +SymbolTable::lookup: found my_sqrt in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: Vectordot(vectorA,vectorB,n)/Vectordot(vectorB,vectorB,n) +[DEBUG] visitUnaryExp: Vectordot(vectorA,vectorB,n) +[DEBUG] 函数调用: Vectordot +[DEBUG] CheckFuncCall: Vectordot +SymbolTable::lookup: found Vectordot in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: vectorA +[DEBUG] visitUnaryExp: vectorA +[DEBUG] visitPrimaryExp: vectorA +SymbolTable::lookup: found vectorA in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = vectorA, sym->kind = 0 +绑定变量: vectorA -> VarDefContext +CheckLValue 绑定变量: vectorA, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4190, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: vectorB +[DEBUG] visitUnaryExp: vectorB +[DEBUG] visitPrimaryExp: vectorB +SymbolTable::lookup: found vectorB in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = vectorB, sym->kind = 0 +绑定变量: vectorB -> VarDefContext +CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4420, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: n +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2ca180, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 4 形参类型 4 +[DEBUG] 检查参数 1: 实参类型 4 形参类型 4 +[DEBUG] 检查参数 2: 实参类型 1 形参类型 1 +[DEBUG] visitUnaryExp: Vectordot(vectorB,vectorB,n) +[DEBUG] 函数调用: Vectordot +[DEBUG] CheckFuncCall: Vectordot +SymbolTable::lookup: found Vectordot in scope level 1, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: vectorB +[DEBUG] visitUnaryExp: vectorB +[DEBUG] visitPrimaryExp: vectorB +SymbolTable::lookup: found vectorB in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = vectorB, sym->kind = 0 +绑定变量: vectorB -> VarDefContext +CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4420, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: vectorB +[DEBUG] visitUnaryExp: vectorB +[DEBUG] visitPrimaryExp: vectorB +SymbolTable::lookup: found vectorB in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = vectorB, sym->kind = 0 +绑定变量: vectorB -> VarDefContext +CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4420, sym->const_def_ctx: 0 +dim_count: 1, subscript_count: 0 +数组名作为地址 +[DEBUG] CheckExp: n +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = n, sym->kind = 0 +绑定变量: n -> VarDefContext +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2ca180, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] 检查参数 0: 实参类型 4 形参类型 4 +[DEBUG] 检查参数 1: 实参类型 4 形参类型 4 +[DEBUG] 检查参数 2: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 0: 实参类型 2 形参类型 2 +SymbolTable::addSymbol: stored result with kind=0, const_def_ctx=0 +[DEBUG] 符号添加完成: result type_kind: 2 is_array: 0 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: result +[DEBUG] visitPrimaryExp: result +SymbolTable::lookup: found result in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = result, sym->kind = 0 +绑定变量: result -> VarDefContext +CheckLValue 绑定变量: result, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2da890, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1.000000 +[DEBUG] visitPrimaryExp: 1.000000 +[DEBUG] visitUnaryExp: 1e-6 +[DEBUG] visitPrimaryExp: 1e-6 +[DEBUG] visitUnaryExp: result +[DEBUG] visitPrimaryExp: result +SymbolTable::lookup: found result in scope level 3, kind=0, const_def_ctx=0 +CheckLValue: found sym->name = result, sym->kind = 0 +绑定变量: result -> VarDefContext +CheckLValue 绑定变量: result, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2da890, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] visitUnaryExp: 1.000000 +[DEBUG] visitPrimaryExp: 1.000000 +[DEBUG] visitUnaryExp: -1e-6 +[DEBUG] visitUnaryExp: 1e-6 +[DEBUG] visitPrimaryExp: 1e-6 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putint(1) +[DEBUG] visitUnaryExp: putint(1) +[DEBUG] 函数调用: putint +[DEBUG] CheckFuncCall: putint +SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putint(0) +[DEBUG] visitUnaryExp: putint(0) +[DEBUG] 函数调用: putint +[DEBUG] CheckFuncCall: putint +SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(10) +[DEBUG] visitUnaryExp: putch(10) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 +[DEBUG IRGEN] visitCompUnit +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[error] [irgen] 当前仅支持 int 类型变量 + diff --git a/run.sh b/run.sh index cbd493f..e016839 100755 --- a/run.sh +++ b/run.sh @@ -35,7 +35,7 @@ total=0 passed=0 failed=0 -echo "开始测试 SysY 解析..." +echo "开始测试 ir out 解析..." echo "输出将保存到 $RESULT_FILE" echo "------------------------" @@ -59,10 +59,12 @@ for file in "${TEST_FILES[@]}"; do echo "========== $file ==========" >> "$RESULT_FILE" if [ $VERBOSE -eq 1 ]; then - "$COMPILER" --emit-parse-tree "$file" 2>&1 | tee -a "$RESULT_FILE" + # "$COMPILER" --emit-parse-tree "$file" 2>&1 | tee -a "$RESULT_FILE" + "$COMPILER" --emit-ir "$file" 2>&1 | tee -a "$RESULT_FILE" result=${PIPESTATUS[0]} else - "$COMPILER" --emit-parse-tree "$file" >> "$RESULT_FILE" 2>&1 + # "$COMPILER" --emit-parse-tree "$file" >> "$RESULT_FILE" 2>&1 + "$COMPILER" --emit-ir "$file" >> "$RESULT_FILE" 2>&1 result=$? fi diff --git a/scripts/test_compiler.sh b/scripts/test_compiler.sh new file mode 100755 index 0000000..2c9b672 --- /dev/null +++ b/scripts/test_compiler.sh @@ -0,0 +1,222 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +COMPILER="$ROOT_DIR/build/bin/compiler" +TMP_DIR="$ROOT_DIR/build/test_compiler" +TEST_DIRS=("$ROOT_DIR/test/test_case/functional" "$ROOT_DIR/test/test_case/performance") +CC_BIN="${CC:-cc}" +RUNTIME_SRC="$ROOT_DIR/sylib/sylib.c" +RUNTIME_OBJ="$TMP_DIR/sylib.o" +LLC_BIN="${LLC:-llc}" +CLANG_BIN="${CLANG:-clang}" + +if [[ ! -x "$COMPILER" ]]; then + echo "未找到编译器: $COMPILER" + echo "请先构建编译器,例如: mkdir -p build && cd build && cmake .. && make -j" + exit 1 +fi + +mkdir -p "$TMP_DIR" + +if ! command -v "$LLC_BIN" >/dev/null 2>&1; then + echo "未找到 llc: $LLC_BIN" + echo "请安装 LLVM,或通过 LLC 环境变量指定 llc 路径" + exit 1 +fi + +if ! command -v "$CLANG_BIN" >/dev/null 2>&1; then + echo "未找到 clang: $CLANG_BIN" + echo "请安装 Clang,或通过 CLANG 环境变量指定 clang 路径" + exit 1 +fi + +# 编译运行库(供链接生成的可执行文件) +runtime_ready=0 +if [[ -f "$RUNTIME_SRC" ]]; then + if "$CC_BIN" -c "$RUNTIME_SRC" -o "$RUNTIME_OBJ" >/dev/null 2>&1; then + runtime_ready=1 + else + echo "[WARN] 运行库编译失败,生成的可执行文件将不链接 sylib: $RUNTIME_SRC" + fi +else + echo "[WARN] 未找到运行库源码: $RUNTIME_SRC" +fi + +ir_total=0 +ir_pass=0 +result_total=0 +result_pass=0 + +ir_failures=() +result_failures=() + +function normalize_file() { + sed 's/\r$//' "$1" +} + +for test_dir in "${TEST_DIRS[@]}"; do + if [[ ! -d "$test_dir" ]]; then + echo "跳过不存在的测试目录: $test_dir" + continue + fi + + shopt -s nullglob + for input in "$test_dir"/*.sy; do + ir_total=$((ir_total+1)) + base=$(basename "$input") + stem=${base%.sy} + out_dir="$TMP_DIR/$(basename "$test_dir")" + mkdir -p "$out_dir" + ll_file="$out_dir/$stem.ll" + stdout_file="$out_dir/$stem.stdout" + expected_file="$test_dir/$stem.out" + stdin_file="$test_dir/$stem.in" + + echo "[TEST] $input" + + # 编译并捕获所有输出 + compiler_status=0 + compiler_output="" + compiler_output=$("$COMPILER" --emit-ir "$input" 2>&1) || compiler_status=$? + + # 临时文件存储原始输出 + raw_ll="$out_dir/$stem.raw.ll" + printf '%s\n' "$compiler_output" > "$raw_ll" + + # 检查编译是否成功 + if [[ $compiler_status -ne 0 ]]; then + echo " [IR] 编译失败: 返回码 $compiler_status" + ir_failures+=("$input: compiler failed ($compiler_status)") + # 失败:保留原始输出(包含所有调试信息) + cp "$raw_ll" "$ll_file" + rm -f "$raw_ll" + continue + fi + + # 从混杂输出中提取 IR: + # - 顶层实体:define/declare/@global + # - 基本块标签 + # - 缩进的指令行 + # - 函数结束花括号 + grep -E '^(define |declare |@|[[:space:]]|})|^[A-Za-z_.$%][A-Za-z0-9_.$%]*:$' "$raw_ll" > "$ll_file" + + # 检查是否生成了有效函数定义 + if ! grep -qE '^define ' "$ll_file"; then + echo " [IR] 失败: 未生成有效函数定义" + ir_failures+=("$input: invalid IR output") + # 失败:保留原始输出 + cp "$raw_ll" "$ll_file" + rm -f "$raw_ll" + continue + fi + + # 可选:删除多余的空行 + sed -i '/^$/N;/\n$/D' "$ll_file" + + rm -f "$raw_ll" + + ir_pass=$((ir_pass+1)) + echo " [IR] 生成成功 (IR已保存到: $ll_file)" + + # 运行测试 + # 运行测试部分 + if [[ -f "$expected_file" ]]; then + result_total=$((result_total+1)) + + # 运行生成的可执行文件(优先链接运行库) + run_status=0 + obj_file="$out_dir/$stem.o" + exe_file="$out_dir/$stem" + if ! "$LLC_BIN" -filetype=obj "$ll_file" -o "$obj_file" > "$stdout_file" 2>&1; then + echo " [RUN] llc 失败" + result_failures+=("$input: llc failed") + continue + fi + + if [[ $runtime_ready -eq 1 ]]; then + if ! "$CLANG_BIN" "$obj_file" "$RUNTIME_OBJ" -o "$exe_file" >> "$stdout_file" 2>&1; then + echo " [RUN] clang 链接失败" + result_failures+=("$input: clang link failed") + continue + fi + else + if ! "$CLANG_BIN" "$obj_file" -o "$exe_file" >> "$stdout_file" 2>&1; then + echo " [RUN] clang 链接失败" + result_failures+=("$input: clang link failed") + continue + fi + fi + + if [[ -f "$stdin_file" ]]; then + "$exe_file" < "$stdin_file" > "$stdout_file" 2>&1 || run_status=$? + else + "$exe_file" > "$stdout_file" 2>&1 || run_status=$? + fi + + # 读取预期文件内容 + expected_content=$(normalize_file "$expected_file") + + # 判断预期文件是只包含退出码,还是包含输出+退出码 + if [[ "$expected_content" =~ ^[0-9]+$ ]]; then + # 只包含退出码 + expected=$expected_content + if [[ "$run_status" -eq "$expected" ]]; then + result_pass=$((result_pass+1)) + echo " [RUN] 返回值匹配: $run_status" + rm -f "$stdout_file" + else + echo " [RUN] 返回值不匹配: got $run_status, expected $expected" + result_failures+=("$input: exit code mismatch (got $run_status, expected $expected)") + fi + else + # 包含输出和退出码(最后一行是退出码) + expected_output=$(head -n -1 <<< "$expected_content") + expected_exit=$(tail -n 1 <<< "$expected_content") + actual_output=$(cat "$stdout_file") + + if [[ "$run_status" -eq "$expected_exit" ]] && [[ "$actual_output" == "$expected_output" ]]; then + result_pass=$((result_pass+1)) + echo " [RUN] 成功: 退出码和输出都匹配" + rm -f "$stdout_file" + else + echo " [RUN] 不匹配: 退出码 got $run_status, expected $expected_exit" + if [[ "$actual_output" != "$expected_output" ]]; then + echo " 输出不匹配" + fi + result_failures+=("$input: mismatch") + fi + fi + else + echo " [RUN] 未找到预期返回值文件 $expected_file,跳过结果验证" + fi + done + shopt -u nullglob +done + +# 输出统计 +cat < #include +#include namespace ir { @@ -15,10 +16,112 @@ ConstantInt* Context::GetConstInt(int v) { return inserted->second.get(); } +ConstantFloat* Context::GetConstFloat(float v) { + uint32_t key; + std::memcpy(&key, &v, sizeof(float)); + + auto it = const_floats_.find(key); + if (it != const_floats_.end()) { + return it->second.get(); + } + + auto float_ty = Type::GetFloatType(); + auto constant = std::make_unique(float_ty, v); + auto* ptr = constant.get(); + const_floats_[key] = std::move(constant); + return ptr; +} + +ConstantArray* Context::GetConstArray(std::shared_ptr ty, + std::vector elements) { + // 验证数组常量 + size_t expected_size = ty->GetElementCount(); + if (elements.size() != expected_size) { + // 如果元素数量不匹配,可能需要补零或报错 + // 这里根据需求处理 + if (elements.size() < expected_size) { + // 补零 + auto elem_type = ty->GetElementType(); + while (elements.size() < expected_size) { + if (elem_type->IsInt32()) { + elements.push_back(GetConstInt(0)); + } else if (elem_type->IsFloat()) { + elements.push_back(GetConstFloat(0.0f)); + } + } + } else { + throw std::runtime_error("Array constant size mismatch"); + } + } + + // 构建缓存键 + struct ArrayKey { + std::shared_ptr type; + std::vector elements; + + bool operator==(const ArrayKey& other) const { + if (type != other.type) return false; + if (elements.size() != other.elements.size()) return false; + for (size_t i = 0; i < elements.size(); ++i) { + if (elements[i] != other.elements[i]) return false; + } + return true; + } + }; + + struct ArrayKeyHash { + size_t operator()(const ArrayKey& key) const { + size_t hash = std::hash{}(key.type.get()); + for (auto* elem : key.elements) { + hash ^= std::hash{}(elem) + 0x9e3779b9 + (hash << 6) + (hash >> 2); + } + return hash; + } + }; + + // 使用静态缓存(需要作为成员变量) + static std::unordered_map, ArrayKeyHash> cache; + + ArrayKey key{ty, elements}; + auto it = cache.find(key); + if (it != cache.end()) { + return it->second.get(); + } + + auto constant = std::make_unique(ty, std::move(elements)); + auto* ptr = constant.get(); + cache[std::move(key)] = std::move(constant); + return ptr; +} + +ConstantZero* Context::GetZeroConstant(std::shared_ptr ty) { + auto it = zero_constants_.find(ty.get()); + if (it != zero_constants_.end()) { + return it->second.get(); + } + + auto constant = std::make_unique(ty); + auto* ptr = constant.get(); + zero_constants_[ty.get()] = std::move(constant); + return ptr; +} + +ConstantAggregateZero* Context::GetAggregateZero(std::shared_ptr ty) { + auto it = aggregate_zeros_.find(ty.get()); + if (it != aggregate_zeros_.end()) { + return it->second.get(); + } + + auto constant = std::make_unique(ty); + auto* ptr = constant.get(); + aggregate_zeros_[ty.get()] = std::move(constant); + return ptr; +} + std::string Context::NextTemp() { std::ostringstream oss; - oss << "%" << ++temp_index_; + oss << "%t" << ++temp_index_; return oss.str(); } -} // namespace ir +} // namespace ir \ No newline at end of file diff --git a/src/ir/Function.cpp b/src/ir/Function.cpp index cf14d48..3652f77 100644 --- a/src/ir/Function.cpp +++ b/src/ir/Function.cpp @@ -5,10 +5,21 @@ namespace ir { -Function::Function(std::string name, std::shared_ptr ret_type) - : Value(std::move(ret_type), std::move(name)) { +Function::Function(std::string name, std::shared_ptr func_type) + : Value(std::move(func_type), std::move(name)) { entry_ = CreateBlock("entry"); } +// 向函数添加参数的实现。 +Argument* Function::AddArgument(std::unique_ptr arg) {// 独占所有权,自动释放内存 + if (!arg) return nullptr; // 1. 检查参数是否为空 + auto* ptr = arg.get(); // 2. 获取原始指针(用于返回) + arguments_.push_back(std::move(arg)); // 3. 将参数所有权转移到函数的参数列表中,arg已经是空指针了,不能再使用arg了 + return ptr; // 4. 返回参数指针,方便调用者使用 +} +// 获取函数参数列表的实现。 +const std::vector>& Function::GetArguments() const { + return arguments_; +} BasicBlock* Function::CreateBlock(const std::string& name) { auto block = std::make_unique(name); diff --git a/src/ir/GlobalValue.cpp b/src/ir/GlobalValue.cpp index 7c2abe1..24686b1 100644 --- a/src/ir/GlobalValue.cpp +++ b/src/ir/GlobalValue.cpp @@ -1,11 +1,195 @@ -// GlobalValue 占位实现: -// - 具体的全局初始化器、打印和链接语义需要自行补全 - +// ir/GlobalValue.cpp #include "ir/IR.h" +#include + namespace ir { +namespace { + +ConstantValue* GetScalarZeroConstant(const Type& type) { + if (type.IsInt32()) { + static ConstantInt* zero_i32 = new ConstantInt(Type::GetInt32Type(), 0); + return zero_i32; + } + if (type.IsFloat()) { + static ConstantFloat* zero_f32 = new ConstantFloat(Type::GetFloatType(), 0.0f); + return zero_f32; + } + if (type.IsInt1()) { + static ConstantInt* zero_i1 = new ConstantInt(Type::GetInt1Type(), 0); + return zero_i1; + } + return nullptr; +} + +} // namespace + GlobalValue::GlobalValue(std::shared_ptr ty, std::string name) : User(std::move(ty), std::move(name)) {} -} // namespace ir +void GlobalValue::SetInitializer(ConstantValue* init) { + if (!init) { + throw std::runtime_error("GlobalValue::SetInitializer: init is null"); + } + + // 获取实际的值类型(用于类型检查) + std::shared_ptr value_type = GetValueType(); + + // 类型检查 + bool type_match = CheckTypeCompatibility(value_type, init); + + if (!type_match) { + throw std::runtime_error("GlobalValue::SetInitializer: type mismatch"); + } + + initializer_.clear(); + initializer_.push_back(init); +} + +void GlobalValue::SetInitializer(const std::vector& init) { + if (init.empty()) { + initializer_.clear(); + return; + } + + // 获取实际的值类型 + std::shared_ptr value_type = GetValueType(); + + // 类型检查 + if (value_type->IsArray()) { + auto* array_ty = static_cast(value_type.get()); + size_t array_size = array_ty->GetElementCount(); + + if (init.size() > array_size) { + throw std::runtime_error("GlobalValue::SetInitializer: too many initializers"); + } + + // 检查每个初始化值的类型 + auto* elem_type = array_ty->GetElementType().get(); + for (size_t i = 0; i < init.size(); ++i) { + auto* elem = init[i]; + if (!elem) { + throw std::runtime_error("GlobalValue::SetInitializer: null initializer at index " + std::to_string(i)); + } + + bool elem_match = false; + if (elem_type->IsInt32() && elem->GetType()->IsInt32()) { + elem_match = true; + } else if (elem_type->IsFloat() && elem->GetType()->IsFloat()) { + elem_match = true; + } else if (elem_type->IsInt1() && elem->GetType()->IsInt1()) { + elem_match = true; + } + + if (!elem_match) { + throw std::runtime_error("GlobalValue::SetInitializer: element type mismatch at index " + std::to_string(i)); + } + } + } + else if (value_type->IsInt32() || value_type->IsFloat() || value_type->IsInt1()) { + if (init.size() != 1) { + throw std::runtime_error("GlobalValue::SetInitializer: scalar requires exactly one initializer"); + } + + if (!init[0]) { + throw std::runtime_error("GlobalValue::SetInitializer: null initializer"); + } + + if ((value_type->IsInt32() && !init[0]->GetType()->IsInt32()) || + (value_type->IsFloat() && !init[0]->GetType()->IsFloat()) || + (value_type->IsInt1() && !init[0]->GetType()->IsInt1())) { + throw std::runtime_error("GlobalValue::SetInitializer: type mismatch"); + } + } + else { + throw std::runtime_error("GlobalValue::SetInitializer: unsupported type"); + } + + initializer_ = init; +} + +// 辅助方法:获取实际的值类型(处理指针包装) +std::shared_ptr GlobalValue::GetValueType() const { + if (GetType()->IsPtrInt32()) { + return Type::GetInt32Type(); + } else if (GetType()->IsPtrFloat()) { + return Type::GetFloatType(); + } else if (GetType()->IsPtrInt1()) { + return Type::GetInt1Type(); + } + return GetType(); +} + +// 辅助方法:检查类型兼容性 +bool GlobalValue::CheckTypeCompatibility(std::shared_ptr value_type, + ConstantValue* init) const { + // 检查标量类型 + if (value_type->IsInt32() && init->GetType()->IsInt32()) { + return true; + } else if (value_type->IsFloat() && init->GetType()->IsFloat()) { + return true; + } else if (value_type->IsInt1() && init->GetType()->IsInt1()) { + return true; + } + // 检查数组类型:允许用单个标量初始化整个数组 + else if (value_type->IsArray()) { + auto* array_ty = static_cast(value_type.get()); + auto* elem_type = array_ty->GetElementType().get(); + + if (elem_type->IsInt32() && init->GetType()->IsInt32()) { + return true; + } else if (elem_type->IsFloat() && init->GetType()->IsFloat()) { + return true; + } else if (elem_type->IsInt1() && init->GetType()->IsInt1()) { + return true; + } + // 也可以允许 ConstantArray 作为初始化器 + else if (init->GetType()->IsArray()) { + auto* init_array = static_cast(init); + return init_array->IsValid(); + } + } + // 检查指针类型(用于数组参数) + else if (value_type->IsPtrInt32() && init->GetType()->IsInt32()) { + return true; + } else if (value_type->IsPtrFloat() && init->GetType()->IsFloat()) { + return true; + } + + return false; +} + +// 添加获取数组元素的便捷方法 +ConstantValue* GlobalValue::GetArrayElement(size_t index) const { + if (!GetType()->IsArray()) { + return nullptr; + } + + auto* array_ty = dynamic_cast(GetType().get()); + if (!array_ty) { + return nullptr; + } + if (index >= static_cast(array_ty->GetElementCount())) { + return nullptr; + } + if (index >= initializer_.size()) { + return GetScalarZeroConstant(*array_ty->GetElementType()); + } + return initializer_[index]; +} + +// 添加获取数组元素数量的方法 +size_t GlobalValue::GetArraySize() const { + if (!IsArrayConstant()) { + return 0; + } + return initializer_.size(); +} + +// 添加判断是否为数组常量的方法 +bool GlobalValue::IsArrayConstant() const { + return GetType()->IsArray() && !initializer_.empty(); +} + +} // namespace ir \ No newline at end of file diff --git a/src/ir/IRBuilder.cpp b/src/ir/IRBuilder.cpp index 90f03c4..9b7c545 100644 --- a/src/ir/IRBuilder.cpp +++ b/src/ir/IRBuilder.cpp @@ -5,7 +5,7 @@ #include "ir/IR.h" #include - +#include #include "utils/Log.h" namespace ir { @@ -21,6 +21,21 @@ ConstantInt* IRBuilder::CreateConstInt(int v) { return ctx_.GetConstInt(v); } +// IRBuilder 方法实现 +ConstantFloat* IRBuilder::CreateConstFloat(float v) { + return ctx_.GetConstFloat(v); +} + +ConstantArray* IRBuilder::CreateConstArray(std::shared_ptr ty, + std::vector elements) { + return ctx_.GetConstArray(ty, std::move(elements)); +} + +ConstantZero* IRBuilder::CreateZeroConstant(std::shared_ptr ty) { + return ctx_.GetZeroConstant(ty); +} + + BinaryInst* IRBuilder::CreateBinary(Opcode op, Value* lhs, Value* rhs, const std::string& name) { if (!insert_block_) { @@ -34,7 +49,69 @@ BinaryInst* IRBuilder::CreateBinary(Opcode op, Value* lhs, Value* rhs, throw std::runtime_error( FormatError("ir", "IRBuilder::CreateBinary 缺少 rhs")); } - return insert_block_->Append(op, lhs->GetType(), lhs, rhs, name); + + // 检查操作码是否为有效的二元操作符 + switch (op) { + case Opcode::Add: + case Opcode::Sub: + case Opcode::Mul: + case Opcode::Div: + case Opcode::Mod: + case Opcode::And: + case Opcode::Or: + // 添加浮点操作码 + case Opcode::FAdd: + case Opcode::FSub: + case Opcode::FMul: + case Opcode::FDiv: + // 有效的二元操作符 + break; + case Opcode::Not: + // Not是一元操作符,不应该在BinaryInst中 + throw std::runtime_error(FormatError("ir", "Not是一元操作符,应使用其他指令")); + default: + throw std::runtime_error(FormatError("ir", "BinaryInst 不支持的操作码")); + } + + // 确定结果类型 + std::shared_ptr result_type; + + // 检查操作数类型是否相同 + if (lhs->GetType()->GetKind() != rhs->GetType()->GetKind()) { + throw std::runtime_error( + FormatError("ir", "CreateBinary 操作数类型不匹配")); + } + + // 检查是否为浮点操作 + bool is_float_op = (op == Opcode::FAdd || op == Opcode::FSub || + op == Opcode::FMul || op == Opcode::FDiv); + + if (is_float_op) { + // 浮点操作要求操作数是浮点类型 + if (!lhs->GetType()->IsFloat()) { + throw std::runtime_error( + FormatError("ir", "浮点运算要求操作数为浮点类型")); + } + result_type = lhs->GetType(); + } else { + bool is_logical = (op == Opcode::And || op == Opcode::Or); + + if (is_logical) { + // 逻辑运算的结果是 int32(布尔值) + result_type = Type::GetInt32Type(); + } else { + // 算术运算的结果类型与操作数相同 + result_type = lhs->GetType(); + } + + // 检查操作数类型是否支持 + if (!lhs->GetType()->IsInt32() && !lhs->GetType()->IsFloat()) { + throw std::runtime_error( + FormatError("ir", "CreateBinary 只支持 int32 和 float 类型")); + } + } + + return insert_block_->Append(op, result_type, lhs, rhs, name); } BinaryInst* IRBuilder::CreateAdd(Value* lhs, Value* rhs, @@ -42,6 +119,17 @@ BinaryInst* IRBuilder::CreateAdd(Value* lhs, Value* rhs, return CreateBinary(Opcode::Add, lhs, rhs, name); } +AllocaInst* IRBuilder::CreateAlloca(std::shared_ptr ty, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!ty) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateAlloca 缺少类型")); + } + return insert_block_->Append(ty, name); +} + AllocaInst* IRBuilder::CreateAllocaI32(const std::string& name) { if (!insert_block_) { throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); @@ -49,6 +137,13 @@ AllocaInst* IRBuilder::CreateAllocaI32(const std::string& name) { return insert_block_->Append(Type::GetPtrInt32Type(), name); } +AllocaInst* IRBuilder::CreateAllocaFloat(const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + return insert_block_->Append(Type::GetPtrFloatType(), name); +} + LoadInst* IRBuilder::CreateLoad(Value* ptr, const std::string& name) { if (!insert_block_) { throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); @@ -57,9 +152,32 @@ LoadInst* IRBuilder::CreateLoad(Value* ptr, const std::string& name) { throw std::runtime_error( FormatError("ir", "IRBuilder::CreateLoad 缺少 ptr")); } - return insert_block_->Append(Type::GetInt32Type(), ptr, name); + auto ptr_ty = ptr->GetType(); + std::shared_ptr elem_ty; + + if (ptr_ty->IsPtrInt32()) { + elem_ty = Type::GetInt32Type(); + } else if (ptr_ty->IsPtrFloat()) { + elem_ty = Type::GetFloatType(); + } else if (ptr_ty->IsPtrInt1()) { + elem_ty = Type::GetInt1Type(); + } else if (ptr_ty->IsArray()) { + // 数组类型的指针,元素类型是数组元素类型 + auto* array_ty = dynamic_cast(ptr_ty.get()); + if (array_ty) { + elem_ty = array_ty->GetElementType(); + } else { + throw std::runtime_error(FormatError("ir", "不支持的指针类型")); + } + } else { + // 尝试其他指针类型 + throw std::runtime_error(FormatError("ir", "不支持的指针类型")); + } + + return insert_block_->Append(elem_ty, ptr, name); } + StoreInst* IRBuilder::CreateStore(Value* val, Value* ptr) { if (!insert_block_) { throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); @@ -72,6 +190,35 @@ StoreInst* IRBuilder::CreateStore(Value* val, Value* ptr) { throw std::runtime_error( FormatError("ir", "IRBuilder::CreateStore 缺少 ptr")); } + + // 检查类型兼容性 + auto ptr_ty = ptr->GetType(); + auto val_ty = val->GetType(); + + if (ptr_ty->IsPtrInt32()) { + if (!val_ty->IsInt32()) { + throw std::runtime_error(FormatError("ir", "存储类型不匹配:期望 int32")); + } + } else if (ptr_ty->IsPtrFloat()) { + if (!val_ty->IsFloat()) { + throw std::runtime_error( + FormatError("ir", "存储类型不匹配:期望 float, 实际 kind=" + + std::to_string(static_cast(val_ty->GetKind())))); + } + } else if (ptr_ty->IsArray()) { + // 数组存储支持两种形式: + // 1. 标量元素写入(通常配合 GEP 后落到元素指针,不会走到这里) + // 2. 聚合数组整体写入,例如 `store [16 x i32] zeroinitializer, [16 x i32]* %arr` + if (!val_ty->IsArray()) { + throw std::runtime_error( + FormatError("ir", "数组地址仅支持聚合数组整体存储")); + } + if (val_ty->GetKind() != ptr_ty->GetKind()) { + throw std::runtime_error( + FormatError("ir", "聚合数组存储类型不匹配")); + } + } + return insert_block_->Append(Type::GetVoidType(), val, ptr); } @@ -79,11 +226,445 @@ ReturnInst* IRBuilder::CreateRet(Value* v) { if (!insert_block_) { throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); } - if (!v) { + return insert_block_->Append(Type::GetVoidType(), v); +} + +BranchInst* IRBuilder::CreateBr(BasicBlock* target) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!target) { throw std::runtime_error( - FormatError("ir", "IRBuilder::CreateRet 缺少返回值")); + FormatError("ir", "IRBuilder::CreateBr 缺少 target")); } - return insert_block_->Append(Type::GetVoidType(), v); + return insert_block_->Append(Type::GetVoidType(), target); +} + +BranchInst* IRBuilder::CreateCondBr(Value* cond, BasicBlock* true_target, + BasicBlock* false_target) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!cond) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateCondBr 缺少 cond")); + } + if (!true_target) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateCondBr 缺少 true_target")); + } + if (!false_target) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateCondBr 缺少 false_target")); + } + return insert_block_->Append(Type::GetVoidType(), cond, true_target, false_target); +} + +// 创建整数相等比较 +IcmpInst* IRBuilder::CreateICmpEQ(Value* lhs, Value* rhs, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs || !rhs) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateICmpEQ 缺少操作数")); + } + // 检查类型必须一致 + if (lhs->GetType() != rhs->GetType()) { + throw std::runtime_error( + FormatError("ir", "比较操作数类型不匹配")); + } + return insert_block_->Append(IcmpInst::Predicate::EQ, lhs, rhs, + Type::GetInt1Type(), name); +} + +// 创建整数不等比较 +IcmpInst* IRBuilder::CreateICmpNE(Value* lhs, Value* rhs, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs || !rhs) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateICmpNE 缺少操作数")); + } + if (lhs->GetType() != rhs->GetType()) { + throw std::runtime_error( + FormatError("ir", "比较操作数类型不匹配")); + } + return insert_block_->Append(IcmpInst::Predicate::NE, lhs, rhs, + Type::GetInt1Type(), name); +} + +// 创建整数小于比较 +IcmpInst* IRBuilder::CreateICmpLT(Value* lhs, Value* rhs, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs || !rhs) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateICmpLT 缺少操作数")); + } + if (lhs->GetType() != rhs->GetType()) { + throw std::runtime_error( + FormatError("ir", "比较操作数类型不匹配")); + } + return insert_block_->Append(IcmpInst::Predicate::LT, lhs, rhs, + Type::GetInt1Type(), name); +} + +// 创建整数小于等于比较 +IcmpInst* IRBuilder::CreateICmpLE(Value* lhs, Value* rhs, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs || !rhs) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateICmpLE 缺少操作数")); + } + if (lhs->GetType() != rhs->GetType()) { + throw std::runtime_error( + FormatError("ir", "比较操作数类型不匹配")); + } + return insert_block_->Append(IcmpInst::Predicate::LE, lhs, rhs, + Type::GetInt1Type(), name); +} + +// 创建整数大于比较 +IcmpInst* IRBuilder::CreateICmpGT(Value* lhs, Value* rhs, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs || !rhs) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateICmpGT 缺少操作数")); + } + if (lhs->GetType() != rhs->GetType()) { + throw std::runtime_error( + FormatError("ir", "比较操作数类型不匹配")); + } + return insert_block_->Append(IcmpInst::Predicate::GT, lhs, rhs, + Type::GetInt1Type(), name); +} + +// 创建整数大于等于比较 +IcmpInst* IRBuilder::CreateICmpGE(Value* lhs, Value* rhs, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs || !rhs) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateICmpGE 缺少操作数")); + } + if (lhs->GetType() != rhs->GetType()) { + throw std::runtime_error( + FormatError("ir", "比较操作数类型不匹配")); + } + return insert_block_->Append(IcmpInst::Predicate::GE, lhs, rhs, + Type::GetInt1Type(), name); +} + +// 创建零扩展指令 +ZExtInst* IRBuilder::CreateZExt(Value* value, std::shared_ptr target_ty, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!value) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateZExt 缺少 value")); + } + if (!target_ty) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateZExt 缺少 target_ty")); + } + + auto src_ty = value->GetType(); + // 类型检查:源类型应该是较小的整数类型 + if (!src_ty->IsInt1() && !src_ty->IsInt32()) { + throw std::runtime_error( + FormatError("ir", "ZExt 源类型必须是整数类型")); + } + // 目标类型应该是较大的整数类型 + if (!target_ty->IsInt32()) { + throw std::runtime_error( + FormatError("ir", "ZExt 目标类型必须是整数类型")); + } + + const std::string inst_name = name.empty() ? ctx_.NextTemp() : name; + return insert_block_->Append(value, target_ty, inst_name); +} + +// 创建截断指令 +TruncInst* IRBuilder::CreateTrunc(Value* value, std::shared_ptr target_ty, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!value) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateTrunc 缺少 value")); + } + if (!target_ty) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateTrunc 缺少 target_ty")); + } + + auto src_ty = value->GetType(); + // 类型检查:源类型应该是较大的整数类型 + if (!src_ty->IsInt32()) { + throw std::runtime_error( + FormatError("ir", "Trunc 源类型必须是整数类型")); + } + // 目标类型应该是较小的整数类型 + if (!target_ty->IsInt1() && !target_ty->IsInt32()) { + throw std::runtime_error( + FormatError("ir", "Trunc 目标类型必须是整数类型")); + } + + const std::string inst_name = name.empty() ? ctx_.NextTemp() : name; + return insert_block_->Append(value, target_ty, inst_name); +} + +// 便捷方法:i1 转 i32 +ZExtInst* IRBuilder::CreateZExtI1ToI32(Value* value, const std::string& name) { + return CreateZExt(value, Type::GetInt32Type(), name); +} + +// 便捷方法:i32 转 i1 +TruncInst* IRBuilder::CreateTruncI32ToI1(Value* value, const std::string& name) { + return CreateTrunc(value, Type::GetInt1Type(), name); +} + +BinaryInst* IRBuilder::CreateDiv(Value* lhs, Value* rhs, const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateDiv 缺少 lhs")); + } + if (!rhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateDiv 缺少 rhs")); + } + return insert_block_->Append(Opcode::Div, lhs->GetType(), lhs, rhs, name); +} + +BinaryInst* IRBuilder::CreateMod(Value* lhs, Value* rhs, const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateMod 缺少 lhs")); + } + if (!rhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateMod 缺少 rhs")); + } + return insert_block_->Append(Opcode::Mod, lhs->GetType(), lhs, rhs, name); +} + + +BinaryInst* IRBuilder::CreateAnd(Value* lhs, Value* rhs, const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateAnd 缺少 lhs")); + } + if (!rhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateAnd 缺少 rhs")); + } + auto result_ty = lhs->GetType()->IsInt1() ? Type::GetInt1Type() + : Type::GetInt32Type(); + return insert_block_->Append(Opcode::And, result_ty, lhs, rhs, name); +} + +BinaryInst* IRBuilder::CreateOr(Value* lhs, Value* rhs, const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateOr 缺少 lhs")); + } + if (!rhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateOr 缺少 rhs")); + } + auto result_ty = lhs->GetType()->IsInt1() ? Type::GetInt1Type() + : Type::GetInt32Type(); + return insert_block_->Append(Opcode::Or, result_ty, lhs, rhs, name); +} + +IcmpInst* IRBuilder::CreateNot(Value* val, const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!val) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateNot 缺少 operand")); + } + if (val->GetType()->IsInt1()) { + auto* ext = CreateZExtI1ToI32(val, ""); + auto* zero = CreateConstInt(0); + return CreateICmpEQ(ext, zero, name); + } + auto* zero = CreateConstInt(0); + return CreateICmpEQ(val, zero, name); +} + +GEPInst* IRBuilder::CreateGEP(Value* base, + const std::vector& indices, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!base) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateGEP 缺少 base")); + } + + // 检查所有索引 + for (size_t i = 0; i < indices.size(); ++i) { + if (!indices[i]) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateGEP 索引 " + std::to_string(i) + " 为空")); + } + } + + // 结果类型推断: + // - 对 i32*/float* 基址,结果仍分别为 i32*/float* + // - 对数组基址,按多索引向下剥离元素类型;若到达标量则返回对应标量指针 + // (本项目没有“指向数组的指针类型”,未完全剥离时退回数组类型) + std::shared_ptr result_ty = base->GetType(); + if (base->GetType()->IsPtrInt32()) { + result_ty = Type::GetPtrInt32Type(); + } else if (base->GetType()->IsPtrFloat()) { + result_ty = Type::GetPtrFloatType(); + } else if (base->GetType()->IsArray()) { + std::shared_ptr cur = base->GetType(); + for (size_t i = 1; i < indices.size(); ++i) { + auto* at = dynamic_cast(cur.get()); + if (!at) break; + cur = at->GetElementType(); + } + + if (cur->IsInt32()) result_ty = Type::GetPtrInt32Type(); + else if (cur->IsFloat()) result_ty = Type::GetPtrFloatType(); + else result_ty = cur; + } + + return insert_block_->Append(result_ty, base, indices, name); +} + + +BinaryInst* IRBuilder::CreateMul(Value* lhs, Value* rhs, const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateMul 缺少 lhs")); + } + if (!rhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateMul 缺少 rhs")); + } + return CreateBinary(Opcode::Mul, lhs, rhs, name); +} + +BinaryInst* IRBuilder::CreateSub(Value* lhs, Value* rhs, const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateSub 缺少 lhs")); + } + if (!rhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateSub 缺少 rhs")); + } + return CreateBinary(Opcode::Sub, lhs, rhs, name); +} + +// 注意:当前 CreateCall 仅支持直接调用 Function,且不支持变长参数列表等复杂特性。 +// 创建函数调用指令的实现,被调用的函数,参数列表,返回值临时变量名 +CallInst* IRBuilder::CreateCall(Function* callee, + const std::vector& args, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!callee) { //被调用的函数不能为空 + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateCall 缺少 callee")); + } + auto func_ty = std::static_pointer_cast(callee->GetType()); + auto ret_ty = func_ty->GetReturnType(); + return insert_block_->Append(ret_ty, callee, args, name); +} + + +BinaryInst* IRBuilder::CreateFAdd(Value* lhs, Value* rhs, const std::string& name) { + return insert_block_->Append(Opcode::FAdd, lhs->GetType(), lhs, rhs, name); +} + +BinaryInst* IRBuilder::CreateFSub(Value* lhs, Value* rhs, const std::string& name) { + return insert_block_->Append(Opcode::FSub, lhs->GetType(), lhs, rhs, name); +} + +BinaryInst* IRBuilder::CreateFMul(Value* lhs, Value* rhs, const std::string& name) { + return insert_block_->Append(Opcode::FMul, lhs->GetType(), lhs, rhs, name); +} + +BinaryInst* IRBuilder::CreateFDiv(Value* lhs, Value* rhs, const std::string& name) { + return insert_block_->Append(Opcode::FDiv, lhs->GetType(), lhs, rhs, name); +} + +// 浮点比较 +FcmpInst* IRBuilder::CreateFCmpOEQ(Value* lhs, Value* rhs, const std::string& name) { + return insert_block_->Append( + FcmpInst::Predicate::OEQ, lhs, rhs, Type::GetInt1Type(), name); +} + +FcmpInst* IRBuilder::CreateFCmpONE(Value* lhs, Value* rhs, const std::string& name) { + return insert_block_->Append( + FcmpInst::Predicate::ONE, lhs, rhs, Type::GetInt1Type(), name); +} + +FcmpInst* IRBuilder::CreateFCmpOLT(Value* lhs, Value* rhs, const std::string& name) { + return insert_block_->Append( + FcmpInst::Predicate::OLT, lhs, rhs, Type::GetInt1Type(), name); +} + +FcmpInst* IRBuilder::CreateFCmpOLE(Value* lhs, Value* rhs, const std::string& name) { + return insert_block_->Append( + FcmpInst::Predicate::OLE, lhs, rhs, Type::GetInt1Type(), name); +} + +FcmpInst* IRBuilder::CreateFCmpOGT(Value* lhs, Value* rhs, const std::string& name) { + return insert_block_->Append( + FcmpInst::Predicate::OGT, lhs, rhs, Type::GetInt1Type(), name); +} + +FcmpInst* IRBuilder::CreateFCmpOGE(Value* lhs, Value* rhs, const std::string& name) { + return insert_block_->Append( + FcmpInst::Predicate::OGE, lhs, rhs, Type::GetInt1Type(), name); +} + +// 类型转换 +SIToFPInst* IRBuilder::CreateSIToFP(Value* value, std::shared_ptr target_ty, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + const std::string inst_name = name.empty() ? ctx_.NextTemp() : name; + return insert_block_->Append(value, target_ty, inst_name); +} + +FPToSIInst* IRBuilder::CreateFPToSI(Value* value, std::shared_ptr target_ty, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + const std::string inst_name = name.empty() ? ctx_.NextTemp() : name; + return insert_block_->Append(value, target_ty, inst_name); } } // namespace ir diff --git a/src/ir/IRPrinter.cpp b/src/ir/IRPrinter.cpp index 30efbb6..a3a6278 100644 --- a/src/ir/IRPrinter.cpp +++ b/src/ir/IRPrinter.cpp @@ -4,6 +4,9 @@ #include "ir/IR.h" +#include +#include +#include #include #include #include @@ -12,14 +15,134 @@ namespace ir { -static const char* TypeToString(const Type& ty) { +static std::string TypeToString(const Type& ty); + +static std::string ArrayTypeToStringFrom(const Type& base_ty, + const std::vector& dims, + size_t begin) { + std::string s = TypeToString(base_ty); + for (size_t i = dims.size(); i-- > begin;) { + s = "[" + std::to_string(dims[i]) + " x " + s + "]"; + } + return s; +} + +static bool IsZeroConstant(const ConstantValue* value) { + if (!value) { + return true; + } + if (auto* ci = dynamic_cast(value)) { + return ci->GetValue() == 0; + } + if (auto* cf = dynamic_cast(value)) { + return cf->GetValue() == 0.0f; + } + if (dynamic_cast(value) || + dynamic_cast(value)) { + return true; + } + if (auto* arr = dynamic_cast(value)) { + for (auto* elem : arr->GetElements()) { + if (!IsZeroConstant(elem)) { + return false; + } + } + return true; + } + return false; +} + +static size_t AggregateSpan(const std::vector& dims, size_t level) { + size_t span = 1; + for (size_t i = level; i < dims.size(); ++i) { + span *= static_cast(dims[i]); + } + return span; +} + +static bool IsZeroRange(const std::vector& init, + size_t begin, + size_t count) { + for (size_t i = 0; i < count; ++i) { + const size_t index = begin + i; + if (index >= init.size()) { + continue; + } + if (!IsZeroConstant(init[index])) { + return false; + } + } + return true; +} + +static void PrintFlatArrayBody(std::ostream& os, + const Type& base_ty, + const std::vector& dims, + size_t level, + const std::vector& init, + size_t& flat_index) { + const size_t span = AggregateSpan(dims, level); + if (IsZeroRange(init, flat_index, span)) { + os << "zeroinitializer"; + flat_index += span; + return; + } + + os << "["; + for (int i = 0; i < dims[level]; ++i) { + if (i > 0) os << ", "; + + if (level + 1 < dims.size()) { + os << ArrayTypeToStringFrom(base_ty, dims, level + 1) << " "; + PrintFlatArrayBody(os, base_ty, dims, level + 1, init, flat_index); + continue; + } + + os << TypeToString(base_ty) << " "; + if (flat_index < init.size() && init[flat_index]) { + if (auto* ci = dynamic_cast(init[flat_index])) { + os << ci->GetValue(); + } else if (auto* cf = dynamic_cast(init[flat_index])) { + os << cf->GetValue(); + } else if (IsZeroConstant(init[flat_index])) { + os << "0"; + } else { + os << "0"; + } + } else { + os << "0"; + } + ++flat_index; + } + os << "]"; +} + +static std::string TypeToString(const Type& ty) { switch (ty.GetKind()) { - case Type::Kind::Void: - return "void"; - case Type::Kind::Int32: - return "i32"; - case Type::Kind::PtrInt32: - return "i32*"; + case Type::Kind::Void: return "void"; + case Type::Kind::Int32: return "i32"; + case Type::Kind::Float: return "float"; + case Type::Kind::PtrInt32: return "i32*"; + case Type::Kind::PtrFloat: return "float*"; + case Type::Kind::Label: return "label"; + case Type::Kind::Function: return "function"; + case Type::Kind::Int1: return "i1"; + case Type::Kind::PtrInt1: return "i1*"; + case Type::Kind::Array: { + // 打印数组类型为 LLVM 风格,如 [4 x [2 x i32]] + auto* at = dynamic_cast(&ty); + if (!at) return "array"; + // 递归构建类型字符串 + std::string elem = TypeToString(*at->GetElementType()); + const auto& dims = at->GetDimensions(); + // 从外到内构建 + std::string s = elem; + for (auto it = dims.rbegin(); it != dims.rend(); ++it) { + s = "[" + std::to_string(*it) + " x " + s + "]"; + } + return s; + } + default: return "unknown"; } throw std::runtime_error(FormatError("ir", "未知类型")); } @@ -40,21 +163,182 @@ static const char* OpcodeToString(Opcode op) { return "store"; case Opcode::Ret: return "ret"; + case Opcode::Call: + return "call"; + case Opcode::Br: + return "br"; + case Opcode::CondBr: + return "condbr"; + case Opcode::Icmp: + return "icmp"; + case Opcode::Div: + return "sdiv"; + case Opcode::Mod: + return "srem"; + case Opcode::ZExt: + return "zext"; + case Opcode::Trunc: + return "trunc"; + case Opcode::And: + return "and"; + case Opcode::Or: + return "or"; + case Opcode::Not: + return "not"; + case Opcode::GEP: + return "getelementptr"; + case Opcode::FAdd: return "fadd"; + case Opcode::FSub: return "fsub"; + case Opcode::FMul: return "fmul"; + case Opcode::FDiv: return "fdiv"; + case Opcode::FCmp: return "fcmp"; + case Opcode::SIToFP: return "sitofp"; + case Opcode::FPToSI: return "fptosi"; + case Opcode::FPExt: return "fpext"; + case Opcode::FPTrunc: return "fptrunc"; } return "?"; } +// 将 float 值转为 LLVM IR 接受的 64-bit 十六进制浮点格式 +static std::string FloatToLLVMHex(float f) { + double d = static_cast(f); + uint64_t bits; + memcpy(&bits, &d, sizeof(bits)); + char buf[20]; + snprintf(buf, sizeof(buf), "0x%016llX", (unsigned long long)bits); + return buf; +} + static std::string ValueToString(const Value* v) { + if (!v) { + return ""; + } + if (dynamic_cast(v) || + dynamic_cast(v)) { + return "zeroinitializer"; + } if (auto* ci = dynamic_cast(v)) { return std::to_string(ci->GetValue()); } - return v ? v->GetName() : ""; + if (auto* cf = dynamic_cast(v)) { + return FloatToLLVMHex(cf->GetValue()); + } + const auto& name = v->GetName(); + if (name.empty()) { + return ""; + } + if (name[0] == '%' || name[0] == '@') { + return name; + } + if (dynamic_cast(v)) { + return "@" + name; + } + return "%" + name; +} + +static std::string MemoryTypeToString(const Type& ty) { + std::string text = TypeToString(ty); + if (ty.IsArray()) { + text += "*"; + } + return text; } void IRPrinter::Print(const Module& module, std::ostream& os) { + for (const auto& global : module.GetGlobals()) { + if (!global) continue; + os << "@" << global->GetName() << " = " + << (global->IsConstant() ? "constant " : "global "); + + if (global->GetType()->IsPtrInt32()) { + os << "i32 "; + if (global->HasInitializer()) { + auto* ci = dynamic_cast(global->GetInitializer().front()); + os << (ci ? ci->GetValue() : 0); + } else { + os << "0"; + } + os << "\n"; + continue; + } + + if (global->GetType()->IsPtrFloat()) { + os << "float "; + if (global->HasInitializer()) { + auto* cf = dynamic_cast(global->GetInitializer().front()); + os << (cf ? ValueToString(cf) : FloatToLLVMHex(0.0f)); + } else { + os << FloatToLLVMHex(0.0f); + } + os << "\n"; + continue; + } + + if (global->GetType()->IsArray()) { + auto* at = dynamic_cast(global->GetType().get()); + os << TypeToString(*global->GetType()) << " "; + if (!at || !global->HasInitializer() || + IsZeroRange(global->GetInitializer(), 0, AggregateSpan(at->GetDimensions(), 0))) { + os << "zeroinitializer\n"; + continue; + } + + size_t flat_index = 0; + PrintFlatArrayBody(os, + *at->GetElementType(), + at->GetDimensions(), + 0, + global->GetInitializer(), + flat_index); + os << "\n"; + continue; + } + + os << TypeToString(*global->GetType()) << " zeroinitializer\n"; + } + + auto print_func_params = [&](const Function* func, + const FunctionType* func_ty) { + bool first = true; + if (!func->GetArguments().empty()) { + for (const auto& arg : func->GetArguments()) { + if (!first) os << ", "; + first = false; + os << TypeToString(*arg->GetType()) << " %" << arg->GetName(); + } + return; + } + + for (const auto& pty : func_ty->GetParamTypes()) { + if (!first) os << ", "; + first = false; + os << TypeToString(*pty); + } + }; + + auto is_declaration_only = [](const Function* func) { + const auto& blocks = func->GetBlocks(); + if (blocks.size() != 1) return false; + const auto& only = blocks.front(); + if (!only) return false; + return only->GetInstructions().empty(); + }; + for (const auto& func : module.GetFunctions()) { - os << "define " << TypeToString(*func->GetType()) << " @" << func->GetName() - << "() {\n"; + auto* func_ty = static_cast(func->GetType().get()); + if (is_declaration_only(func.get())) { + os << "declare " << TypeToString(*func_ty->GetReturnType()) << " @" + << func->GetName() << "("; + print_func_params(func.get(), func_ty); + os << ")\n"; + continue; + } + + os << "define " << TypeToString(*func_ty->GetReturnType()) << " @" + << func->GetName() << "("; + print_func_params(func.get(), func_ty); + os << ") {\n"; for (const auto& bb : func->GetBlocks()) { if (!bb) { continue; @@ -65,7 +349,17 @@ void IRPrinter::Print(const Module& module, std::ostream& os) { switch (inst->GetOpcode()) { case Opcode::Add: case Opcode::Sub: - case Opcode::Mul: { + case Opcode::Mul: + case Opcode::Div: + case Opcode::Mod: + case Opcode::And: + case Opcode::Not: + case Opcode::Or: + case Opcode::FAdd: + case Opcode::FSub: + case Opcode::FMul: + case Opcode::FDiv: + { auto* bin = static_cast(inst); os << " " << bin->GetName() << " = " << OpcodeToString(bin->GetOpcode()) << " " @@ -76,25 +370,189 @@ void IRPrinter::Print(const Module& module, std::ostream& os) { } case Opcode::Alloca: { auto* alloca = static_cast(inst); - os << " " << alloca->GetName() << " = alloca i32\n"; + std::string elem_ty_str; + if (alloca->GetType()->IsPtrInt32()) { + elem_ty_str = "i32"; + } else if (alloca->GetType()->IsPtrFloat()) { + elem_ty_str = "float"; + } else { + elem_ty_str = TypeToString(*alloca->GetType()); + } + os << " " << alloca->GetName() << " = alloca " << elem_ty_str << "\n"; break; } case Opcode::Load: { auto* load = static_cast(inst); - os << " " << load->GetName() << " = load i32, i32* " + os << " " << load->GetName() << " = load " + << TypeToString(*load->GetType()) << ", " + << MemoryTypeToString(*load->GetPtr()->GetType()) << " " << ValueToString(load->GetPtr()) << "\n"; break; } case Opcode::Store: { auto* store = static_cast(inst); - os << " store i32 " << ValueToString(store->GetValue()) - << ", i32* " << ValueToString(store->GetPtr()) << "\n"; + os << " store " << TypeToString(*store->GetValue()->GetType()) << " " + << ValueToString(store->GetValue()) + << ", " << MemoryTypeToString(*store->GetPtr()->GetType()) << " " + << ValueToString(store->GetPtr()) << "\n"; break; } case Opcode::Ret: { auto* ret = static_cast(inst); - os << " ret " << TypeToString(*ret->GetValue()->GetType()) << " " - << ValueToString(ret->GetValue()) << "\n"; + if (!ret->GetValue()) { + os << " ret void\n"; + } else { + os << " ret " << TypeToString(*ret->GetValue()->GetType()) << " " + << ValueToString(ret->GetValue()) << "\n"; + } + break; + } + // CallInst类在 include/ir/IR.h 中定义 + case Opcode::Call: { + auto* call = static_cast(inst); + os << " "; + if (!call->GetType()->IsVoid()) { + os << call->GetName() << " = "; + } + os << "call " << TypeToString(*call->GetType()) << " @" + << call->GetCallee()->GetName() << "("; + bool first = true; + for (auto* arg : call->GetArgs()) { + if (!first) os << ", "; + first = false; + os << TypeToString(*arg->GetType()) << " " << ValueToString(arg); + } + os << ")\n"; + break; + } + + // 在 IRPrinter.cpp 的 switch 语句中添加 + case Opcode::Br: + case Opcode::CondBr: { + auto* br = static_cast(inst); + if (!br->IsConditional()) { + os << " br label %" << br->GetTarget()->GetName() << "\n"; + } else { + os << " br i1 " << ValueToString(br->GetCondition()) + << ", label %" << br->GetTrueTarget()->GetName() + << ", label %" << br->GetFalseTarget()->GetName() << "\n"; + } + break; + } + + case Opcode::Icmp: { + auto* icmp = static_cast(inst); + os << " " << icmp->GetName() << " = icmp "; + switch (icmp->GetPredicate()) { + case IcmpInst::Predicate::EQ: os << "eq"; break; + case IcmpInst::Predicate::NE: os << "ne"; break; + case IcmpInst::Predicate::LT: os << "slt"; break; + case IcmpInst::Predicate::LE: os << "sle"; break; + case IcmpInst::Predicate::GT: os << "sgt"; break; + case IcmpInst::Predicate::GE: os << "sge"; break; + } + os << " " << TypeToString(*icmp->GetLhs()->GetType()) + << " " << ValueToString(icmp->GetLhs()) + << ", " << ValueToString(icmp->GetRhs()) << "\n"; + break; + } + + case Opcode::ZExt: { + auto* zext = static_cast(inst); + os << " " << zext->GetName() << " = zext " + << TypeToString(*zext->GetSourceType()) << " " + << ValueToString(zext->GetValue()) << " to " + << TypeToString(*zext->GetTargetType()) << "\n"; + break; + } + + case Opcode::Trunc: { + auto* trunc = static_cast(inst); + os << " " << trunc->GetName() << " = trunc " + << TypeToString(*trunc->GetSourceType()) << " " + << ValueToString(trunc->GetValue()) << " to " + << TypeToString(*trunc->GetTargetType()) << "\n"; + break; + } + case Opcode::GEP:{ + // 打印为类似 LLVM 的 getelementptr 形式: + // getelementptr , , i32 , i32 , ... + os << " " << inst->GetName() << " = getelementptr "; + // 基地址类型使用第一个操作数的类型 + Value* base = inst->GetOperand(0); + // GEP 的第一个类型参数应是基址指向的元素类型(pointee)。 + std::string elem_ty; + if (base->GetType()->IsPtrInt32()) elem_ty = "i32"; + else if (base->GetType()->IsPtrFloat()) elem_ty = "float"; + else if (base->GetType()->IsArray()) elem_ty = TypeToString(*base->GetType()); + else elem_ty = TypeToString(*inst->GetType()); + + std::string base_ty = TypeToString(*base->GetType()); + if (base->GetType()->IsArray()) { + base_ty += "*"; + } + + os << elem_ty << ", " << base_ty << " " << ValueToString(base); + + // 后续操作数为索引,按照 i32 打印 + // 特殊处理:如果 base 是标量指针(i32*/float*)且第一个索引是常量 0 + // 且后续还有索引,则丢弃第一个 0(对 T* 来说多余且会导致无效 IR)。 + size_t start_idx = 1; + if ((base->GetType()->IsPtrInt32() || base->GetType()->IsPtrFloat()) && + inst->GetNumOperands() >= 3) { + // 检查第一个索引是否为常量 0 + auto* first_idx = inst->GetOperand(1); + if (auto* ci = dynamic_cast(first_idx)) { + if (ci->GetValue() == 0) { + start_idx = 2; // 跳过第一个 0 + } + } + } + for (size_t i = start_idx; i < inst->GetNumOperands(); ++i) { + os << ", i32 " << ValueToString(inst->GetOperand(i)); + } + os << "\n"; + break; + } + case Opcode::FCmp: { + auto* fcmp = static_cast(inst); + os << " " << fcmp->GetName() << " = fcmp "; + switch (fcmp->GetPredicate()) { + case FcmpInst::Predicate::OEQ: os << "oeq"; break; + case FcmpInst::Predicate::ONE: os << "one"; break; + case FcmpInst::Predicate::OLT: os << "olt"; break; + case FcmpInst::Predicate::OLE: os << "ole"; break; + case FcmpInst::Predicate::OGT: os << "ogt"; break; + case FcmpInst::Predicate::OGE: os << "oge"; break; + default: os << "oeq"; break; + } + os << " " << TypeToString(*fcmp->GetLhs()->GetType()) + << " " << ValueToString(fcmp->GetLhs()) + << ", " << ValueToString(fcmp->GetRhs()) << "\n"; + break; + } + + case Opcode::SIToFP: { + auto* sitofp = static_cast(inst); + os << " " << sitofp->GetName() << " = sitofp " + << TypeToString(*sitofp->GetValue()->GetType()) << " " + << ValueToString(sitofp->GetValue()) << " to " + << TypeToString(*sitofp->GetType()) << "\n"; + break; + } + + case Opcode::FPToSI: { + auto* fptosi = static_cast(inst); + os << " " << fptosi->GetName() << " = fptosi " + << TypeToString(*fptosi->GetValue()->GetType()) << " " + << ValueToString(fptosi->GetValue()) << " to " + << TypeToString(*fptosi->GetType()) << "\n"; + break; + } + + default: { + // 处理未知操作码 + os << " ; 未知指令: " << OpcodeToString(inst->GetOpcode()) << "\n"; break; } } @@ -104,4 +562,28 @@ void IRPrinter::Print(const Module& module, std::ostream& os) { } } +void IRPrinter::PrintConstant(const ConstantValue* constant, std::ostream& os) { + if (auto* const_int = dynamic_cast(constant)) { + os << const_int->GetValue(); + } + else if (auto* const_float = dynamic_cast(constant)) { + os << const_float->GetValue(); + } + else if (auto* const_array = dynamic_cast(constant)) { + os << "["; + auto& elements = const_array->GetElements(); + for (size_t i = 0; i < elements.size(); ++i) { + if (i > 0) os << ", "; + PrintConstant(elements[i], os); + } + os << "]"; + } + else if (dynamic_cast(constant)) { + os << "zero"; + } + else if (dynamic_cast(constant)) { + os << "zeroinitializer"; + } +} + } // namespace ir diff --git a/src/ir/Instruction.cpp b/src/ir/Instruction.cpp index 7928716..d0f280a 100644 --- a/src/ir/Instruction.cpp +++ b/src/ir/Instruction.cpp @@ -52,7 +52,10 @@ Instruction::Instruction(Opcode op, std::shared_ptr ty, std::string name) Opcode Instruction::GetOpcode() const { return opcode_; } -bool Instruction::IsTerminator() const { return opcode_ == Opcode::Ret; } +bool Instruction::IsTerminator() const { + return opcode_ == Opcode::Ret || opcode_ == Opcode::Br || + opcode_ == Opcode::CondBr; +} BasicBlock* Instruction::GetParent() const { return parent_; } @@ -61,22 +64,71 @@ void Instruction::SetParent(BasicBlock* parent) { parent_ = parent; } BinaryInst::BinaryInst(Opcode op, std::shared_ptr ty, Value* lhs, Value* rhs, std::string name) : Instruction(op, std::move(ty), std::move(name)) { - if (op != Opcode::Add) { - throw std::runtime_error(FormatError("ir", "BinaryInst 当前只支持 Add")); - } - if (!lhs || !rhs) { - throw std::runtime_error(FormatError("ir", "BinaryInst 缺少操作数")); + // 检查操作码是否为有效的二元操作符 + switch (op) { + case Opcode::Add: + case Opcode::Sub: + case Opcode::Mul: + case Opcode::Div: + case Opcode::Mod: + case Opcode::And: + case Opcode::Or: + case Opcode::FAdd: + case Opcode::FSub: + case Opcode::FMul: + case Opcode::FDiv: + // 有效的二元操作符 + break; + case Opcode::Not: + // Not是一元操作符,不应该在BinaryInst中 + throw std::runtime_error(FormatError("ir", "Not是一元操作符,应使用其他指令")); + default: + throw std::runtime_error(FormatError("ir", "BinaryInst 不支持的操作码")); + } + // 当前 BinaryInst 仅支持 Add/Sub/Mul,且操作数和结果必须都是 i32。 + if (op != Opcode::Add && op != Opcode::Sub && op != Opcode::Mul) { } + if (!type_ || !lhs->GetType() || !rhs->GetType()) { throw std::runtime_error(FormatError("ir", "BinaryInst 缺少类型信息")); } - if (lhs->GetType()->GetKind() != rhs->GetType()->GetKind() || - type_->GetKind() != lhs->GetType()->GetKind()) { - throw std::runtime_error(FormatError("ir", "BinaryInst 类型不匹配")); + + // 对于比较操作,结果类型是i1,但我们的类型系统可能还没有i1 + // 暂时简化:所有操作都返回i32,比较操作返回0或1 + // 检查操作数类型是否匹配 + if (lhs->GetType()->GetKind() != rhs->GetType()->GetKind()) { + throw std::runtime_error(FormatError("ir", "BinaryInst 操作数类型不匹配")); } - if (!type_->IsInt32()) { - throw std::runtime_error(FormatError("ir", "BinaryInst 当前只支持 i32")); + + bool is_logical = (op == Opcode::And || op == Opcode::Or); + + // 检查操作数类型是否支持 + if (is_logical) { + if (!lhs->GetType()->IsInt32() && !lhs->GetType()->IsInt1()) { + throw std::runtime_error( + FormatError("ir", "逻辑运算仅支持 i32/i1")); + } + } else { + if (!lhs->GetType()->IsInt32() && !lhs->GetType()->IsFloat()) { + throw std::runtime_error( + FormatError("ir", "BinaryInst 只支持 int32 和 float 类型")); + } } + + if (is_logical) { + // 逻辑运算结果类型应与操作数一致(i1 或 i32)。 + if (type_->GetKind() != lhs->GetType()->GetKind()) { + throw std::runtime_error( + FormatError("ir", "逻辑运算结果类型与操作数类型不匹配")); + } + } else { + // 算术运算的结果类型应与操作数类型相同 + if (type_->GetKind() != lhs->GetType()->GetKind()) { + throw std::runtime_error( + FormatError("ir", "BinaryInst 结果类型与操作数类型不匹配")); + } + } + AddOperand(lhs); AddOperand(rhs); } @@ -87,21 +139,27 @@ Value* BinaryInst::GetRhs() const { return GetOperand(1); } ReturnInst::ReturnInst(std::shared_ptr void_ty, Value* val) : Instruction(Opcode::Ret, std::move(void_ty), "") { - if (!val) { - throw std::runtime_error(FormatError("ir", "ReturnInst 缺少返回值")); - } if (!type_ || !type_->IsVoid()) { throw std::runtime_error(FormatError("ir", "ReturnInst 返回类型必须为 void")); } - AddOperand(val); + if (val) { + AddOperand(val); + } } -Value* ReturnInst::GetValue() const { return GetOperand(0); } +Value* ReturnInst::GetValue() const { + if (GetNumOperands() == 0) { + return nullptr; + } + return GetOperand(0); +} AllocaInst::AllocaInst(std::shared_ptr ptr_ty, std::string name) : Instruction(Opcode::Alloca, std::move(ptr_ty), std::move(name)) { - if (!type_ || !type_->IsPtrInt32()) { - throw std::runtime_error(FormatError("ir", "AllocaInst 当前只支持 i32*")); + if (!type_ || + (!type_->IsPtrInt32() && !type_->IsPtrFloat() && !type_->IsArray())) { + throw std::runtime_error( + FormatError("ir", "AllocaInst 仅支持 i32* / float* / array")); } } @@ -110,12 +168,15 @@ LoadInst::LoadInst(std::shared_ptr val_ty, Value* ptr, std::string name) if (!ptr) { throw std::runtime_error(FormatError("ir", "LoadInst 缺少 ptr")); } - if (!type_ || !type_->IsInt32()) { - throw std::runtime_error(FormatError("ir", "LoadInst 当前只支持加载 i32")); + if (!type_ || (!type_->IsInt32() && !type_->IsFloat() && !type_->IsInt1())) { + throw std::runtime_error( + FormatError("ir", "LoadInst 仅支持加载 i32/float/i1")); } - if (!ptr->GetType() || !ptr->GetType()->IsPtrInt32()) { + if (!ptr->GetType() || + (!ptr->GetType()->IsPtrInt32() && !ptr->GetType()->IsPtrFloat() && + !ptr->GetType()->IsArray() && !ptr->GetType()->IsPtrInt1())) { throw std::runtime_error( - FormatError("ir", "LoadInst 当前只支持从 i32* 加载")); + FormatError("ir", "LoadInst 仅支持从指针或数组地址加载")); } AddOperand(ptr); } @@ -133,13 +194,25 @@ StoreInst::StoreInst(std::shared_ptr void_ty, Value* val, Value* ptr) if (!type_ || !type_->IsVoid()) { throw std::runtime_error(FormatError("ir", "StoreInst 返回类型必须为 void")); } - if (!val->GetType() || !val->GetType()->IsInt32()) { - throw std::runtime_error(FormatError("ir", "StoreInst 当前只支持存储 i32")); - } - if (!ptr->GetType() || !ptr->GetType()->IsPtrInt32()) { + if (!val->GetType() || + (!val->GetType()->IsInt32() && !val->GetType()->IsFloat() && + !val->GetType()->IsInt1() && !val->GetType()->IsArray())) { throw std::runtime_error( - FormatError("ir", "StoreInst 当前只支持写入 i32*")); + FormatError("ir", "StoreInst 仅支持存储 i32/float/i1/array")); } + if (!ptr->GetType() || + (!ptr->GetType()->IsPtrInt32() && !ptr->GetType()->IsPtrFloat() && + !ptr->GetType()->IsArray() && !ptr->GetType()->IsPtrInt1())) { + throw std::runtime_error(FormatError("ir", "StoreInst 仅支持写入指针或数组地址")); + } + if (ptr->GetType()->IsArray()) { + if (!val->GetType()->IsArray() || + val->GetType()->GetKind() != ptr->GetType()->GetKind()) { + throw std::runtime_error( + FormatError("ir", "StoreInst 聚合存储要求 value/ptr 具有相同数组类型")); + } + } + AddOperand(val); AddOperand(ptr); } @@ -148,4 +221,61 @@ Value* StoreInst::GetValue() const { return GetOperand(0); } Value* StoreInst::GetPtr() const { return GetOperand(1); } + +Function* CallInst::GetCallee() const { return callee_; } + +const std::vector& CallInst::GetArgs() const { return args_; } + +GEPInst::GEPInst(std::shared_ptr ptr_ty, + Value* base, + const std::vector& indices, + const std::string& name) + : Instruction(Opcode::GEP, ptr_ty, name) { + // 添加base作为第一个操作数 + AddOperand(base); + + // 添加所有索引作为后续操作数 + for (auto* index : indices) { + AddOperand(index); + } +} + +Value* GEPInst::GetBase() const { + // 第一个操作数是base + return GetOperand(0); +} + +const std::vector& GEPInst::GetIndices() const { + // 需要返回索引列表,但Instruction只存储操作数 + // 这是一个设计问题:要么修改架构,要么提供辅助方法 + + // 简化实现:返回空vector(或创建临时vector) + static std::vector indices; + indices.clear(); + + // 索引从操作数1开始 + for (size_t i = 1; i < GetNumOperands(); ++i) { + indices.push_back(GetOperand(i)); + } + + return indices; +} + +CallInst::CallInst(std::shared_ptr ret_ty, Function* callee, + const std::vector& args, const std::string& name) + : Instruction(Opcode::Call, std::move(ret_ty), name), // name 是 const&,这里会复制 + callee_(callee), args_(args) { + if (!callee_) { + throw std::runtime_error(FormatError("ir", "CallInst 缺少被调用函数")); + } + for (auto* arg : args_) { + if (!arg) { + throw std::runtime_error(FormatError("ir", "CallInst 参数不能为 null")); + } + AddOperand(arg); + } +} + + } // namespace ir + diff --git a/src/ir/Module.cpp b/src/ir/Module.cpp index 928efdc..79e41a5 100644 --- a/src/ir/Module.cpp +++ b/src/ir/Module.cpp @@ -9,13 +9,46 @@ Context& Module::GetContext() { return context_; } const Context& Module::GetContext() const { return context_; } Function* Module::CreateFunction(const std::string& name, - std::shared_ptr ret_type) { - functions_.push_back(std::make_unique(name, std::move(ret_type))); + std::shared_ptr func_type) { + functions_.push_back(std::make_unique(name, std::move(func_type))); return functions_.back().get(); } +Function* Module::FindFunction(const std::string& name) const { + for (const auto& func : functions_) { + if (func->GetName() == name) { + return func.get(); + } + } + return nullptr; +} + const std::vector>& Module::GetFunctions() const { return functions_; } +GlobalValue* Module::CreateGlobal(const std::string& name, + std::shared_ptr ty) { + // 对于标量类型,自动转换为指针类型 + std::shared_ptr global_ty; + + if (ty->IsInt32()) { + global_ty = Type::GetPtrInt32Type(); // i32 -> i32* + } else if (ty->IsFloat()) { + global_ty = Type::GetPtrFloatType(); // float -> float* + } else if (ty->IsInt1()) { + global_ty = Type::GetPtrInt1Type(); // i1 -> i1* + } else { + // 数组等类型保持不变 + global_ty = ty; + } + + globals_.push_back(std::make_unique(global_ty, name)); + return globals_.back().get(); +} + +const std::vector>& Module::GetGlobals() const { + return globals_; +} + } // namespace ir diff --git a/src/ir/Type.cpp b/src/ir/Type.cpp index 3e1684d..792ff54 100644 --- a/src/ir/Type.cpp +++ b/src/ir/Type.cpp @@ -1,31 +1,219 @@ // 当前仅支持 void、i32 和 i32*。 #include "ir/IR.h" +#include namespace ir { Type::Type(Kind k) : kind_(k) {} +size_t Type::Size() const { + switch (kind_) { + case Kind::Void: return 0; + case Kind::Int32: return 4; + case Kind::Float: return 4; // 单精度浮点 4 字节 + case Kind::PtrInt32: return 8; // 假设 64 位指针 + case Kind::PtrFloat: return 8; + case Kind::Label: return 8; // 标签地址大小(指针大小) + default: return 0; // 派生类应重写 + } +} + +size_t Type::Alignment() const { + switch (kind_) { + case Kind::Int32: return 4; + case Kind::Float: return 4; + case Kind::PtrInt32: return 8; + case Kind::PtrFloat: return 8; + case Kind::Label: return 8; // 与指针相同 + default: return 1; + } +} + +bool Type::IsComplete() const { + return kind_ != Kind::Void; +} const std::shared_ptr& Type::GetVoidType() { - static const std::shared_ptr type = std::make_shared(Kind::Void); + static const std::shared_ptr type = std::shared_ptr(new Type(Kind::Void)); return type; } const std::shared_ptr& Type::GetInt32Type() { - static const std::shared_ptr type = std::make_shared(Kind::Int32); + static const std::shared_ptr type = std::shared_ptr(new Type(Kind::Int32)); return type; } +const std::shared_ptr& Type::GetFloatType() { + static const std::shared_ptr type(new Type(Kind::Float)); + return type; +} + const std::shared_ptr& Type::GetPtrInt32Type() { - static const std::shared_ptr type = std::make_shared(Kind::PtrInt32); + static const std::shared_ptr type = std::shared_ptr(new Type(Kind::PtrInt32)); return type; } -Type::Kind Type::GetKind() const { return kind_; } +const std::shared_ptr& Type::GetPtrFloatType() { + static const std::shared_ptr type(new Type(Kind::PtrFloat)); + return type; +} + +const std::shared_ptr& Type::GetLabelType() { + static const std::shared_ptr type(new Type(Kind::Label)); + return type; +} + +// Int1 类型表示布尔值,通常用于比较指令的结果 +const std::shared_ptr& Type::GetInt1Type() { + static const std::shared_ptr type = std::shared_ptr(new Type(Kind::Int1)); + return type; + } +// PtrInt1 类型表示指向 Int1 的指针,主要用于条件跳转等场景 +const std::shared_ptr& Type::GetPtrInt1Type() { + static const std::shared_ptr type = std::shared_ptr(new Type(Kind::PtrInt1)); + return type; + } -bool Type::IsVoid() const { return kind_ == Kind::Void; } +// ---------- 数组类型缓存 ---------- +// 使用自定义键类型保证唯一性:元素类型指针 + 维度向量 +struct ArrayKey { + const Type* elem_type; + std::vector dims; -bool Type::IsInt32() const { return kind_ == Kind::Int32; } + bool operator==(const ArrayKey& other) const { + return elem_type == other.elem_type && dims == other.dims; + } +}; -bool Type::IsPtrInt32() const { return kind_ == Kind::PtrInt32; } +struct ArrayKeyHash { + std::size_t operator()(const ArrayKey& key) const { + std::size_t h = std::hash{}(key.elem_type); + for (int d : key.dims) { + h ^= std::hash{}(d) + 0x9e3779b9 + (h << 6) + (h >> 2); + } + return h; + } +}; + +static std::unordered_map, ArrayKeyHash>& GetArrayCache() { + static std::unordered_map, ArrayKeyHash> cache; + return cache; +} + +std::shared_ptr Type::GetArrayType(std::shared_ptr elem, + std::vector dims) { + // 检查维度合法性 + for (int d : dims) { + if (d <= 0) { + // SysY 数组维度必须为正整数常量表达式,这里假设已检查 + return nullptr; + } + } + + ArrayKey key{elem.get(), dims}; + auto& cache = GetArrayCache(); + auto it = cache.find(key); + if (it != cache.end()) { + auto ptr = it->second.lock(); + if (ptr) return ptr; + } + + auto arr = std::shared_ptr(new ArrayType(std::move(elem), std::move(dims))); + cache[key] = arr; + return arr; +} + +// ---------- 函数类型缓存 ---------- +struct FunctionKey { + const Type* return_type; + std::vector param_types; + + bool operator==(const FunctionKey& other) const { + return return_type == other.return_type && param_types == other.param_types; + } +}; + +struct FunctionKeyHash { + std::size_t operator()(const FunctionKey& key) const { + std::size_t h = std::hash{}(key.return_type); + for (const Type* t : key.param_types) { + h ^= std::hash{}(t) + 0x9e3779b9 + (h << 6) + (h >> 2); + } + return h; + } +}; + +static std::unordered_map, FunctionKeyHash>& GetFunctionCache() { + static std::unordered_map, FunctionKeyHash> cache; + return cache; +} + +std::shared_ptr Type::GetFunctionType(std::shared_ptr ret, + std::vector> params) { + // 提取裸指针用于键(保证唯一性,因为 shared_ptr 指向同一对象) + std::vector param_ptrs; + param_ptrs.reserve(params.size()); + for (const auto& p : params) { + param_ptrs.push_back(p.get()); + } + + FunctionKey key{ret.get(), std::move(param_ptrs)}; + auto& cache = GetFunctionCache(); + auto it = cache.find(key); + if (it != cache.end()) { + auto ptr = it->second.lock(); + if (ptr) return ptr; + } + + auto func = std::shared_ptr(new FunctionType(std::move(ret), std::move(params))); + cache[key] = func; + return func; +} + +// ---------- ArrayType 实现 ---------- +ArrayType::ArrayType(std::shared_ptr elem, std::vector dims) + : Type(Kind::Array), elem_type_(std::move(elem)), dims_(std::move(dims)) { + // 数组元素类型必须是完整类型 + assert(elem_type_ && elem_type_->IsComplete()); +} + +size_t ArrayType::GetElementCount() const { + size_t count = 1; + for (int d : dims_) count *= d; + return count; +} + +size_t ArrayType::Size() const { + return GetElementCount() * elem_type_->Size(); +} + +size_t ArrayType::Alignment() const { + // 数组对齐等于其元素对齐 + return elem_type_->Alignment(); +} + +bool ArrayType::IsComplete() const { + // 维度已确定且元素类型完整,则数组完整 + return !dims_.empty() && elem_type_->IsComplete(); +} + +// ---------- FunctionType 实现 ---------- +FunctionType::FunctionType(std::shared_ptr ret, + std::vector> params) + : Type(Kind::Function), return_type_(std::move(ret)), param_types_(std::move(params)) {} + +size_t FunctionType::Size() const { + // 函数类型没有运行时大小,通常用于类型检查,返回 0 + return 0; +} + +size_t FunctionType::Alignment() const { + // 不对齐 + return 1; +} + +bool FunctionType::IsComplete() const { + // 函数类型总是完整的(只要返回类型完整,但 SysY 中 void 也视为完整) + return true; +} } // namespace ir diff --git a/src/ir/Value.cpp b/src/ir/Value.cpp index 2e9f4c1..56dd2e6 100644 --- a/src/ir/Value.cpp +++ b/src/ir/Value.cpp @@ -76,8 +76,65 @@ void Value::ReplaceAllUsesWith(Value* new_value) { ConstantValue::ConstantValue(std::shared_ptr ty, std::string name) : Value(std::move(ty), std::move(name)) {} +// 建一个 Argument 对象,用给定的类型和名称初始化它,并继承 Value 的所有属性和方法。 +Argument::Argument(std::shared_ptr ty, std::string name) + : Value(std::move(ty), std::move(name)) {} ConstantInt::ConstantInt(std::shared_ptr ty, int v) : ConstantValue(std::move(ty), ""), value_(v) {} +// ConstantFloat 实现 +ConstantFloat::ConstantFloat(std::shared_ptr ty, float v) + : ConstantValue(ty, ""), value_(v) { + if (!ty->IsFloat()) { + throw std::runtime_error("ConstantFloat requires Float type"); + } +} + +// ConstantArray 实现 +ConstantArray::ConstantArray(std::shared_ptr ty, + std::vector elements) + : ConstantValue(ty, ""), elements_(std::move(elements)) { + if (!IsValid()) { + throw std::runtime_error("Invalid constant array initialization"); + } +} + +bool ConstantArray::IsValid() const { + auto* array_ty = dynamic_cast(GetType().get()); + if (!array_ty) return false; + + // 检查元素数量是否匹配 + if (elements_.size() != array_ty->GetElementCount()) return false; + + // 检查每个元素的类型是否匹配数组元素类型 + auto& elem_ty = array_ty->GetElementType(); + for (auto* elem : elements_) { + if (elem->GetType() != elem_ty) return false; + } + + return true; +} + +// ConstantZero 实现 +ConstantZero::ConstantZero(std::shared_ptr ty) + : ConstantValue(ty, "zero") { + // 零常量可以用于任何类型 +} + +std::unique_ptr ConstantZero::GetZero(std::shared_ptr ty) { + return std::make_unique(ty); +} + +// ConstantAggregateZero 实现 +ConstantAggregateZero::ConstantAggregateZero(std::shared_ptr ty) + : ConstantValue(ty, "zero") { + if (!ty->IsArray()) { + throw std::runtime_error("ConstantAggregateZero requires aggregate type"); + } +} + +std::unique_ptr ConstantAggregateZero::GetZero(std::shared_ptr ty) { + return std::make_unique(ty); +} } // namespace ir diff --git a/src/irgen/CMakeLists.txt b/src/irgen/CMakeLists.txt index d440bde..04a3195 100644 --- a/src/irgen/CMakeLists.txt +++ b/src/irgen/CMakeLists.txt @@ -10,4 +10,4 @@ target_link_libraries(irgen PUBLIC build_options ${ANTLR4_RUNTIME_TARGET} ir -) +) \ No newline at end of file diff --git a/src/irgen/IRGenDecl.cpp b/src/irgen/IRGenDecl.cpp index 0eb62ae..e2143bc 100644 --- a/src/irgen/IRGenDecl.cpp +++ b/src/irgen/IRGenDecl.cpp @@ -1,5 +1,7 @@ +// IRGenDecl.cpp #include "irgen/IRGen.h" +#include #include #include "SysYParser.h" @@ -8,100 +10,758 @@ namespace { -std::string GetLValueName(SysYParser::LValueContext& lvalue) { - if (!lvalue.ID()) { - throw std::runtime_error(FormatError("irgen", "非法左值")); +constexpr size_t kLocalArrayHeapThresholdBytes = 1024 * 1024; + +size_t GetArrayElementByteWidth(const ir::ArrayType& array_ty) { + auto* elem_ty = array_ty.GetElementType().get(); + if (elem_ty->IsInt1()) { + return 1; } - return lvalue.ID()->getText(); + return 4; } -} // namespace +size_t GetArrayStorageBytes(const ir::ArrayType& array_ty) { + return static_cast(array_ty.GetElementCount()) * + GetArrayElementByteWidth(array_ty); +} -std::any IRGenImpl::visitBlockStmt(SysYParser::BlockStmtContext* ctx) { - if (!ctx) { - throw std::runtime_error(FormatError("irgen", "缺少语句块")); +bool IsZeroIRValue(const ir::Value* value) { + if (!value) { + return true; } - for (auto* item : ctx->blockItem()) { - if (item) { - if (VisitBlockItemResult(*item) == BlockFlow::Terminated) { - // 当前语法要求 return 为块内最后一条语句;命中后可停止生成。 - break; - } - } + if (auto* ci = dynamic_cast(value)) { + return ci->GetValue() == 0; } - return {}; + if (auto* cf = dynamic_cast(value)) { + return cf->GetValue() == 0.0f; + } + if (dynamic_cast(value) || + dynamic_cast(value)) { + return true; + } + return false; } -IRGenImpl::BlockFlow IRGenImpl::VisitBlockItemResult( - SysYParser::BlockItemContext& item) { - return std::any_cast(item.accept(this)); +bool IsZeroConstantValue(const ir::ConstantValue* value) { + return IsZeroIRValue(value); } -std::any IRGenImpl::visitBlockItem(SysYParser::BlockItemContext* ctx) { - if (!ctx) { - throw std::runtime_error(FormatError("irgen", "缺少块内项")); +std::vector TrimTrailingZeroConstants( + std::vector values) { + while (!values.empty() && IsZeroConstantValue(values.back())) { + values.pop_back(); } - if (ctx->decl()) { - ctx->decl()->accept(this); - return BlockFlow::Continue; + return values; +} + +std::vector BuildArrayIndices(ir::IRBuilder& builder, + const std::vector& dims, + size_t flat_idx) { + std::vector indices; + indices.reserve(dims.size() + 1); + indices.push_back(builder.CreateConstInt(0)); + + size_t rem = flat_idx; + for (size_t i = 0; i < dims.size(); ++i) { + size_t stride = 1; + for (size_t j = i + 1; j < dims.size(); ++j) { + stride *= static_cast(dims[j]); + } + const int idx = static_cast(rem / stride); + rem %= stride; + indices.push_back(builder.CreateConstInt(idx)); } - if (ctx->stmt()) { - return ctx->stmt()->accept(this); + return indices; +} + +std::vector BuildZeroIndices(ir::IRBuilder& builder, + size_t dims_count) { + std::vector indices; + indices.reserve(dims_count + 1); + for (size_t i = 0; i <= dims_count; ++i) { + indices.push_back(builder.CreateConstInt(0)); } - throw std::runtime_error(FormatError("irgen", "暂不支持的语句或声明")); + return indices; } -// 变量声明的 IR 生成目前也是最小实现: -// - 先检查声明的基础类型,当前仅支持局部 int; -// - 再把 Decl 中的变量定义交给 visitVarDef 继续处理。 -// -// 和更完整的版本相比,这里还没有: -// - 一个 Decl 中多个变量定义的顺序处理; -// - const、数组、全局变量等不同声明形态; -// - 更丰富的类型系统。 +std::string MakeStaticArrayName(const ir::Function& func, + const std::string& var_name, + std::string suffix) { + for (char& ch : suffix) { + if (ch == '%') { + ch = '_'; + } + } + return "__static_array." + func.GetName() + "." + var_name + "." + suffix; +} + + +} // namespace + +// visitDecl: 处理声明 std::any IRGenImpl::visitDecl(SysYParser::DeclContext* ctx) { + std::cerr << "[DEBUG] visitDecl: 开始处理声明" << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少变量声明")); } - if (!ctx->btype() || !ctx->btype()->INT()) { - throw std::runtime_error(FormatError("irgen", "当前仅支持局部 int 变量声明")); + + // 处理 varDecl + if (auto* varDecl = ctx->varDecl()) { + std::cerr << "[DEBUG] visitDecl: 处理变量声明" << std::endl; + for (auto* varDef : varDecl->varDef()) { + varDef->accept(this); + } } - auto* var_def = ctx->varDef(); - if (!var_def) { - throw std::runtime_error(FormatError("irgen", "非法变量声明")); + + // 处理 constDecl + if (ctx->constDecl()) { + std::cerr << "[DEBUG] visitDecl: 处理常量声明" << std::endl; + auto* constDecl = ctx->constDecl(); + for (auto* constDef : constDecl->constDef()) { + constDef->accept(this); + } } - var_def->accept(this); + + std::cerr << "[DEBUG] visitDecl: 声明处理完成" << std::endl; return {}; } - -// 当前仍是教学用的最小版本,因此这里只支持: -// - 局部 int 变量; -// - 标量初始化; -// - 一个 VarDef 对应一个槽位。 -std::any IRGenImpl::visitVarDef(SysYParser::VarDefContext* ctx) { +// visitConstDecl: 处理常量声明 +std::any IRGenImpl::visitConstDecl(SysYParser::ConstDeclContext* ctx) { + std::cerr << "[DEBUG] visitConstDecl: 开始处理常量声明" << std::endl; if (!ctx) { - throw std::runtime_error(FormatError("irgen", "缺少变量定义")); + throw std::runtime_error(FormatError("irgen", "非法常量声明")); + } + + for (auto* constDef : ctx->constDef()) { + if (constDef) { + constDef->accept(this); + } + } + + std::cerr << "[DEBUG] visitConstDecl: 常量声明处理完成" << std::endl; + return {}; +} + +// visitConstDef: 处理常量定义 - 从符号表获取常量值 +std::any IRGenImpl::visitConstDef(SysYParser::ConstDefContext* ctx) { + std::cerr << "[DEBUG] visitConstDef: 开始处理常量定义" << std::endl; + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("irgen", "非法常量定义")); } - if (!ctx->lValue()) { - throw std::runtime_error(FormatError("irgen", "变量声明缺少名称")); + + std::string const_name = ctx->Ident()->getText(); + + // 从符号表获取常量符号 + const Symbol* sym = symbol_table_.lookupByConstDef(ctx); + if (!sym || sym->kind != SymbolKind::Constant) { + throw std::runtime_error(FormatError("irgen", "常量符号未找到: " + const_name)); } - GetLValueName(*ctx->lValue()); + + std::cerr << "[DEBUG] visitConstDef: 从符号表获取常量 " << const_name + << ", is_array_const: " << sym->IsArrayConstant() << std::endl; + + // 根据符号表中的常量值创建 IR 常量 + if (sym->IsArrayConstant()) { + auto* array_ty = dynamic_cast(sym->type.get()); + if (!array_ty) { + throw std::runtime_error(FormatError("irgen", "数组类型转换失败")); + } + + const bool is_global_scope = (func_ == nullptr) || (sym->scope_level == 0); + const bool use_heap_storage = !is_global_scope && + (current_function_is_recursive_ || + GetArrayStorageBytes(*array_ty) > kLocalArrayHeapThresholdBytes); + + // 先把符号表中的扁平初始化值转换为 IR 常量值 + std::vector init_consts; + init_consts.reserve(sym->GetArraySize()); + for (size_t i = 0; i < sym->GetArraySize(); ++i) { + auto elem = sym->GetArrayElement(i); + if (array_ty->GetElementType()->IsInt32()) { + init_consts.push_back(builder_.CreateConstInt(elem.i32)); + } else if (array_ty->GetElementType()->IsFloat()) { + init_consts.push_back(builder_.CreateConstFloat(elem.f32)); + } + } + + init_consts = TrimTrailingZeroConstants(std::move(init_consts)); + + if (is_global_scope) { + // 全局 const 数组:全局存储,并标记为 constant + ir::GlobalValue* global_array = module_.CreateGlobal(const_name, sym->type); + if (!init_consts.empty()) { + global_array->SetInitializer(init_consts); + } + global_array->SetConstant(true); + const_global_map_[const_name] = global_array; + const_storage_map_[ctx] = global_array; + } else { + ir::Value* array_slot = nullptr; + if (use_heap_storage) { + const bool is_float_array = array_ty->GetElementType()->IsFloat(); + const std::string alloc_name = is_float_array ? "sysy_alloc_f32" : "sysy_alloc_i32"; + const std::string free_name = is_float_array ? "sysy_free_f32" : "sysy_free_i32"; + ir::Function* alloc_func = module_.FindFunction(alloc_name); + if (!alloc_func) alloc_func = CreateRuntimeFunctionDecl(alloc_name); + ir::Function* free_func = module_.FindFunction(free_name); + if (!free_func) free_func = CreateRuntimeFunctionDecl(free_name); + array_slot = builder_.CreateCall( + alloc_func, + {builder_.CreateConstInt(static_cast(array_ty->GetElementCount()))}, + module_.GetContext().NextTemp()); + heap_local_array_names_.insert(const_name); + RegisterCleanup(free_func, array_slot); + } else { + array_slot = CreateEntryAlloca(sym->type, + module_.GetContext().NextTemp() + "_" + const_name); + } + + const auto& dims = array_ty->GetDimensions(); + const size_t total_size = array_ty->GetElementCount(); + + if (init_consts.empty()) { + if (use_heap_storage) { + const std::string zero_name = array_ty->GetElementType()->IsFloat() + ? "sysy_zero_f32" + : "sysy_zero_i32"; + ir::Function* zero_func = module_.FindFunction(zero_name); + if (!zero_func) zero_func = CreateRuntimeFunctionDecl(zero_name); + builder_.CreateCall(zero_func, + {array_slot, builder_.CreateConstInt(static_cast(total_size))}, + module_.GetContext().NextTemp()); + } else { + builder_.CreateStore(module_.GetContext().GetAggregateZero(sym->type), array_slot); + } + } + + for (size_t i = 0; i < total_size; ++i) { + ir::Value* init = nullptr; + if (i < init_consts.size()) { + init = init_consts[i]; + } else if (array_ty->GetElementType()->IsFloat()) { + init = builder_.CreateConstFloat(0.0f); + } else { + init = builder_.CreateConstInt(0); + } + + ir::Value* elem_ptr = nullptr; + if (use_heap_storage) { + if (IsZeroIRValue(init)) { + continue; + } + elem_ptr = builder_.CreateGEP( + array_slot, {builder_.CreateConstInt(static_cast(i))}, + module_.GetContext().NextTemp()); + } else { + elem_ptr = builder_.CreateGEP( + array_slot, BuildArrayIndices(builder_, dims, i), + module_.GetContext().NextTemp()); + } + builder_.CreateStore(init, elem_ptr); + } + + local_var_map_[const_name] = array_slot; + const_storage_map_[ctx] = array_slot; + } + + } else if (sym->IsScalarConstant()) { + // 标量常量:存储常量值 + ir::ConstantValue* const_value = nullptr; + if (sym->type->IsInt32()) { + const_value = builder_.CreateConstInt(sym->GetIntConstant()); + std::cerr << "[DEBUG] visitConstDef: 整型常量 " << const_name + << " = " << sym->GetIntConstant() << std::endl; + } else if (sym->type->IsFloat()) { + const_value = builder_.CreateConstFloat(sym->GetFloatConstant()); + std::cerr << "[DEBUG] visitConstDef: 浮点常量 " << const_name + << " = " << sym->GetFloatConstant() << std::endl; + } + + const_value_map_[const_name] = const_value; + const_storage_map_[ctx] = const_value; + } + + return {}; +} + +// visitVarDef: 处理变量定义 - 从符号表获取类型信息 +std::any IRGenImpl::visitVarDef(SysYParser::VarDefContext* ctx) { + std::cerr << "[DEBUG] visitVarDef: 开始处理变量定义" << std::endl; + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("irgen", "非法变量定义")); + } + + std::string varName = ctx->Ident()->getText(); + std::cerr << "[DEBUG] visitVarDef: 变量名称: " << varName << std::endl; + + // 防止重复分配 if (storage_map_.find(ctx) != storage_map_.end()) { - throw std::runtime_error(FormatError("irgen", "声明重复生成存储槽位")); + throw std::runtime_error(FormatError("irgen", "声明重复生成存储槽位: " + varName)); + } + + // 从符号表获取变量信息 + const Symbol* sym = symbol_table_.lookupByVarDef(ctx); + if (!sym) { + throw std::runtime_error(FormatError("irgen", "变量符号未找到: " + varName)); + } + + std::cerr << "[DEBUG] visitVarDef: 变量类型: " + << (sym->type->IsInt32() ? "int" : + sym->type->IsFloat() ? "float" : + sym->type->IsArray() ? "array" : "unknown") << std::endl; + + // 根据作用域处理 + if (func_ == nullptr) { + std::cerr << "[DEBUG] visitVarDef: 处理全局变量" << std::endl; + return HandleGlobalVariable(ctx, varName, sym); + } else { + std::cerr << "[DEBUG] visitVarDef: 处理局部变量" << std::endl; + return HandleLocalVariable(ctx, varName, sym); + } +} + +// HandleGlobalVariable: 处理全局变量 +std::any IRGenImpl::HandleGlobalVariable(SysYParser::VarDefContext* ctx, + const std::string& varName, + const Symbol* sym) { + std::cerr << "[DEBUG] HandleGlobalVariable: 开始处理全局变量 " << varName << std::endl; + + if (!sym) { + throw std::runtime_error(FormatError("irgen", "符号表信息缺失: " + varName)); + } + + bool is_array = sym->type->IsArray(); + bool is_float = sym->type->IsFloat(); + if (is_array) { + if (auto* array_ty = dynamic_cast(sym->type.get())) { + is_float = array_ty->GetElementType()->IsFloat(); + } } - auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp()); - storage_map_[ctx] = slot; + + if (is_array) { + // 从符号表获取数组类型和维度 + auto* array_ty = dynamic_cast(sym->type.get()); + if (!array_ty) { + throw std::runtime_error(FormatError("irgen", "数组类型转换失败")); + } + + const auto& dimensions = array_ty->GetDimensions(); + size_t total_size = array_ty->GetElementCount(); + + std::cerr << "[DEBUG] HandleGlobalVariable: 全局数组 " << varName << " 维度: "; + for (int d : dimensions) std::cerr << d << " "; + std::cerr << ", 总大小: " << total_size << std::endl; + + // 创建全局数组 + ir::GlobalValue* global_array = module_.CreateGlobal(varName, sym->type); + + // 处理初始化值(使用带维度感知的展平) + std::vector init_consts; + if (auto* initVal = ctx->initVal()) { + std::cerr << "[DEBUG] HandleGlobalVariable: 处理初始化值" << std::endl; + // 全局变量的初始化必须是常量表达式(语义检查已保证) + std::vector flat_vals = FlattenInitVal( + initVal, dimensions, is_float); + for (auto* val : flat_vals) { + if (is_float) { + if (auto* cf = dynamic_cast(val)) { + init_consts.push_back(cf); + } else if (auto* ci = dynamic_cast(val)) { + init_consts.push_back(builder_.CreateConstFloat(static_cast(ci->GetValue()))); + } else { + init_consts.push_back(builder_.CreateConstFloat(0.0f)); + } + } else { + if (auto* ci = dynamic_cast(val)) { + init_consts.push_back(ci); + } else if (auto* cf = dynamic_cast(val)) { + init_consts.push_back(builder_.CreateConstInt(static_cast(cf->GetValue()))); + } else { + init_consts.push_back(builder_.CreateConstInt(0)); + } + } + } + } - ir::Value* init = nullptr; - if (auto* init_value = ctx->initValue()) { - if (!init_value->exp()) { - throw std::runtime_error(FormatError("irgen", "当前不支持聚合初始化")); + init_consts = TrimTrailingZeroConstants(std::move(init_consts)); + + // 设置初始化器 + if (!init_consts.empty()) { + global_array->SetInitializer(init_consts); } - init = EvalExpr(*init_value->exp()); + + storage_map_[ctx] = global_array; + global_map_[varName] = global_array; + } else { - init = builder_.CreateConstInt(0); + // 全局标量变量 + std::shared_ptr var_type = sym->type; + ir::GlobalValue* global_var = module_.CreateGlobal(varName, var_type); + + // 处理初始化值 + ir::ConstantValue* init_value = nullptr; + if (auto* initVal = ctx->initVal()) { + auto result = initVal->accept(this); + if (result.has_value()) { + try { + ir::Value* val = std::any_cast(result); + if (is_float) { + if (auto* const_float = dynamic_cast(val)) { + init_value = const_float; + } else if (auto* const_int = dynamic_cast(val)) { + init_value = builder_.CreateConstFloat(static_cast(const_int->GetValue())); + } + } else { + if (auto* const_int = dynamic_cast(val)) { + init_value = const_int; + } else if (auto* const_float = dynamic_cast(val)) { + init_value = builder_.CreateConstInt(static_cast(const_float->GetValue())); + } + } + } catch (const std::bad_any_cast&) { + // 使用默认值 + } + } + } + + //正确:只在没有初始化值时才设置默认值 + if (!init_value) { + if (is_float) { + init_value = builder_.CreateConstFloat(0.0f); + } else { + init_value = builder_.CreateConstInt(0); + } + } + + global_var->SetInitializer(init_value); + storage_map_[ctx] = global_var; + global_map_[varName] = global_var; + } + + std::cerr << "[DEBUG] HandleGlobalVariable: 全局变量处理完成" << std::endl; + return {}; +} + +// HandleLocalVariable: 处理局部变量 +std::any IRGenImpl::HandleLocalVariable(SysYParser::VarDefContext* ctx, + const std::string& varName, + const Symbol* sym) { + std::cerr << "[DEBUG] HandleLocalVariable: 开始处理局部变量 " << varName << std::endl; + + if (!sym) { + throw std::runtime_error(FormatError("irgen", "符号表信息缺失: " + varName)); + } + + bool is_array = sym->type->IsArray(); + bool is_float = sym->type->IsFloat(); + if (is_array) { + if (auto* array_ty = dynamic_cast(sym->type.get())) { + is_float = array_ty->GetElementType()->IsFloat(); + } + } + + if (is_array) { + // 从符号表获取数组信息 + auto* array_ty = dynamic_cast(sym->type.get()); + if (!array_ty) { + throw std::runtime_error(FormatError("irgen", "数组类型转换失败")); + } + + size_t total_size = array_ty->GetElementCount(); + const size_t total_bytes = GetArrayStorageBytes(*array_ty); + const bool use_heap_storage = + current_function_is_recursive_ || total_bytes > kLocalArrayHeapThresholdBytes; + + std::cerr << "[DEBUG] HandleLocalVariable: 局部数组 " << varName + << " 总大小: " << total_size << std::endl; + + ir::Value* array_slot = nullptr; + if (use_heap_storage) { + const std::string alloc_name = is_float ? "sysy_alloc_f32" : "sysy_alloc_i32"; + const std::string free_name = is_float ? "sysy_free_f32" : "sysy_free_i32"; + ir::Function* alloc_func = module_.FindFunction(alloc_name); + if (!alloc_func) { + alloc_func = CreateRuntimeFunctionDecl(alloc_name); + } + ir::Function* free_func = module_.FindFunction(free_name); + if (!free_func) { + free_func = CreateRuntimeFunctionDecl(free_name); + } + array_slot = builder_.CreateCall( + alloc_func, + {builder_.CreateConstInt(static_cast(total_size))}, + module_.GetContext().NextTemp()); + heap_local_array_names_.insert(varName); + RegisterCleanup(free_func, array_slot); + } else { + array_slot = CreateEntryAlloca( + sym->type, module_.GetContext().NextTemp() + "_" + varName); + } + + const auto& dims = array_ty->GetDimensions(); + + storage_map_[ctx] = array_slot; + local_var_map_[varName] = array_slot; + + // 处理初始化 + if (auto* initVal = ctx->initVal()) { + std::vector init_values = FlattenInitVal( + initVal, array_ty->GetDimensions(), is_float); + + bool is_all_zero_init = true; + for (auto* value : init_values) { + if (!IsZeroIRValue(value)) { + is_all_zero_init = false; + break; + } + } + + if (is_all_zero_init && !use_heap_storage) { + builder_.CreateStore(module_.GetContext().GetAggregateZero(sym->type), + array_slot); + std::cerr << "[DEBUG] HandleLocalVariable: aggregate zeroinitializer store for " + << varName << std::endl; + return {}; + } + + if (use_heap_storage) { + const std::string zero_name = is_float ? "sysy_zero_f32" : "sysy_zero_i32"; + ir::Function* zero_func = module_.FindFunction(zero_name); + if (!zero_func) { + zero_func = CreateRuntimeFunctionDecl(zero_name); + } + builder_.CreateCall(zero_func, + {array_slot, builder_.CreateConstInt(static_cast(total_size))}, + module_.GetContext().NextTemp()); + if (is_all_zero_init) { + return {}; + } + } + + for (size_t i = 0; i < total_size; i++) { + ir::Value* val = (i < init_values.size() && init_values[i]) + ? init_values[i] + : (is_float ? static_cast(builder_.CreateConstFloat(0.0f)) + : static_cast(builder_.CreateConstInt(0))); + if (use_heap_storage && IsZeroIRValue(val)) { + continue; + } + if (is_float && val->GetType()->IsInt32()) { + val = builder_.CreateSIToFP(val, ir::Type::GetFloatType(), + module_.GetContext().NextTemp()); + } else if (!is_float && val->GetType()->IsFloat()) { + val = builder_.CreateFPToSI(val, ir::Type::GetInt32Type(), + module_.GetContext().NextTemp()); + } + ir::Value* elem_ptr = nullptr; + if (use_heap_storage) { + elem_ptr = builder_.CreateGEP( + array_slot, {builder_.CreateConstInt(static_cast(i))}, + module_.GetContext().NextTemp()); + } else { + elem_ptr = builder_.CreateGEP( + array_slot, BuildArrayIndices(builder_, dims, i), + module_.GetContext().NextTemp()); + } + builder_.CreateStore(val, elem_ptr); + } + } + + } else { + // 局部标量变量 + ir::AllocaInst* slot; + if (is_float) { + slot = CreateEntryAllocaFloat(module_.GetContext().NextTemp() + "_" + varName); + } else { + slot = CreateEntryAllocaI32(module_.GetContext().NextTemp() + "_" + varName); + } + + storage_map_[ctx] = slot; + local_var_map_[varName] = slot; + + // 处理初始化 + ir::Value* init = nullptr; + if (auto* initVal = ctx->initVal()) { + auto result = initVal->accept(this); + if (result.has_value()) { + try { + init = std::any_cast(result); + } catch (const std::bad_any_cast&) { + try { + auto init_vec = std::any_cast>(result); + if (!init_vec.empty()) { + init = init_vec[0]; + } + } catch (const std::bad_any_cast&) { + // 使用默认值 + } + } + } + } + + if (!init) { + // SysY 局部变量未显式初始化时为未定义值:不生成默认 store。 + return {}; + } + + // 标量初始化支持 int/float 隐式转换。 + if (is_float && init->GetType()->IsInt32()) { + init = builder_.CreateSIToFP(init, ir::Type::GetFloatType(), + module_.GetContext().NextTemp()); + } else if (!is_float && init->GetType()->IsFloat()) { + init = builder_.CreateFPToSI(init, ir::Type::GetInt32Type(), + module_.GetContext().NextTemp()); + } + + builder_.CreateStore(init, slot); } - builder_.CreateStore(init, slot); + + std::cerr << "[DEBUG] HandleLocalVariable: 局部变量处理完成" << std::endl; return {}; } + +// visitInitVal: 处理初始化值 +std::any IRGenImpl::visitInitVal(SysYParser::InitValContext* ctx) { + std::cerr << "[DEBUG] visitInitVal: 开始处理初始化值" << std::endl; + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "非法初始化值")); + } + + // 如果是单个表达式 + if (ctx->exp()) { + std::cerr << "[DEBUG] visitInitVal: 处理表达式初始化" << std::endl; + return EvalExpr(*ctx->exp()); + } + // 如果是聚合初始化(花括号列表) + else if (!ctx->initVal().empty()) { + std::cerr << "[DEBUG] visitInitVal: 处理聚合初始化" << std::endl; + return ProcessNestedInitVals(ctx); + } + + std::cerr << "[DEBUG] visitInitVal: 空初始化列表" << std::endl; + return std::vector{}; +} + +// ProcessNestedInitVals: 处理嵌套聚合初始化 +std::vector IRGenImpl::ProcessNestedInitVals(SysYParser::InitValContext* ctx) { + std::cerr << "[DEBUG] ProcessNestedInitVals: 开始处理嵌套初始化值" << std::endl; + std::vector all_values; + + for (auto* init_val : ctx->initVal()) { + auto result = init_val->accept(this); + if (result.has_value()) { + try { + // 尝试获取单个值 + ir::Value* value = std::any_cast(result); + all_values.push_back(value); + std::cerr << "[DEBUG] ProcessNestedInitVals: 获取到单个值" << std::endl; + } catch (const std::bad_any_cast&) { + try { + // 尝试获取值列表(嵌套情况) + std::vector nested_values = + std::any_cast>(result); + std::cerr << "[DEBUG] ProcessNestedInitVals: 获取到嵌套值列表, 大小: " + << nested_values.size() << std::endl; + all_values.insert(all_values.end(), + nested_values.begin(), nested_values.end()); + } catch (const std::bad_any_cast&) { + std::cerr << "[ERROR] ProcessNestedInitVals: 不支持的初始化值类型" << std::endl; + throw std::runtime_error( + FormatError("irgen", "不支持的初始化值类型")); + } + } + } + } + + std::cerr << "[DEBUG] ProcessNestedInitVals: 共获取 " << all_values.size() + << " 个初始化值" << std::endl; + return all_values; +} + +// FlattenInitVal:按 C 语言花括号对齐规则展平初始化列表 +// dims[0] 是最外层维度,dims.back() 是最内层维度(元素层) +// 总元素数 = prod(dims),结果向量长度恰好为总元素数(不足处补零) +std::vector IRGenImpl::FlattenInitVal( + SysYParser::InitValContext* ctx, + const std::vector& dims, + bool is_float) { + + // 计算总元素数 + size_t total = 1; + for (int d : dims) total *= static_cast(d); + + // 零值工厂 + auto make_zero = [&]() -> ir::Value* { + if (is_float) return builder_.CreateConstFloat(0.0f); + return builder_.CreateConstInt(0); + }; + + // 先全部填零 + std::vector flat(total, nullptr); + + // 计算 depth 层从 begin 开始的子数组跨度 + // depth=0 → 每个子聚合占 dims[1]*dims[2]*... 个元素 + auto subspan = [&](size_t depth) -> size_t { + size_t span = 1; + for (size_t i = depth + 1; i < dims.size(); ++i) + span *= static_cast(dims[i]); + return span; + }; + + // 递归 fill_impl:将 node 的内容按 C 规则写入 flat[begin..end-1],返回填完后的光标 + std::function fill_impl; + fill_impl = [&](SysYParser::InitValContext* node, + size_t depth, + size_t begin, + size_t end) -> size_t { + if (!node || begin >= end) return begin; + + // 单标量初始化项(叶节点) + if (node->exp()) { + ir::Value* v = EvalExpr(*node->exp()); + if (begin < flat.size()) flat[begin] = v; + return std::min(begin + 1, end); + } + + // 聚合初始化(花括号列表) + size_t cursor = begin; + for (auto* child : node->initVal()) { + if (cursor >= end) break; + + if (child->exp()) { + // 标量子项 + ir::Value* v = EvalExpr(*child->exp()); + if (cursor < flat.size()) flat[cursor] = v; + ++cursor; + continue; + } + + // 花括号子列表 + if (depth + 1 < dims.size()) { + // 对齐到下一个子聚合边界 + const size_t span = subspan(depth); + const size_t rel = (cursor - begin) % span; + if (rel != 0) cursor += (span - rel); + if (cursor >= end) break; + + const size_t sub_end = std::min(cursor + span, end); + fill_impl(child, depth + 1, cursor, sub_end); + cursor = sub_end; // 消耗一个子聚合 + } else { + // 最内层遇到额外花括号,按顺序展开 + cursor = fill_impl(child, depth, cursor, end); + } + } + return cursor; + }; + + fill_impl(ctx, 0, 0, total); + + // 把 nullptr(未显式初始化)替换为零值 + for (auto*& v : flat) { + if (!v) v = make_zero(); + } + + return flat; +} \ No newline at end of file diff --git a/src/irgen/IRGenDriver.cpp b/src/irgen/IRGenDriver.cpp index ff94412..ac19a7b 100644 --- a/src/irgen/IRGenDriver.cpp +++ b/src/irgen/IRGenDriver.cpp @@ -6,10 +6,11 @@ #include "ir/IR.h" #include "utils/Log.h" +// 修改 GenerateIR 函数 std::unique_ptr GenerateIR(SysYParser::CompUnitContext& tree, - const SemanticContext& sema) { + const SemaResult& sema_result) { auto module = std::make_unique(); - IRGenImpl gen(*module, sema); + IRGenImpl gen(*module, sema_result.context, sema_result.symbol_table); tree.accept(&gen); return module; } diff --git a/src/irgen/IRGenExp.cpp b/src/irgen/IRGenExp.cpp index cf4797c..5d8128b 100644 --- a/src/irgen/IRGenExp.cpp +++ b/src/irgen/IRGenExp.cpp @@ -20,61 +20,1136 @@ // - 数组、指针、下标访问 // - 条件与比较表达式 // - ... + +// 表达式生成 ir::Value* IRGenImpl::EvalExpr(SysYParser::ExpContext& expr) { - return std::any_cast(expr.accept(this)); + std::cerr << "[DEBUG IRGEN] EvalExpr: 开始处理表达式 " << expr.getText() << std::endl; + try { + auto result_any = expr.accept(this); + + if (!result_any.has_value()) { + std::cerr << "[ERROR] EvalExpr: result_any has no value" << std::endl; + throw std::runtime_error("表达式求值结果为空"); + } + + try { + ir::Value* result = std::any_cast(result_any); + std::cerr << "[DEBUG] EvalExpr: success, result = " << (void*)result << std::endl; + return result; + } catch (const std::bad_any_cast& e) { + std::cerr << "[ERROR] EvalExpr: bad any_cast - " << e.what() << std::endl; + std::cerr << " Type info: " << result_any.type().name() << std::endl; + throw std::runtime_error(FormatError("irgen", "表达式求值返回了错误的类型")); + } + } catch (const std::exception& e) { + std::cerr << "[ERROR] Exception in EvalExpr: " << e.what() << std::endl; + throw; + } } +ir::Value* IRGenImpl::EvalCond(SysYParser::CondContext& cond) { + std::cerr << "[DEBUG IRGEN] EvalCond: 开始处理条件表达式 " << cond.getText() << std::endl; + return std::any_cast(cond.accept(this)); +} + +// 基本表达式:数字、变量、括号表达式 +std::any IRGenImpl::visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitPrimaryExp: 开始处理基本表达式 " << (ctx ? ctx->getText() : "") << std::endl; + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "缺少基本表达式")); + } + + std::cerr << "[DEBUG] visitPrimaryExp" << std::endl; + + // 处理数字字面量 + if (ctx->DECIMAL_INT()) { + int value = std::stoi(ctx->DECIMAL_INT()->getText()); + ir::Value* const_int = builder_.CreateConstInt(value); + std::cerr << "[DEBUG] visitPrimaryExp: constant int " << value + << " created as " << (void*)const_int << std::endl; + return static_cast(const_int); + } + + if (ctx->HEX_FLOAT()) { + std::string hex_float_str = ctx->HEX_FLOAT()->getText(); + float value = 0.0f; + try { + value = std::stof(hex_float_str); + } catch (const std::exception& e) { + std::cerr << "[WARNING] 无法解析十六进制浮点数: " << hex_float_str + << ",使用0.0代替" << std::endl; + value = 0.0f; + } + ir::Value* const_float = builder_.CreateConstFloat(value); + std::cerr << "[DEBUG] visitPrimaryExp: constant hex float " << value + << " created as " << (void*)const_float << std::endl; + return static_cast(const_float); + } + + if (ctx->DEC_FLOAT()) { + std::string dec_float_str = ctx->DEC_FLOAT()->getText(); + float value = 0.0f; + try { + value = std::stof(dec_float_str); + } catch (const std::exception& e) { + std::cerr << "[WARNING] 无法解析十进制浮点数: " << dec_float_str + << ",使用0.0代替" << std::endl; + value = 0.0f; + } + ir::Value* const_float = builder_.CreateConstFloat(value); + std::cerr << "[DEBUG] visitPrimaryExp: constant dec float " << value + << " created as " << (void*)const_float << std::endl; + return static_cast(const_float); + } -std::any IRGenImpl::visitParenExp(SysYParser::ParenExpContext* ctx) { - if (!ctx || !ctx->exp()) { - throw std::runtime_error(FormatError("irgen", "非法括号表达式")); + if (ctx->HEX_INT()) { + std::string hex = ctx->HEX_INT()->getText(); + int value = std::stoi(hex, nullptr, 16); + ir::Value* const_int = builder_.CreateConstInt(value); + std::cerr << "[DEBUG] visitPrimaryExp: constant hex int " << value + << " created as " << (void*)const_int << std::endl; + return static_cast(const_int); + } + + if (ctx->OCTAL_INT()) { + std::string oct = ctx->OCTAL_INT()->getText(); + int value = std::stoi(oct, nullptr, 8); + ir::Value* const_int = builder_.CreateConstInt(value); + std::cerr << "[DEBUG] visitPrimaryExp: constant octal int " << value + << " created as " << (void*)const_int << std::endl; + return static_cast(const_int); + } + + if (ctx->ZERO()) { + ir::Value* const_int = builder_.CreateConstInt(0); + std::cerr << "[DEBUG] visitPrimaryExp: constant zero int created" << std::endl; + return static_cast(const_int); } - return EvalExpr(*ctx->exp()); + + // 处理变量 + if (ctx->lVal()) { + std::cerr << "[DEBUG] visitPrimaryExp: visiting lVal" << std::endl; + return ctx->lVal()->accept(this); + } + + // 处理括号表达式 + if (ctx->L_PAREN() && ctx->exp()) { + std::cerr << "[DEBUG] visitPrimaryExp: visiting parenthesized expression" << std::endl; + return EvalExpr(*ctx->exp()); + } + + std::cerr << "[ERROR] visitPrimaryExp: unsupported primary expression type" << std::endl; + throw std::runtime_error(FormatError("irgen", "不支持的基本表达式类型")); } +// 左值(变量)处理 +std::any IRGenImpl::visitLVal(SysYParser::LValContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitLVal: 开始处理左值 " << (ctx ? ctx->getText() : "") << std::endl; + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("irgen", "非法左值")); + } + + std::string varName = ctx->Ident()->getText(); + std::cerr << "[DEBUG] visitLVal: " << varName << std::endl; + + // 先检查语义分析中常量绑定 + const SysYParser::ConstDefContext* const_decl = sema_.ResolveConstUse(ctx); + const Symbol* sym = nullptr; + if (const_decl) { + sym = symbol_table_.lookupByConstDef(const_decl); + if (!sym) { + sym = symbol_table_.lookupAll(varName); + } + } else { + sym = symbol_table_.lookup(varName); + } + + // 如果是常量,直接返回常量值 + if (sym && sym->kind == SymbolKind::Constant) { + std::cerr << "[DEBUG] visitLVal: 找到常量 " << varName << std::endl; + + if (sym->IsScalarConstant()) { + if (sym->type->IsInt32()) { + ir::ConstantValue* const_val = builder_.CreateConstInt(sym->GetIntConstant()); + return static_cast(const_val); + } else if (sym->type->IsFloat()) { + ir::ConstantValue* const_val = builder_.CreateConstFloat(sym->GetFloatConstant()); + return static_cast(const_val); + } + } else if (sym->IsArrayConstant()) { + auto it = const_global_map_.find(varName); + if (it != const_global_map_.end()) { + ir::GlobalValue* global_array = it->second; + + // 尝试获取类型信息,用于维度判断与下标线性化 + auto* array_ty = dynamic_cast(sym->type.get()); + if (!array_ty) { + // 无法获取数组类型,退回返回全局对象 + return static_cast(global_array); + } + + size_t ndims = array_ty->GetDimensions().size(); + + // 有下标访问 + if (!ctx->exp().empty()) { + size_t provided = ctx->exp().size(); + + // 完全索引(所有维度都有下标)——直接返回常量元素,不生成 Load + if (provided == ndims) { + std::vector idxs; + idxs.reserve(provided); + for (auto* exp : ctx->exp()) { + ir::Value* v = EvalExpr(*exp); + if (!v || !v->IsConstant()) { + throw std::runtime_error(FormatError("irgen", "常量数组索引必须为常量整数: " + varName)); + } + auto* ci = dynamic_cast(v); + if (!ci) { + throw std::runtime_error(FormatError("irgen", "常量数组索引非整型常量: " + varName)); + } + idxs.push_back(ci->GetValue()); + } + + // 计算线性下标(行主序) + const auto& dims = array_ty->GetDimensions(); + int flat = idxs[0]; + for (size_t i = 1; i < ndims; ++i) { + flat = flat * dims[i] + idxs[i]; + } -std::any IRGenImpl::visitNumberExp(SysYParser::NumberExpContext* ctx) { - if (!ctx || !ctx->number() || !ctx->number()->ILITERAL()) { - throw std::runtime_error(FormatError("irgen", "当前仅支持整数字面量")); + ir::ConstantValue* elem = global_array->GetArrayElement(static_cast(flat)); + return static_cast(elem); + } + + // 部分索引:返回指针(不做 Load),由上层按需处理 + std::vector indices; + indices.push_back(builder_.CreateConstInt(0)); + for (auto* exp : ctx->exp()) { + indices.push_back(EvalExpr(*exp)); + } + return static_cast( + builder_.CreateGEP(global_array, indices, module_.GetContext().NextTemp())); + } else { + // 无下标,直接返回全局常量对象 + return static_cast(global_array); + } + } + } + } + + // 不是常量,按正常变量处理 + auto* decl = sema_.ResolveVarUse(ctx); + ir::Value* ptr = nullptr; + + if (decl) { + auto it = storage_map_.find(decl); + if (it != storage_map_.end()) { + ptr = it->second; + } } - return static_cast( - builder_.CreateConstInt(std::stoi(ctx->number()->getText()))); -} -// 变量使用的处理流程: -// 1. 先通过语义分析结果把变量使用绑定回声明; -// 2. 再通过 storage_map_ 找到该声明对应的栈槽位; -// 3. 最后生成 load,把内存中的值读出来。 -// -// 因此当前 IRGen 自己不再做名字查找,而是直接消费 Sema 的绑定结果。 -std::any IRGenImpl::visitVarExp(SysYParser::VarExpContext* ctx) { - if (!ctx || !ctx->var() || !ctx->var()->ID()) { - throw std::runtime_error(FormatError("irgen", "当前仅支持普通整型变量")); + if (!ptr) { + auto it2 = param_map_.find(varName); + if (it2 != param_map_.end()) { + ptr = it2->second; + } } - auto* decl = sema_.ResolveVarUse(ctx->var()); - if (!decl) { - throw std::runtime_error( - FormatError("irgen", - "变量使用缺少语义绑定: " + ctx->var()->ID()->getText())); + + if (!ptr) { + auto it3 = global_map_.find(varName); + if (it3 != global_map_.end()) { + ptr = it3->second; + } } - auto it = storage_map_.find(decl); - if (it == storage_map_.end()) { + + if (!ptr) { + auto it4 = local_var_map_.find(varName); + if (it4 != local_var_map_.end()) { + ptr = it4->second; + } + } + + if (!ptr) { throw std::runtime_error( - FormatError("irgen", - "变量声明缺少存储槽位: " + ctx->var()->ID()->getText())); + FormatError("irgen", "变量声明缺少存储槽位: " + varName)); + } + + // 检查是否有数组下标 + bool is_array_access = !ctx->exp().empty(); + if (is_array_access) { + // 收集下标表达式(不含前导0) + std::vector idx_vals; + for (auto* exp : ctx->exp()) { + ir::Value* index = EvalExpr(*exp); + idx_vals.push_back(index); + } + + const Symbol* var_sym = sym; + if (!var_sym) { + var_sym = symbol_table_.lookup(varName); + } + if (!var_sym && decl) { + var_sym = symbol_table_.lookupByVarDef(decl); + } + if (!var_sym) { + var_sym = symbol_table_.lookupAll(varName); + } + + std::vector dims; + if (var_sym) { + if (var_sym->is_array_param && !var_sym->array_dims.empty()) { + dims = var_sym->array_dims; + } else if (var_sym->type && var_sym->type->IsArray()) { + auto* at = dynamic_cast(var_sym->type.get()); + if (at) dims = at->GetDimensions(); + } + } + + if (dims.empty() && ptr->GetType()->IsArray()) { + if (auto* at = dynamic_cast(ptr->GetType().get())) { + dims = at->GetDimensions(); + } + } + + // 兜底:从语法树声明提取维度,避免作用域关闭后符号查询不完整。 + if (dims.empty() && const_decl) { + auto* mutable_const_decl = const_cast(const_decl); + for (auto* cexp : mutable_const_decl->constExp()) { + dims.push_back(symbol_table_.EvaluateConstExp(cexp)); + } + } + if (dims.empty() && decl) { + for (auto* cexp : decl->constExp()) { + dims.push_back(symbol_table_.EvaluateConstExp(cexp)); + } + } + + const bool is_partial_array_access = + !dims.empty() && idx_vals.size() < dims.size(); + + // 如果 base 是标量指针(例如局部扁平数组或数组参数), + // 需要把多维下标折合为单一线性下标,然后用一个索引进行 GEP。 + if (ptr->GetType()->IsPtrInt32() || ptr->GetType()->IsPtrFloat()) { + // 如果没有维度信息,仍尝试用运行时算术合并下标(按后维乘积) + // flat = idx0 * (prod dims[1..]) + idx1 * (prod dims[2..]) + ... + ir::Value* flat = nullptr; + for (size_t i = 0; i < idx_vals.size(); ++i) { + ir::Value* term = idx_vals[i]; + if (!term) continue; + + // 计算乘数(后续维度乘积) + int mult = 1; + if (!dims.empty() && i + 1 < dims.size()) { + for (size_t j = i + 1; j < dims.size(); ++j) { + // 数组参数首维可能是 0(表示省略),不参与乘数。 + if (dims[j] > 0) mult *= dims[j]; + } + } + + if (mult != 1) { + auto* mval = builder_.CreateConstInt(mult); + term = builder_.CreateMul(term, mval, module_.GetContext().NextTemp()); + } + + if (!flat) flat = term; + else flat = builder_.CreateAdd(flat, term, module_.GetContext().NextTemp()); + } + + if (!flat) flat = builder_.CreateConstInt(0); + + // 使用单一索引创建 GEP + std::vector gep_indices = { flat }; + ir::Value* elem_ptr = builder_.CreateGEP(ptr, gep_indices, module_.GetContext().NextTemp()); + if (is_partial_array_access) { + return elem_ptr; + } + return static_cast(builder_.CreateLoad(elem_ptr, module_.GetContext().NextTemp())); + } + + std::vector indices; + // 标量指针(T*)使用单索引;数组对象使用前导0进入首层。 + if (ptr->GetType()->IsPtrInt32() || ptr->GetType()->IsPtrFloat()) { + for (auto* v : idx_vals) indices.push_back(v); + } else { + indices.push_back(builder_.CreateConstInt(0)); + for (auto* v : idx_vals) indices.push_back(v); + } + + ir::Value* elem_ptr = builder_.CreateGEP(ptr, indices, module_.GetContext().NextTemp()); + if (is_partial_array_access) { + return elem_ptr; + } + return static_cast(builder_.CreateLoad(elem_ptr, module_.GetContext().NextTemp())); + } else { + if ((sym && sym->is_array_param) || + pointer_param_names_.find(varName) != pointer_param_names_.end() || + heap_local_array_names_.find(varName) != heap_local_array_names_.end()) { + return ptr; + } + if (ptr->GetType()->IsArray()) { + return ptr; + } + return static_cast(builder_.CreateLoad(ptr, module_.GetContext().NextTemp())); + } +} + +std::any IRGenImpl::visitAddExp(SysYParser::AddExpContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitAddExp: 开始处理加法表达式 " << (ctx ? ctx->getText() : "") << std::endl; + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "非法加法表达式")); + } + + // 如果没有 addExp(),说明是单个 mulExp() + if (!ctx->addExp()) { + return ctx->mulExp()->accept(this); + } + + // 正确提取左操作数 + auto left_any = ctx->addExp()->accept(this); + if (!left_any.has_value()) { + throw std::runtime_error(FormatError("irgen", "左操作数求值失败")); + } + ir::Value* left = std::any_cast(left_any); + + // 正确提取右操作数 + auto right_any = ctx->mulExp()->accept(this); + if (!right_any.has_value()) { + throw std::runtime_error(FormatError("irgen", "右操作数求值失败")); + } + ir::Value* right = std::any_cast(right_any); + + std::cerr << "[DEBUG] visitAddExp: left=" << (void*)left + << ", type=" << (left->GetType()->IsFloat() ? "float" : "int") + << ", right=" << (void*)right + << ", type=" << (right->GetType()->IsFloat() ? "float" : "int") << std::endl; + + // 处理类型转换:如果操作数类型不同,需要进行类型转换 + if (left->GetType()->IsFloat() != right->GetType()->IsFloat()) { + if (left->GetType()->IsFloat()) { + // left是float,right是int,需要将right转换为float + right = builder_.CreateSIToFP(right, ir::Type::GetFloatType()); + } else { + // right是float,left是int,需要将left转换为float + left = builder_.CreateSIToFP(left, ir::Type::GetFloatType()); + } + } + + // 根据操作符生成相应的指令 + if (ctx->AddOp()) { + if (left->GetType()->IsFloat()) { + return static_cast( + builder_.CreateFAdd(left, right, module_.GetContext().NextTemp())); + } else { + return static_cast( + builder_.CreateAdd(left, right, module_.GetContext().NextTemp())); + } + } else if (ctx->SubOp()) { + if (left->GetType()->IsFloat()) { + return static_cast( + builder_.CreateFSub(left, right, module_.GetContext().NextTemp())); + } else { + return static_cast( + builder_.CreateSub(left, right, module_.GetContext().NextTemp())); + } + } + + throw std::runtime_error(FormatError("irgen", "未知的加法操作符")); +} + + +std::any IRGenImpl::visitMulExp(SysYParser::MulExpContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitMulExp: 开始处理乘法表达式 " << (ctx ? ctx->getText() : "") << std::endl; + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "非法乘法表达式")); + } + + // 如果是基本形式 UnaryExp + if (!ctx->mulExp()) { + return ctx->unaryExp()->accept(this); + } + + // 提取左操作数 + auto left_any = ctx->mulExp()->accept(this); + if (!left_any.has_value()) { + throw std::runtime_error(FormatError("irgen", "左操作数求值失败")); + } + ir::Value* left = std::any_cast(left_any); + + // 提取右操作数 + auto right_any = ctx->unaryExp()->accept(this); + if (!right_any.has_value()) { + throw std::runtime_error(FormatError("irgen", "右操作数求值失败")); + } + ir::Value* right = std::any_cast(right_any); + + std::cerr << "[DEBUG] visitMulExp: left=" << (void*)left + << ", type=" << (left->GetType()->IsFloat() ? "float" : "int") + << ", right=" << (void*)right + << ", type=" << (right->GetType()->IsFloat() ? "float" : "int") << std::endl; + + // 处理类型转换:如果操作数类型不同,需要进行类型转换 + if (left->GetType()->IsFloat() != right->GetType()->IsFloat()) { + if (left->GetType()->IsFloat()) { + // left是float,right是int,需要将right转换为float + right = builder_.CreateSIToFP(right, ir::Type::GetFloatType()); + } else { + // right是float,left是int,需要将left转换为float + left = builder_.CreateSIToFP(left, ir::Type::GetFloatType()); + } } + + // 根据操作符生成指令 + if (ctx->MulOp()) { + if (left->GetType()->IsFloat()) { + return static_cast( + builder_.CreateFMul(left, right, module_.GetContext().NextTemp())); + } else { + return static_cast( + builder_.CreateMul(left, right, module_.GetContext().NextTemp())); + } + } else if (ctx->DivOp()) { + if (left->GetType()->IsFloat()) { + return static_cast( + builder_.CreateFDiv(left, right, module_.GetContext().NextTemp())); + } else { + return static_cast( + builder_.CreateDiv(left, right, module_.GetContext().NextTemp())); + } + } else if (ctx->QuoOp()) { + // 取模运算:浮点数不支持取模,只支持整数 + if (left->GetType()->IsFloat() || right->GetType()->IsFloat()) { + throw std::runtime_error( + FormatError("irgen", "浮点数不支持取模运算")); + } + return static_cast( + builder_.CreateMod(left, right, module_.GetContext().NextTemp())); + } + + throw std::runtime_error(FormatError("irgen", "未知的乘法操作符")); +} + + + +// 逻辑与 +std::any IRGenImpl::visitLAndExp(SysYParser::LAndExpContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitLAndExp: 开始处理逻辑与表达式 " << (ctx ? ctx->getText() : "") << std::endl; + if (!ctx) throw std::runtime_error(FormatError("irgen", "非法逻辑与表达式")); + + if (!ctx->lAndExp()) { + return ctx->eqExp()->accept(this); + } + + ir::Value* left = std::any_cast(ctx->lAndExp()->accept(this)); + ir::Value* right = std::any_cast(ctx->eqExp()->accept(this)); + + auto to_bool = [&](ir::Value* v) -> ir::Value* { + if (v->GetType()->IsInt1()) { + return v; + } + if (v->GetType()->IsFloat()) { + return builder_.CreateFCmpONE(v, builder_.CreateConstFloat(0.0f), + module_.GetContext().NextTemp()); + } + return builder_.CreateICmpNE(v, builder_.CreateConstInt(0), + module_.GetContext().NextTemp()); + }; + + auto* left_bool = to_bool(left); + auto* right_bool = to_bool(right); return static_cast( - builder_.CreateLoad(it->second, module_.GetContext().NextTemp())); + builder_.CreateAnd(left_bool, right_bool, module_.GetContext().NextTemp())); } +// 逻辑或 +std::any IRGenImpl::visitLOrExp(SysYParser::LOrExpContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitLOrExp: 开始处理逻辑或表达式 " << (ctx ? ctx->getText() : "") << std::endl; + if (!ctx) throw std::runtime_error(FormatError("irgen", "非法逻辑或表达式")); -std::any IRGenImpl::visitAdditiveExp(SysYParser::AdditiveExpContext* ctx) { - if (!ctx || !ctx->exp(0) || !ctx->exp(1)) { - throw std::runtime_error(FormatError("irgen", "非法加法表达式")); + if (!ctx->lOrExp()) { + return ctx->lAndExp()->accept(this); } - ir::Value* lhs = EvalExpr(*ctx->exp(0)); - ir::Value* rhs = EvalExpr(*ctx->exp(1)); + + ir::Value* left = std::any_cast(ctx->lOrExp()->accept(this)); + ir::Value* right = std::any_cast(ctx->lAndExp()->accept(this)); + + auto to_bool = [&](ir::Value* v) -> ir::Value* { + if (v->GetType()->IsInt1()) { + return v; + } + if (v->GetType()->IsFloat()) { + return builder_.CreateFCmpONE(v, builder_.CreateConstFloat(0.0f), + module_.GetContext().NextTemp()); + } + return builder_.CreateICmpNE(v, builder_.CreateConstInt(0), + module_.GetContext().NextTemp()); + }; + + auto* left_bool = to_bool(left); + auto* right_bool = to_bool(right); return static_cast( - builder_.CreateBinary(ir::Opcode::Add, lhs, rhs, - module_.GetContext().NextTemp())); + builder_.CreateOr(left_bool, right_bool, module_.GetContext().NextTemp())); +} + +std::any IRGenImpl::visitExp(SysYParser::ExpContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitExp: 开始处理表达式 " << (ctx ? ctx->getText() : "") << std::endl; + if (!ctx) throw std::runtime_error(FormatError("irgen", "非法表达式")); + return ctx->addExp()->accept(this); +} + +std::any IRGenImpl::visitCond(SysYParser::CondContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitCond: 开始处理条件 " << (ctx ? ctx->getText() : "") << std::endl; + if (!ctx) throw std::runtime_error(FormatError("irgen", "非法条件表达式")); + return ctx->lOrExp()->accept(this); +} + +std::any IRGenImpl::visitCallExp(SysYParser::UnaryExpContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitCallExp: 开始处理函数调用 " << (ctx ? ctx->getText() : "") << std::endl; + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("irgen", "非法函数调用")); + } + + std::string funcName = ctx->Ident()->getText(); + std::cout << "[DEBUG IRGEN] visitCallExp: 调用函数 " << funcName << std::endl; + + // 查找函数对象 + ir::Function* callee = module_.FindFunction(funcName); + + // 如果没找到,可能是运行时函数还没声明,尝试动态声明 + if (!callee) { + std::cout << "[DEBUG IRGEN] 函数 " << funcName << " 未找到,尝试动态声明" << std::endl; + + // 根据函数名动态创建运行时函数声明 + callee = CreateRuntimeFunctionDecl(funcName); + if (!callee) { + throw std::runtime_error(FormatError("irgen", "未找到函数: " + funcName)); + } + } + + // 收集实参 + std::vector args; + if (ctx->funcRParams()) { + auto argList = ctx->funcRParams()->accept(this); + try { + args = std::any_cast>(argList); + std::cout << "[DEBUG IRGEN] visitCallExp: 收集到 " << args.size() << " 个参数" << std::endl; + } catch (const std::bad_any_cast& e) { + std::cerr << "[ERROR] visitCallExp: 函数调用参数类型错误: " << e.what() << std::endl; + } + } + + // 按形参类型修正实参(数组衰减为指针等)。 + if (auto* fty = dynamic_cast(callee->GetType().get())) { + const auto& param_tys = fty->GetParamTypes(); + size_t n = std::min(param_tys.size(), args.size()); + for (size_t i = 0; i < n; ++i) { + if (!args[i] || !param_tys[i]) continue; + + // 数组实参传给指针形参时,执行数组到指针衰减。 + if (args[i]->GetType()->IsArray() && + (param_tys[i]->IsPtrInt32() || param_tys[i]->IsPtrFloat())) { + std::vector idx; + idx.push_back(builder_.CreateConstInt(0)); + idx.push_back(builder_.CreateConstInt(0)); + args[i] = builder_.CreateGEP(args[i], idx, module_.GetContext().NextTemp()); + } + + // 标量实参的隐式类型转换(int <-> float)。 + if (param_tys[i]->IsFloat() && args[i]->GetType()->IsInt32()) { + args[i] = builder_.CreateSIToFP(args[i], ir::Type::GetFloatType(), + module_.GetContext().NextTemp()); + } else if (param_tys[i]->IsInt32() && args[i]->GetType()->IsFloat()) { + args[i] = builder_.CreateFPToSI(args[i], ir::Type::GetInt32Type(), + module_.GetContext().NextTemp()); + } + } + } + + // 生成调用指令 + ir::Value* callResult = builder_.CreateCall(callee, args, module_.GetContext().NextTemp()); + + // 如果函数返回 void,返回一个默认值(用于表达式上下文) + if (callResult->GetType()->IsVoid()) { + // void 函数调用不产生值,但我们返回一个 0 常量以保持类型一致性 + return static_cast(builder_.CreateConstInt(0)); + } + + std::cout << "[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 " << (void*)callResult << std::endl; + return static_cast(callResult); +} + +// 动态创建运行时函数声明的辅助函数 +ir::Function* IRGenImpl::CreateRuntimeFunctionDecl(const std::string& funcName) { + std::cerr << "[DEBUG IRGEN] CreateRuntimeFunctionDecl: 开始创建运行时函数声明 " << funcName << std::endl; + + // 根据常见运行时函数名创建对应的函数类型 + if (funcName == "getint" || funcName == "getch") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType(ir::Type::GetInt32Type(), {})); + } + else if (funcName == "putint" || funcName == "putch") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetInt32Type()})); + } + else if (funcName == "getarray") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetInt32Type(), + {ir::Type::GetPtrInt32Type()})); + } + else if (funcName == "putarray") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetInt32Type(), ir::Type::GetPtrInt32Type()})); + } + else if (funcName == "puts") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetPtrInt32Type()})); + } + else if (funcName == "starttime" || funcName == "stoptime") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType(ir::Type::GetVoidType(), {})); + } + else if (funcName == "_sysy_starttime" || funcName == "_sysy_stoptime") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetInt32Type()})); + } + else if (funcName == "getfloat") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType(ir::Type::GetFloatType(), {})); + } + else if (funcName == "putfloat") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetFloatType()})); + } + else if (funcName == "getfarray") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetInt32Type(), + {ir::Type::GetPtrFloatType()})); + } + else if (funcName == "putfarray") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetInt32Type(), ir::Type::GetPtrFloatType()})); + } + else if (funcName == "memset") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetPtrInt32Type(), + {ir::Type::GetPtrInt32Type(), + ir::Type::GetInt32Type(), + ir::Type::GetInt32Type()})); + } + else if (funcName == "sysy_alloc_i32") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetPtrInt32Type(), + {ir::Type::GetInt32Type()})); + } + else if (funcName == "sysy_alloc_f32") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetPtrFloatType(), + {ir::Type::GetInt32Type()})); + } + else if (funcName == "sysy_free_i32") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetPtrInt32Type()})); + } + else if (funcName == "sysy_free_f32") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetPtrFloatType()})); + } + else if (funcName == "sysy_zero_i32") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetPtrInt32Type(), ir::Type::GetInt32Type()})); + } + else if (funcName == "sysy_zero_f32") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetPtrFloatType(), ir::Type::GetInt32Type()})); + } + + // 其他函数不支持动态创建 + return nullptr; +} + +std::any IRGenImpl::visitUnaryExp(SysYParser::UnaryExpContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitUnaryExp: 开始处理一元表达式 " << (ctx ? ctx->getText() : "") << std::endl; + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "非法一元表达式")); + } + + // 基本表达式 + if (ctx->primaryExp()) { + return ctx->primaryExp()->accept(this); + } + + // 函数调用 + if (ctx->Ident()) { + return visitCallExp(ctx); + } + + // 一元运算 + if (ctx->unaryOp() && ctx->unaryExp()) { + auto* operand = std::any_cast(ctx->unaryExp()->accept(this)); + std::string op = ctx->unaryOp()->getText(); + + if (op == "+") { + // +x 等价于 x + return operand; + } else if (op == "-") { + // -x 根据操作数类型选择整数或浮点减法 + if (operand->GetType()->IsFloat()) { + // 浮点取负:0.0 - x + ir::Value* zero_float = builder_.CreateConstFloat(0.0f); + return static_cast( + builder_.CreateFSub(zero_float, operand, module_.GetContext().NextTemp())); + } else { + // 整数取负:0 - x + ir::Value* zero = builder_.CreateConstInt(0); + return static_cast( + builder_.CreateSub(zero, operand, module_.GetContext().NextTemp())); + } + } else if (op == "!") { + // 逻辑非运算 + // 先将值转换为bool(与0比较) + ir::Value* zero; + if (operand->GetType()->IsFloat()) { + zero = builder_.CreateConstFloat(0.0f); + // 浮点逻辑非:x == 0.0 + ir::Value* cmp = builder_.CreateFCmpOEQ(operand, zero, module_.GetContext().NextTemp()); + // 将bool转换为int + return static_cast( + builder_.CreateZExt(cmp, ir::Type::GetInt32Type())); + } else { + zero = builder_.CreateConstInt(0); + return static_cast( + builder_.CreateNot(operand, module_.GetContext().NextTemp())); + } + } + } + + throw std::runtime_error(FormatError("irgen", "暂不支持的一元表达式形式")); +} + +// 实现函数调用 +std::any IRGenImpl::visitFuncRParams(SysYParser::FuncRParamsContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitFuncRParams: 开始处理函数参数 " << (ctx ? ctx->getText() : "") << std::endl; + if (!ctx) return std::vector{}; + std::vector args; + for (auto* exp : ctx->exp()) { + args.push_back(EvalExpr(*exp)); + } + return args; +} + +// visitConstExp - 处理常量表达式 +std::any IRGenImpl::visitConstExp(SysYParser::ConstExpContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitConstExp: 开始处理常量表达式 " << (ctx ? ctx->getText() : "") << std::endl; + if (!ctx || !ctx->addExp()) { + throw std::runtime_error(FormatError("irgen", "非法常量表达式")); + } + + auto result = ctx->addExp()->accept(this); + + if (!result.has_value()) { + throw std::runtime_error(FormatError("irgen", "常量表达式求值失败")); + } + + try { + return std::any_cast(result); + } catch (const std::bad_any_cast& e) { + throw std::runtime_error(FormatError("irgen", + "常量表达式返回类型错误: " + std::string(e.what()))); + } +} + +// visitConstInitVal - 处理常量初始化值 +std::any IRGenImpl::visitConstInitVal(SysYParser::ConstInitValContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitConstInitVal: 开始处理常量初始化值 " << (ctx ? ctx->getText() : "") << std::endl; + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "非法常量初始化值")); + } + + // 如果是单个常量表达式 + if (ctx->constExp()) { + return ctx->constExp()->accept(this); + } + // 如果是聚合初始化(花括号列表) + else if (!ctx->constInitVal().empty()) { + std::vector all_values; + + for (auto* init_val : ctx->constInitVal()) { + auto result = init_val->accept(this); + if (!result.has_value()) { + throw std::runtime_error(FormatError("irgen", "常量初始化值求值失败")); + } + + try { + // 尝试获取单个常量值 + ir::Value* value = std::any_cast(result); + all_values.push_back(value); + } catch (const std::bad_any_cast&) { + try { + // 尝试获取值列表(嵌套情况) + std::vector nested_values = + std::any_cast>(result); + all_values.insert(all_values.end(), + nested_values.begin(), nested_values.end()); + } catch (const std::bad_any_cast& e) { + throw std::runtime_error(FormatError("irgen", + "不支持的常量初始化值类型: " + std::string(e.what()))); + } + } + } + + return all_values; + } + + // 空初始化列表 + return std::vector{}; +} + +std::any IRGenImpl::visitRelExp(SysYParser::RelExpContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitRelExp: 开始处理关系表达式 " << (ctx ? ctx->getText() : "") << std::endl; + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "非法关系表达式")); + } + + if (ctx->relExp() && ctx->addExp()) { + auto left_any = ctx->relExp()->accept(this); + auto right_any = ctx->addExp()->accept(this); + auto* lhs = std::any_cast(left_any); + auto* rhs = std::any_cast(right_any); + + std::cerr << "[DEBUG] visitRelExp: left=" << (void*)lhs + << ", type=" << (lhs->GetType()->IsFloat() ? "float" : "int") + << ", right=" << (void*)rhs + << ", type=" << (rhs->GetType()->IsFloat() ? "float" : "int") << std::endl; + + // 处理类型转换:如果操作数类型不同,需要进行类型转换 + if (lhs->GetType()->IsFloat() != rhs->GetType()->IsFloat()) { + if (lhs->GetType()->IsFloat()) { + // lhs是float,rhs是int,需要将rhs转换为float + rhs = builder_.CreateSIToFP(rhs, ir::Type::GetFloatType()); + } else { + // rhs是float,lhs是int,需要将lhs转换为float + lhs = builder_.CreateSIToFP(lhs, ir::Type::GetFloatType()); + } + } + + // 根据操作数和类型选择指令 + if (ctx->LOp()) { + if (lhs->GetType()->IsFloat()) { + return static_cast( + builder_.CreateFCmpOLT(lhs, rhs, module_.GetContext().NextTemp())); + } else { + return static_cast( + builder_.CreateICmpLT(lhs, rhs, module_.GetContext().NextTemp())); + } + } + if (ctx->GOp()) { + if (lhs->GetType()->IsFloat()) { + return static_cast( + builder_.CreateFCmpOGT(lhs, rhs, module_.GetContext().NextTemp())); + } else { + return static_cast( + builder_.CreateICmpGT(lhs, rhs, module_.GetContext().NextTemp())); + } + } + if (ctx->LeOp()) { + if (lhs->GetType()->IsFloat()) { + return static_cast( + builder_.CreateFCmpOLE(lhs, rhs, module_.GetContext().NextTemp())); + } else { + return static_cast( + builder_.CreateICmpLE(lhs, rhs, module_.GetContext().NextTemp())); + } + } + if (ctx->GeOp()) { + if (lhs->GetType()->IsFloat()) { + return static_cast( + builder_.CreateFCmpOGE(lhs, rhs, module_.GetContext().NextTemp())); + } else { + return static_cast( + builder_.CreateICmpGE(lhs, rhs, module_.GetContext().NextTemp())); + } + } + throw std::runtime_error(FormatError("irgen", "未知关系运算符")); + } + + if (ctx->addExp()) { + return ctx->addExp()->accept(this); + } + + throw std::runtime_error(FormatError("irgen", "关系表达式暂未实现")); +} + +std::any IRGenImpl::visitEqExp(SysYParser::EqExpContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitEqExp: 开始处理相等表达式 " << (ctx ? ctx->getText() : "") << std::endl; + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "非法相等表达式")); + } + + if (ctx->eqExp() && ctx->relExp()) { + auto left_any = ctx->eqExp()->accept(this); + auto right_any = ctx->relExp()->accept(this); + auto* lhs = std::any_cast(left_any); + auto* rhs = std::any_cast(right_any); + + std::cerr << "[DEBUG] visitEqExp: left=" << (void*)lhs + << ", type=" << (lhs->GetType()->IsFloat() ? "float" : "int") + << ", right=" << (void*)rhs + << ", type=" << (rhs->GetType()->IsFloat() ? "float" : "int") << std::endl; + + // 处理类型转换:如果操作数类型不同,需要进行类型转换 + if (lhs->GetType()->IsFloat() != rhs->GetType()->IsFloat()) { + if (lhs->GetType()->IsFloat()) { + // lhs是float,rhs是int,需要将rhs转换为float + rhs = builder_.CreateSIToFP(rhs, ir::Type::GetFloatType()); + } else { + // rhs是float,lhs是int,需要将lhs转换为float + lhs = builder_.CreateSIToFP(lhs, ir::Type::GetFloatType()); + } + } + + // 根据操作符和类型选择指令 + if (ctx->EqOp()) { + if (lhs->GetType()->IsFloat()) { + return static_cast( + builder_.CreateFCmpOEQ(lhs, rhs, module_.GetContext().NextTemp())); + } else { + return static_cast( + builder_.CreateICmpEQ(lhs, rhs, module_.GetContext().NextTemp())); + } + } + if (ctx->NeOp()) { + if (lhs->GetType()->IsFloat()) { + return static_cast( + builder_.CreateFCmpONE(lhs, rhs, module_.GetContext().NextTemp())); + } else { + return static_cast( + builder_.CreateICmpNE(lhs, rhs, module_.GetContext().NextTemp())); + } + } + throw std::runtime_error(FormatError("irgen", "未知相等运算符")); + } + + if (ctx->relExp()) { + return ctx->relExp()->accept(this); + } + + throw std::runtime_error(FormatError("irgen", "相等表达式暂未实现")); +} + + +ir::Value* IRGenImpl::EvalAssign(SysYParser::StmtContext* ctx) { + std::cerr << "[DEBUG IRGEN] EvalAssign: 开始处理赋值语句 " << (ctx ? ctx->getText() : "") << std::endl; + std::cout << "[DEBUG IRGEN] visitCond: " << (ctx ? ctx->getText() : "") << std::endl; + if (!ctx || !ctx->lVal() || !ctx->exp()) { + throw std::runtime_error(FormatError("irgen", "非法赋值语句")); + } + + // 计算右值 + ir::Value* rhs = EvalExpr(*ctx->exp()); + + auto* lval = ctx->lVal(); + std::string varName = lval->Ident()->getText(); + + // 首先尝试从语义分析获取变量定义 + auto* var_decl = sema_.ResolveVarUse(lval); + + if (var_decl) { + // 是变量赋值 + // 从storage_map_获取存储位置 + auto it = storage_map_.find(var_decl); + if (it == storage_map_.end()) { + throw std::runtime_error( + FormatError("irgen", "变量声明缺少存储槽位: " + varName)); + } + + ir::Value* base_ptr = it->second; + + auto convert_for_store = [&](ir::Value* value, ir::Value* ptr) -> ir::Value* { + if (ptr->GetType()->IsPtrFloat() && value->GetType()->IsInt32()) { + return builder_.CreateSIToFP(value, ir::Type::GetFloatType(), + module_.GetContext().NextTemp()); + } + if (ptr->GetType()->IsPtrInt32() && value->GetType()->IsFloat()) { + return builder_.CreateFPToSI(value, ir::Type::GetInt32Type(), + module_.GetContext().NextTemp()); + } + return value; + }; + + // 检查是否有数组下标 + auto exp_list = lval->exp(); + if (!exp_list.empty()) { + // 这是数组元素赋值,需要生成GEP指令 + std::vector indices; + + // 标量指针参数(T*)不应添加前导0;数组对象需要前导0。 + if (!(base_ptr->GetType()->IsPtrInt32() || base_ptr->GetType()->IsPtrFloat())) { + indices.push_back(builder_.CreateConstInt(0)); + } + + // 添加用户提供的下标 + for (auto* exp : exp_list) { + ir::Value* index = EvalExpr(*exp); + indices.push_back(index); + } + + // 生成GEP指令获取元素地址 + ir::Value* elem_ptr = builder_.CreateGEP( + base_ptr, indices, module_.GetContext().NextTemp()); + + // 生成store指令 + rhs = convert_for_store(rhs, elem_ptr); + builder_.CreateStore(rhs, elem_ptr); + } else { + // 普通标量赋值 + // 调试输出指针类型 + std::cerr << "[DEBUG] base_ptr type: " << base_ptr->GetType() << std::endl; + std::cerr << "[DEBUG] rhs type: " << rhs->GetType()<< std::endl; + + // 如果 base_ptr 不是标量指针类型,可能需要特殊处理 + if (!base_ptr->GetType()->IsPtrInt32() && !base_ptr->GetType()->IsPtrFloat()) { + std::cerr << "[ERROR] base_ptr is not a pointer type!" << std::endl; + throw std::runtime_error("尝试存储到非指针类型"); + } + rhs = convert_for_store(rhs, base_ptr); + builder_.CreateStore(rhs, base_ptr); + } + } else { + // 尝试获取常量定义 + auto* const_decl = sema_.ResolveConstUse(lval); + if (const_decl) { + // 尝试给常量赋值,这是错误的 + throw std::runtime_error( + FormatError("irgen", "不能给常量赋值: " + varName)); + } else { + throw std::runtime_error( + FormatError("irgen", "变量/常量使用缺少语义绑定: " + varName)); + } + } + + return rhs; } diff --git a/src/irgen/IRGenFunc.cpp b/src/irgen/IRGenFunc.cpp index 4912d03..d5334e0 100644 --- a/src/irgen/IRGenFunc.cpp +++ b/src/irgen/IRGenFunc.cpp @@ -1,6 +1,8 @@ #include "irgen/IRGen.h" +#include #include +#include #include "SysYParser.h" #include "ir/IR.h" @@ -9,7 +11,6 @@ namespace { void VerifyFunctionStructure(const ir::Function& func) { - // 当前 IRGen 仍是单入口、顺序生成;这里在生成结束后补一层块终结校验。 for (const auto& bb : func.GetBlocks()) { if (!bb || !bb->HasTerminator()) { throw std::runtime_error( @@ -19,69 +20,498 @@ void VerifyFunctionStructure(const ir::Function& func) { } } +bool HasDirectSelfCall(antlr4::ParserRuleContext* node, + const std::string& func_name) { + if (!node) { + return false; + } + + if (auto* unary = dynamic_cast(node)) { + if (unary->Ident() && unary->Ident()->getText() == func_name) { + return true; + } + } + + for (auto* child : node->children) { + if (auto* rule = dynamic_cast(child)) { + if (HasDirectSelfCall(rule, func_name)) { + return true; + } + } + } + return false; +} + } // namespace -IRGenImpl::IRGenImpl(ir::Module& module, const SemanticContext& sema) - : module_(module), - sema_(sema), - func_(nullptr), - builder_(module.GetContext(), nullptr) {} - -// 编译单元的 IR 生成当前只实现了最小功能: -// - Module 已在 GenerateIR 中创建,这里只负责继续生成其中的内容; -// - 当前会读取编译单元中的函数定义,并交给 visitFuncDef 生成函数 IR; -// -// 当前还没有实现: -// - 多个函数定义的遍历与生成; -// - 全局变量、全局常量的 IR 生成。 +// 实现新的构造函数 +IRGenImpl::IRGenImpl(ir::Module& module, + const SemanticContext& sema, + const SymbolTable& sym_table) + : module_(module), sema_(sema), symbol_table_(sym_table), + builder_(module.GetContext(), nullptr), func_(nullptr) { + AddRuntimeFunctions(); +} + +void IRGenImpl::AddRuntimeFunctions() { + std::cerr << "[DEBUG IRGEN] 添加运行时库函数声明" << std::endl; + + // 输入函数(返回 int) + module_.CreateFunction("getint", + ir::Type::GetFunctionType(ir::Type::GetInt32Type(), {})); + module_.CreateFunction("getch", + ir::Type::GetFunctionType(ir::Type::GetInt32Type(), {})); + + // getarray(int* a, int n): int + module_.CreateFunction("getarray", + ir::Type::GetFunctionType( + ir::Type::GetInt32Type(), + {ir::Type::GetPtrInt32Type()})); + + // 输出函数(返回 void) + module_.CreateFunction("putint", + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetInt32Type()})); + module_.CreateFunction("putch", + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetInt32Type()})); + + // putarray(int n, int* a): void + module_.CreateFunction("putarray", + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetInt32Type(), ir::Type::GetPtrInt32Type()})); + + // 字符串输出(暂时用 int* 替代 char*) + module_.CreateFunction("puts", + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetPtrInt32Type()})); + + // 时间测量函数(SysY 标准库) + module_.CreateFunction("_sysy_starttime", + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetInt32Type()})); + module_.CreateFunction("_sysy_stoptime", + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetInt32Type()})); + + // 简化版本 + module_.CreateFunction("starttime", + ir::Type::GetFunctionType(ir::Type::GetVoidType(), {})); + module_.CreateFunction("stoptime", + ir::Type::GetFunctionType(ir::Type::GetVoidType(), {})); + + // 浮点 I/O + module_.CreateFunction("getfloat", + ir::Type::GetFunctionType(ir::Type::GetFloatType(), {})); + module_.CreateFunction("putfloat", + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetFloatType()})); + module_.CreateFunction("getfarray", + ir::Type::GetFunctionType( + ir::Type::GetInt32Type(), + {ir::Type::GetPtrFloatType()})); + module_.CreateFunction("putfarray", + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetInt32Type(), ir::Type::GetPtrFloatType()})); + + // 内存操作函数 + module_.CreateFunction("memset", + ir::Type::GetFunctionType( + ir::Type::GetPtrInt32Type(), + {ir::Type::GetPtrInt32Type(), + ir::Type::GetInt32Type(), + ir::Type::GetInt32Type()})); + + module_.CreateFunction("sysy_alloc_i32", + ir::Type::GetFunctionType( + ir::Type::GetPtrInt32Type(), + {ir::Type::GetInt32Type()})); + module_.CreateFunction("sysy_alloc_f32", + ir::Type::GetFunctionType( + ir::Type::GetPtrFloatType(), + {ir::Type::GetInt32Type()})); + module_.CreateFunction("sysy_free_i32", + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetPtrInt32Type()})); + module_.CreateFunction("sysy_free_f32", + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetPtrFloatType()})); + module_.CreateFunction("sysy_zero_i32", + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetPtrInt32Type(), ir::Type::GetInt32Type()})); + module_.CreateFunction("sysy_zero_f32", + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetPtrFloatType(), ir::Type::GetInt32Type()})); + + std::cerr << "[DEBUG IRGEN] 运行时库函数声明完成" << std::endl; +} + +// 修正:没有 mainFuncDef,通过函数名找到 main std::any IRGenImpl::visitCompUnit(SysYParser::CompUnitContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitCompUnit" << std::endl; + std::cerr << "[DEBUG] IRGen: 符号表地址 = " << &symbol_table_ << std::endl; + std::cerr << "[DEBUG] IRGen: 开始生成 IR" << std::endl; + + // 尝试查找 main 函数 + const Symbol* main_sym = symbol_table_.lookup("main"); + if (main_sym) { + std::cerr << "[DEBUG] IRGen: 找到 main 函数符号" << std::endl; + } else { + std::cerr << "[DEBUG] IRGen: 未找到 main 函数符号" << std::endl; + } if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少编译单元")); } - auto* func = ctx->funcDef(); - if (!func) { - throw std::runtime_error(FormatError("irgen", "缺少函数定义")); + + // 处理全局变量声明 + for (auto* decl : ctx->decl()) { + if (decl) { + decl->accept(this); + } + } + + // 处理所有函数定义 + for (auto* funcDef : ctx->funcDef()) { + if (funcDef) { + funcDef->accept(this); + } } - func->accept(this); + return {}; } -// 函数 IR 生成当前实现了: -// 1. 获取函数名; -// 2. 检查函数返回类型; -// 3. 在 Module 中创建 Function; -// 4. 将 builder 插入点设置到入口基本块; -// 5. 继续生成函数体。 -// -// 当前还没有实现: -// - 通用函数返回类型处理; -// - 形参列表遍历与参数类型收集; -// - FunctionType 这样的函数类型对象; -// - Argument/形式参数 IR 对象; -// - 入口块中的参数初始化逻辑。 -// ... - -// 因此这里目前只支持最小的“无参 int 函数”生成。 std::any IRGenImpl::visitFuncDef(SysYParser::FuncDefContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitFuncDef: " << (ctx && ctx->Ident() ? ctx->Ident()->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少函数定义")); } - if (!ctx->blockStmt()) { + + if (!ctx->Ident()) { + throw std::runtime_error(FormatError("irgen", "缺少函数名")); + } + + std::string funcName = ctx->Ident()->getText(); + + if (!ctx->block()) { throw std::runtime_error(FormatError("irgen", "函数体为空")); } - if (!ctx->ID()) { - throw std::runtime_error(FormatError("irgen", "缺少函数名")); + + std::shared_ptr ret_type = ir::Type::GetInt32Type(); + if (ctx->funcType()) { + if (ctx->funcType()->Void()) { + ret_type = ir::Type::GetVoidType(); + } else if (ctx->funcType()->Int()) { + ret_type = ir::Type::GetInt32Type(); + } else if (ctx->funcType()->Float()) { + ret_type = ir::Type::GetFloatType(); + } } - if (!ctx->funcType() || !ctx->funcType()->INT()) { - throw std::runtime_error(FormatError("irgen", "当前仅支持无参 int 函数")); + + std::vector> param_types; + if (ctx->funcFParams()) { + for (auto* param : ctx->funcFParams()->funcFParam()) { + if (!param || !param->Ident()) continue; + std::string name = param->Ident()->getText(); + std::shared_ptr param_ty; + + // 检查 bType 是否存在 + if (!param->bType()) { + throw std::runtime_error(FormatError("irgen", "函数参数缺少类型: " + name)); + } + + if (param->bType()->Int()) { + param_ty = ir::Type::GetInt32Type(); + } else if (param->bType()->Float()) { + param_ty = ir::Type::GetFloatType(); + } else { + param_ty = ir::Type::GetInt32Type(); // 默认值 + } + + if (!param->L_BRACK().empty()) { + if (param_ty->IsInt32()) { + param_ty = ir::Type::GetPtrInt32Type(); + } else if (param_ty->IsFloat()) { + param_ty = ir::Type::GetPtrFloatType(); + } + } + + param_types.push_back(param_ty); + } } - func_ = module_.CreateFunction(ctx->ID()->getText(), ir::Type::GetInt32Type()); - builder_.SetInsertPoint(func_->GetEntry()); + // 创建函数类型 + auto func_type = ir::Type::GetFunctionType(ret_type, param_types); + + // 调试输出 + std::cerr << "[DEBUG] visitFuncDef: 创建函数 " << funcName + << ",返回类型: " << (ret_type->IsVoid() ? "void" : ret_type->IsFloat() ? "float" : "int") + << ",参数数量: " << param_types.size() << std::endl; + + // 创建函数对象 + func_ = module_.CreateFunction(funcName, func_type); + + // 检查函数是否成功创建 + if (!func_) { + std::cerr << "[ERROR] visitFuncDef: 创建函数失败,func_ 为 nullptr!" << std::endl; + throw std::runtime_error(FormatError("irgen", "创建函数失败: " + funcName)); + } + + std::cerr << "[DEBUG] visitFuncDef: 函数对象地址: " << (void*)func_ << std::endl; + + // 设置插入点 + auto* entry_block = func_->GetEntry(); + if (!entry_block) { + std::cerr << "[ERROR] visitFuncDef: 函数入口基本块为空!" << std::endl; + throw std::runtime_error(FormatError("irgen", "函数入口基本块为空: " + funcName)); + } + + builder_.SetInsertPoint(entry_block); storage_map_.clear(); + param_map_.clear(); + pointer_param_names_.clear(); + heap_local_array_names_.clear(); + current_function_name_ = funcName; + current_function_is_recursive_ = HasDirectSelfCall(ctx->block(), funcName); + function_cleanup_block_ = nullptr; + function_cleanup_actions_.clear(); + function_return_slot_ = nullptr; + + if (ret_type->IsInt32()) { + function_return_slot_ = CreateEntryAllocaI32(module_.GetContext().NextTemp() + ".retval"); + } else if (ret_type->IsFloat()) { + function_return_slot_ = CreateEntryAllocaFloat(module_.GetContext().NextTemp() + ".retval"); + } + + // 函数参数处理 + if (ctx->funcFParams()) { + for (auto* param : ctx->funcFParams()->funcFParam()) { + if (!param || !param->Ident()) continue; + std::string name = param->Ident()->getText(); + std::shared_ptr param_ty; + + // 再次检查 bType + if (!param->bType()) { + throw std::runtime_error(FormatError("irgen", "函数参数缺少类型: " + name)); + } + + if (param->bType()->Int()) { + param_ty = ir::Type::GetInt32Type(); + } else if (param->bType()->Float()) { + param_ty = ir::Type::GetFloatType(); + } else { + param_ty = ir::Type::GetInt32Type(); + } + + if (!param->L_BRACK().empty()) { + if (param_ty->IsInt32()) { + param_ty = ir::Type::GetPtrInt32Type(); + } else if (param_ty->IsFloat()) { + param_ty = ir::Type::GetPtrFloatType(); + } + } + + // 检查函数对象是否有效 + if (!func_) { + std::cerr << "[ERROR] visitFuncDef: func_ 在添加参数时变为 nullptr!" << std::endl; + throw std::runtime_error(FormatError("irgen", "函数对象无效")); + } + + std::cerr << "[DEBUG] visitFuncDef: 为函数 " << funcName + << " 添加参数 " << name << ",类型: " + << (param_ty->IsInt32() ? "int32" : param_ty->IsFloat() ? "float" : + param_ty->IsPtrInt32() ? "ptr_int32" : param_ty->IsPtrFloat() ? "ptr_float" : "other") + << std::endl; + + // 创建参数并添加到函数 + auto arg = std::make_unique(param_ty, name); + if (!arg) { + throw std::runtime_error(FormatError("irgen", "创建参数失败: " + name)); + } + + auto* arg_ptr = arg.get(); + auto* added_arg = func_->AddArgument(std::move(arg)); + + if (!added_arg) { + std::cerr << "[ERROR] visitFuncDef: AddArgument 返回 nullptr!" << std::endl; + throw std::runtime_error(FormatError("irgen", "添加参数失败: " + name)); + } + + // 标量参数:入栈到本地槽位;数组参数(指针)直接作为地址使用。 + if (param_ty->IsPtrInt32() || param_ty->IsPtrFloat()) { + param_map_[name] = added_arg; + pointer_param_names_.insert(name); + } else { + ir::AllocaInst* slot = nullptr; + if (param_ty->IsInt32()) { + slot = CreateEntryAllocaI32(module_.GetContext().NextTemp()); + } else if (param_ty->IsFloat()) { + slot = CreateEntryAllocaFloat(module_.GetContext().NextTemp()); + } else { + throw std::runtime_error(FormatError("irgen", "不支持的参数类型")); + } + + if (!slot) { + throw std::runtime_error(FormatError("irgen", "创建参数存储槽位失败: " + name)); + } + + builder_.CreateStore(added_arg, slot); + param_map_[name] = slot; + pointer_param_names_.erase(name); + } + + std::cerr << "[DEBUG] visitFuncDef: 参数 " << name << " 处理完成" << std::endl; + } + } + + // 生成函数体 + std::cerr << "[DEBUG] visitFuncDef: 开始生成函数体" << std::endl; + ctx->block()->accept(this); - ctx->blockStmt()->accept(this); - // 语义正确性主要由 sema 保证,这里只兜底检查 IR 结构是否合法。 - VerifyFunctionStructure(*func_); + // 如果当前插入块没有终止指令,添加默认返回 + if (auto* cur = builder_.GetInsertBlock(); cur && !cur->HasTerminator()) { + std::cerr << "[DEBUG] visitFuncDef: 函数体没有终止指令,添加默认返回" << std::endl; + if (function_cleanup_block_) { + if (ret_type->IsFloat()) { + builder_.CreateStore(builder_.CreateConstFloat(0.0f), function_return_slot_); + } else if (ret_type->IsInt32()) { + builder_.CreateStore(builder_.CreateConstInt(0), function_return_slot_); + } + builder_.CreateBr(function_cleanup_block_); + } else if (ret_type->IsVoid()) { + builder_.CreateRet(nullptr); + } else if (ret_type->IsFloat()) { + builder_.CreateRet(builder_.CreateConstFloat(0.0f)); + } else { + builder_.CreateRet(builder_.CreateConstInt(0)); + } + } + + if (function_cleanup_block_ && !function_cleanup_block_->HasTerminator()) { + builder_.SetInsertPoint(function_cleanup_block_); + for (auto it = function_cleanup_actions_.rbegin(); + it != function_cleanup_actions_.rend(); ++it) { + builder_.CreateCall(it->first, {it->second}, module_.GetContext().NextTemp()); + } + + if (ret_type->IsVoid()) { + builder_.CreateRet(nullptr); + } else { + builder_.CreateRet(builder_.CreateLoad(function_return_slot_, module_.GetContext().NextTemp())); + } + } + + // 验证函数结构 + try { + VerifyFunctionStructure(*func_); + } catch (const std::exception& e) { + std::cerr << "[ERROR] visitFuncDef: 验证函数结构失败: " << e.what() << std::endl; + throw; + } + + std::cerr << "[DEBUG] visitFuncDef: 函数 " << funcName << " 生成完成" << std::endl; + func_ = nullptr; + current_function_name_.clear(); + current_function_is_recursive_ = false; + function_return_slot_ = nullptr; + function_cleanup_block_ = nullptr; + function_cleanup_actions_.clear(); return {}; } + +ir::BasicBlock* IRGenImpl::EnsureCleanupBlock() { + if (!function_cleanup_block_) { + std::string name = module_.GetContext().NextTemp(); + if (!name.empty() && name[0] == '%') { + name.erase(0, 1); + } + function_cleanup_block_ = func_->CreateBlock("cleanup." + name); + } + return function_cleanup_block_; +} + +void IRGenImpl::RegisterCleanup(ir::Function* free_func, ir::Value* ptr) { + if (!free_func || !ptr) { + return; + } + EnsureCleanupBlock(); + function_cleanup_actions_.push_back({free_func, ptr}); +} + +ir::AllocaInst* IRGenImpl::CreateEntryAlloca(std::shared_ptr ty, + const std::string& name) { + if (!func_ || !func_->GetEntry()) { + throw std::runtime_error(FormatError("irgen", "缺少函数入口块,无法创建入口栈槽位")); + } + return func_->GetEntry()->InsertBeforeTerminator(ty, name); +} + +ir::AllocaInst* IRGenImpl::CreateEntryAllocaI32(const std::string& name) { + return CreateEntryAlloca(ir::Type::GetPtrInt32Type(), name); +} + +ir::AllocaInst* IRGenImpl::CreateEntryAllocaFloat(const std::string& name) { + return CreateEntryAlloca(ir::Type::GetPtrFloatType(), name); +} + + +std::any IRGenImpl::visitBlock(SysYParser::BlockContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitBlock: " << (ctx ? ctx->getText() : "") << std::endl; + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "缺少语句块")); + } + + BlockFlow flow = BlockFlow::Continue; + for (auto* item : ctx->blockItem()) { + if (!item) continue; + + flow = VisitBlockItemResult(*item); + if (flow == BlockFlow::Terminated) { + break; + } + + auto* cur = builder_.GetInsertBlock(); + std::cerr << "[DEBUG] current insert block: " + << (cur ? cur->GetName() : "") << std::endl; + if (cur && cur->HasTerminator()) { + break; + } + } + + return flow; +} + +// 类型安全的包装器 +IRGenImpl::BlockFlow IRGenImpl::VisitBlockItemResult( + SysYParser::BlockItemContext& item) { + auto result = item.accept(this);// 调用 visitBlockItem,返回 std::any 包装的 BlockFlow + return std::any_cast(result); // 解包为 BlockFlow +} +// 用于遍历块内项,返回是否继续访问后续项(如遇到 return/break/continue 则终止访问) +std::any IRGenImpl::visitBlockItem(SysYParser::BlockItemContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitBlockItem: " << (ctx ? ctx->getText() : "") << std::endl; + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "缺少块内项")); + } + // 块内项可以是语句或声明,优先处理语句(如 return/break/continue 可能终止块内执行) + if (ctx->stmt()) { + return ctx->stmt()->accept(this); // 语句访问返回 BlockFlow,指示是否继续访问后续项 + } + // 处理声明(如变量定义),继续访问后续项 + if (ctx->decl()) { + ctx->decl()->accept(this); + return BlockFlow::Continue; // 声明不会终止块内执行,继续访问后续项 + } + throw std::runtime_error(FormatError("irgen", "暂不支持的块内项")); +} diff --git a/src/irgen/IRGenStmt.cpp b/src/irgen/IRGenStmt.cpp index 751550c..6b4661d 100644 --- a/src/irgen/IRGenStmt.cpp +++ b/src/irgen/IRGenStmt.cpp @@ -16,24 +16,512 @@ // - 空语句、块语句嵌套分发之外的更多语句形态 std::any IRGenImpl::visitStmt(SysYParser::StmtContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitStmt: " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少语句")); } - if (ctx->returnStmt()) { - return ctx->returnStmt()->accept(this); + + // return 语句 - 通过 Return() 关键字判断 + if (ctx->Return()) { + return HandleReturnStmt(ctx); + } + + // 赋值语句 + if (ctx->lVal() && ctx->Assign() && ctx->exp()) { + return HandleAssignStmt(ctx); + } + + // if 语句 + if (ctx->If()) { + return HandleIfStmt(ctx); + } + + // while 语句 + if (ctx->While()) { + return HandleWhileStmt(ctx); + } + + // break 语句 + if (ctx->Break()) { + return HandleBreakStmt(ctx); + } + // continue 语句 + if (ctx->Continue()) { + return HandleContinueStmt(ctx); + } + // 块语句 + if (ctx->block()) { + return ctx->block()->accept(this); + } + + // 空语句或表达式语句(先计算表达式) + if (ctx->exp()) { + EvalExpr(*ctx->exp()); + return BlockFlow::Continue; } + throw std::runtime_error(FormatError("irgen", "暂不支持的语句类型")); } +// 修改 HandleReturnStmt 函数 - -std::any IRGenImpl::visitReturnStmt(SysYParser::ReturnStmtContext* ctx) { +IRGenImpl::BlockFlow IRGenImpl::HandleReturnStmt(SysYParser::StmtContext* ctx) { + std::cerr << "[DEBUG IRGEN] HandleReturnStmt: " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少 return 语句")); } - if (!ctx->exp()) { - throw std::runtime_error(FormatError("irgen", "return 缺少表达式")); + + // 检查函数是否存在 + if (!func_) { + throw std::runtime_error(FormatError("irgen", "Return语句不在函数中")); + } + + // 获取函数类型中的返回类型 + auto func_type = std::dynamic_pointer_cast(func_->GetType()); + if (!func_type) { + throw std::runtime_error(FormatError("irgen", "函数类型无效")); + } + + auto ret_type = func_type->GetReturnType(); + + if (ret_type->IsVoid()) { + if (ctx->exp()) { + // 表达式被忽略(可计算但不使用) + EvalExpr(*ctx->exp()); + } + if (function_cleanup_block_) { + builder_.CreateBr(function_cleanup_block_); + } else { + // 对于void函数,创建返回指令(不传参数) + builder_.CreateRet(nullptr); + } + } else { + ir::Value* retValue = nullptr; + if (ctx->exp()) { + retValue = EvalExpr(*ctx->exp()); + if (!retValue) { + throw std::runtime_error(FormatError("irgen", "返回值表达式求值失败")); + } + // 类型转换 + if (retValue->GetType() != ret_type) { + if (ret_type->IsInt32() && retValue->GetType()->IsFloat()) { + retValue = builder_.CreateFPToSI(retValue, ir::Type::GetInt32Type()); + } else if (ret_type->IsFloat() && retValue->GetType()->IsInt32()) { + retValue = builder_.CreateSIToFP(retValue, ir::Type::GetFloatType()); + } + } + } else { + // 无表达式,返回默认值 + if (ret_type->IsInt32()) { + retValue = builder_.CreateConstInt(0); + } else if (ret_type->IsFloat()) { + retValue = builder_.CreateConstFloat(0.0f); + } else { + retValue = builder_.CreateConstInt(0); // fallback + } + } + if (function_cleanup_block_) { + builder_.CreateStore(retValue, function_return_slot_); + builder_.CreateBr(function_cleanup_block_); + } else { + builder_.CreateRet(retValue); + } } - ir::Value* v = EvalExpr(*ctx->exp()); - builder_.CreateRet(v); return BlockFlow::Terminated; } + + +// if语句(待实现) +IRGenImpl::BlockFlow IRGenImpl::HandleIfStmt(SysYParser::StmtContext* ctx) { + std::cerr << "[DEBUG IRGEN] HandleIfStmt: " << (ctx ? ctx->getText() : "") << std::endl; + + auto* cond = ctx->cond(); + auto* thenStmt = ctx->stmt(0); + auto* elseStmt = ctx->stmt(1); + + // 创建基本块(使用唯一名称,避免同名标签) + auto uniq = [&](const std::string& prefix) { + std::string t = module_.GetContext().NextTemp(); + if (!t.empty() && t[0] == '%') t.erase(0, 1); + return prefix + "." + t; + }; + auto* thenBlock = func_->CreateBlock(uniq("then")); + auto* elseBlock = (ctx->Else() && elseStmt) ? func_->CreateBlock(uniq("else")) : nullptr; + auto* mergeBlock = func_->CreateBlock(uniq("merge")); + + std::cerr << "[DEBUG IF] thenBlock: " << thenBlock->GetName() << std::endl; + if (elseBlock) std::cerr << "[DEBUG IF] elseBlock: " << elseBlock->GetName() << std::endl; + std::cerr << "[DEBUG IF] mergeBlock: " << mergeBlock->GetName() << std::endl; + std::cerr << "[DEBUG IF] current insert block before cond: " + << builder_.GetInsertBlock()->GetName() << std::endl; + + // 生成条件 + auto* condValue = EvalCond(*cond); + if (!condValue->GetType()->IsInt1()) { + if (condValue->GetType()->IsFloat()) { + condValue = builder_.CreateFCmpONE( + condValue, builder_.CreateConstFloat(0.0f), module_.GetContext().NextTemp()); + } else { + condValue = builder_.CreateICmpNE( + condValue, builder_.CreateConstInt(0), module_.GetContext().NextTemp()); + } + } + + // 创建条件跳转 + if (elseBlock) { + std::cerr << "[DEBUG IF] Creating condbr: " << condValue->GetName() + << " -> " << thenBlock->GetName() << ", " << elseBlock->GetName() << std::endl; + builder_.CreateCondBr(condValue, thenBlock, elseBlock); + } else { + std::cerr << "[DEBUG IF] Creating condbr: " << condValue->GetName() + << " -> " << thenBlock->GetName() << ", " << mergeBlock->GetName() << std::endl; + builder_.CreateCondBr(condValue, thenBlock, mergeBlock); + } + + // 生成 then 分支 + std::cerr << "[DEBUG IF] Generating then branch in block: " << thenBlock->GetName() << std::endl; + builder_.SetInsertPoint(thenBlock); + auto thenResult = thenStmt->accept(this); + bool thenTerminated = (std::any_cast(thenResult) == BlockFlow::Terminated); + std::cerr << "[DEBUG IF] then branch terminated: " << thenTerminated << std::endl; + + if (!thenTerminated) { + std::cerr << "[DEBUG IF] Adding br to merge block from then" << std::endl; + builder_.CreateBr(mergeBlock); + } + std::cerr << "[DEBUG IF] then block has terminator: " << thenBlock->HasTerminator() << std::endl; + + // 生成 else 分支 + bool elseTerminated = false; + if (elseBlock) { + std::cout << "[DEBUG IF] Generating else branch in block: " << elseBlock->GetName() << std::endl; + builder_.SetInsertPoint(elseBlock); + auto elseResult = elseStmt->accept(this); + elseTerminated = (std::any_cast(elseResult) == BlockFlow::Terminated); + std::cout << "[DEBUG IF] else branch terminated: " << elseTerminated << std::endl; + + if (!elseTerminated) { + std::cout << "[DEBUG IF] Adding br to merge block from else" << std::endl; + builder_.CreateBr(mergeBlock); + } + std::cout << "[DEBUG IF] else block has terminator: " << elseBlock->HasTerminator() << std::endl; + } + + // 决定后续插入点 + std::cout << "[DEBUG IF] thenTerminated=" << thenTerminated + << ", elseTerminated=" << elseTerminated << std::endl; + + if (elseBlock) { + std::cout << "[DEBUG IF] Setting insert point to merge block: " + << mergeBlock->GetName() << std::endl; + builder_.SetInsertPoint(mergeBlock); + } else { + std::cout << "[DEBUG IF] No else, setting insert point to merge block: " + << mergeBlock->GetName() << std::endl; + builder_.SetInsertPoint(mergeBlock); + } + + std::cout << "[DEBUG IF] Final insert block: " + << builder_.GetInsertBlock()->GetName() << std::endl; + + return BlockFlow::Continue; +} + +// while语句(待实现)IRGenImpl::BlockFlow IRGenImpl::HandleWhileStmt(SysYParser::StmtContext* ctx) { +IRGenImpl::BlockFlow IRGenImpl::HandleWhileStmt(SysYParser::StmtContext* ctx) { + std::cout << "[DEBUG IRGEN] HandleWhileStmt: " << (ctx ? ctx->getText() : "") << std::endl; + + if (!ctx || !ctx->cond() || !ctx->stmt(0)) { + throw std::runtime_error(FormatError("irgen", "非法 while 语句")); + } + + std::cout << "[DEBUG WHILE] Current insert block before while: " + << builder_.GetInsertBlock()->GetName() << std::endl; + + auto uniq = [&](const std::string& prefix) { + std::string t = module_.GetContext().NextTemp(); + if (!t.empty() && t[0] == '%') t.erase(0, 1); + return prefix + "." + t; + }; + auto* condBlock = func_->CreateBlock(uniq("while.cond")); + auto* bodyBlock = func_->CreateBlock(uniq("while.body")); + auto* exitBlock = func_->CreateBlock(uniq("while.exit")); + + std::cout << "[DEBUG WHILE] condBlock: " << condBlock->GetName() << std::endl; + std::cout << "[DEBUG WHILE] bodyBlock: " << bodyBlock->GetName() << std::endl; + std::cout << "[DEBUG WHILE] exitBlock: " << exitBlock->GetName() << std::endl; + + std::cout << "[DEBUG WHILE] Adding br to condBlock from current block" << std::endl; + builder_.CreateBr(condBlock); + + loopStack_.push_back({condBlock, bodyBlock, exitBlock}); + std::cout << "[DEBUG WHILE] loopStack size: " << loopStack_.size() << std::endl; + + // 条件块 + std::cout << "[DEBUG WHILE] Generating condition in block: " << condBlock->GetName() << std::endl; + builder_.SetInsertPoint(condBlock); + auto* condValue = EvalCond(*ctx->cond()); + if (!condValue->GetType()->IsInt1()) { + if (condValue->GetType()->IsFloat()) { + condValue = builder_.CreateFCmpONE( + condValue, builder_.CreateConstFloat(0.0f), module_.GetContext().NextTemp()); + } else { + condValue = builder_.CreateICmpNE( + condValue, builder_.CreateConstInt(0), module_.GetContext().NextTemp()); + } + } + builder_.CreateCondBr(condValue, bodyBlock, exitBlock); + std::cout << "[DEBUG WHILE] condBlock has terminator: " << condBlock->HasTerminator() << std::endl; + + // 循环体 + std::cout << "[DEBUG WHILE] Generating body in block: " << bodyBlock->GetName() << std::endl; + builder_.SetInsertPoint(bodyBlock); + auto bodyResult = ctx->stmt(0)->accept(this); + bool bodyTerminated = (std::any_cast(bodyResult) == BlockFlow::Terminated); + std::cout << "[DEBUG WHILE] body terminated: " << bodyTerminated << std::endl; + + if (!bodyTerminated) { + std::cout << "[DEBUG WHILE] Adding br to condBlock from body" << std::endl; + builder_.CreateBr(condBlock); + } + std::cout << "[DEBUG WHILE] bodyBlock has terminator: " << bodyBlock->HasTerminator() << std::endl; + + loopStack_.pop_back(); + std::cout << "[DEBUG WHILE] loopStack size after pop: " << loopStack_.size() << std::endl; + + // 设置插入点为 exitBlock + std::cout << "[DEBUG WHILE] Setting insert point to exitBlock: " << exitBlock->GetName() << std::endl; + builder_.SetInsertPoint(exitBlock); + std::cout << "[DEBUG WHILE] exitBlock has terminator before return: " + << exitBlock->HasTerminator() << std::endl; + + return BlockFlow::Continue; +} + +// break语句(待实现) +IRGenImpl::BlockFlow IRGenImpl::HandleBreakStmt(SysYParser::StmtContext* ctx) { + std::cout << "[DEBUG IRGEN] HandleBreakStmt: " << (ctx ? ctx->getText() : "") << std::endl; + + if (loopStack_.empty()) { + throw std::runtime_error(FormatError("irgen", "break 语句不在循环中")); + } + + std::cout << "[DEBUG BREAK] Current insert block before break: " + << builder_.GetInsertBlock()->GetName() << std::endl; + std::cout << "[DEBUG BREAK] Breaking to exitBlock: " + << loopStack_.back().exitBlock->GetName() << std::endl; + + // 跳转到循环退出块 + builder_.CreateBr(loopStack_.back().exitBlock); + + // break 本身就是终止当前路径,后续 unreachable 代码不需要继续生成。 + return BlockFlow::Terminated; +} + +IRGenImpl::BlockFlow IRGenImpl::HandleContinueStmt(SysYParser::StmtContext* ctx) { + std::cout << "[DEBUG IRGEN] HandleContinueStmt: " << (ctx ? ctx->getText() : "") << std::endl; + + if (loopStack_.empty()) { + throw std::runtime_error(FormatError("irgen", "continue 语句不在循环中")); + } + + std::cout << "[DEBUG CONTINUE] Current insert block before continue: " + << builder_.GetInsertBlock()->GetName() << std::endl; + std::cout << "[DEBUG CONTINUE] Continuing to condBlock: " + << loopStack_.back().condBlock->GetName() << std::endl; + + // 跳转到循环条件块 + builder_.CreateBr(loopStack_.back().condBlock); + + // continue 本身就是终止当前路径,后续 unreachable 代码不需要继续生成。 + return BlockFlow::Terminated; +} + +// 赋值语句(待实现) +// 赋值语句 +// 赋值语句 +IRGenImpl::BlockFlow IRGenImpl::HandleAssignStmt(SysYParser::StmtContext* ctx) { + std::cout << "[DEBUG IRGEN] HandleAssignStmt: " << (ctx ? ctx->getText() : "") << std::endl; + + if (!ctx || !ctx->lVal() || !ctx->exp()) { + throw std::runtime_error(FormatError("irgen", "非法赋值语句")); + } + + // 计算右值 + ir::Value* rhs = EvalExpr(*ctx->exp()); + if (!rhs) { + throw std::runtime_error(FormatError("irgen", "赋值 RHS 计算失败")); + } + + auto* lval = ctx->lVal(); + std::string varName = lval->Ident()->getText(); + std::cerr << "[DEBUG] HandleAssignStmt: assigning to " << varName << std::endl; + + // 1. 检查是否为常量(不能给常量赋值) + auto* const_decl = sema_.ResolveConstUse(lval); + if (const_decl) { + throw std::runtime_error( + FormatError("irgen", "不能给常量赋值: " + varName)); + } + + // 2. 查找存储位置 + ir::Value* base_ptr = nullptr; + + // 2.1 尝试通过语义分析获取变量定义,并从 storage_map_ 查找 + auto* var_decl = sema_.ResolveVarUse(lval); + if (var_decl) { + auto it = storage_map_.find(var_decl); + if (it != storage_map_.end()) { + base_ptr = it->second; + std::cerr << "[DEBUG] HandleAssignStmt: found in storage_map_ for " << varName + << ", ptr = " << (void*)base_ptr << std::endl; + } + } + + // 2.2 从参数映射查找(关键!) + if (!base_ptr) { + auto it2 = param_map_.find(varName); + if (it2 != param_map_.end()) { + base_ptr = it2->second; + std::cerr << "[DEBUG] HandleAssignStmt: found in param_map_ for " << varName + << ", ptr = " << (void*)base_ptr << std::endl; + } + } + + // 2.3 从全局变量映射查找 + if (!base_ptr) { + auto it3 = global_map_.find(varName); + if (it3 != global_map_.end()) { + base_ptr = it3->second; + std::cerr << "[DEBUG] HandleAssignStmt: found in global_map_ for " << varName + << ", ptr = " << (void*)base_ptr << std::endl; + } + } + + // 2.4 从局部变量映射查找(fallback) + if (!base_ptr) { + auto it4 = local_var_map_.find(varName); + if (it4 != local_var_map_.end()) { + base_ptr = it4->second; + std::cerr << "[DEBUG] HandleAssignStmt: found in local_var_map_ for " << varName + << ", ptr = " << (void*)base_ptr << std::endl; + } + } + + // 如果还是找不到,才报错 + if (!base_ptr) { + throw std::runtime_error( + FormatError("irgen", "变量声明缺少存储槽位: " + varName)); + } + + // 3. 检查是否有数组下标 + auto exp_list = lval->exp(); + if (!exp_list.empty()) { + // 数组元素赋值 + std::vector idx_vals; + for (auto* exp : exp_list) { + ir::Value* index = EvalExpr(*exp); + idx_vals.push_back(index); + } + + ir::Value* elem_ptr = nullptr; + + // 扁平数组/数组参数(T*)的多维访问:先线性化,再单索引 GEP。 + if ((base_ptr->GetType()->IsPtrInt32() || base_ptr->GetType()->IsPtrFloat()) && idx_vals.size() > 1) { + const Symbol* var_sym = symbol_table_.lookup(varName); + if (!var_sym && var_decl) { + var_sym = symbol_table_.lookupByVarDef(var_decl); + } + if (!var_sym) { + var_sym = symbol_table_.lookupAll(varName); + } + + std::vector dims; + if (var_sym) { + if (var_sym->is_array_param && !var_sym->array_dims.empty()) { + dims = var_sym->array_dims; + } else if (var_sym->type && var_sym->type->IsArray()) { + auto* at = dynamic_cast(var_sym->type.get()); + if (at) dims = at->GetDimensions(); + } + } + + if (dims.empty() && var_decl) { + for (auto* cexp : var_decl->constExp()) { + dims.push_back(symbol_table_.EvaluateConstExp(cexp)); + } + } + + ir::Value* flat = nullptr; + for (size_t i = 0; i < idx_vals.size(); ++i) { + ir::Value* term = idx_vals[i]; + if (!term) continue; + + int mult = 1; + if (!dims.empty() && i + 1 < dims.size()) { + for (size_t j = i + 1; j < dims.size(); ++j) { + if (dims[j] > 0) mult *= dims[j]; + } + } + + if (mult != 1) { + auto* mval = builder_.CreateConstInt(mult); + term = builder_.CreateMul(term, mval, module_.GetContext().NextTemp()); + } + + if (!flat) flat = term; + else flat = builder_.CreateAdd(flat, term, module_.GetContext().NextTemp()); + } + + if (!flat) flat = builder_.CreateConstInt(0); + + std::vector gep_indices = {flat}; + elem_ptr = builder_.CreateGEP(base_ptr, gep_indices, module_.GetContext().NextTemp()); + } else { + std::vector indices; + if (base_ptr->GetType()->IsPtrInt32() || base_ptr->GetType()->IsPtrFloat()) { + for (auto* v : idx_vals) indices.push_back(v); + } else { + indices.push_back(builder_.CreateConstInt(0)); + for (auto* v : idx_vals) indices.push_back(v); + } + elem_ptr = builder_.CreateGEP(base_ptr, indices, module_.GetContext().NextTemp()); + } + + if (elem_ptr->GetType()->IsPtrFloat() && rhs->GetType()->IsInt32()) { + rhs = builder_.CreateSIToFP(rhs, ir::Type::GetFloatType(), + module_.GetContext().NextTemp()); + } else if (elem_ptr->GetType()->IsPtrInt32() && rhs->GetType()->IsFloat()) { + rhs = builder_.CreateFPToSI(rhs, ir::Type::GetInt32Type(), + module_.GetContext().NextTemp()); + } + builder_.CreateStore(rhs, elem_ptr); + } else { + // 普通标量赋值 + std::cerr << "[DEBUG] HandleAssignStmt: scalar assignment to " << varName + << ", ptr = " << (void*)base_ptr + << ", rhs = " << (void*)rhs << std::endl; + // 在 HandleAssignStmt 中,存储前添加类型调试 + if (base_ptr && base_ptr->GetType()) { + + std::cerr << "[DEBUG] Is int32: " << base_ptr->GetType()->IsInt32() << std::endl; + std::cerr << "[DEBUG] Is float: " << base_ptr->GetType()->IsFloat() << std::endl; + std::cerr << "[DEBUG] Is ptr int32: " << base_ptr->GetType()->IsPtrInt32() << std::endl; + std::cerr << "[DEBUG] Is ptr float: " << base_ptr->GetType()->IsPtrFloat() << std::endl; + std::cerr << "[DEBUG] Is array: " << base_ptr->GetType()->IsArray() << std::endl; + } + if (rhs && rhs->GetType()) { + + std::cerr << "[DEBUG] Value is int32: " << rhs->GetType()->IsInt32() << std::endl; + } + if (base_ptr->GetType()->IsPtrFloat() && rhs->GetType()->IsInt32()) { + rhs = builder_.CreateSIToFP(rhs, ir::Type::GetFloatType(), + module_.GetContext().NextTemp()); + } else if (base_ptr->GetType()->IsPtrInt32() && rhs->GetType()->IsFloat()) { + rhs = builder_.CreateFPToSI(rhs, ir::Type::GetInt32Type(), + module_.GetContext().NextTemp()); + } + builder_.CreateStore(rhs, base_ptr); + } + + return BlockFlow::Continue; +} \ No newline at end of file diff --git a/src/sem/Sema.cpp b/src/sem/Sema.cpp index 745374c..8d51715 100644 --- a/src/sem/Sema.cpp +++ b/src/sem/Sema.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include "SysYBaseVisitor.h" #include "sem/SymbolTable.h" @@ -10,191 +11,1577 @@ namespace { -std::string GetLValueName(SysYParser::LValueContext& lvalue) { - if (!lvalue.ID()) { - throw std::runtime_error(FormatError("sema", "非法左值")); - } - return lvalue.ID()->getText(); +// 获取左值名称的辅助函数 +std::string GetLValueName(SysYParser::LValContext& lval) { + if (!lval.Ident()) { + throw std::runtime_error(FormatError("sema", "非法左值")); + } + return lval.Ident()->getText(); +} + +// 从 BTypeContext 获取类型 +std::shared_ptr GetTypeFromBType(SysYParser::BTypeContext* ctx) { + if (!ctx) return ir::Type::GetInt32Type(); + if (ctx->Int()) return ir::Type::GetInt32Type(); + if (ctx->Float()) return ir::Type::GetFloatType(); + return ir::Type::GetInt32Type(); } +// 语义分析 Visitor class SemaVisitor final : public SysYBaseVisitor { - public: - std::any visitCompUnit(SysYParser::CompUnitContext* ctx) override { - if (!ctx) { - throw std::runtime_error(FormatError("sema", "缺少编译单元")); - } - auto* func = ctx->funcDef(); - if (!func || !func->blockStmt()) { - throw std::runtime_error(FormatError("sema", "缺少 main 函数定义")); - } - if (!func->ID() || func->ID()->getText() != "main") { - throw std::runtime_error(FormatError("sema", "缺少 main 函数定义")); - } - func->accept(this); - if (!seen_return_) { - throw std::runtime_error( - FormatError("sema", "main 函数必须包含 return 语句")); - } - return {}; - } - - std::any visitFuncDef(SysYParser::FuncDefContext* ctx) override { - if (!ctx || !ctx->blockStmt()) { - throw std::runtime_error(FormatError("sema", "缺少 main 函数定义")); - } - if (!ctx->funcType() || !ctx->funcType()->INT()) { - throw std::runtime_error(FormatError("sema", "当前仅支持 int main")); - } - const auto& items = ctx->blockStmt()->blockItem(); - if (items.empty()) { - throw std::runtime_error( - FormatError("sema", "main 函数不能为空,且必须以 return 结束")); - } - ctx->blockStmt()->accept(this); - return {}; - } - - std::any visitBlockStmt(SysYParser::BlockStmtContext* ctx) override { - if (!ctx) { - throw std::runtime_error(FormatError("sema", "缺少语句块")); - } - const auto& items = ctx->blockItem(); - for (size_t i = 0; i < items.size(); ++i) { - auto* item = items[i]; - if (!item) { - continue; - } - if (seen_return_) { - throw std::runtime_error( - FormatError("sema", "return 必须是 main 函数中的最后一条语句")); - } - current_item_index_ = i; - total_items_ = items.size(); - item->accept(this); - } - return {}; - } - - std::any visitBlockItem(SysYParser::BlockItemContext* ctx) override { - if (!ctx) { - throw std::runtime_error(FormatError("sema", "暂不支持的语句或声明")); - } - if (ctx->decl()) { - ctx->decl()->accept(this); - return {}; - } - if (ctx->stmt()) { - ctx->stmt()->accept(this); - return {}; - } - throw std::runtime_error(FormatError("sema", "暂不支持的语句或声明")); - } - - std::any visitDecl(SysYParser::DeclContext* ctx) override { - if (!ctx) { - throw std::runtime_error(FormatError("sema", "非法变量声明")); - } - if (!ctx->btype() || !ctx->btype()->INT()) { - throw std::runtime_error(FormatError("sema", "当前仅支持局部 int 变量声明")); - } - auto* var_def = ctx->varDef(); - if (!var_def || !var_def->lValue()) { - throw std::runtime_error(FormatError("sema", "非法变量声明")); - } - const std::string name = GetLValueName(*var_def->lValue()); - if (table_.Contains(name)) { - throw std::runtime_error(FormatError("sema", "重复定义变量: " + name)); - } - if (auto* init = var_def->initValue()) { - if (!init->exp()) { - throw std::runtime_error(FormatError("sema", "当前不支持聚合初始化")); - } - init->exp()->accept(this); - } - table_.Add(name, var_def); - return {}; - } - - std::any visitStmt(SysYParser::StmtContext* ctx) override { - if (!ctx || !ctx->returnStmt()) { - throw std::runtime_error(FormatError("sema", "暂不支持的语句或声明")); - } - ctx->returnStmt()->accept(this); - return {}; - } - - std::any visitReturnStmt(SysYParser::ReturnStmtContext* ctx) override { - if (!ctx || !ctx->exp()) { - throw std::runtime_error(FormatError("sema", "return 缺少表达式")); - } - ctx->exp()->accept(this); - seen_return_ = true; - if (current_item_index_ + 1 != total_items_) { - throw std::runtime_error( - FormatError("sema", "return 必须是 main 函数中的最后一条语句")); - } - return {}; - } - - std::any visitParenExp(SysYParser::ParenExpContext* ctx) override { - if (!ctx || !ctx->exp()) { - throw std::runtime_error(FormatError("sema", "非法括号表达式")); - } - ctx->exp()->accept(this); - return {}; - } - - std::any visitVarExp(SysYParser::VarExpContext* ctx) override { - if (!ctx || !ctx->var()) { - throw std::runtime_error(FormatError("sema", "非法变量表达式")); - } - ctx->var()->accept(this); - return {}; - } - - std::any visitNumberExp(SysYParser::NumberExpContext* ctx) override { - if (!ctx || !ctx->number() || !ctx->number()->ILITERAL()) { - throw std::runtime_error(FormatError("sema", "当前仅支持整数字面量")); - } - return {}; - } - - std::any visitAdditiveExp(SysYParser::AdditiveExpContext* ctx) override { - if (!ctx || !ctx->exp(0) || !ctx->exp(1)) { - throw std::runtime_error(FormatError("sema", "暂不支持的表达式形式")); - } - ctx->exp(0)->accept(this); - ctx->exp(1)->accept(this); - return {}; - } - - std::any visitVar(SysYParser::VarContext* ctx) override { - if (!ctx || !ctx->ID()) { - throw std::runtime_error(FormatError("sema", "非法变量引用")); +public: + SemaVisitor() : table_() {} + std::any visitCompUnit(SysYParser::CompUnitContext* ctx) override { + if (!ctx) { + throw std::runtime_error(FormatError("sema", "缺少编译单元")); + } + for (auto* func : ctx->funcDef()) { // 收集所有函数声明(处理互相调用) + CollectFunctionDeclaration(func); + } + for (auto* decl : ctx->decl()) { // 处理所有声明和定义 + if (decl) decl->accept(this); + } + for (auto* func : ctx->funcDef()) { + if (func) func->accept(this); + } + CheckMainFunction(); // 检查 main 函数存在且正确 + return {}; + } + + std::any visitFuncDef(SysYParser::FuncDefContext* ctx) override { + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("sema", "函数定义缺少标识符")); + } + std::string name = ctx->Ident()->getText(); + std::shared_ptr return_type; // 获取返回类型 + if (ctx->funcType()) { + if (ctx->funcType()->Void()) { + return_type = ir::Type::GetVoidType(); + } else if (ctx->funcType()->Int()) { + return_type = ir::Type::GetInt32Type(); + } else if (ctx->funcType()->Float()) { + return_type = ir::Type::GetFloatType(); + } else { + return_type = ir::Type::GetInt32Type(); + } + } else { + return_type = ir::Type::GetInt32Type(); + } + std::cout << "[DEBUG] 进入函数: " << name + << " 返回类型: " << (return_type->IsInt32() ? "int" : + return_type->IsFloat() ? "float" : "void") + << std::endl; + + // 记录当前函数返回类型(用于 return 检查) + current_func_return_type_ = return_type; + current_func_has_return_ = false; + + table_.enterScope(); + if (ctx->funcFParams()) { // 处理参数 + CollectFunctionParams(ctx->funcFParams()); + } + if (ctx->block()) { // 处理函数体 + ctx->block()->accept(this); + } + std::cout << "[DEBUG] 函数 " << name + << " has_return: " << current_func_has_return_ + << " return_type_is_void: " << return_type->IsVoid() + << std::endl; + if (!return_type->IsVoid() && !current_func_has_return_) { // 检查非 void 函数是否有 return + throw std::runtime_error(FormatError("sema", "非 void 函数 " + name + " 缺少 return 语句")); + } + table_.exitScope(); + + current_func_return_type_ = nullptr; + current_func_has_return_ = false; + return {}; + } + + std::any visitBlock(SysYParser::BlockContext* ctx) override { + if (!ctx) { + throw std::runtime_error(FormatError("sema", "缺少语句块")); + } + table_.enterScope(); + for (auto* item : ctx->blockItem()) { // 处理所有 blockItem + if (item) { + item->accept(this); + // 如果已经有 return,可以继续(但 return 必须是最后一条) + // 注意:这里不需要跳出,因为 return 语句本身已经标记了 + } + } + table_.exitScope(); + return {}; + } + + std::any visitBlockItem(SysYParser::BlockItemContext* ctx) override { + if (!ctx) { + throw std::runtime_error(FormatError("sema", "暂不支持的语句或声明")); + } + if (ctx->decl()) { + ctx->decl()->accept(this); + return {}; + } + if (ctx->stmt()) { + ctx->stmt()->accept(this); + return {}; + } + throw std::runtime_error(FormatError("sema", "暂不支持的语句或声明")); + } + + std::any visitDecl(SysYParser::DeclContext* ctx) override { + if (!ctx) { + throw std::runtime_error(FormatError("sema", "非法变量声明")); + } + if (ctx->constDecl()) { + ctx->constDecl()->accept(this); + } else if (ctx->varDecl()) { + ctx->varDecl()->accept(this); + } + return {}; + } + + // ==================== 变量声明 ==================== + std::any visitVarDecl(SysYParser::VarDeclContext* ctx) override { + if (!ctx || !ctx->bType()) { + throw std::runtime_error(FormatError("sema", "非法变量声明")); + } + std::shared_ptr base_type = GetTypeFromBType(ctx->bType()); + bool is_global = (table_.currentScopeLevel() == 0); + for (auto* var_def : ctx->varDef()) { + if (var_def) { + CheckVarDef(var_def, base_type, is_global); + } + } + return {}; + } + + void CheckVarDef(SysYParser::VarDefContext* ctx, + std::shared_ptr base_type, + bool is_global) { + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("sema", "非法变量定义")); + } + std::string name = ctx->Ident()->getText(); + if (table_.lookupCurrent(name)) { // 检查重复定义 + throw std::runtime_error(FormatError("sema", "重复定义变量: " + name)); + } + // 确定类型(处理数组维度) + std::shared_ptr type = base_type; + std::vector dims; + bool is_array = !ctx->constExp().empty(); + // 调试输出 + std::cout << "[DEBUG] CheckVarDef: " << name + << " base_type: " << (base_type->IsInt32() ? "int" : base_type->IsFloat() ? "float" : "unknown") + << " is_array: " << is_array + << " dim_count: " << ctx->constExp().size() << std::endl; + if (is_array) { + // 处理数组维度 + for (auto* dim_exp : ctx->constExp()) { + // ========== 绑定维度表达式 ========== + dim_exp->addExp()->accept(this); // 触发常量绑定(如 N) + + int dim = table_.EvaluateConstExp(dim_exp); + if (dim <= 0) { + throw std::runtime_error(FormatError("sema", "数组维度必须为正整数")); + } + dims.push_back(dim); + std::cout << "[DEBUG] dim[" << dims.size() - 1 << "] = " << dim << std::endl; + } + // 创建数组类型 + type = ir::Type::GetArrayType(base_type, dims); + std::cout << "[DEBUG] 创建数组类型完成" << std::endl; + std::cout << "[DEBUG] type->IsArray(): " << type->IsArray() << std::endl; + std::cout << "[DEBUG] type->GetKind(): " << (int)type->GetKind() << std::endl; + // 验证数组类型 + if (type->IsArray()) { + auto* arr_type = dynamic_cast(type.get()); + if (arr_type) { + std::cout << "[DEBUG] ArrayType dimensions: "; + for (int d : arr_type->GetDimensions()) { + std::cout << d << " "; + } + std::cout << std::endl; + std::cout << "[DEBUG] Element type: " + << (arr_type->GetElementType()->IsInt32() ? "int" : + arr_type->GetElementType()->IsFloat() ? "float" : "unknown") + << std::endl; + } + } + } + bool has_init = (ctx->initVal() != nullptr); // 处理初始化 + if (is_global && has_init) { + CheckGlobalInitIsConst(ctx->initVal()); // 全局变量初始化必须是常量表达式 + } + // ========== 绑定初始化表达式 ========== + if (ctx->initVal()) { + BindInitVal(ctx->initVal()); + } + // 创建符号 + Symbol sym; + sym.name = name; + sym.kind = SymbolKind::Variable; + sym.type = type; + sym.scope_level = table_.currentScopeLevel(); + sym.is_initialized = has_init; + sym.var_def_ctx = ctx; + if (is_array) { + // 存储维度信息,但 param_types 通常用于函数参数 + // 数组变量的维度信息已经包含在 type 中 + sym.param_types.clear(); // 确保不混淆 + } + table_.addSymbol(sym); // 添加到符号表 + std::cout << "[DEBUG] 符号添加完成: " << name + << " type_kind: " << (int)sym.type->GetKind() + << " is_array: " << sym.type->IsArray() + << std::endl; + } + + void CheckConstDef(SysYParser::ConstDefContext* ctx, + std::shared_ptr base_type) { + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("sema", "非法常量定义")); + } + std::string name = ctx->Ident()->getText(); + if (table_.lookupCurrent(name)) { + throw std::runtime_error(FormatError("sema", "重复定义常量: " + name)); + } + + // 确定类型 + std::shared_ptr type = base_type; + std::vector dims; + bool is_array = !ctx->constExp().empty(); + std::cout << "[DEBUG] CheckConstDef: " << name + << " base_type: " << (base_type->IsInt32() ? "int" : base_type->IsFloat() ? "float" : "unknown") + << " is_array: " << is_array + << " dim_count: " << ctx->constExp().size() << std::endl; + + if (is_array) { + for (auto* dim_exp : ctx->constExp()) { + int dim = table_.EvaluateConstExp(dim_exp); + if (dim <= 0) { + throw std::runtime_error(FormatError("sema", "数组维度必须为正整数")); + } + dims.push_back(dim); + std::cout << "[DEBUG] dim[" << dims.size() - 1 << "] = " << dim << std::endl; + } + type = ir::Type::GetArrayType(base_type, dims); + std::cout << "[DEBUG] 创建数组类型完成,IsArray: " << type->IsArray() << std::endl; + } + + // ========== 绑定维度表达式 ========== + for (auto* dim_exp : ctx->constExp()) { + dim_exp->addExp()->accept(this); + } + + // 求值初始化器 + std::vector init_values; + if (ctx->constInitVal()) { + // ========== 绑定初始化表达式 ========== + BindConstInitVal(ctx->constInitVal()); + + init_values = table_.EvaluateConstInitVal(ctx->constInitVal(), dims, base_type); + std::cout << "[DEBUG] 初始化值数量: " << init_values.size() << std::endl; + } + + // 计算期望的元素数量 + size_t expected_count = 1; + if (is_array) { + expected_count = 1; + for (int d : dims) expected_count *= d; + std::cout << "[DEBUG] 期望元素数量: " << expected_count << std::endl; + } + + // 如果初始化值不足,补零 + if (is_array && init_values.size() < expected_count) { + std::cout << "[DEBUG] 初始化值不足,补零" << std::endl; + SymbolTable::ConstValue zero; + if (base_type->IsInt32()) { + zero.kind = SymbolTable::ConstValue::INT; + zero.int_val = 0; + } else { + zero.kind = SymbolTable::ConstValue::FLOAT; + zero.float_val = 0.0f; + } + init_values.resize(expected_count, zero); + } + + // 检查初始化值数量 + if (init_values.size() > expected_count) { + throw std::runtime_error(FormatError("sema", "初始化值过多")); + } + + // 创建符号 + Symbol sym; + sym.name = name; + sym.kind = SymbolKind::Constant; + std::cout << "CheckConstDef: before addSymbol, sym.kind = " << (int)sym.kind << std::endl; + sym.type = type; + sym.scope_level = table_.currentScopeLevel(); + sym.is_initialized = true; + sym.var_def_ctx = nullptr; + sym.const_def_ctx = ctx; + std::cout << "保存常量定义上下文: " << name << ", ctx: " << ctx << std::endl; + + // ========== 存储常量值 ========== + if (is_array) { + // 存储数组常量(扁平化存储) + sym.is_array_const = true; + sym.array_const_values.clear(); + + for (const auto& val : init_values) { + Symbol::ConstantValue cv; + if (val.kind == SymbolTable::ConstValue::INT) { + cv.i32 = val.int_val; + } else { + cv.f32 = val.float_val; + } + sym.array_const_values.push_back(cv); + } + + std::cout << "[DEBUG] 存储数组常量,共 " << sym.array_const_values.size() + << " 个元素" << std::endl; + + } else if (!init_values.empty()) { + // 存储标量常量 + if (base_type->IsInt32() && init_values[0].kind == SymbolTable::ConstValue::INT) { + sym.is_int_const = true; + sym.const_value.i32 = init_values[0].int_val; + std::cout << "[DEBUG] 存储整型常量: " << init_values[0].int_val << std::endl; + } else if (base_type->IsFloat() && init_values[0].kind == SymbolTable::ConstValue::FLOAT) { + sym.is_int_const = false; + sym.const_value.f32 = init_values[0].float_val; + std::cout << "[DEBUG] 存储浮点常量: " << init_values[0].float_val << std::endl; + } else if (base_type->IsInt32() && init_values[0].kind == SymbolTable::ConstValue::FLOAT) { + // 整型常量用浮点数初始化(需要检查是否为整数) + float f = init_values[0].float_val; + int i = static_cast(f); + if (std::abs(f - i) > 1e-6) { + throw std::runtime_error(FormatError("sema", + "整型常量不能用非整数值的浮点数初始化: " + std::to_string(f))); + } + sym.is_int_const = true; + sym.const_value.i32 = i; + std::cout << "[DEBUG] 浮点转整型常量: " << f << " -> " << i << std::endl; + } else if (base_type->IsFloat() && init_values[0].kind == SymbolTable::ConstValue::INT) { + // 浮点常量用整型初始化,隐式转换 + sym.is_int_const = false; + sym.const_value.f32 = static_cast(init_values[0].int_val); + std::cout << "[DEBUG] 整型转浮点常量: " << init_values[0].int_val + << " -> " << static_cast(init_values[0].int_val) << std::endl; + } + } else { + // 没有初始化值,对于标量常量这是错误的 + if (!is_array) { + throw std::runtime_error(FormatError("sema", "常量必须有初始化值: " + name)); + } + std::cout << "[DEBUG] 数组常量无初始化器,将全部补零" << std::endl; + } + + table_.addSymbol(sym); + std::cout << "CheckConstDef: after addSymbol, sym.kind = " << (int)sym.kind << std::endl; + auto* stored = table_.lookup(name); + std::cout << "CheckConstDef: after addSymbol, stored const_def_ctx = " << stored->const_def_ctx << std::endl; + + std::cout << "[DEBUG] 常量符号添加完成: " << name + << " is_array_const: " << sym.is_array_const + << " element_count: " << sym.array_const_values.size() << std::endl; +} + + // ==================== 常量声明 ==================== + std::any visitConstDecl(SysYParser::ConstDeclContext* ctx) override { + if (!ctx || !ctx->bType()) { + throw std::runtime_error(FormatError("sema", "非法常量声明")); + } + std::shared_ptr base_type = GetTypeFromBType(ctx->bType()); + for (auto* const_def : ctx->constDef()) { + if (const_def) { + CheckConstDef(const_def, base_type); + } + } + return {}; + } + + // ==================== 语句语义检查 ==================== + + // 处理所有语句 - 通过运行时类型判断 + std::any visitStmt(SysYParser::StmtContext* ctx) override { + if (!ctx) return {}; + // 调试输出 + std::cout << "[DEBUG] visitStmt: "; + if (ctx->Return()) std::cout << "Return "; + if (ctx->If()) std::cout << "If "; + if (ctx->While()) std::cout << "While "; + if (ctx->Break()) std::cout << "Break "; + if (ctx->Continue()) std::cout << "Continue "; + if (ctx->lVal() && ctx->Assign()) std::cout << "Assign "; + if (ctx->exp() && ctx->Semi()) std::cout << "ExpStmt "; + if (ctx->block()) std::cout << "Block "; + std::cout << std::endl; + // 判断语句类型 - 注意:Return() 返回的是 TerminalNode* + if (ctx->Return() != nullptr) { + // return 语句 + std::cout << "[DEBUG] 检测到 return 语句" << std::endl; + return visitReturnStmtInternal(ctx); + } else if (ctx->lVal() != nullptr && ctx->Assign() != nullptr) { + // 赋值语句 + return visitAssignStmt(ctx); + } else if (ctx->exp() != nullptr && ctx->Semi() != nullptr) { + // 表达式语句(可能有表达式) + return visitExpStmt(ctx); + } else if (ctx->block() != nullptr) { + // 块语句 + return ctx->block()->accept(this); + } else if (ctx->If() != nullptr) { + // if 语句 + return visitIfStmtInternal(ctx); + } else if (ctx->While() != nullptr) { + // while 语句 + return visitWhileStmtInternal(ctx); + } else if (ctx->Break() != nullptr) { + // break 语句 + return visitBreakStmtInternal(ctx); + } else if (ctx->Continue() != nullptr) { + // continue 语句 + return visitContinueStmtInternal(ctx); + } + return {}; + } + + // return 语句内部实现 + std::any visitReturnStmtInternal(SysYParser::StmtContext* ctx) { + std::cout << "[DEBUG] visitReturnStmtInternal 被调用" << std::endl; + std::shared_ptr expected = current_func_return_type_; + if (!expected) { + throw std::runtime_error(FormatError("sema", "return 语句不在函数体内")); + } + if (ctx->exp() != nullptr) { + // 有返回值的 return + std::cout << "[DEBUG] 有返回值的 return" << std::endl; + ExprInfo ret_val = CheckExp(ctx->exp()); + if (expected->IsVoid()) { + throw std::runtime_error(FormatError("sema", "void 函数不能返回值")); + } else if (!IsTypeCompatible(ret_val.type, expected)) { + throw std::runtime_error(FormatError("sema", "返回值类型不匹配")); + } + // 标记需要隐式转换 + if (ret_val.type != expected) { + sema_.AddConversion(ctx->exp(), ret_val.type, expected); + } + // 设置 has_return 标志 + current_func_has_return_ = true; + std::cout << "[DEBUG] 设置 current_func_has_return_ = true" << std::endl; + } else { + // 无返回值的 return + std::cout << "[DEBUG] 无返回值的 return" << std::endl; + if (!expected->IsVoid()) { + throw std::runtime_error(FormatError("sema", "非 void 函数必须返回值")); + } + // 设置 has_return 标志 + current_func_has_return_ = true; + std::cout << "[DEBUG] 设置 current_func_has_return_ = true" << std::endl; + } + return {}; + } + + // 左值表达式(变量引用) + std::any visitLVal(SysYParser::LValContext* ctx) override { + std::cout << "[DEBUG] visitLVal: " << ctx->getText() << std::endl; + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("sema", "非法变量引用")); + } + std::string name = ctx->Ident()->getText(); + auto* sym = table_.lookup(name); + if (!sym) { + throw std::runtime_error(FormatError("sema", "使用了未定义的变量: " + name)); + } + // 检查数组访问 + bool is_array_access = !ctx->exp().empty(); + std::cout << "[DEBUG] name: " << name + << ", is_array_access: " << is_array_access + << ", subscript_count: " << ctx->exp().size() << std::endl; + ExprInfo result; + // 判断是否为数组类型或指针类型(数组参数) + bool is_array_or_ptr = false; + if (sym->type) { + is_array_or_ptr = sym->type->IsArray() || sym->type->IsPtrInt32() || sym->type->IsPtrFloat(); + std::cout << "[DEBUG] type_kind: " << (int)sym->type->GetKind() + << ", is_array: " << sym->type->IsArray() + << ", is_ptr: " << (sym->type->IsPtrInt32() || sym->type->IsPtrFloat()) << std::endl; + } + + if (is_array_or_ptr) { + // 获取维度信息 + size_t dim_count = 0; + std::shared_ptr elem_type = sym->type; + if (sym->type->IsArray()) { + if (auto* arr_type = dynamic_cast(sym->type.get())) { + dim_count = arr_type->GetDimensions().size(); + elem_type = arr_type->GetElementType(); + std::cout << "[DEBUG] 数组维度: " << dim_count << std::endl; + } + } else if (sym->type->IsPtrInt32() || sym->type->IsPtrFloat()) { + dim_count = 1; + if (sym->type->IsPtrInt32()) { + elem_type = ir::Type::GetInt32Type(); + } else if (sym->type->IsPtrFloat()) { + elem_type = ir::Type::GetFloatType(); + } + std::cout << "[DEBUG] 指针类型, dim_count: 1" << std::endl; + } + + if (is_array_access) { + std::cout << "[DEBUG] 有下标访问,期望维度: " << dim_count + << ", 实际下标数: " << ctx->exp().size() << std::endl; + if (ctx->exp().size() != dim_count) { + throw std::runtime_error(FormatError("sema", "数组下标个数不匹配")); + } + for (auto* idx_exp : ctx->exp()) { + ExprInfo idx = CheckExp(idx_exp); + if (!idx.type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "数组下标必须是 int 类型")); + } + } + result.type = elem_type; + result.is_lvalue = true; + result.is_const = false; + } else { + std::cout << "[DEBUG] 无下标访问" << std::endl; + if (sym->type->IsArray()) { + std::cout << "[DEBUG] 数组名作为地址,转换为指针" << std::endl; + if (auto* arr_type = dynamic_cast(sym->type.get())) { + if (arr_type->GetElementType()->IsInt32()) { + result.type = ir::Type::GetPtrInt32Type(); + } else if (arr_type->GetElementType()->IsFloat()) { + result.type = ir::Type::GetPtrFloatType(); + } else { + result.type = ir::Type::GetPtrInt32Type(); + } + } else { + result.type = ir::Type::GetPtrInt32Type(); + } + result.is_lvalue = false; + result.is_const = true; + } else { + result.type = sym->type; + result.is_lvalue = true; + result.is_const = (sym->kind == SymbolKind::Constant); + } + } + } else { + if (is_array_access) { + throw std::runtime_error(FormatError("sema", "非数组变量不能使用下标: " + name)); + } + result.type = sym->type; + result.is_lvalue = true; + result.is_const = (sym->kind == SymbolKind::Constant); + if (result.is_const && sym->type && !sym->type->IsArray()) { + if (sym->is_int_const) { + result.is_const_int = true; + result.const_int_value = sym->const_value.i32; + } else { + result.const_float_value = sym->const_value.f32; + } + } + } + sema_.SetExprType(ctx, result); + return {}; + } + + // if 语句内部实现 + std::any visitIfStmtInternal(SysYParser::StmtContext* ctx) { + // 检查条件表达式 + if (ctx->cond()) { + ExprInfo cond = CheckCond(ctx->cond()); // CheckCond 已经处理了类型转换 + // 不需要额外检查,因为 CheckCond 已经确保类型正确 + } + // 处理 then 分支 + if (ctx->stmt().size() > 0) { + ctx->stmt()[0]->accept(this); + } + // 处理 else 分支 + if (ctx->stmt().size() > 1) { + ctx->stmt()[1]->accept(this); + } + return {}; + } + + // while 语句内部实现 + std::any visitWhileStmtInternal(SysYParser::StmtContext* ctx) { + if (ctx->cond()) { + ExprInfo cond = CheckCond(ctx->cond()); // CheckCond 已经处理了类型转换 + // 不需要额外检查 + } + loop_stack_.push_back({true, ctx}); + if (ctx->stmt().size() > 0) { + ctx->stmt()[0]->accept(this); + } + loop_stack_.pop_back(); + return {}; + } + + // break 语句内部实现 + std::any visitBreakStmtInternal(SysYParser::StmtContext* ctx) { + if (loop_stack_.empty() || !loop_stack_.back().in_loop) { + throw std::runtime_error(FormatError("sema", "break 语句必须在循环体内使用")); + } + return {}; + } + + // continue 语句内部实现 + std::any visitContinueStmtInternal(SysYParser::StmtContext* ctx) { + if (loop_stack_.empty() || !loop_stack_.back().in_loop) { + throw std::runtime_error(FormatError("sema", "continue 语句必须在循环体内使用")); + } + return {}; + } + + // 赋值语句内部实现 + std::any visitAssignStmt(SysYParser::StmtContext* ctx) { + if (!ctx->lVal() || !ctx->exp()) { + throw std::runtime_error(FormatError("sema", "非法赋值语句")); + } + ExprInfo lvalue = CheckLValue(ctx->lVal()); // 检查左值 + if (lvalue.is_const) { + throw std::runtime_error(FormatError("sema", "不能给常量赋值")); + } + if (!lvalue.is_lvalue) { + throw std::runtime_error(FormatError("sema", "赋值左边必须是左值")); + } + ExprInfo rvalue = CheckExp(ctx->exp()); // 检查右值 + if (!IsTypeCompatible(rvalue.type, lvalue.type)) { + throw std::runtime_error(FormatError("sema", "赋值类型不匹配")); + } + if (rvalue.type != lvalue.type) { // 标记需要隐式转换 + sema_.AddConversion(ctx->exp(), rvalue.type, lvalue.type); + } + return {}; + } + + // 表达式语句内部实现 + std::any visitExpStmt(SysYParser::StmtContext* ctx) { + if (ctx->exp()) { + CheckExp(ctx->exp()); + } + return {}; + } + + // ==================== 表达式类型推导 ==================== + + // 主表达式 + std::any visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) override { + std::cout << "[DEBUG] visitPrimaryExp: " << ctx->getText() << std::endl; + ExprInfo result; + if (ctx->lVal()) { // 左值表达式 + result = CheckLValue(ctx->lVal()); + result.is_lvalue = true; + } else if (ctx->HEX_FLOAT() || ctx->DEC_FLOAT()) { // 浮点字面量 + result.type = ir::Type::GetFloatType(); + result.is_const = true; + result.is_const_int = false; + std::string text; + if (ctx->HEX_FLOAT()) text = ctx->HEX_FLOAT()->getText(); + else text = ctx->DEC_FLOAT()->getText(); + result.const_float_value = std::stof(text); + } else if (ctx->HEX_INT() || ctx->OCTAL_INT() || ctx->DECIMAL_INT() || ctx->ZERO()) { // 整数字面量 + result.type = ir::Type::GetInt32Type(); + result.is_const = true; + result.is_const_int = true; + std::string text; + if (ctx->HEX_INT()) text = ctx->HEX_INT()->getText(); + else if (ctx->OCTAL_INT()) text = ctx->OCTAL_INT()->getText(); + else if (ctx->DECIMAL_INT()) text = ctx->DECIMAL_INT()->getText(); + else text = ctx->ZERO()->getText(); + result.const_int_value = std::stoi(text, nullptr, 0); + } else if (ctx->exp()) { // 括号表达式 + result = CheckExp(ctx->exp()); + } + sema_.SetExprType(ctx, result); + return {}; + } + + // 一元表达式 + std::any visitUnaryExp(SysYParser::UnaryExpContext* ctx) override { + std::cout << "[DEBUG] visitUnaryExp: " << ctx->getText() << std::endl; + ExprInfo result; + if (ctx->primaryExp()) { + ctx->primaryExp()->accept(this); + auto* info = sema_.GetExprType(ctx->primaryExp()); + if (info) result = *info; + } else if (ctx->Ident() && ctx->L_PAREN()) { // 函数调用 + std::cout << "[DEBUG] 函数调用: " << ctx->Ident()->getText() << std::endl; + result = CheckFuncCall(ctx); + } else if (ctx->unaryOp()) { // 一元运算 + ctx->unaryExp()->accept(this); + auto* operand = sema_.GetExprType(ctx->unaryExp()); + if (!operand) { + throw std::runtime_error(FormatError("sema", "一元操作数类型推导失败")); + result.type = ir::Type::GetInt32Type(); + } else { + std::string op = ctx->unaryOp()->getText(); + if (op == "!") { + // 逻辑非:要求操作数是 int 类型,或者可以转换为 int 的 float + if (operand->type->IsInt32()) { + // 已经是 int,没问题 + } else if (operand->type->IsFloat()) { + // float 可以隐式转换为 int + sema_.AddConversion(ctx->unaryExp(), operand->type, ir::Type::GetInt32Type()); + // 更新操作数类型为 int + operand->type = ir::Type::GetInt32Type(); + operand->is_const_int = true; + if (operand->is_const && !operand->is_const_int) { + // 如果原来是 float 常量,转换为 int 常量 + operand->const_int_value = (int)operand->const_float_value; + operand->is_const_int = true; + } + } else { + throw std::runtime_error(FormatError("sema", "逻辑非操作数必须是 int 类型或可以转换为 int 的 float 类型")); + } + result.type = ir::Type::GetInt32Type(); + result.is_lvalue = false; + result.is_const = operand->is_const; + if (operand->is_const && operand->is_const_int) { + result.is_const_int = true; + result.const_int_value = (operand->const_int_value == 0) ? 1 : 0; + } + } else { + // 正负号 + if (!operand->type->IsInt32() && !operand->type->IsFloat()) { + throw std::runtime_error(FormatError("sema", "正负号操作数必须是算术类型")); + } + result.type = operand->type; + result.is_lvalue = false; + result.is_const = operand->is_const; + if (op == "-" && operand->is_const) { + if (operand->type->IsInt32() && operand->is_const_int) { + result.is_const_int = true; + result.const_int_value = -operand->const_int_value; + } else if (operand->type->IsFloat()) { + result.const_float_value = -operand->const_float_value; + } + } + } + } + } + sema_.SetExprType(ctx, result); + return {}; + } + + // 乘除模表达式 + std::any visitMulExp(SysYParser::MulExpContext* ctx) override { + ExprInfo result; + if (ctx->mulExp()) { + ctx->mulExp()->accept(this); + ctx->unaryExp()->accept(this); + auto* left_info = sema_.GetExprType(ctx->mulExp()); + auto* right_info = sema_.GetExprType(ctx->unaryExp()); + if (!left_info || !right_info) { + throw std::runtime_error(FormatError("sema", "乘除模操作数类型推导失败")); + result.type = ir::Type::GetInt32Type(); + } else { + std::string op; + if (ctx->MulOp()) { + op = "*"; + } else if (ctx->DivOp()) { + op = "/"; + } else if (ctx->QuoOp()) { + op = "%"; + } + result = CheckBinaryOp(left_info, right_info, op, ctx); + } + } else { + ctx->unaryExp()->accept(this); + auto* info = sema_.GetExprType(ctx->unaryExp()); + if (info) { + sema_.SetExprType(ctx, *info); + } + return {}; + } + sema_.SetExprType(ctx, result); + return {}; + } + + // 加减表达式 + std::any visitAddExp(SysYParser::AddExpContext* ctx) override { + ExprInfo result; + if (ctx->addExp()) { + ctx->addExp()->accept(this); + ctx->mulExp()->accept(this); + auto* left_info = sema_.GetExprType(ctx->addExp()); + auto* right_info = sema_.GetExprType(ctx->mulExp()); + if (!left_info || !right_info) { + throw std::runtime_error(FormatError("sema", "加减操作数类型推导失败")); + result.type = ir::Type::GetInt32Type(); + } else { + std::string op; + if (ctx->AddOp()) { + op = "+"; + } else if (ctx->SubOp()) { + op = "-"; + } + result = CheckBinaryOp(left_info, right_info, op, ctx); + } + } else { + ctx->mulExp()->accept(this); + auto* info = sema_.GetExprType(ctx->mulExp()); + if (info) { + sema_.SetExprType(ctx, *info); + } + return {}; + } + sema_.SetExprType(ctx, result); + return {}; + } + + // 关系表达式 + std::any visitRelExp(SysYParser::RelExpContext* ctx) override { + ExprInfo result; + if (ctx->relExp()) { + ctx->relExp()->accept(this); + ctx->addExp()->accept(this); + auto* left_info = sema_.GetExprType(ctx->relExp()); + auto* right_info = sema_.GetExprType(ctx->addExp()); + if (!left_info || !right_info) { + throw std::runtime_error(FormatError("sema", "关系操作数类型推导失败")); + } else { + if (!left_info->type->IsInt32() && !left_info->type->IsFloat()) { + throw std::runtime_error(FormatError("sema", "关系运算操作数必须是算术类型")); + } + std::string op; + if (ctx->LOp()) { + op = "<"; + } else if (ctx->GOp()) { + op = ">"; + } else if (ctx->LeOp()) { + op = "<="; + } else if (ctx->GeOp()) { + op = ">="; + } + result.type = ir::Type::GetInt32Type(); + result.is_lvalue = false; + if (left_info->is_const && right_info->is_const) { + result.is_const = true; + result.is_const_int = true; + float l = GetFloatValue(*left_info); + float r = GetFloatValue(*right_info); + if (op == "<") result.const_int_value = (l < r) ? 1 : 0; + else if (op == ">") result.const_int_value = (l > r) ? 1 : 0; + else if (op == "<=") result.const_int_value = (l <= r) ? 1 : 0; + else if (op == ">=") result.const_int_value = (l >= r) ? 1 : 0; + } + } + } else { + ctx->addExp()->accept(this); + auto* info = sema_.GetExprType(ctx->addExp()); + if (info) { + sema_.SetExprType(ctx, *info); + } + return {}; + } + sema_.SetExprType(ctx, result); + return {}; + } + + // 相等性表达式 + std::any visitEqExp(SysYParser::EqExpContext* ctx) override { + ExprInfo result; + if (ctx->eqExp()) { + ctx->eqExp()->accept(this); + ctx->relExp()->accept(this); + auto* left_info = sema_.GetExprType(ctx->eqExp()); + auto* right_info = sema_.GetExprType(ctx->relExp()); + if (!left_info || !right_info) { + throw std::runtime_error(FormatError("sema", "相等性操作数类型推导失败")); + } else { + std::string op; + if (ctx->EqOp()) { + op = "=="; + } else if (ctx->NeOp()) { + op = "!="; + } + result.type = ir::Type::GetInt32Type(); + result.is_lvalue = false; + if (left_info->is_const && right_info->is_const) { + result.is_const = true; + result.is_const_int = true; + float l = GetFloatValue(*left_info); + float r = GetFloatValue(*right_info); + if (op == "==") result.const_int_value = (l == r) ? 1 : 0; + else if (op == "!=") result.const_int_value = (l != r) ? 1 : 0; + } + } + } else { + ctx->relExp()->accept(this); + auto* info = sema_.GetExprType(ctx->relExp()); + if (info) { + sema_.SetExprType(ctx, *info); + } + return {}; + } + sema_.SetExprType(ctx, result); + return {}; + } + + // 逻辑与表达式 + std::any visitLAndExp(SysYParser::LAndExpContext* ctx) override { + ExprInfo result; + if (ctx->lAndExp()) { + ctx->lAndExp()->accept(this); + ctx->eqExp()->accept(this); + auto* left_info = sema_.GetExprType(ctx->lAndExp()); + auto* right_info = sema_.GetExprType(ctx->eqExp()); + if (!left_info || !right_info) { + throw std::runtime_error(FormatError("sema", "逻辑与操作数类型推导失败")); + } else { + // 处理左操作数 + if (left_info->type->IsInt32()) { + // 已经是 int,没问题 + } else if (left_info->type->IsFloat()) { + // float 可以隐式转换为 int + sema_.AddConversion(ctx->lAndExp(), left_info->type, ir::Type::GetInt32Type()); + left_info->type = ir::Type::GetInt32Type(); + if (left_info->is_const && !left_info->is_const_int) { + left_info->const_int_value = (int)left_info->const_float_value; + left_info->is_const_int = true; + } + } else { + throw std::runtime_error(FormatError("sema", "逻辑与左操作数必须是 int 类型或可以转换为 int 的 float 类型")); + } + + // 处理右操作数 + if (right_info->type->IsInt32()) { + // 已经是 int,没问题 + } else if (right_info->type->IsFloat()) { + // float 可以隐式转换为 int + sema_.AddConversion(ctx->eqExp(), right_info->type, ir::Type::GetInt32Type()); + right_info->type = ir::Type::GetInt32Type(); + if (right_info->is_const && !right_info->is_const_int) { + right_info->const_int_value = (int)right_info->const_float_value; + right_info->is_const_int = true; + } + } else { + throw std::runtime_error(FormatError("sema", "逻辑与右操作数必须是 int 类型或可以转换为 int 的 float 类型")); + } + + result.type = ir::Type::GetInt32Type(); + result.is_lvalue = false; + if (left_info->is_const && right_info->is_const && + left_info->is_const_int && right_info->is_const_int) { + result.is_const = true; + result.is_const_int = true; + result.const_int_value = + (left_info->const_int_value && right_info->const_int_value) ? 1 : 0; + } + } + } else { + ctx->eqExp()->accept(this); + auto* info = sema_.GetExprType(ctx->eqExp()); + if (info) { + // 对于单个操作数,也需要确保类型是 int(用于条件表达式) + if (info->type->IsFloat()) { + sema_.AddConversion(ctx->eqExp(), info->type, ir::Type::GetInt32Type()); + info->type = ir::Type::GetInt32Type(); + if (info->is_const && !info->is_const_int) { + info->const_int_value = (int)info->const_float_value; + info->is_const_int = true; + } + } else if (!info->type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "逻辑与操作数必须是 int 类型或可以转换为 int 的 float 类型")); + } + sema_.SetExprType(ctx, *info); + } + return {}; + } + sema_.SetExprType(ctx, result); + return {}; + } + + // 逻辑或表达式 + std::any visitLOrExp(SysYParser::LOrExpContext* ctx) override { + ExprInfo result; + if (ctx->lOrExp()) { + ctx->lOrExp()->accept(this); + ctx->lAndExp()->accept(this); + auto* left_info = sema_.GetExprType(ctx->lOrExp()); + auto* right_info = sema_.GetExprType(ctx->lAndExp()); + if (!left_info || !right_info) { + throw std::runtime_error(FormatError("sema", "逻辑或操作数类型推导失败")); + } else { + // 处理左操作数 + if (left_info->type->IsInt32()) { + // 已经是 int,没问题 + } else if (left_info->type->IsFloat()) { + // float 可以隐式转换为 int + sema_.AddConversion(ctx->lOrExp(), left_info->type, ir::Type::GetInt32Type()); + left_info->type = ir::Type::GetInt32Type(); + if (left_info->is_const && !left_info->is_const_int) { + left_info->const_int_value = (int)left_info->const_float_value; + left_info->is_const_int = true; + } + } else { + throw std::runtime_error(FormatError("sema", "逻辑或左操作数必须是 int 类型或可以转换为 int 的 float 类型")); + } + + // 处理右操作数 + if (right_info->type->IsInt32()) { + // 已经是 int,没问题 + } else if (right_info->type->IsFloat()) { + // float 可以隐式转换为 int + sema_.AddConversion(ctx->lAndExp(), right_info->type, ir::Type::GetInt32Type()); + right_info->type = ir::Type::GetInt32Type(); + if (right_info->is_const && !right_info->is_const_int) { + right_info->const_int_value = (int)right_info->const_float_value; + right_info->is_const_int = true; + } + } else { + throw std::runtime_error(FormatError("sema", "逻辑或右操作数必须是 int 类型或可以转换为 int 的 float 类型")); + } + + result.type = ir::Type::GetInt32Type(); + result.is_lvalue = false; + if (left_info->is_const && right_info->is_const && + left_info->is_const_int && right_info->is_const_int) { + result.is_const = true; + result.is_const_int = true; + result.const_int_value = + (left_info->const_int_value || right_info->const_int_value) ? 1 : 0; + } + } + } else { + ctx->lAndExp()->accept(this); + auto* info = sema_.GetExprType(ctx->lAndExp()); + if (info) { + // 对于单个操作数,也需要确保类型是 int(用于条件表达式) + if (info->type->IsFloat()) { + sema_.AddConversion(ctx->lAndExp(), info->type, ir::Type::GetInt32Type()); + info->type = ir::Type::GetInt32Type(); + if (info->is_const && !info->is_const_int) { + info->const_int_value = (int)info->const_float_value; + info->is_const_int = true; + } + } else if (!info->type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "逻辑或操作数必须是 int 类型或可以转换为 int 的 float 类型")); + } + sema_.SetExprType(ctx, *info); + } + return {}; + } + sema_.SetExprType(ctx, result); + return {}; + } + // 新增:获取符号表 + SymbolTable TakeSymbolTable() { return std::move(table_); } + SemanticContext TakeSemanticContext() { return std::move(sema_); } + + // 新增:同时返回两者 + SemaResult TakeResult() { + std::cerr << "[DEBUG] TakeResult 前: 符号表作用域数量 = " + << table_.getScopeCount() << std::endl; + + // 可选:打印符号表内容 + // table_.dump(); + + SemaResult result; + result.context = std::move(sema_); + result.symbol_table = std::move(table_); + + std::cerr << "[DEBUG] TakeResult 后: 符号表作用域数量 = " + << result.symbol_table.getScopeCount() << std::endl; + return result; + } + + +private: + SymbolTable table_; + SemanticContext sema_; + struct LoopContext { + bool in_loop; + antlr4::ParserRuleContext* loop_node; + }; + std::vector loop_stack_; + std::shared_ptr current_func_return_type_ = nullptr; + bool current_func_has_return_ = false; + + // ==================== 辅助函数 ==================== + ExprInfo CheckExp(SysYParser::ExpContext* ctx) { + if (!ctx || !ctx->addExp()) { + throw std::runtime_error(FormatError("sema", "无效表达式")); + } + std::cout << "[DEBUG] CheckExp: " << ctx->getText() << std::endl; + ctx->addExp()->accept(this); + auto* info = sema_.GetExprType(ctx->addExp()); + if (!info) { + throw std::runtime_error(FormatError("sema", "表达式类型推导失败")); + } + ExprInfo result = *info; + sema_.SetExprType(ctx, result); + return result; + } + + // 专门用于检查 AddExp 的辅助函数(用于常量表达式) + ExprInfo CheckAddExp(SysYParser::AddExpContext* ctx) { + if (!ctx) { + throw std::runtime_error(FormatError("sema", "无效表达式")); + } + ctx->accept(this); + auto* info = sema_.GetExprType(ctx); + if (!info) { + throw std::runtime_error(FormatError("sema", "表达式类型推导失败")); + } + return *info; + } + + ExprInfo CheckCond(SysYParser::CondContext* ctx) { + if (!ctx || !ctx->lOrExp()) { + throw std::runtime_error(FormatError("sema", "无效条件表达式")); + } + ctx->lOrExp()->accept(this); + auto* info = sema_.GetExprType(ctx->lOrExp()); + if (!info) { + throw std::runtime_error(FormatError("sema", "条件表达式类型推导失败")); + } + ExprInfo result = *info; + // 条件表达式的结果必须是 int,如果是 float 则需要转换 + // 注意:lOrExp 已经处理了类型转换,这里只是再检查一次 + if (!result.type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "条件表达式必须是 int 类型")); + } + return result; + } + + ExprInfo CheckLValue(SysYParser::LValContext* ctx) { + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("sema", "非法左值")); + } + std::string name = ctx->Ident()->getText(); + auto* sym = table_.lookup(name); + if (!sym) { + throw std::runtime_error(FormatError("sema", "未定义的变量: " + name)); + } + std::cout << "CheckLValue: found sym->name = " << sym->name + << ", sym->kind = " << (int)sym->kind << std::endl; + + if (sym->kind == SymbolKind::Variable && sym->var_def_ctx) { + sema_.BindVarUse(ctx, sym->var_def_ctx); + std::cout << "绑定变量: " << name << " -> VarDefContext" << std::endl; + } + else if (sym->kind == SymbolKind::Constant && sym->const_def_ctx) { + sema_.BindConstUse(ctx, sym->const_def_ctx); + std::cout << "绑定常量: " << name << " -> ConstDefContext" << std::endl; + } + std::cout << "CheckLValue 绑定变量: " << name + << ", sym->kind: " << (int)sym->kind + << ", sym->var_def_ctx: " << sym->var_def_ctx + << ", sym->const_def_ctx: " << sym->const_def_ctx << std::endl; + + bool is_array_access = !ctx->exp().empty(); + bool is_const = (sym->kind == SymbolKind::Constant); + + size_t dim_count = 0; + std::shared_ptr elem_type = sym->type; + std::vector dims; + + // 获取维度信息 + if (sym->type && sym->type->IsArray()) { + if (auto* arr_type = dynamic_cast(sym->type.get())) { + dims = arr_type->GetDimensions(); + dim_count = dims.size(); + // 计算元素类型(递归获取最内层元素类型) + std::shared_ptr t = sym->type; + while (t->IsArray()) { + auto* arr_t = dynamic_cast(t.get()); + t = arr_t->GetElementType(); + } + elem_type = t; + } + } else if (sym->is_array_param) { + // 数组参数,使用保存的维度信息 + dims = sym->array_dims; + dim_count = dims.size(); + // 元素类型是基本类型 + if (sym->type->IsPtrInt32()) { + elem_type = ir::Type::GetInt32Type(); + } else if (sym->type->IsPtrFloat()) { + elem_type = ir::Type::GetFloatType(); + } + std::cout << "数组参数维度: " << dim_count << " 维, dims: "; + for (int d : dims) std::cout << d << " "; + std::cout << std::endl; + } else if (sym->type && (sym->type->IsPtrInt32() || sym->type->IsPtrFloat())) { + // 普通指针,只能有一个下标 + dim_count = 1; + if (sym->type->IsPtrInt32()) { + elem_type = ir::Type::GetInt32Type(); + } else if (sym->type->IsPtrFloat()) { + elem_type = ir::Type::GetFloatType(); + } + } + + size_t subscript_count = ctx->exp().size(); + + std::cout << "dim_count: " << dim_count << ", subscript_count: " << subscript_count << std::endl; + + if (dim_count > 0 || sym->is_array_param || sym->type->IsArray() || + sym->type->IsPtrInt32() || sym->type->IsPtrFloat()) { + if (subscript_count > 0) { + // 有下标访问 + // 对于数组参数,第一维是省略的(0),但实际可以访问 + // 我们需要检查提供的下标个数是否超过实际维度个数 + if (subscript_count > dim_count) { + throw std::runtime_error(FormatError("sema", "数组下标个数过多")); + } + // 检查每个下标表达式 + for (auto* idx_exp : ctx->exp()) { + ExprInfo idx = CheckExp(idx_exp); + if (!idx.type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "数组下标必须是 int 类型")); + } + } + + if (subscript_count == dim_count) { + // 完全索引,返回元素类型 + std::cout << "完全索引,返回元素类型" << std::endl; + return {elem_type, true, false}; + } else { + // 部分索引,返回子数组的指针类型 + std::cout << "部分索引,返回指针类型" << std::endl; + // 计算剩余维度的指针类型 + if (elem_type->IsInt32()) { + return {ir::Type::GetPtrInt32Type(), false, false}; + } else if (elem_type->IsFloat()) { + return {ir::Type::GetPtrFloatType(), false, false}; + } else { + return {ir::Type::GetPtrInt32Type(), false, false}; + } + } + } else { + // 没有下标访问 + if (sym->type && sym->type->IsArray()) { + // 数组名作为地址 + std::cout << "数组名作为地址" << std::endl; + if (auto* arr_type = dynamic_cast(sym->type.get())) { + if (arr_type->GetElementType()->IsInt32()) { + return {ir::Type::GetPtrInt32Type(), false, true}; + } else if (arr_type->GetElementType()->IsFloat()) { + return {ir::Type::GetPtrFloatType(), false, true}; + } + } + return {ir::Type::GetPtrInt32Type(), false, true}; + } else if (sym->is_array_param) { + // 数组参数名作为地址 + std::cout << "数组参数名作为地址" << std::endl; + if (sym->type->IsPtrInt32()) { + return {ir::Type::GetPtrInt32Type(), false, true}; + } else { + return {ir::Type::GetPtrFloatType(), false, true}; + } + } else { + // 普通变量或指针 + return {sym->type, true, is_const}; + } + } + } else { + if (subscript_count > 0) { + throw std::runtime_error(FormatError("sema", "非数组变量不能使用下标: " + name)); + } + return {sym->type, true, is_const}; + } + } + + ExprInfo CheckFuncCall(SysYParser::UnaryExpContext* ctx) { + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("sema", "非法函数调用")); + } + std::string func_name = ctx->Ident()->getText(); + std::cout << "[DEBUG] CheckFuncCall: " << func_name << std::endl; + auto* func_sym = table_.lookup(func_name); + if (!func_sym || func_sym->kind != SymbolKind::Function) { + throw std::runtime_error(FormatError("sema", "未定义的函数: " + func_name)); + } + std::vector args; + if (ctx->funcRParams()) { + std::cout << "[DEBUG] 处理函数调用参数:" << std::endl; + for (auto* exp : ctx->funcRParams()->exp()) { + if (exp) { + args.push_back(CheckExp(exp)); + } + } + } + if (args.size() != func_sym->param_types.size()) { + throw std::runtime_error(FormatError("sema", "参数个数不匹配")); + } + for (size_t i = 0; i < std::min(args.size(), func_sym->param_types.size()); ++i) { + std::cout << "[DEBUG] 检查参数 " << i << ": 实参类型 " << (int)args[i].type->GetKind() + << " 形参类型 " << (int)func_sym->param_types[i]->GetKind() << std::endl; + if (!IsTypeCompatible(args[i].type, func_sym->param_types[i])) { + throw std::runtime_error(FormatError("sema", "参数类型不匹配")); + } + if (args[i].type != func_sym->param_types[i] && ctx->funcRParams() && + i < ctx->funcRParams()->exp().size()) { + sema_.AddConversion(ctx->funcRParams()->exp()[i], + args[i].type, func_sym->param_types[i]); + } + } + std::shared_ptr return_type; + if (func_sym->type && func_sym->type->IsFunction()) { + auto* func_type = dynamic_cast(func_sym->type.get()); + if (func_type) { + return_type = func_type->GetReturnType(); + } + } + if (!return_type) { + return_type = ir::Type::GetInt32Type(); + } + ExprInfo result; + result.type = return_type; + result.is_lvalue = false; + result.is_const = false; + return result; + } + + ExprInfo CheckBinaryOp(const ExprInfo* left, const ExprInfo* right, + const std::string& op, antlr4::ParserRuleContext* ctx) { + ExprInfo result; + if (!left->type->IsInt32() && !left->type->IsFloat()) { + throw std::runtime_error(FormatError("sema", "左操作数必须是算术类型")); + } + if (!right->type->IsInt32() && !right->type->IsFloat()) { + throw std::runtime_error(FormatError("sema", "右操作数必须是算术类型")); + } + if (op == "%" && (!left->type->IsInt32() || !right->type->IsInt32())) { + throw std::runtime_error(FormatError("sema", "取模运算要求操作数为 int 类型")); + } + if (left->type->IsFloat() || right->type->IsFloat()) { + result.type = ir::Type::GetFloatType(); + } else { + result.type = ir::Type::GetInt32Type(); + } + result.is_lvalue = false; + if (left->is_const && right->is_const) { + result.is_const = true; + float l = GetFloatValue(*left); + float r = GetFloatValue(*right); + if (result.type->IsInt32()) { + result.is_const_int = true; + int li = (int)l, ri = (int)r; + if (op == "*") result.const_int_value = li * ri; + else if (op == "/") result.const_int_value = li / ri; + else if (op == "%") result.const_int_value = li % ri; + else if (op == "+") result.const_int_value = li + ri; + else if (op == "-") result.const_int_value = li - ri; + } else { + if (op == "*") result.const_float_value = l * r; + else if (op == "/") result.const_float_value = l / r; + else if (op == "+") result.const_float_value = l + r; + else if (op == "-") result.const_float_value = l - r; + } + } + return result; + } + + float GetFloatValue(const ExprInfo& info) { + if (info.type->IsInt32() && info.is_const_int) { + return (float)info.const_int_value; + } else { + return info.const_float_value; + } + } + + bool IsTypeCompatible(std::shared_ptr src, std::shared_ptr dst) { + if (src == dst) return true; + if (src->IsInt32() && dst->IsFloat()) return true; + if (src->IsFloat() && dst->IsInt32()) return true; + return false; + } + + void CollectFunctionDeclaration(SysYParser::FuncDefContext* ctx) { + if (!ctx || !ctx->Ident()) return; + std::string name = ctx->Ident()->getText(); + if (table_.lookup(name)) return; + std::shared_ptr ret_type; + if (ctx->funcType()) { + if (ctx->funcType()->Void()) { + ret_type = ir::Type::GetVoidType(); + } else if (ctx->funcType()->Int()) { + ret_type = ir::Type::GetInt32Type(); + } else if (ctx->funcType()->Float()) { + ret_type = ir::Type::GetFloatType(); + } + } + if (!ret_type) ret_type = ir::Type::GetInt32Type(); + std::vector> param_types; + if (ctx->funcFParams()) { + for (auto* param : ctx->funcFParams()->funcFParam()) { + if (!param) continue; + std::shared_ptr param_type; + if (param->bType()) { + if (param->bType()->Int()) { + param_type = ir::Type::GetInt32Type(); + } else if (param->bType()->Float()) { + param_type = ir::Type::GetFloatType(); + } + } + if (!param_type) param_type = ir::Type::GetInt32Type(); + if (!param->L_BRACK().empty()) { + if (param_type->IsInt32()) { + param_type = ir::Type::GetPtrInt32Type(); + } else if (param_type->IsFloat()) { + param_type = ir::Type::GetPtrFloatType(); + } + } + param_types.push_back(param_type); + } + } + + // 创建函数类型 + std::shared_ptr func_type = ir::Type::GetFunctionType(ret_type, param_types); + + // 创建函数符号 + Symbol sym; + sym.name = name; + sym.kind = SymbolKind::Function; + sym.type = func_type; + sym.param_types = param_types; + sym.scope_level = 0; + sym.is_initialized = true; + sym.func_def_ctx = ctx; + + table_.addSymbol(sym); } - const std::string name = ctx->ID()->getText(); - auto* decl = table_.Lookup(name); - if (!decl) { - throw std::runtime_error(FormatError("sema", "使用了未定义的变量: " + name)); - } - sema_.BindVarUse(ctx, decl); - return {}; - } - - SemanticContext TakeSemanticContext() { return std::move(sema_); } - private: - SymbolTable table_; - SemanticContext sema_; - bool seen_return_ = false; - size_t current_item_index_ = 0; - size_t total_items_ = 0; + void CollectFunctionParams(SysYParser::FuncFParamsContext* ctx) { + if (!ctx) return; + for (auto* param : ctx->funcFParam()) { + if (!param || !param->Ident()) continue; + std::string name = param->Ident()->getText(); + if (table_.lookupCurrent(name)) { + throw std::runtime_error(FormatError("sema", "重复定义参数: " + name)); + } + std::shared_ptr param_type; + if (param->bType()) { + if (param->bType()->Int()) { + param_type = ir::Type::GetInt32Type(); + } else if (param->bType()->Float()) { + param_type = ir::Type::GetFloatType(); + } + } + if (!param_type) param_type = ir::Type::GetInt32Type(); + + bool is_array = !param->L_BRACK().empty(); + std::vector dims; + + if (is_array) { + // 第一维是 [],没有表达式,所以维度为0(表示省略) + dims.push_back(0); + + // 后续维度有表达式 + // 注意:exp() 返回的是 ExpContext 列表,对应后面的维度表达式 + for (auto* exp_ctx : param->exp()) { + // 使用常量求值器直接求值 + // 创建一个临时的 ConstExpContext + // 由于 ConstExpContext 只是 addExp 的包装,我们可以直接使用 addExp + auto* addExp = exp_ctx->addExp(); + if (!addExp) { + throw std::runtime_error(FormatError("sema", "无效的数组维度表达式")); + } + + // 求值常量表达式 + int dim = table_.EvaluateConstExpression(exp_ctx); + if (dim <= 0) { + throw std::runtime_error(FormatError("sema", "数组维度必须为正整数")); + } + dims.push_back(dim); + } + + // 数组参数退化为指针 + if (param_type->IsInt32()) { + param_type = ir::Type::GetPtrInt32Type(); + } else if (param_type->IsFloat()) { + param_type = ir::Type::GetPtrFloatType(); + } + } + + Symbol sym; + sym.name = name; + sym.kind = SymbolKind::Parameter; + sym.type = param_type; + sym.scope_level = table_.currentScopeLevel(); + sym.is_initialized = true; + sym.var_def_ctx = nullptr; + sym.is_array_param = is_array; + sym.array_dims = dims; + table_.addSymbol(sym); + + std::cout << "[DEBUG] 添加参数: " << name << " type_kind: " << (int)param_type->GetKind() + << " is_array: " << is_array << " dims: "; + for (int d : dims) std::cout << d << " "; + std::cout << std::endl; + } + } + + void CheckGlobalInitIsConst(SysYParser::InitValContext* ctx) { + if (!ctx) return; + if (ctx->exp()) { + ExprInfo info = CheckExp(ctx->exp()); + if (!info.is_const) { + throw std::runtime_error(FormatError("sema", "全局变量初始化必须是常量表达式")); + } + } else { + for (auto* init : ctx->initVal()) { + CheckGlobalInitIsConst(init); + } + } + } + + void CheckMainFunction() { + auto* main_sym = table_.lookup("main"); + if (!main_sym || main_sym->kind != SymbolKind::Function) { + throw std::runtime_error(FormatError("sema", "缺少 main 函数")); + } + std::shared_ptr ret_type; + if (main_sym->type && main_sym->type->IsFunction()) { + auto* func_type = dynamic_cast(main_sym->type.get()); + if (func_type) { + ret_type = func_type->GetReturnType(); + } + } + if (!ret_type || !ret_type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "main 函数必须返回 int")); + } + if (!main_sym->param_types.empty()) { + throw std::runtime_error(FormatError("sema", "main 函数不能有参数")); + } + } + + void BindConstInitVal(SysYParser::ConstInitValContext* ctx) { + if (!ctx) return; + if (ctx->constExp()) { + // 遍历表达式树,触发 visitLVal 中的绑定 + ctx->constExp()->addExp()->accept(this); + } else { + for (auto* sub : ctx->constInitVal()) { + BindConstInitVal(sub); + } + } + } + + void BindInitVal(SysYParser::InitValContext* ctx) { + if (!ctx) return; + if (ctx->exp()) { + CheckExp(ctx->exp()); // 触发绑定 + } else { + for (auto* sub : ctx->initVal()) { + BindInitVal(sub); + } + } + } }; } // namespace -SemanticContext RunSema(SysYParser::CompUnitContext& comp_unit) { +// 修改 RunSema 函数,使其返回 SemaResult 结构体,包含符号表和语义上下文 +SemaResult RunSema(SysYParser::CompUnitContext& comp_unit) { SemaVisitor visitor; comp_unit.accept(&visitor); - return visitor.TakeSemanticContext(); + // 直接返回 TakeResult(),利用移动语义 + return visitor.TakeResult(); } diff --git a/src/sem/SymbolTable.cpp b/src/sem/SymbolTable.cpp index ffeea89..4253825 100644 --- a/src/sem/SymbolTable.cpp +++ b/src/sem/SymbolTable.cpp @@ -1,17 +1,791 @@ -// 维护局部变量声明的注册与查找。 - #include "sem/SymbolTable.h" +#include // 用于访问父节点 +#include +#include +#include +#include +#include + +#define DEBUG_SYMBOL_TABLE + +#ifdef DEBUG_SYMBOL_TABLE +#include +#define DEBUG_MSG(msg) std::cerr << "[SymbolTable Debug] " << msg << std::endl +#else +#define DEBUG_MSG(msg) +#endif + +// ---------- 构造函数 ---------- +SymbolTable::SymbolTable() { + scopes_.emplace_back(); // 初始化全局作用域 + active_scope_stack_.push_back(0); + registerBuiltinFunctions(); // 注册内置库函数 +} + +// ---------- 作用域管理 ---------- +void SymbolTable::enterScope() { + scopes_.emplace_back(); + active_scope_stack_.push_back(scopes_.size() - 1); +} + +void SymbolTable::exitScope() { + if (active_scope_stack_.size() > 1) { + active_scope_stack_.pop_back(); + } + // 不能退出全局作用域 +} + +// ---------- 符号添加与查找 ---------- +bool SymbolTable::addSymbol(const Symbol& sym) { + auto& current_scope = scopes_[active_scope_stack_.back()]; + if (current_scope.find(sym.name) != current_scope.end()) { + return false; // 重复定义 + } + + Symbol stored_sym = sym; + stored_sym.scope_level = currentScopeLevel(); + current_scope[sym.name] = stored_sym; + + // 立即验证存储的符号 + const auto& stored = current_scope[sym.name]; + std::cout << "SymbolTable::addSymbol: stored " << sym.name + << " with kind=" << (int)stored.kind + << ", const_def_ctx=" << stored.const_def_ctx + << std::endl; + + return true; +} + +Symbol* SymbolTable::lookup(const std::string& name) { + return const_cast(static_cast(this)->lookup(name)); +} + +Symbol* SymbolTable::lookupCurrent(const std::string& name) { + return const_cast(static_cast(this)->lookupCurrent(name)); +} + +const Symbol* SymbolTable::lookup(const std::string& name) const { + for (auto it = active_scope_stack_.rbegin(); it != active_scope_stack_.rend(); ++it) { + const auto& scope = scopes_[*it]; + auto found = scope.find(name); + if (found != scope.end()) { + std::cout << "SymbolTable::lookup: found " << name + << " in active scope index " << *it + << ", kind=" << (int)found->second.kind + << ", const_def_ctx=" << found->second.const_def_ctx + << std::endl; + return &found->second; + } + } + return nullptr; +} + +const Symbol* SymbolTable::lookupCurrent(const std::string& name) const { + const auto& current_scope = scopes_[active_scope_stack_.back()]; + auto it = current_scope.find(name); + if (it != current_scope.end()) { + return &it->second; + } + return nullptr; +} + +const Symbol* SymbolTable::lookupAll(const std::string& name) const { + for (auto it = scopes_.rbegin(); it != scopes_.rend(); ++it) { + auto found = it->find(name); + if (found != it->end()) { + return &found->second; + } + } + return nullptr; +} -void SymbolTable::Add(const std::string& name, - SysYParser::VarDefContext* decl) { - table_[name] = decl; +const Symbol* SymbolTable::lookupByVarDef(const SysYParser::VarDefContext* decl) const { + if (!decl) return nullptr; + for (auto it = scopes_.rbegin(); it != scopes_.rend(); ++it) { + for (const auto& [name, sym] : *it) { + if (sym.var_def_ctx == decl) { + return &sym; + } + } + } + return nullptr; +} + +const Symbol* SymbolTable::lookupByConstDef(const SysYParser::ConstDefContext* decl) const { + if (!decl) return nullptr; + for (auto it = scopes_.rbegin(); it != scopes_.rend(); ++it) { + for (const auto& [name, sym] : *it) { + if (sym.const_def_ctx == decl) { + return &sym; + } + } + } + return nullptr; +} + +// ---------- 兼容原接口 ---------- +void SymbolTable::Add(const std::string& name, SysYParser::VarDefContext* decl) { + Symbol sym; + sym.name = name; + sym.kind = SymbolKind::Variable; + sym.type = getTypeFromVarDef(decl); + sym.var_def_ctx = decl; + sym.scope_level = currentScopeLevel(); + addSymbol(sym); } bool SymbolTable::Contains(const std::string& name) const { - return table_.find(name) != table_.end(); + for (auto it = active_scope_stack_.rbegin(); it != active_scope_stack_.rend(); ++it) { + const auto& scope = scopes_[*it]; + if (scope.find(name) != scope.end()) { + return true; + } + } + return false; } SysYParser::VarDefContext* SymbolTable::Lookup(const std::string& name) const { - auto it = table_.find(name); - return it == table_.end() ? nullptr : it->second; + for (auto it = active_scope_stack_.rbegin(); it != active_scope_stack_.rend(); ++it) { + const auto& scope = scopes_[*it]; + auto found = scope.find(name); + if (found != scope.end()) { + // 只返回变量定义的上下文(函数等其他符号返回 nullptr) + if (found->second.kind == SymbolKind::Variable) { + return found->second.var_def_ctx; + } + return nullptr; + } + } + return nullptr; +} + +// ---------- 辅助函数:从 VarDefContext 获取外层 VarDeclContext ---------- +static SysYParser::VarDeclContext* getOuterVarDecl(SysYParser::VarDefContext* varDef) { + auto parent = varDef->parent; + while (parent) { + if (auto varDecl = dynamic_cast(parent)) { + return varDecl; + } + parent = parent->parent; + } + return nullptr; +} + +// ---------- 辅助函数:从 VarDefContext 获取外层 ConstDeclContext(常量定义)---------- +static SysYParser::ConstDeclContext* getOuterConstDecl(SysYParser::VarDefContext* varDef) { + auto parent = varDef->parent; + while (parent) { + if (auto constDecl = dynamic_cast(parent)) { + return constDecl; + } + parent = parent->parent; + } + return nullptr; +} + +// 从 VarDefContext 构造类型 +// 原静态函数改为成员函数,并调用成员 EvaluateConstExp +std::shared_ptr SymbolTable::getTypeFromVarDef(SysYParser::VarDefContext* ctx) const { + // 获取基本类型(同原代码,但通过外层 Decl 确定) + std::shared_ptr base_type = nullptr; + auto varDecl = getOuterVarDecl(ctx); + if (varDecl) { + auto bType = varDecl->bType(); + if (bType->Int()) base_type = ir::Type::GetInt32Type(); + else if (bType->Float()) base_type = ir::Type::GetFloatType(); + } else { + auto constDecl = getOuterConstDecl(ctx); + if (constDecl) { + auto bType = constDecl->bType(); + if (bType->Int()) base_type = ir::Type::GetInt32Type(); + else if (bType->Float()) base_type = ir::Type::GetFloatType(); + } + } + if (!base_type) base_type = ir::Type::GetInt32Type(); + + // 解析维度 + std::vector dims; + for (auto* dimExp : ctx->constExp()) { + int dim = EvaluateConstExp(dimExp); // 调用成员函数 + if (dim <= 0) { + throw std::runtime_error("数组维度必须为正整数"); + } + dims.push_back(dim); + } + + if (!dims.empty()) { + return ir::Type::GetArrayType(base_type, dims); + } + return base_type; +} +// 从 FuncDefContext 构造函数类型 +std::shared_ptr SymbolTable::getTypeFromFuncDef(SysYParser::FuncDefContext* ctx) { + // 1. 返回类型 + std::shared_ptr ret_type; + auto funcType = ctx->funcType(); + if (funcType->Void()) { + ret_type = ir::Type::GetVoidType(); + } else if (funcType->Int()) { + ret_type = ir::Type::GetInt32Type(); + } else if (funcType->Float()) { + ret_type = ir::Type::GetFloatType(); + } else { + ret_type = ir::Type::GetInt32Type(); // fallback + } + + // 2. 参数类型 + std::vector> param_types; + auto fParams = ctx->funcFParams(); + if (fParams) { + for (auto param : fParams->funcFParam()) { + std::shared_ptr param_type; + auto bType = param->bType(); + if (bType->Int()) { + param_type = ir::Type::GetInt32Type(); + } else if (bType->Float()) { + param_type = ir::Type::GetFloatType(); + } else { + param_type = ir::Type::GetInt32Type(); + } + + // 处理数组参数:如果存在 [ ] 或 [ exp ],退化为指针 + if (param->L_BRACK().size() > 0) { + if (param_type->IsInt32()) { + param_type = ir::Type::GetPtrInt32Type(); + } else if (param_type->IsFloat()) { + param_type = ir::Type::GetPtrFloatType(); + } + } + param_types.push_back(param_type); + } + } + + return ir::Type::GetFunctionType(ret_type, param_types); +} + +// ----- 注册内置库函数----- +void SymbolTable::registerBuiltinFunctions() { + // 确保当前处于全局作用域(scopes_ 只有一层) + // 1. getint: int getint() + Symbol getint; + getint.name = "getint"; + getint.kind = SymbolKind::Function; + getint.type = ir::Type::GetFunctionType(ir::Type::GetInt32Type(), {}); // 无参数 + getint.param_types = {}; + getint.scope_level = 0; + getint.is_builtin = true; + addSymbol(getint); + + // 2. getfloat: float getfloat() + Symbol getfloat; + getfloat.name = "getfloat"; + getfloat.kind = SymbolKind::Function; + getfloat.type = ir::Type::GetFunctionType(ir::Type::GetFloatType(), {}); + getfloat.param_types = {}; + getfloat.scope_level = 0; + getfloat.is_builtin = true; + addSymbol(getfloat); + + // 3. getch: int getch() + Symbol getch; + getch.name = "getch"; + getch.kind = SymbolKind::Function; + getch.type = ir::Type::GetFunctionType(ir::Type::GetInt32Type(), {}); + getch.param_types = {}; + getch.scope_level = 0; + getch.is_builtin = true; + addSymbol(getch); + + // 4. putint: void putint(int) + std::vector> putint_params = { ir::Type::GetInt32Type() }; + Symbol putint; + putint.name = "putint"; + putint.kind = SymbolKind::Function; + putint.type = ir::Type::GetFunctionType(ir::Type::GetVoidType(), putint_params); + putint.param_types = putint_params; + putint.scope_level = 0; + putint.is_builtin = true; + addSymbol(putint); + + // 5. putfloat: void putfloat(float) + std::vector> putfloat_params = { ir::Type::GetFloatType() }; + Symbol putfloat; + putfloat.name = "putfloat"; + putfloat.kind = SymbolKind::Function; + putfloat.type = ir::Type::GetFunctionType(ir::Type::GetVoidType(), putfloat_params); + putfloat.param_types = putfloat_params; + putfloat.scope_level = 0; + putfloat.is_builtin = true; + addSymbol(putfloat); + + // 6. putch: void putch(int) + std::vector> putch_params = { ir::Type::GetInt32Type() }; + Symbol putch; + putch.name = "putch"; + putch.kind = SymbolKind::Function; + putch.type = ir::Type::GetFunctionType(ir::Type::GetVoidType(), putch_params); + putch.param_types = putch_params; + putch.scope_level = 0; + putch.is_builtin = true; + addSymbol(putch); + + // 7. getarray: int getarray(int a[]) + // 参数类型: int a[] 退化为 int* 即 PtrInt32 + std::vector> getarray_params = { ir::Type::GetPtrInt32Type() }; + Symbol getarray; + getarray.name = "getarray"; + getarray.kind = SymbolKind::Function; + getarray.type = ir::Type::GetFunctionType(ir::Type::GetInt32Type(), getarray_params); + getarray.param_types = getarray_params; + getarray.scope_level = 0; + getarray.is_builtin = true; + addSymbol(getarray); + + // 8. putarray: void putarray(int n, int a[]) + // 参数: int n, int a[] -> 实际类型: int, int* + std::vector> putarray_params = { ir::Type::GetInt32Type(), ir::Type::GetPtrInt32Type() }; + Symbol putarray; + putarray.name = "putarray"; + putarray.kind = SymbolKind::Function; + putarray.type = ir::Type::GetFunctionType(ir::Type::GetVoidType(), putarray_params); + putarray.param_types = putarray_params; + putarray.scope_level = 0; + putarray.is_builtin = true; + addSymbol(putarray); + + // starttime: void starttime() + Symbol starttime; + starttime.name = "starttime"; + starttime.kind = SymbolKind::Function; + starttime.type = ir::Type::GetFunctionType(ir::Type::GetVoidType(), {}); // 无参数,返回 void + starttime.param_types = {}; + starttime.scope_level = 0; + starttime.is_builtin = true; + addSymbol(starttime); + + // stoptime: void stoptime() + Symbol stoptime; + stoptime.name = "stoptime"; + stoptime.kind = SymbolKind::Function; + stoptime.type = ir::Type::GetFunctionType(ir::Type::GetVoidType(), {}); // 无参数,返回 void + stoptime.param_types = {}; + stoptime.scope_level = 0; + stoptime.is_builtin = true; + addSymbol(stoptime); + + // getfarray: int getfarray(float arr[]) + std::vector> getfarray_params = { ir::Type::GetPtrFloatType() }; + Symbol getfarray; + getfarray.name = "getfarray"; + getfarray.kind = SymbolKind::Function; + getfarray.type = ir::Type::GetFunctionType(ir::Type::GetInt32Type(), getfarray_params); + getfarray.param_types = getfarray_params; + getfarray.scope_level = 0; + getfarray.is_builtin = true; + addSymbol(getfarray); + + // putfarray: void putfarray(int len, float arr[]) + std::vector> putfarray_params = { + ir::Type::GetInt32Type(), + ir::Type::GetPtrFloatType() + }; + Symbol putfarray; + putfarray.name = "putfarray"; + putfarray.kind = SymbolKind::Function; + putfarray.type = ir::Type::GetFunctionType(ir::Type::GetVoidType(), putfarray_params); + putfarray.param_types = putfarray_params; + putfarray.scope_level = 0; + putfarray.is_builtin = true; + addSymbol(putfarray); +} + +// ==================== 常量表达式求值实现 ==================== + +static long long ParseIntegerLiteral(const std::string& text) { + // 处理前缀:0x/0X 十六进制,0 八进制,否则十进制 + if (text.size() > 2 && (text[0] == '0' && (text[1] == 'x' || text[1] == 'X'))) { + return std::stoll(text.substr(2), nullptr, 16); + } else if (text.size() > 1 && text[0] == '0') { + return std::stoll(text, nullptr, 8); + } else { + return std::stoll(text, nullptr, 10); + } +} + +static float ParseFloatLiteral(const std::string& text) { + return std::stof(text); +} + +SymbolTable::ConstValue SymbolTable::EvaluatePrimaryExp(SysYParser::PrimaryExpContext* ctx) const { + if (!ctx) throw std::runtime_error("常量表达式求值:无效 PrimaryExp"); + + if (ctx->lVal()) { + auto lval = ctx->lVal(); + if (!lval->Ident()) throw std::runtime_error("常量表达式求值:无效左值"); + std::string name = lval->Ident()->getText(); + const Symbol* sym = lookup(name); + if (!sym) throw std::runtime_error("常量表达式求值:未定义的标识符 " + name); + if (sym->kind != SymbolKind::Constant) + throw std::runtime_error("常量表达式求值:标识符 " + name + " 不是常量"); + + ConstValue val; + if (sym->is_int_const) { + val.kind = ConstValue::INT; + val.int_val = sym->const_value.i32; + } else { + val.kind = ConstValue::FLOAT; + val.float_val = sym->const_value.f32; + } + return val; + } + else if (ctx->HEX_FLOAT() || ctx->DEC_FLOAT()) { + std::string text; + if (ctx->HEX_FLOAT()) text = ctx->HEX_FLOAT()->getText(); + else text = ctx->DEC_FLOAT()->getText(); + ConstValue val; + val.kind = ConstValue::FLOAT; + val.float_val = ParseFloatLiteral(text); + return val; + } + else if (ctx->HEX_INT() || ctx->OCTAL_INT() || ctx->DECIMAL_INT() || ctx->ZERO()) { + std::string text; + if (ctx->HEX_INT()) text = ctx->HEX_INT()->getText(); + else if (ctx->OCTAL_INT()) text = ctx->OCTAL_INT()->getText(); + else if (ctx->DECIMAL_INT()) text = ctx->DECIMAL_INT()->getText(); + else text = ctx->ZERO()->getText(); + ConstValue val; + val.kind = ConstValue::INT; + val.int_val = static_cast(ParseIntegerLiteral(text)); + return val; + } + else if (ctx->exp()) { + return EvaluateAddExp(ctx->exp()->addExp()); + } + else { + throw std::runtime_error("常量表达式求值:不支持的 PrimaryExp 类型"); + } +} + +SymbolTable::ConstValue SymbolTable::EvaluateUnaryExp(SysYParser::UnaryExpContext* ctx) const { + if (!ctx) throw std::runtime_error("常量表达式求值:无效 UnaryExp"); + + if (ctx->primaryExp()) { + return EvaluatePrimaryExp(ctx->primaryExp()); + } + else if (ctx->unaryOp()) { + ConstValue operand = EvaluateUnaryExp(ctx->unaryExp()); + std::string op = ctx->unaryOp()->getText(); + + if (op == "+") { + return operand; + } + else if (op == "-") { + if (operand.kind == ConstValue::INT) { + operand.int_val = -operand.int_val; + } else { + operand.float_val = -operand.float_val; + } + return operand; + } + else if (op == "!") { + if (operand.kind != ConstValue::INT) { + throw std::runtime_error("常量表达式求值:逻辑非操作数必须是整数"); + } + ConstValue res; + res.kind = ConstValue::INT; + res.int_val = (operand.int_val == 0) ? 1 : 0; + return res; + } + else { + throw std::runtime_error("常量表达式求值:未知一元运算符 " + op); + } + } + else { + // 函数调用在常量表达式中不允许 + throw std::runtime_error("常量表达式求值:不允许函数调用"); + } +} + +SymbolTable::ConstValue SymbolTable::EvaluateMulExp(SysYParser::MulExpContext* ctx) const { + if (!ctx) throw std::runtime_error("常量表达式求值:无效 MulExp"); + + if (ctx->mulExp()) { + ConstValue left = EvaluateMulExp(ctx->mulExp()); + ConstValue right = EvaluateUnaryExp(ctx->unaryExp()); + + std::string op; + if (ctx->MulOp()) op = "*"; + else if (ctx->DivOp()) op = "/"; + else if (ctx->QuoOp()) op = "%"; + else throw std::runtime_error("常量表达式求值:未知乘法运算符"); + + bool is_float = (left.kind == ConstValue::FLOAT || right.kind == ConstValue::FLOAT); + if (is_float) { + float l = (left.kind == ConstValue::INT) ? static_cast(left.int_val) : left.float_val; + float r = (right.kind == ConstValue::INT) ? static_cast(right.int_val) : right.float_val; + ConstValue res; + res.kind = ConstValue::FLOAT; + if (op == "*") res.float_val = l * r; + else if (op == "/") res.float_val = l / r; + else if (op == "%") throw std::runtime_error("常量表达式求值:浮点数不支持取模运算"); + return res; + } else { + int l = left.int_val; + int r = right.int_val; + ConstValue res; + res.kind = ConstValue::INT; + if (op == "*") res.int_val = l * r; + else if (op == "/") { + if (r == 0) throw std::runtime_error("常量表达式求值:除零错误"); + res.int_val = l / r; + } + else if (op == "%") { + if (r == 0) throw std::runtime_error("常量表达式求值:模零错误"); + res.int_val = l % r; + } + return res; + } + } + else { + return EvaluateUnaryExp(ctx->unaryExp()); + } +} + +SymbolTable::ConstValue SymbolTable::EvaluateAddExp(SysYParser::AddExpContext* ctx) const { + if (!ctx) throw std::runtime_error("常量表达式求值:无效 AddExp"); + + if (ctx->addExp()) { + ConstValue left = EvaluateAddExp(ctx->addExp()); + ConstValue right = EvaluateMulExp(ctx->mulExp()); + + std::string op; + if (ctx->AddOp()) op = "+"; + else if (ctx->SubOp()) op = "-"; + else throw std::runtime_error("常量表达式求值:未知加法运算符"); + + bool is_float = (left.kind == ConstValue::FLOAT || right.kind == ConstValue::FLOAT); + if (is_float) { + float l = (left.kind == ConstValue::INT) ? static_cast(left.int_val) : left.float_val; + float r = (right.kind == ConstValue::INT) ? static_cast(right.int_val) : right.float_val; + ConstValue res; + res.kind = ConstValue::FLOAT; + if (op == "+") res.float_val = l + r; + else res.float_val = l - r; + return res; + } else { + int l = left.int_val; + int r = right.int_val; + ConstValue res; + res.kind = ConstValue::INT; + if (op == "+") res.int_val = l + r; + else res.int_val = l - r; + return res; + } + } + else { + return EvaluateMulExp(ctx->mulExp()); + } +} + +int SymbolTable::EvaluateConstExp(SysYParser::ConstExpContext* ctx) const { + if (!ctx || !ctx->addExp()) + throw std::runtime_error("常量表达式求值:无效 ConstExp"); + ConstValue val = EvaluateAddExp(ctx->addExp()); + if (val.kind == ConstValue::INT) { + return val.int_val; + } else { + float f = val.float_val; + int i = static_cast(f); + if (std::abs(f - i) > 1e-6) { + throw std::runtime_error("常量表达式求值:浮点常量不能隐式转换为整数"); + } + return i; + } +} + +float SymbolTable::EvaluateConstExpFloat(SysYParser::ConstExpContext* ctx) const { + if (!ctx || !ctx->addExp()) + throw std::runtime_error("常量表达式求值:无效 ConstExp"); + ConstValue val = EvaluateAddExp(ctx->addExp()); + if (val.kind == ConstValue::INT) { + return static_cast(val.int_val); + } else { + return val.float_val; + } +} + +void SymbolTable::flattenInit(SysYParser::ConstInitValContext* ctx, + std::vector& out, + std::shared_ptr base_type) const { + if (!ctx) return; + + // 获取当前初始化列表的文本(用于调试) + std::string ctxText; + if (ctx->constExp()) { + ctxText = ctx->constExp()->getText(); + } else { + ctxText = "{ ... }"; + } + + if (ctx->constExp()) { + ConstValue val = EvaluateAddExp(ctx->constExp()->addExp()); + + DEBUG_MSG("处理常量表达式: " << ctxText + << " 类型=" << (val.kind == ConstValue::INT ? "INT" : "FLOAT") + << " 值=" << (val.kind == ConstValue::INT ? std::to_string(val.int_val) : std::to_string(val.float_val)) + << " 目标类型=" << (base_type->IsInt32() ? "Int32" : "Float")); + + // 整型数组不能接受浮点常量 + if (base_type->IsInt32() && val.kind == ConstValue::FLOAT) { + DEBUG_MSG("错误:整型数组遇到浮点常量,值=" << val.float_val); + throw std::runtime_error("常量初始化:整型数组不能使用浮点常量"); + } + // 浮点数组接受整型常量,并隐式转换 + if (base_type->IsFloat() && val.kind == ConstValue::INT) { + DEBUG_MSG("浮点数组接收整型常量,隐式转换为浮点: " << val.int_val); + val.kind = ConstValue::FLOAT; + val.float_val = static_cast(val.int_val); + } + out.push_back(val); + } else { + DEBUG_MSG("进入花括号初始化列表: " << ctxText); + // 花括号初始化列表:递归展开所有子项 + for (auto* sub : ctx->constInitVal()) { + flattenInit(sub, out, base_type); + } + DEBUG_MSG("退出花括号初始化列表"); + } +} + +std::vector SymbolTable::EvaluateConstInitVal( + SysYParser::ConstInitValContext* ctx, + const std::vector& dims, + std::shared_ptr base_type) const { + + // ========== 1. 标量常量(dims 为空)========== + if (dims.empty()) { + if (!ctx || !ctx->constExp()) { + throw std::runtime_error("标量常量初始化必须使用单个表达式"); + } + ConstValue val = EvaluateAddExp(ctx->constExp()->addExp()); + + // 类型兼容性检查 + /* + if (base_type->IsInt32() && val.kind == ConstValue::FLOAT) { + throw std::runtime_error("整型常量不能使用浮点常量初始化"); + } + */ + // 隐式类型转换 + if (base_type->IsInt32() && val.kind == ConstValue::FLOAT) { + val.kind = ConstValue::INT; + val.int_val = static_cast(val.float_val); + } + if (base_type->IsFloat() && val.kind == ConstValue::INT) { + val.kind = ConstValue::FLOAT; + val.float_val = static_cast(val.int_val); + } + return {val}; // 返回包含单个值的向量 + } + + // ========== 2. 数组常量(dims 非空)========== + size_t total = 1; + for (int d : dims) total *= d; + + ConstValue zero; + if (base_type->IsInt32()) { + zero.kind = ConstValue::INT; + zero.int_val = 0; + } else { + zero.kind = ConstValue::FLOAT; + zero.float_val = 0.0f; + } + + // 先整体补零,再按 C 语言花括号规则覆盖显式初始化项。 + std::vector flat(total, zero); + + auto convert_value = [&](ConstValue v) -> ConstValue { + if (base_type->IsInt32()) { + if (v.kind == ConstValue::FLOAT) { + throw std::runtime_error("常量初始化:整型数组不能使用浮点常量"); + } + return v; + } + if (v.kind == ConstValue::INT) { + ConstValue t; + t.kind = ConstValue::FLOAT; + t.float_val = static_cast(v.int_val); + return t; + } + return v; + }; + + auto subarray_span = [&](size_t depth) -> size_t { + size_t span = 1; + for (size_t i = depth + 1; i < dims.size(); ++i) span *= static_cast(dims[i]); + return span; + }; + + std::function fill; + fill = [&](SysYParser::ConstInitValContext* node, + size_t depth, + size_t begin, + size_t end) -> size_t { + if (!node || begin >= end) return begin; + + // 标量初始化项 + if (node->constExp()) { + ConstValue v = convert_value(EvaluateAddExp(node->constExp()->addExp())); + if (begin < flat.size()) flat[begin] = v; + return std::min(begin + 1, end); + } + + size_t cursor = begin; + for (auto* child : node->constInitVal()) { + if (cursor >= end) break; + + if (child->constExp()) { + ConstValue v = convert_value(EvaluateAddExp(child->constExp()->addExp())); + if (cursor < flat.size()) flat[cursor] = v; + ++cursor; + continue; + } + + // 花括号子列表:在非最内层需要按子聚合边界对齐。 + if (depth + 1 < dims.size()) { + const size_t span = subarray_span(depth); + const size_t rel = (cursor - begin) % span; + if (rel != 0) cursor += (span - rel); + if (cursor >= end) break; + + const size_t sub_end = std::min(cursor + span, end); + fill(child, depth + 1, cursor, sub_end); + // 一个带花括号的子初始化器会消费当前层的一个子聚合。 + cursor = sub_end; + } else { + // 最内层(标量数组)遇到额外花括号,按同层顺序展开。 + cursor = fill(child, depth, cursor, end); + } + } + return cursor; + }; + + fill(ctx, 0, 0, total); + return flat; } + +int SymbolTable::EvaluateConstExpression(SysYParser::ExpContext* ctx) const { + if (!ctx || !ctx->addExp()) { + throw std::runtime_error("常量表达式求值:无效 ExpContext"); + } + ConstValue val = EvaluateAddExp(ctx->addExp()); + if (val.kind == ConstValue::INT) { + return val.int_val; + } else { + float f = val.float_val; + int i = static_cast(f); + if (std::abs(f - i) > 1e-6) { + throw std::runtime_error("常量表达式求值:浮点常量不能隐式转换为整数"); + } + return i; + } +} \ No newline at end of file diff --git a/sylib/sylib.c b/sylib/sylib.c index 7f26d0b..7237ef1 100644 --- a/sylib/sylib.c +++ b/sylib/sylib.c @@ -1,4 +1,162 @@ -// SysY 运行库实现: -// - 按实验/评测规范提供 I/O 等函数实现 -// - 与编译器生成的目标代码链接,支撑运行时行为 +#include "sylib.h" + +#include +#include + +extern int scanf(const char* format, ...); +extern int printf(const char* format, ...); +extern int getchar(void); +extern int putchar(int c); + +int getint(void) { + int x = 0; + scanf("%d", &x); + return x; +} + +int getch(void) { + return getchar(); +} + +int getarray(int a[]) { + int n; + scanf("%d", &n); + int i = 0; + for (; i < n; ++i) { + scanf("%d", &a[i]); + } + return n; +} + +float getfloat(void) { + float x = 0.0f; + scanf("%f", &x); + return x; +} + +int getfarray(float a[]) { + int n = 0; + if (scanf("%d", &n) != 1) { + return 0; + } + int i = 0; + for (; i < n; ++i) { + if (scanf("%f", &a[i]) != 1) { + return i; + } + } + return n; +} + +void putint(int x) { + printf("%d", x); +} + +void putch(int x) { + putchar(x); +} + +void putarray(int n, int a[]) { + int i = 0; + printf("%d:", n); + for (; i < n; ++i) { + printf(" %d", a[i]); + } + putchar('\n'); +} + +void putfloat(float x) { + printf("%a", x); +} + +void putfarray(int n, float a[]) { + int i = 0; + printf("%d:", n); + for (; i < n; ++i) { + printf(" %a", a[i]); + } + putchar('\n'); +} + +void puts(int s[]) { + if (!s) return; + while (*s) { + putchar(*s); + ++s; + } +} + +void _sysy_starttime(int lineno) { + (void)lineno; +} + +void _sysy_stoptime(int lineno) { + (void)lineno; +} + +void starttime(void) { + _sysy_starttime(0); +} + +void stoptime(void) { + _sysy_stoptime(0); +} + +int* memset(int* ptr, int value, int count) { + unsigned char* p = (unsigned char*)ptr; + unsigned char byte = (unsigned char)(value & 0xFF); + int i = 0; + for (; i < count; ++i) { + p[i] = byte; + } + return ptr; +} + +int* sysy_alloc_i32(int count) { + if (count <= 0) { + return 0; + } + return (int*)malloc((size_t)count * sizeof(int)); +} + +float* sysy_alloc_f32(int count) { + if (count <= 0) { + return 0; + } + return (float*)malloc((size_t)count * sizeof(float)); +} + +void sysy_free_i32(int* ptr) { + if (!ptr) { + return; + } + free(ptr); +} + +void sysy_free_f32(float* ptr) { + if (!ptr) { + return; + } + free(ptr); +} + +void sysy_zero_i32(int* ptr, int count) { + int i = 0; + if (!ptr || count <= 0) { + return; + } + for (; i < count; ++i) { + ptr[i] = 0; + } +} + +void sysy_zero_f32(float* ptr, int count) { + int i = 0; + if (!ptr || count <= 0) { + return; + } + for (; i < count; ++i) { + ptr[i] = 0.0f; + } +} diff --git a/sylib/sylib.h b/sylib/sylib.h index 502d488..0d81b83 100644 --- a/sylib/sylib.h +++ b/sylib/sylib.h @@ -1,4 +1,29 @@ -// SysY 运行库头文件: -// - 声明运行库函数原型(供编译器生成 call 或链接阶段引用) -// - 与 sylib.c 配套,按规范逐步补齐声明 +#pragma once + +int getint(void); +int getch(void); +int getarray(int a[]); +float getfloat(void); +int getfarray(float a[]); + +void putint(int x); +void putch(int x); +void putarray(int n, int a[]); +void putfloat(float x); +void putfarray(int n, float a[]); +void puts(int s[]); + +void _sysy_starttime(int lineno); +void _sysy_stoptime(int lineno); +void starttime(void); +void stoptime(void); + +int read_map(void); +int* memset(int* ptr, int value, int count); +int* sysy_alloc_i32(int count); +float* sysy_alloc_f32(int count); +void sysy_free_i32(int* ptr); +void sysy_free_f32(float* ptr); +void sysy_zero_i32(int* ptr, int count); +void sysy_zero_f32(float* ptr, int count); diff --git a/test.c b/test.c new file mode 100644 index 0000000..76e8197 --- /dev/null +++ b/test.c @@ -0,0 +1 @@ +int main() { return 0; } diff --git a/test.sy b/test.sy new file mode 100644 index 0000000..76e8197 --- /dev/null +++ b/test.sy @@ -0,0 +1 @@ +int main() { return 0; } diff --git a/test2.sy b/test2.sy new file mode 100644 index 0000000..05e7a96 --- /dev/null +++ b/test2.sy @@ -0,0 +1 @@ +int add(int a, int b) { return a + b; } int main() { return add(1, 2); }