@@ -4325,11 +4325,16 @@ CIRGenFunction::emitAArch64BuiltinExpr(unsigned BuiltinID, const CallExpr *E,
4325
4325
case NEON::BI__builtin_neon_vaddlvq_u8: {
4326
4326
llvm_unreachable (" NEON::BI__builtin_neon_vaddlvq_u8 NYI" );
4327
4327
}
4328
- case NEON::BI__builtin_neon_vaddlvq_u16: {
4329
- mlir::Type argTy = cir::VectorType::get (builder.getContext (), UInt16Ty, 8 );
4328
+ case NEON::BI__builtin_neon_vaddlvq_u16:
4329
+ usgn = true ;
4330
+ [[fallthrough]];
4331
+ case NEON::BI__builtin_neon_vaddlvq_s16: {
4332
+ mlir::Type argTy = cir::VectorType::get (builder.getContext (),
4333
+ usgn ? UInt16Ty : SInt16Ty, 8 );
4330
4334
llvm::SmallVector<mlir::Value, 1 > argOps = {emitScalarExpr (E->getArg (0 ))};
4331
- return emitNeonCall (builder, {argTy}, argOps, " aarch64.neon.uaddlv" ,
4332
- UInt32Ty, getLoc (E->getExprLoc ()));
4335
+ return emitNeonCall (builder, {argTy}, argOps,
4336
+ usgn ? " aarch64.neon.uaddlv" : " aarch64.neon.saddlv" ,
4337
+ usgn ? UInt32Ty : SInt32Ty, getLoc (E->getExprLoc ()));
4333
4338
}
4334
4339
case NEON::BI__builtin_neon_vaddlv_s8: {
4335
4340
llvm_unreachable (" NEON::BI__builtin_neon_vaddlv_s8 NYI" );
@@ -4340,9 +4345,6 @@ CIRGenFunction::emitAArch64BuiltinExpr(unsigned BuiltinID, const CallExpr *E,
4340
4345
case NEON::BI__builtin_neon_vaddlvq_s8: {
4341
4346
llvm_unreachable (" NEON::BI__builtin_neon_vaddlvq_s8 NYI" );
4342
4347
}
4343
- case NEON::BI__builtin_neon_vaddlvq_s16: {
4344
- llvm_unreachable (" NEON::BI__builtin_neon_vaddlvq_s16 NYI" );
4345
- }
4346
4348
case NEON::BI__builtin_neon_vsri_n_v:
4347
4349
case NEON::BI__builtin_neon_vsriq_n_v: {
4348
4350
llvm_unreachable (" NEON::BI__builtin_neon_vsriq_n_v NYI" );
0 commit comments