Skip to content

Commit 56e0cd8

Browse files
committed
Lower neon_vqdmlal, neon_vqdmlsl
1 parent 94289aa commit 56e0cd8

File tree

2 files changed

+240
-196
lines changed

2 files changed

+240
-196
lines changed

clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2365,6 +2365,21 @@ mlir::Value CIRGenFunction::emitCommonNeonBuiltinExpr(
23652365
: "aarch64.neon.saddlp",
23662366
vTy, getLoc(e->getExprLoc()));
23672367
}
2368+
case NEON::BI__builtin_neon_vqdmlal_v:
2369+
case NEON::BI__builtin_neon_vqdmlsl_v: {
2370+
llvm::SmallVector<mlir::Value, 2> mulOps(ops.begin() + 1, ops.end());
2371+
cir::VectorType mulSrcTy = builder.getExtendedOrTruncatedElementVectorType(
2372+
vTy, false /* truncate */,
2373+
mlir::cast<cir::IntType>(vTy.getEltType()).isSigned());
2374+
ops[1] = emitNeonCall(builder, {mulSrcTy, mulSrcTy}, mulOps,
2375+
"aarch64.neon.sqdmull", vTy, getLoc(e->getExprLoc()));
2376+
ops.resize(2);
2377+
return emitNeonCall(builder, {vTy, vTy}, ops,
2378+
builtinID == NEON::BI__builtin_neon_vqdmlal_v
2379+
? "aarch64.neon.sqadd"
2380+
: "aarch64.neon.sqsub",
2381+
vTy, getLoc(e->getExprLoc()));
2382+
}
23682383
case NEON::BI__builtin_neon_vext_v:
23692384
case NEON::BI__builtin_neon_vextq_v: {
23702385
int cv = getIntValueFromConstOp(ops[2]);

0 commit comments

Comments
 (0)