Skip to content

Commit

Permalink
Address more pr comments
Browse files Browse the repository at this point in the history
  • Loading branch information
arrangabriel committed Oct 21, 2024
1 parent 5f2d404 commit f9d8329
Show file tree
Hide file tree
Showing 6 changed files with 19 additions and 31 deletions.
13 changes: 6 additions & 7 deletions lib/Dialect/BaseModelica/Transforms/CallCSE.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -149,19 +149,18 @@ void CallCSEPass::emitCse(llvm::SmallVectorImpl<CallOp> &equivalenceGroup,
for (auto result : llvm::enumerate(representative.getResults())) {
rewriter.setInsertionPointToStart(modelOp.getBody());
// Emit cse variable
VariableOp cseVariable = rewriter.create<VariableOp>(
auto cseVariable = rewriter.create<VariableOp>(
loc, "_cse", VariableType::wrap(result.value().getType()));
symbolTable.insert(cseVariable);
cseVariables.push_back(cseVariable);

// Emit driver equation
rewriter.setInsertionPoint(dynamicOp);
EquationTemplateOp equationTemplateOp =
rewriter.create<EquationTemplateOp>(loc);
auto equationTemplateOp = rewriter.create<EquationTemplateOp>(loc);
rewriter.setInsertionPointToStart(equationTemplateOp.createBody(0));
EquationSideOp lhsOp = rewriter.create<EquationSideOp>(
auto lhsOp = rewriter.create<EquationSideOp>(
loc, rewriter.create<VariableGetOp>(loc, cseVariable)->getResults());
EquationSideOp rhsOp = rewriter.create<EquationSideOp>(
auto rhsOp = rewriter.create<EquationSideOp>(
loc,
cloneDefUseChain(representative, rewriter)->getResult(result.index()));
rewriter.create<EquationSidesOp>(loc, lhsOp, rhsOp);
Expand All @@ -177,7 +176,7 @@ void CallCSEPass::emitCse(llvm::SmallVectorImpl<CallOp> &equivalenceGroup,
rewriter.setInsertionPoint(callOp);

llvm::SmallVector<mlir::Value> results;
for (auto &cseVariable : cseVariables) {
for (VariableOp cseVariable : cseVariables) {
results.push_back(
rewriter.create<VariableGetOp>(loc, cseVariable).getResult());
}
Expand Down Expand Up @@ -206,7 +205,7 @@ mlir::LogicalResult CallCSEPass::processModelOp(ModelOp modelOp) {
DynamicOp dynamicOp = rewriter.create<DynamicOp>(rewriter.getUnknownLoc());
rewriter.createBlock(&dynamicOp.getRegion());

for (auto &equivalenceGroup : callEquivalenceGroups) {
for (llvm::SmallVector<CallOp> &equivalenceGroup : callEquivalenceGroups) {
// Only emit CSEs that will lead to an equivalent, or lower amount of calls
if (equivalenceGroup.size() >= equivalenceGroup.front().getNumResults()) {
emitCse(equivalenceGroup, modelOp, dynamicOp, symbolTable, rewriter);
Expand Down
6 changes: 2 additions & 4 deletions test/Dialect/BaseModelica/Transforms/CallCSE/basic-cse.mlir
Original file line number Diff line number Diff line change
Expand Up @@ -55,17 +55,15 @@ module @Test {
bmodelica.equation_instance %t1 : !bmodelica.equation
}

// CHECK: %[[TEMPLATE:.*]] = bmodelica.equation_template inductions = [] {
// CHECK: %[[TEMPLATE:.*]] = bmodelica.equation_template inductions = []
// CHECK-NEXT: %[[RES2:.*]] = bmodelica.variable_get @[[CSE]]
// CHECK-NEXT: %[[LHS2:.*]] = bmodelica.equation_side %[[RES2]]
// CHECK-NEXT: %[[RES3:.*]] = bmodelica.constant 1
// CHECK-NEXT: %[[RES4:.*]] = bmodelica.call @foo(%[[RES3]])
// CHECK-NEXT: %[[RHS:.*]] = bmodelica.equation_side %[[RES4]]
// CHECK-NEXT: bmodelica.equation_sides %[[LHS2]], %[[RHS]]
// CHECK-NEXT: }

// CHECK-NEXT: bmodelica.dynamic {
// CHECK: bmodelica.dynamic
// CHECK-NEXT: bmodelica.equation_instance %[[TEMPLATE]]
// CHECK-NEXT: }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ module @Test {
bmodelica.equation_instance %t1 : !bmodelica.equation
}

// CHECK: %[[TEMPLATE:.*]] = bmodelica.equation_template inductions = [] {
// CHECK: %[[TEMPLATE:.*]] = bmodelica.equation_template inductions = []
// CHECK-NEXT: %[[RES2:.*]] = bmodelica.variable_get @[[CSE]]
// CHECK-NEXT: %[[LHS2:.*]] = bmodelica.equation_side %[[RES2]]
// CHECK-DAG: %[[C1:.*]] = bmodelica.constant 1
Expand All @@ -77,9 +77,8 @@ module @Test {
// CHECK-NEXT: %[[RES4:.*]] = bmodelica.call @foo(%[[POW]])
// CHECK-NEXT: %[[RHS:.*]] = bmodelica.equation_side %[[RES4]]
// CHECK-NEXT: bmodelica.equation_sides %[[LHS2]], %[[RHS]]
// CHECK-NEXT: }

// CHECK-NEXT: bmodelica.dynamic {
// CHECK: bmodelica.dynamic
// CHECK-NEXT: bmodelica.equation_instance %[[TEMPLATE]]
}
}
11 changes: 4 additions & 7 deletions test/Dialect/BaseModelica/Transforms/CallCSE/multiple-calls.mlir
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ module @Test {
}
}

// CHECK: bmodelica.model
// CHECK-LABEL: @M
bmodelica.model @M {
// CHECK-NEXT: bmodelica.variable @[[CSE1:.*]] : !bmodelica.variable<f64>
// CHECK-NEXT: bmodelica.variable @[[CSE0:.*]] : !bmodelica.variable<f64>
Expand Down Expand Up @@ -92,7 +92,7 @@ module @Test {
bmodelica.equation_instance %t2 : !bmodelica.equation
}

// CHECK: %[[T0:.*]] = bmodelica.equation_template inductions = [] {
// CHECK: %[[T0:.*]] = bmodelica.equation_template inductions = []
// CHECK-NEXT: %[[RES0:.*]] = bmodelica.variable_get @[[CSE0]]
// CHECK-NEXT: %[[LHS:.*]] = bmodelica.equation_side %[[RES0]]
// CHECK-DAG: %[[RES1:.*]] = bmodelica.constant 1
Expand All @@ -101,9 +101,8 @@ module @Test {
// CHECK-NEXT: %[[RES4:.*]] = bmodelica.call @foo(%[[RES3]])
// CHECK-NEXT: %[[RHS:.*]] = bmodelica.equation_side %[[RES4]]
// CHECK-NEXT: bmodelica.equation_sides %[[LHS]], %[[RHS]]
// CHECK-NEXT: }

// CHECK: %[[T1:.*]] = bmodelica.equation_template inductions = [] {
// CHECK: %[[T1:.*]] = bmodelica.equation_template inductions = []
// CHECK-NEXT: %[[RES0:.*]] = bmodelica.variable_get @[[CSE1]]
// CHECK-NEXT: %[[LHS:.*]] = bmodelica.equation_side %[[RES0]]
// CHECK-DAG: %[[RES1:.*]] = bmodelica.constant 2
Expand All @@ -112,11 +111,9 @@ module @Test {
// CHECK-NEXT: %[[RES4:.*]] = bmodelica.call @foo(%[[RES3]])
// CHECK-NEXT: %[[RHS:.*]] = bmodelica.equation_side %[[RES4]]
// CHECK-NEXT: bmodelica.equation_sides %[[LHS]], %[[RHS]]
// CHECK-NEXT: }

// CHECK: bmodelica.dynamic {
// CHECK: bmodelica.dynamic
// CHECK-DAG: bmodelica.equation_instance %[[T0]]
// CHECK-DAG: bmodelica.equation_instance %[[T1]]
// CHECK-NEXT: }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,27 +59,24 @@ module @Test {
bmodelica.equation_instance %t1 : !bmodelica.equation
}

// CHECK: %[[TEMPLATE1:.*]] = bmodelica.equation_template inductions = [] {
// CHECK: %[[TEMPLATE1:.*]] = bmodelica.equation_template inductions = []
// CHECK-NEXT: %[[RES2:.*]] = bmodelica.variable_get @[[CSE0]]
// CHECK-NEXT: %[[LHS2:.*]] = bmodelica.equation_side %[[RES2]]
// CHECK-NEXT: %[[RES3:.*]] = bmodelica.constant 1
// CHECK-NEXT: %[[RES4:.*]]:2 = bmodelica.call @foo(%[[RES3]])
// CHECK-NEXT: %[[RHS0:.*]] = bmodelica.equation_side %[[RES4]]#0
// CHECK-NEXT: bmodelica.equation_sides %[[LHS2]], %[[RHS0]]
// CHECK-NEXT: }

// CHECK-NEXT: %[[TEMPLATE2:.*]] = bmodelica.equation_template inductions = [] {
// CHECK: %[[TEMPLATE2:.*]] = bmodelica.equation_template inductions = []
// CHECK-NEXT: %[[RES2:.*]] = bmodelica.variable_get @[[CSE1]]
// CHECK-NEXT: %[[LHS2:.*]] = bmodelica.equation_side %[[RES2]]
// CHECK-NEXT: %[[RES3:.*]] = bmodelica.constant 1
// CHECK-NEXT: %[[RES4:.*]]:2 = bmodelica.call @foo(%[[RES3]])
// CHECK-NEXT: %[[RHS0:.*]] = bmodelica.equation_side %[[RES4]]#1
// CHECK-NEXT: bmodelica.equation_sides %[[LHS2]], %[[RHS0]]
// CHECK-NEXT: }

// CHECK-NEXT: bmodelica.dynamic {
// CHECK: bmodelica.dynamic
// CHECK-NEXT: bmodelica.equation_instance %[[TEMPLATE1]]
// CHECK-NEXT: bmodelica.equation_instance %[[TEMPLATE2]]
// CHECK-NEXT: }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ module @Test {
bmodelica.equation_instance %t1 : !bmodelica.equation
}

// CHECK: %[[TEMPLATE:.*]] = bmodelica.equation_template inductions = [] {
// CHECK: %[[TEMPLATE:.*]] = bmodelica.equation_template inductions = []
// CHECK-NEXT: %[[RES:.*]] = bmodelica.variable_get @[[CSE]]
// CHECK-NEXT: %[[LHS:.*]] = bmodelica.equation_side %[[RES]]
// CHECK-DAG: %[[c:.*]] = bmodelica.constant 2
Expand All @@ -94,10 +94,8 @@ module @Test {
// CHECK: %[[RES1:.*]] = bmodelica.call @foo(%[[red]])
// CHECK-NEXT: %[[RHS:.*]] = bmodelica.equation_side %[[RES1]]
// CHECK-NEXT: bmodelica.equation_sides %[[LHS]], %[[RHS]]
// CHECK-NEXT: }

// CHECK: bmodelica.dynamic {
// CHECK: bmodelica.dynamic
// CHECK-NEXT: bmodelica.equation_instance %[[TEMPLATE]]
// CHECK-NEXT: }
}
}

0 comments on commit f9d8329

Please sign in to comment.