[midend-mem2reg]修复assignstmt对lvalue的错误解析(lvaue会被exp解释为值,而被assign解释为地址)

This commit is contained in:
rain2133
2025-07-25 20:00:41 +08:00
parent e2c97fd171
commit 04c5c6b44d
3 changed files with 69 additions and 33 deletions

View File

@@ -521,6 +521,7 @@ public:
Function* getParent() const { return parent; }
void setParent(Function *func) { parent = func; }
inst_list& getInstructions() { return instructions; }
auto getInstructions_Range() const { return make_range(instructions); }
arg_list& getArguments() { return arguments; }
block_list& getPredecessors() { return predecessors; }
void clearPredecessors() { predecessors.clear(); }
@@ -1404,7 +1405,7 @@ class ConstantVariable : public User {
using SymbolTableNode = struct SymbolTableNode {
SymbolTableNode *pNode; ///< 父节点
std::vector<SymbolTableNode *> children; ///< 子节点列表
std::map<std::string, User *> varList; ///< 变量列表
std::map<std::string, Value *> varList; ///< 变量列表
};
@@ -1419,8 +1420,8 @@ class SymbolTable {
public:
SymbolTable() = default;
User* getVariable(const std::string &name) const; ///< 根据名字name以及当前作用域获取变量
User* addVariable(const std::string &name, User *variable); ///< 添加变量
Value* getVariable(const std::string &name) const; ///< 根据名字name以及当前作用域获取变量
Value* addVariable(const std::string &name, Value *variable); ///< 添加变量
std::vector<std::unique_ptr<GlobalValue>>& getGlobals(); ///< 获取全局变量列表
const std::vector<std::unique_ptr<ConstantVariable>>& getConsts() const; ///< 获取常量列表
void enterNewScope(); ///< 进入新的作用域
@@ -1482,7 +1483,7 @@ class Module {
void addVariable(const std::string &name, AllocaInst *variable) {
variableTable.addVariable(name, variable);
} ///< 添加变量
User* getVariable(const std::string &name) {
Value* getVariable(const std::string &name) {
return variableTable.getVariable(name);
} ///< 根据名字name和当前作用域获取变量
Function* getFunction(const std::string &name) const {