Skip to content

Commit f4df65d

Browse files
author
Simon Camphausen
committed
[mlir][EmitC] Remove unreachable code and fix Windows build warning
1 parent bc82d1a commit f4df65d

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

mlir/lib/Target/Cpp/TranslateToCpp.cpp

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,12 @@ inline LogicalResult interleaveCommaWithError(const Container &c,
6868

6969
/// Return the precedence of a operator as an integer, higher values
7070
/// imply higher precedence.
71-
static int getOperatorPrecedence(Operation *operation) {
72-
return llvm::TypeSwitch<Operation *, int>(operation)
71+
static FailureOr<int> getOperatorPrecedence(Operation *operation) {
72+
return llvm::TypeSwitch<Operation *, FailureOr<int>>(operation)
7373
.Case<emitc::AddOp>([&](auto op) { return 11; })
7474
.Case<emitc::ApplyOp>([&](auto op) { return 13; })
7575
.Case<emitc::CastOp>([&](auto op) { return 13; })
76-
.Case<emitc::CmpOp>([&](auto op) {
76+
.Case<emitc::CmpOp>([&](auto op) -> FailureOr<int> {
7777
switch (op.getPredicate()) {
7878
case emitc::CmpPredicate::eq:
7979
case emitc::CmpPredicate::ne:
@@ -86,13 +86,14 @@ static int getOperatorPrecedence(Operation *operation) {
8686
case emitc::CmpPredicate::three_way:
8787
return 10;
8888
}
89+
return op->emitError("unsupported cmp predicate");
8990
})
9091
.Case<emitc::DivOp>([&](auto op) { return 12; })
9192
.Case<emitc::MulOp>([&](auto op) { return 12; })
9293
.Case<emitc::RemOp>([&](auto op) { return 12; })
9394
.Case<emitc::SubOp>([&](auto op) { return 11; })
94-
.Case<emitc::CallOpaqueOp>([&](auto op) { return 14; });
95-
llvm_unreachable("Unsupported operator");
95+
.Case<emitc::CallOpaqueOp>([&](auto op) { return 14; })
96+
.Default([](auto op) { return op->emitError("unsupported operation"); });
9697
}
9798

9899
namespace {
@@ -1072,7 +1073,10 @@ LogicalResult CppEmitter::emitExpression(ExpressionOp expressionOp) {
10721073
Operation *rootOp = expressionOp.getRootOp();
10731074

10741075
emittedExpression = expressionOp;
1075-
pushExpressionPrecedence(getOperatorPrecedence(rootOp));
1076+
FailureOr<int> precedence = getOperatorPrecedence(rootOp);
1077+
if (failed(precedence))
1078+
return failure();
1079+
pushExpressionPrecedence(precedence.value());
10761080

10771081
if (failed(emitOperation(*rootOp, /*trailingSemicolon=*/false)))
10781082
return failure();
@@ -1089,13 +1093,15 @@ LogicalResult CppEmitter::emitOperand(Value value) {
10891093
if (isPartOfCurrentExpression(value)) {
10901094
Operation *def = value.getDefiningOp();
10911095
assert(def && "Expected operand to be defined by an operation");
1092-
int precedence = getOperatorPrecedence(def);
1093-
bool encloseInParenthesis = precedence < getExpressionPrecedence();
1096+
FailureOr<int> precedence = getOperatorPrecedence(def);
1097+
if (failed(precedence))
1098+
return failure();
1099+
bool encloseInParenthesis = precedence.value() < getExpressionPrecedence();
10941100
if (encloseInParenthesis) {
10951101
os << "(";
10961102
pushExpressionPrecedence(lowestPrecedence());
10971103
} else
1098-
pushExpressionPrecedence(precedence);
1104+
pushExpressionPrecedence(precedence.value());
10991105

11001106
if (failed(emitOperation(*def, /*trailingSemicolon=*/false)))
11011107
return failure();

0 commit comments

Comments
 (0)