From 1b7e25c9093fbc390bc5067f7f2ad4e805ab0c3a Mon Sep 17 00:00:00 2001 From: Vladislav Abrosimov Date: Thu, 1 May 2025 18:43:51 +0300 Subject: [PATCH] Add SPF directive insertion --- src/ProjectParameters/projectParameters.cpp | 15 ++++++++++++--- src/Sapfor.cpp | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/ProjectParameters/projectParameters.cpp b/src/ProjectParameters/projectParameters.cpp index 9919a51..cad6738 100644 --- a/src/ProjectParameters/projectParameters.cpp +++ b/src/ProjectParameters/projectParameters.cpp @@ -175,7 +175,7 @@ void lookup_for_vars(std::set>& wher { auto instr_num = *RD.at(arg).begin(); auto [func, instr, bblock] = IRByNumber(fullIR, instr_num); - if (cur_func == func && group_by_block[bblock] == NULL || group_by_block[bblock]->getNumber() < instr_num) + if (cur_func == func && (group_by_block[bblock] == NULL || group_by_block[bblock]->getNumber() < instr_num)) group_by_block[bblock] = instr; } } @@ -421,17 +421,26 @@ findParameters(ResultSet& foundParameters, SgVarRefExp* var = new SgVarRefExp(var_symb); SgValueExp* zero = new SgValueExp(1337); SgExprListExp* ex = new SgExprListExp(); + auto op = new SgExpression(ASSGN_OP, var, zero); + + std::cout << "len: " << ex->length() << '\n'; ex->setLhs(new SgExpression(ASSGN_OP, var, zero)); std::cout << "stmt_before: " << stmt_before->unparse(); - SgStatement* toAdd = new SgStatement(ASSIGN_STAT, NULL, NULL, var, zero, NULL); + SgExpression* parameter_op = new SgExpression(SPF_PARAMETER_OP, ex); + auto ex2 = new SgExprListExp(); + ex2->setLhs(parameter_op); + SgStatement* toAdd = new SgStatement(SPF_ANALYSIS_DIR, NULL, NULL, ex2, NULL, NULL); toAdd->unparsestdout(); // toAdd->lineNumber() = stmt_before->lineNumber(); toAdd->setlineNumber(stmt_before->lineNumber()); toAdd->setLocalLineNumber(stmt_before->lineNumber()); toAdd->setFileId(stmt_before->getFileId()); toAdd->setProject(stmt_before->getProject()); - stmt_before->insertStmtAfter(*toAdd, *stmt_before->controlParent()); stmt_before->controlParent()->unparsestdout(); + if (mode == MODE::AFTER) + stmt_before->insertStmtAfter(*toAdd, *stmt_before->controlParent()); + else + stmt_before->insertStmtBefore(*toAdd, *stmt_before->controlParent()); foundParameters.insert(make_tuple(stmt_before->fileName(), stmt_before->lineNumber(), var_name)); } diff --git a/src/Sapfor.cpp b/src/Sapfor.cpp index 23046ca..76989cd 100644 --- a/src/Sapfor.cpp +++ b/src/Sapfor.cpp @@ -2335,7 +2335,6 @@ void runPass(const int curr_regime, const char *proj_name, const char *folderNam case INSERT_NO_DISTR_FLAGS_FROM_GUI: case PRIVATE_REMOVING: case RENAME_INLCUDES: - case FIND_PARAMETERS: runAnalysis(*project, curr_regime, true, "", folderName); break; case INLINE_PROCEDURES: @@ -2370,6 +2369,7 @@ void runPass(const int curr_regime, const char *proj_name, const char *folderNam case LOOPS_COMBINER: case FIX_COMMON_BLOCKS: case TEST_PASS: + case FIND_PARAMETERS: case SET_IMPLICIT_NONE: runAnalysis(*project, curr_regime, false); case SUBST_EXPR_RD_AND_UNPARSE: