[mlir][sparse] simplify negi code generation with subi

The lack of negi details leaked from merger class into codegen part.
Also, special case for vector code was not needed, the type can be used directly!

Reviewed By: bixia

Differential Revision: https://reviews.llvm.org/D110677
This commit is contained in:
Aart Bik 2021-09-28 22:48:32 -07:00
parent d35702efe7
commit 7f1cb43d60
2 changed files with 7 additions and 12 deletions

View File

@ -790,14 +790,6 @@ static Value genExp(Merger &merger, CodeGen &codegen, PatternRewriter &rewriter,
return genInvariantValue(merger, codegen, rewriter, exp);
Value v0 = genExp(merger, codegen, rewriter, op, merger.exp(exp).children.e0);
Value v1 = genExp(merger, codegen, rewriter, op, merger.exp(exp).children.e1);
if (merger.exp(exp).kind == Kind::kNegI) {
// TODO: no negi in std, need to make zero explicit.
Type tp = op.getOutputTensorTypes()[0].getElementType();
v1 = v0;
v0 = rewriter.create<ConstantOp>(loc, tp, rewriter.getZeroAttr(tp));
if (codegen.curVecLength > 1)
v0 = genVectorInvariantValue(codegen, rewriter, v0);
}
return merger.buildExp(rewriter, loc, exp, v0, v1);
}

View File

@ -568,7 +568,7 @@ Optional<unsigned> Merger::buildTensorExp(linalg::GenericOp op, Value v) {
if (isa<FloorFOp>(def))
return addExp(kFloorF, e);
if (isa<NegFOp>(def))
return addExp(kNegF, e); // TODO: no negi in std?
return addExp(kNegF, e); // no negi in std
if (isa<FPTruncOp>(def))
return addExp(kTruncF, e, v);
if (isa<FPExtOp>(def))
@ -651,9 +651,12 @@ Value Merger::buildExp(PatternRewriter &rewriter, Location loc, unsigned e,
return rewriter.create<FloorFOp>(loc, v0);
case kNegF:
return rewriter.create<NegFOp>(loc, v0);
case kNegI:
assert(v1); // no negi in std
return rewriter.create<SubIOp>(loc, v0, v1);
case kNegI: // no negi in std
return rewriter.create<SubIOp>(
loc,
rewriter.create<ConstantOp>(loc, v0.getType(),
rewriter.getZeroAttr(v0.getType())),
v0);
case kTruncF:
return rewriter.create<FPTruncOp>(loc, v0, inferType(e, v0));
case kExtF: