Skip to content

Commit 56efedd

Browse files
Simon Camphausenmgehre-amd
authored andcommitted
[mlir][EmitC] Remove unreachable code and fix Windows build warning (llvm#80677)
1 parent 9c6c868 commit 56efedd

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
@@ -69,12 +69,12 @@ inline LogicalResult interleaveCommaWithError(const Container &c,
6969

7070
/// Return the precedence of a operator as an integer, higher values
7171
/// imply higher precedence.
72-
static int getOperatorPrecedence(Operation *operation) {
73-
return llvm::TypeSwitch<Operation *, int>(operation)
72+
static FailureOr<int> getOperatorPrecedence(Operation *operation) {
73+
return llvm::TypeSwitch<Operation *, FailureOr<int>>(operation)
7474
.Case<emitc::AddOp>([&](auto op) { return 11; })
7575
.Case<emitc::ApplyOp>([&](auto op) { return 13; })
7676
.Case<emitc::CastOp>([&](auto op) { return 13; })
77-
.Case<emitc::CmpOp>([&](auto op) {
77+
.Case<emitc::CmpOp>([&](auto op) -> FailureOr<int> {
7878
switch (op.getPredicate()) {
7979
case emitc::CmpPredicate::eq:
8080
case emitc::CmpPredicate::ne:
@@ -87,13 +87,14 @@ static int getOperatorPrecedence(Operation *operation) {
8787
case emitc::CmpPredicate::three_way:
8888
return 10;
8989
}
90+
return op->emitError("unsupported cmp predicate");
9091
})
9192
.Case<emitc::DivOp>([&](auto op) { return 12; })
9293
.Case<emitc::MulOp>([&](auto op) { return 12; })
9394
.Case<emitc::RemOp>([&](auto op) { return 12; })
9495
.Case<emitc::SubOp>([&](auto op) { return 11; })
95-
.Case<emitc::CallOpaqueOp>([&](auto op) { return 14; });
96-
llvm_unreachable("Unsupported operator");
96+
.Case<emitc::CallOpaqueOp>([&](auto op) { return 14; })
97+
.Default([](auto op) { return op->emitError("unsupported operation"); });
9798
}
9899

99100
namespace {
@@ -1151,7 +1152,10 @@ LogicalResult CppEmitter::emitExpression(ExpressionOp expressionOp) {
11511152
Operation *rootOp = expressionOp.getRootOp();
11521153

11531154
emittedExpression = expressionOp;
1154-
pushExpressionPrecedence(getOperatorPrecedence(rootOp));
1155+
FailureOr<int> precedence = getOperatorPrecedence(rootOp);
1156+
if (failed(precedence))
1157+
return failure();
1158+
pushExpressionPrecedence(precedence.value());
11551159

11561160
if (failed(emitOperation(*rootOp, /*trailingSemicolon=*/false)))
11571161
return failure();
@@ -1168,13 +1172,15 @@ LogicalResult CppEmitter::emitOperand(Value value) {
11681172
if (isPartOfCurrentExpression(value)) {
11691173
Operation *def = value.getDefiningOp();
11701174
assert(def && "Expected operand to be defined by an operation");
1171-
int precedence = getOperatorPrecedence(def);
1172-
bool encloseInParenthesis = precedence < getExpressionPrecedence();
1175+
FailureOr<int> precedence = getOperatorPrecedence(def);
1176+
if (failed(precedence))
1177+
return failure();
1178+
bool encloseInParenthesis = precedence.value() < getExpressionPrecedence();
11731179
if (encloseInParenthesis) {
11741180
os << "(";
11751181
pushExpressionPrecedence(lowestPrecedence());
11761182
} else
1177-
pushExpressionPrecedence(precedence);
1183+
pushExpressionPrecedence(precedence.value());
11781184

11791185
if (failed(emitOperation(*def, /*trailingSemicolon=*/false)))
11801186
return failure();

0 commit comments

Comments
 (0)