Skip to content

Commit fca5cf6

Browse files
committed
chore: fix compilation issue.
1 parent 6c949aa commit fca5cf6

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

mlir/lib/Dialect/PDL/IR/Builtins.cpp

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,20 +85,26 @@ LogicalResult static unaryOp(PatternRewriter &rewriter, PDLResultList &results,
8585

8686
results.push_back(rewriter.getIntegerAttr(integerType, resultInt));
8787
} else if constexpr (T == UnaryOpKind::log2) {
88-
auto getIntegerAsAttr = [&](const APSInt &value) {
88+
auto getIntegerAsAttr = [&](const APSInt &value) -> Attribute {
89+
// Only calculate values for exact log2.
8990
int32_t log2Value = value.exactLogBase2();
9091
if (log2Value < 0)
91-
return failure();
92+
return Attribute();
9293
return rewriter.getIntegerAttr(
9394
integerType,
9495
APSInt(APInt(bitWidth, log2Value), integerType.isUnsigned()));
9596
};
9697
// for log2 we treat signless integer as signed
98+
Attribute log2IntegerAttr;
9799
if (integerType.isSignless())
98-
results.push_back(
99-
getIntegerAsAttr(APSInt(operandIntAttr.getValue(), false)));
100+
log2IntegerAttr =
101+
getIntegerAsAttr(APSInt(operandIntAttr.getValue(), false));
100102
else
101-
results.push_back(getIntegerAsAttr(operandIntAttr.getAPSInt()));
103+
log2IntegerAttr = getIntegerAsAttr(operandIntAttr.getAPSInt());
104+
// Return failure if log2 value isn't exact.
105+
if (!log2IntegerAttr)
106+
return failure();
107+
results.push_back(log2IntegerAttr);
102108
} else if constexpr (T == UnaryOpKind::abs) {
103109
if (integerType.isSigned()) {
104110
// check overflow

0 commit comments

Comments
 (0)