[midend]更新遍静态ID定义方法,
注册遍模板函数重构(针对遍的不同构造方法), 修复phi指令更新引起的旧代码错误, 将CFG优化适配到现有终端框架中, 独立CFG优化方法使得其他优化遍能独立调用, usedelete方法回调取消删除功能。 IRGenerator代码风格修改。
This commit is contained in:
@@ -64,7 +64,7 @@ Value* SysYIRGenerator::getGEPAddressInst(Value* basePointer, const std::vector<
|
||||
|
||||
// 遍历用户提供的索引(不包括我们添加的第一个0),逐步确定 GEP 的最终结果类型
|
||||
// 每个索引都“深入”一个维度
|
||||
for (size_t i = 0; i < indices.size(); ++i) { // 这里遍历的是用户提供的索引
|
||||
for (int i = 0; i < indices.size(); ++i) { // 这里遍历的是用户提供的索引
|
||||
if (finalTargetType && finalTargetType->isArray()) {
|
||||
finalTargetType = finalTargetType->as<ArrayType>()->getElementType();
|
||||
} else {
|
||||
@@ -247,7 +247,7 @@ std::any SysYIRGenerator::visitVarDecl(SysYParser::VarDeclContext *ctx) {
|
||||
ConstantInteger::get(0));
|
||||
}
|
||||
else {
|
||||
for (size_t k = 0; k < counterValues.size(); ++k) {
|
||||
for (int k = 0; k < counterValues.size(); ++k) {
|
||||
std::vector<Value *> currentIndices;
|
||||
int tempLinearIndex = k;
|
||||
|
||||
@@ -368,7 +368,7 @@ std::any SysYIRGenerator::visitFuncDef(SysYParser::FuncDefContext *ctx){
|
||||
BasicBlock* entry = function->getEntryBlock();
|
||||
builder.setPosition(entry, entry->end());
|
||||
|
||||
for (size_t i = 0; i < paramTypes.size(); ++i) {
|
||||
for (int i = 0; i < paramTypes.size(); ++i) {
|
||||
AllocaInst* alloca = builder.createAllocaInst(Type::getPointerType(paramTypes[i]),
|
||||
paramDims[i], paramNames[i]);
|
||||
entry->insertArgument(alloca);
|
||||
@@ -440,7 +440,7 @@ std::any SysYIRGenerator::visitAssignStmt(SysYParser::AssignStmtContext *ctx) {
|
||||
Type* targetElementType = variable->getType()->as<PointerType>()->getBaseType(); // 从基指针指向的类型开始
|
||||
|
||||
// 模拟 GEP 路径,根据 dims 确定最终元素的类型
|
||||
for (size_t i = 0; i < dims.size(); ++i) {
|
||||
for (int i = 0; i < dims.size(); ++i) {
|
||||
if (targetElementType && targetElementType->isArray()) {
|
||||
targetElementType = targetElementType->as<ArrayType>()->getElementType();
|
||||
} else {
|
||||
@@ -805,7 +805,7 @@ std::any SysYIRGenerator::visitCall(SysYParser::CallContext *ctx) {
|
||||
}
|
||||
|
||||
auto params = function->getEntryBlock()->getArguments();
|
||||
for (size_t i = 0; i < args.size(); i++) {
|
||||
for (int i = 0; i < args.size(); i++) {
|
||||
// 参数类型转换
|
||||
if (params[i]->getType() != args[i]->getType() &&
|
||||
(params[i]->getNumDims() != 0 ||
|
||||
@@ -891,7 +891,7 @@ std::any SysYIRGenerator::visitFuncRParams(SysYParser::FuncRParamsContext *ctx)
|
||||
std::any SysYIRGenerator::visitMulExp(SysYParser::MulExpContext *ctx) {
|
||||
Value * result = std::any_cast<Value *>(visitUnaryExp(ctx->unaryExp(0)));
|
||||
|
||||
for (size_t i = 1; i < ctx->unaryExp().size(); i++) {
|
||||
for (int i = 1; i < ctx->unaryExp().size(); i++) {
|
||||
auto opNode = dynamic_cast<antlr4::tree::TerminalNode*>(ctx->children[2*i-1]);
|
||||
int opType = opNode->getSymbol()->getType();
|
||||
|
||||
@@ -967,7 +967,7 @@ std::any SysYIRGenerator::visitMulExp(SysYParser::MulExpContext *ctx) {
|
||||
std::any SysYIRGenerator::visitAddExp(SysYParser::AddExpContext *ctx) {
|
||||
Value* result = std::any_cast<Value *>(visitMulExp(ctx->mulExp(0)));
|
||||
|
||||
for (size_t i = 1; i < ctx->mulExp().size(); i++) {
|
||||
for (int i = 1; i < ctx->mulExp().size(); i++) {
|
||||
auto opNode = dynamic_cast<antlr4::tree::TerminalNode*>(ctx->children[2*i-1]);
|
||||
int opType = opNode->getSymbol()->getType();
|
||||
|
||||
@@ -1028,7 +1028,7 @@ std::any SysYIRGenerator::visitAddExp(SysYParser::AddExpContext *ctx) {
|
||||
std::any SysYIRGenerator::visitRelExp(SysYParser::RelExpContext *ctx) {
|
||||
Value* result = std::any_cast<Value *>(visitAddExp(ctx->addExp(0)));
|
||||
|
||||
for (size_t i = 1; i < ctx->addExp().size(); i++) {
|
||||
for (int i = 1; i < ctx->addExp().size(); i++) {
|
||||
auto opNode = dynamic_cast<antlr4::tree::TerminalNode*>(ctx->children[2*i-1]);
|
||||
int opType = opNode->getSymbol()->getType();
|
||||
|
||||
@@ -1100,7 +1100,7 @@ std::any SysYIRGenerator::visitRelExp(SysYParser::RelExpContext *ctx) {
|
||||
std::any SysYIRGenerator::visitEqExp(SysYParser::EqExpContext *ctx) {
|
||||
Value * result = std::any_cast<Value *>(visitRelExp(ctx->relExp(0)));
|
||||
|
||||
for (size_t i = 1; i < ctx->relExp().size(); i++) {
|
||||
for (int i = 1; i < ctx->relExp().size(); i++) {
|
||||
auto opNode = dynamic_cast<antlr4::tree::TerminalNode*>(ctx->children[2*i-1]);
|
||||
int opType = opNode->getSymbol()->getType();
|
||||
|
||||
@@ -1174,7 +1174,7 @@ std::any SysYIRGenerator::visitLAndExp(SysYParser::LAndExpContext *ctx){
|
||||
BasicBlock *falseBlock = builder.getFalseBlock();
|
||||
auto conds = ctx->eqExp();
|
||||
|
||||
for (size_t i = 0; i < conds.size() - 1; i++) {
|
||||
for (int i = 0; i < conds.size() - 1; i++) {
|
||||
|
||||
labelstring << "AND.L" << builder.getLabelIndex();
|
||||
BasicBlock *newtrueBlock = function->addBasicBlock(labelstring.str());
|
||||
@@ -1205,7 +1205,7 @@ auto SysYIRGenerator::visitLOrExp(SysYParser::LOrExpContext *ctx) -> std::any {
|
||||
Function *function = curBlock->getParent();
|
||||
auto conds = ctx->lAndExp();
|
||||
|
||||
for (size_t i = 0; i < conds.size() - 1; i++) {
|
||||
for (int i = 0; i < conds.size() - 1; i++) {
|
||||
labelstring << "OR.L" << builder.getLabelIndex();
|
||||
BasicBlock *newFalseBlock = function->addBasicBlock(labelstring.str());
|
||||
labelstring.str("");
|
||||
@@ -1292,7 +1292,7 @@ void Utils::createExternalFunction(
|
||||
auto entry = function->getEntryBlock();
|
||||
pBuilder->setPosition(entry, entry->end());
|
||||
|
||||
for (size_t i = 0; i < paramTypes.size(); ++i) {
|
||||
for (int i = 0; i < paramTypes.size(); ++i) {
|
||||
auto alloca = pBuilder->createAllocaInst(
|
||||
Type::getPointerType(paramTypes[i]), paramDims[i], paramNames[i]);
|
||||
entry->insertArgument(alloca);
|
||||
|
||||
Reference in New Issue
Block a user