Skip to content

Commit aa4b1bf

Browse files
author
Simon Camphausen
committed
Skip parenthesis where its safe
1 parent f5e1d95 commit aa4b1bf

File tree

3 files changed

+24
-18
lines changed

3 files changed

+24
-18
lines changed

mlir/lib/Target/Cpp/TranslateToCpp.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1339,10 +1339,16 @@ LogicalResult CppEmitter::emitOperand(Value value) {
13391339

13401340
auto expressionOp = dyn_cast_if_present<ExpressionOp>(value.getDefiningOp());
13411341
if (expressionOp && shouldBeInlined(expressionOp)) {
1342-
os << "(";
1342+
Operation *user = *expressionOp->getUsers().begin();
1343+
const bool safeToSkipParentheses =
1344+
isa<emitc::AssignOp, emitc::CallOp, emitc::CallOpaqueOp, emitc::ForOp,
1345+
emitc::IfOp, emitc::ReturnOp, func::CallOp, func::ReturnOp>(user);
1346+
if (!safeToSkipParentheses)
1347+
os << "(";
13431348
if (failed(emitExpression(expressionOp)))
13441349
return failure();
1345-
os << ")";
1350+
if (!safeToSkipParentheses)
1351+
os << ")";
13461352
return success();
13471353
}
13481354

mlir/test/Target/Cpp/expressions.mlir

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,11 @@ func.func @do_not_inline(%arg0: i32, %arg1: i32, %arg2 : i32) -> i32 {
6666
}
6767

6868
// CPP-DEFAULT: float parentheses_for_low_precedence(int32_t [[VAL_1:v[0-9]+]], int32_t [[VAL_2:v[0-9]+]], int32_t [[VAL_3:v[0-9]+]]) {
69-
// CPP-DEFAULT-NEXT: return ((float) ([[VAL_1]] + [[VAL_2]] * [[VAL_3]]));
69+
// CPP-DEFAULT-NEXT: return (float) ([[VAL_1]] + [[VAL_2]] * [[VAL_3]]);
7070
// CPP-DEFAULT-NEXT: }
7171

7272
// CPP-DECLTOP: float parentheses_for_low_precedence(int32_t [[VAL_1:v[0-9]+]], int32_t [[VAL_2:v[0-9]+]], int32_t [[VAL_3:v[0-9]+]]) {
73-
// CPP-DECLTOP-NEXT: return ((float) ([[VAL_1]] + [[VAL_2]] * [[VAL_3]]));
73+
// CPP-DECLTOP-NEXT: return (float) ([[VAL_1]] + [[VAL_2]] * [[VAL_3]]);
7474
// CPP-DECLTOP-NEXT: }
7575

7676
func.func @parentheses_for_low_precedence(%arg0: i32, %arg1: i32, %arg2: i32) -> f32 {
@@ -84,11 +84,11 @@ func.func @parentheses_for_low_precedence(%arg0: i32, %arg1: i32, %arg2: i32) ->
8484
}
8585

8686
// CPP-DEFAULT: int32_t parentheses_for_same_precedence(int32_t [[VAL_1:v[0-9]+]], int32_t [[VAL_2:v[0-9]+]], int32_t [[VAL_3:v[0-9]+]]) {
87-
// CPP-DEFAULT-NEXT: return ([[VAL_3]] / ([[VAL_1]] * [[VAL_2]]));
87+
// CPP-DEFAULT-NEXT: return [[VAL_3]] / ([[VAL_1]] * [[VAL_2]]);
8888
// CPP-DEFAULT-NEXT: }
8989

9090
// CPP-DECLTOP: int32_t parentheses_for_same_precedence(int32_t [[VAL_1:v[0-9]+]], int32_t [[VAL_2:v[0-9]+]], int32_t [[VAL_3:v[0-9]+]]) {
91-
// CPP-DECLTOP-NEXT: return ([[VAL_3]] / ([[VAL_1]] * [[VAL_2]]));
91+
// CPP-DECLTOP-NEXT: return [[VAL_3]] / ([[VAL_1]] * [[VAL_2]]);
9292
// CPP-DECLTOP-NEXT: }
9393
func.func @parentheses_for_same_precedence(%arg0: i32, %arg1: i32, %arg2: i32) -> i32 {
9494
%e = emitc.expression : i32 {
@@ -104,11 +104,11 @@ func.func @parentheses_for_same_precedence(%arg0: i32, %arg1: i32, %arg2: i32) -
104104
// CPP-DEFAULT-NEXT: int32_t v4 = 0;
105105
// CPP-DEFAULT-NEXT: bool v5 = (bool) ([[VAL_3]] / ([[VAL_1]] * [[VAL_2]]));
106106
// CPP-DEFAULT-NEXT: int32_t v6 = ([[VAL_3]] / ([[VAL_1]] * [[VAL_2]])) + v4;
107-
// CPP-DEFAULT-NEXT: int32_t v7 = bar(([[VAL_3]] / ([[VAL_1]] * [[VAL_2]])), v4);
107+
// CPP-DEFAULT-NEXT: int32_t v7 = bar([[VAL_3]] / ([[VAL_1]] * [[VAL_2]]), v4);
108108
// CPP-DEFAULT-NEXT: int32_t v8 = v5 ? ([[VAL_3]] / ([[VAL_1]] * [[VAL_2]])) : v4;
109109
// CPP-DEFAULT-NEXT: int32_t v9;
110-
// CPP-DEFAULT-NEXT: v9 = ([[VAL_3]] / ([[VAL_1]] * [[VAL_2]]));
111-
// CPP-DEFAULT-NEXT: return ([[VAL_3]] / ([[VAL_1]] * [[VAL_2]]));
110+
// CPP-DEFAULT-NEXT: v9 = [[VAL_3]] / ([[VAL_1]] * [[VAL_2]]);
111+
// CPP-DEFAULT-NEXT: return [[VAL_3]] / ([[VAL_1]] * [[VAL_2]]);
112112
// CPP-DEFAULT-NEXT: }
113113

114114
// CPP-DECLTOP: int32_t parentheses_for_expression_users(int32_t [[VAL_1:v[0-9]+]], int32_t [[VAL_2:v[0-9]+]], int32_t [[VAL_3:v[0-9]+]]) {
@@ -121,11 +121,11 @@ func.func @parentheses_for_same_precedence(%arg0: i32, %arg1: i32, %arg2: i32) -
121121
// CPP-DECLTOP-NEXT: v4 = 0;
122122
// CPP-DECLTOP-NEXT: v5 = (bool) ([[VAL_3]] / ([[VAL_1]] * [[VAL_2]]));
123123
// CPP-DECLTOP-NEXT: v6 = ([[VAL_3]] / ([[VAL_1]] * [[VAL_2]])) + v4;
124-
// CPP-DECLTOP-NEXT: v7 = bar(([[VAL_3]] / ([[VAL_1]] * [[VAL_2]])), v4);
124+
// CPP-DECLTOP-NEXT: v7 = bar([[VAL_3]] / ([[VAL_1]] * [[VAL_2]]), v4);
125125
// CPP-DECLTOP-NEXT: v8 = v5 ? ([[VAL_3]] / ([[VAL_1]] * [[VAL_2]])) : v4;
126126
// CPP-DECLTOP-NEXT: ;
127-
// CPP-DECLTOP-NEXT: v9 = ([[VAL_3]] / ([[VAL_1]] * [[VAL_2]]));
128-
// CPP-DECLTOP-NEXT: return ([[VAL_3]] / ([[VAL_1]] * [[VAL_2]]));
127+
// CPP-DECLTOP-NEXT: v9 = [[VAL_3]] / ([[VAL_1]] * [[VAL_2]]);
128+
// CPP-DECLTOP-NEXT: return [[VAL_3]] / ([[VAL_1]] * [[VAL_2]]);
129129
// CPP-DECLTOP-NEXT: }
130130
func.func @parentheses_for_expression_users(%arg0: i32, %arg1: i32, %arg2: i32) -> i32 {
131131
%c0 = "emitc.constant"() {value = 0 : i32} : () -> i32
@@ -222,7 +222,7 @@ func.func @multiple_uses(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32) -> i32
222222
// CPP-DEFAULT-NEXT: int32_t [[VAL_5:v[0-9]+]] = [[VAL_3]] % [[VAL_4]];
223223
// CPP-DEFAULT-NEXT: int32_t [[VAL_6:v[0-9]+]] = bar([[VAL_5]], [[VAL_1]] * [[VAL_2]]);
224224
// CPP-DEFAULT-NEXT: int32_t [[VAL_7:v[0-9]+]];
225-
// CPP-DEFAULT-NEXT: if (([[VAL_6]] - [[VAL_4]] < [[VAL_2]])) {
225+
// CPP-DEFAULT-NEXT: if ([[VAL_6]] - [[VAL_4]] < [[VAL_2]]) {
226226
// CPP-DEFAULT-NEXT: [[VAL_7]] = [[VAL_1]];
227227
// CPP-DEFAULT-NEXT: } else {
228228
// CPP-DEFAULT-NEXT: [[VAL_7]] = [[VAL_1]];
@@ -237,7 +237,7 @@ func.func @multiple_uses(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32) -> i32
237237
// CPP-DECLTOP-NEXT: [[VAL_5]] = [[VAL_3]] % [[VAL_4]];
238238
// CPP-DECLTOP-NEXT: [[VAL_6]] = bar([[VAL_5]], [[VAL_1]] * [[VAL_2]]);
239239
// CPP-DECLTOP-NEXT: ;
240-
// CPP-DECLTOP-NEXT: if (([[VAL_6]] - [[VAL_4]] < [[VAL_2]])) {
240+
// CPP-DECLTOP-NEXT: if ([[VAL_6]] - [[VAL_4]] < [[VAL_2]]) {
241241
// CPP-DECLTOP-NEXT: [[VAL_7]] = [[VAL_1]];
242242
// CPP-DECLTOP-NEXT: } else {
243243
// CPP-DECLTOP-NEXT: [[VAL_7]] = [[VAL_1]];
@@ -273,13 +273,13 @@ func.func @different_expressions(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32)
273273

274274
// CPP-DEFAULT: bool expression_with_address_taken(int32_t [[VAL_1:v[0-9]+]], int32_t [[VAL_2:v[0-9]+]], int32_t* [[VAL_3]]) {
275275
// CPP-DEFAULT-NEXT: int32_t [[VAL_4:v[0-9]+]] = [[VAL_1]] % [[VAL_2]];
276-
// CPP-DEFAULT-NEXT: return (&[[VAL_4]] - [[VAL_2]] < [[VAL_3]]);
276+
// CPP-DEFAULT-NEXT: return &[[VAL_4]] - [[VAL_2]] < [[VAL_3]];
277277
// CPP-DEFAULT-NEXT: }
278278

279279
// CPP-DECLTOP: bool expression_with_address_taken(int32_t [[VAL_1:v[0-9]+]], int32_t [[VAL_2:v[0-9]+]], int32_t* [[VAL_3]]) {
280280
// CPP-DECLTOP-NEXT: int32_t [[VAL_4:v[0-9]+]];
281281
// CPP-DECLTOP-NEXT: [[VAL_4]] = [[VAL_1]] % [[VAL_2]];
282-
// CPP-DECLTOP-NEXT: return (&[[VAL_4]] - [[VAL_2]] < [[VAL_3]]);
282+
// CPP-DECLTOP-NEXT: return &[[VAL_4]] - [[VAL_2]] < [[VAL_3]];
283283
// CPP-DECLTOP-NEXT: }
284284

285285
func.func @expression_with_address_taken(%arg0: i32, %arg1: i32, %arg2: !emitc.ptr<i32>) -> i1 {

mlir/test/Target/Cpp/for.mlir

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@ func.func @test_for(%arg0 : index, %arg1 : index, %arg2 : index) {
2020
return
2121
}
2222
// CPP-DEFAULT: void test_for(size_t [[V1:[^ ]*]], size_t [[V2:[^ ]*]], size_t [[V3:[^ ]*]]) {
23-
// CPP-DEFAULT-NEXT: for (size_t [[ITER:[^ ]*]] = ([[V1]] + [[V2]]); [[ITER]] < (([[V2]] * [[V3]])); [[ITER]] += ([[V1]] / [[V3]])) {
23+
// CPP-DEFAULT-NEXT: for (size_t [[ITER:[^ ]*]] = [[V1]] + [[V2]]; [[ITER]] < ([[V2]] * [[V3]]); [[ITER]] += [[V1]] / [[V3]]) {
2424
// CPP-DEFAULT-NEXT: int32_t [[V4:[^ ]*]] = f();
2525
// CPP-DEFAULT-NEXT: }
2626
// CPP-DEFAULT-NEXT: return;
2727

2828
// CPP-DECLTOP: void test_for(size_t [[V1:[^ ]*]], size_t [[V2:[^ ]*]], size_t [[V3:[^ ]*]]) {
2929
// CPP-DECLTOP-NEXT: int32_t [[V4:[^ ]*]];
30-
// CPP-DECLTOP-NEXT: for (size_t [[ITER:[^ ]*]] = ([[V1]] + [[V2]]); [[ITER]] < (([[V2]] * [[V3]])); [[ITER]] += ([[V1]] / [[V3]])) {
30+
// CPP-DECLTOP-NEXT: for (size_t [[ITER:[^ ]*]] = [[V1]] + [[V2]]; [[ITER]] < ([[V2]] * [[V3]]); [[ITER]] += [[V1]] / [[V3]]) {
3131
// CPP-DECLTOP-NEXT: [[V4]] = f();
3232
// CPP-DECLTOP-NEXT: }
3333
// CPP-DECLTOP-NEXT: return;

0 commit comments

Comments
 (0)