Skip to content

Commit 0c3aabb

Browse files
committed
[mlir][emitc] Changes after review
1 parent d2e6f15 commit 0c3aabb

File tree

4 files changed

+30
-13
lines changed

4 files changed

+30
-13
lines changed

mlir/include/mlir/Dialect/EmitC/IR/EmitC.td

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -896,6 +896,12 @@ def EmitC_LiteralOp : EmitC_Op<"literal", [Pure, CExpressionInterface]> {
896896

897897
let hasVerifier = 1;
898898
let assemblyFormat = "$value attr-dict `:` type($result)";
899+
900+
let extraClassDeclaration = [{
901+
bool hasSideEffects() {
902+
return false;
903+
}
904+
}];
899905
}
900906

901907
def EmitC_LogicalAndOp : EmitC_BinaryOp<"logical_and", []> {

mlir/lib/Target/Cpp/TranslateToCpp.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ static FailureOr<int> getOperatorPrecedence(Operation *operation) {
100100
.Case<emitc::ConstantOp>([&](auto op) { return 17; })
101101
.Case<emitc::DivOp>([&](auto op) { return 13; })
102102
.Case<emitc::LoadOp>([&](auto op) { return 16; })
103-
.Case<emitc::LiteralOp>([&](auto op) { return 16; })
103+
.Case<emitc::LiteralOp>([&](auto op) { return 17; })
104104
.Case<emitc::LogicalAndOp>([&](auto op) { return 4; })
105105
.Case<emitc::LogicalNotOp>([&](auto op) { return 15; })
106106
.Case<emitc::LogicalOrOp>([&](auto op) { return 3; })

mlir/test/Dialect/EmitC/form-expressions.mlir

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -211,20 +211,14 @@ func.func @expression_with_constant(%arg0: i32) -> i32 {
211211

212212
// CHECK-LABEL: func.func @expression_with_literal(
213213
// CHECK-SAME: %[[ARG0:.*]]: i32) -> i1 {
214-
// CHECK: %[[VAL_0:.*]] = emitc.expression : i32 {
214+
// CHECK: %[[VAL_0:.*]] = emitc.expression : i1 {
215215
// CHECK: %[[VAL_1:.*]] = literal "1" : i32
216-
// CHECK: yield %[[VAL_1]] : i32
216+
// CHECK: %[[VAL_2:.*]] = literal "2" : i32
217+
// CHECK: %[[VAL_3:.*]] = add %[[VAL_1]], %[[VAL_2]] : (i32, i32) -> i32
218+
// CHECK: %[[VAL_4:.*]] = cmp lt, %[[VAL_3]], %[[ARG0]] : (i32, i32) -> i1
219+
// CHECK: yield %[[VAL_4]] : i1
217220
// CHECK: }
218-
// CHECK: %[[VAL_2:.*]] = emitc.expression : i32 {
219-
// CHECK: %[[VAL_3:.*]] = literal "2" : i32
220-
// CHECK: yield %[[VAL_3]] : i32
221-
// CHECK: }
222-
// CHECK: %[[VAL_4:.*]] = emitc.expression : i1 {
223-
// CHECK: %[[VAL_5:.*]] = add %[[VAL_0]], %[[VAL_2]] : (i32, i32) -> i32
224-
// CHECK: %[[VAL_6:.*]] = cmp lt, %[[VAL_5]], %[[ARG0]] : (i32, i32) -> i1
225-
// CHECK: yield %[[VAL_6]] : i1
226-
// CHECK: }
227-
// CHECK: return %[[VAL_4]] : i1
221+
// CHECK: return %[[VAL_0]] : i1
228222
// CHECK: }
229223

230224
func.func @expression_with_literal(%arg0: i32) -> i1 {

mlir/test/Target/Cpp/expressions.mlir

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -484,3 +484,20 @@ func.func @expression_with_literal(%arg0 : i32) -> i1 {
484484

485485
return %ret : i1
486486
}
487+
488+
489+
// CPP-DEFAULT: int32_t single_literal_in_expression() {
490+
// CPP-DEFAULT-NEXT: return 42;
491+
// CPP-DEFAULT-NEXT: }
492+
493+
// CPP-DECLTOP: int32_t single_literal_in_expression() {
494+
// CPP-DECLTOP-NEXT: return 42;
495+
// CPP-DECLTOP-NEXT: }
496+
497+
func.func @single_literal_in_expression() -> i32 {
498+
%result = emitc.expression : i32 {
499+
%lit = emitc.literal "42" : i32
500+
emitc.yield %lit : i32
501+
}
502+
return %result : i32
503+
}

0 commit comments

Comments
 (0)