@@ -2283,9 +2283,9 @@ emitCommonNeonCallPattern0(CIRGenFunction &cgf, llvm::StringRef intrincsName,
2283
2283
// Thus empty argTypes really just means {funcResTy, funcResTy}.
2284
2284
argTypes = {funcResTy, funcResTy};
2285
2285
}
2286
- mlir::Value res =
2287
- emitNeonCallToOp<cir::LLVMIntrinsicCallOp>( builder, std::move (argTypes), ops, intrincsName, funcResTy,
2288
- cgf.getLoc (e->getExprLoc ()));
2286
+ mlir::Value res = emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
2287
+ builder, std::move (argTypes), ops, intrincsName, funcResTy,
2288
+ cgf.getLoc (e->getExprLoc ()));
2289
2289
mlir::Type resultType = cgf.convertType (e->getType ());
2290
2290
return builder.createBitcast (res, resultType);
2291
2291
}
@@ -2306,8 +2306,8 @@ static mlir::Value emitCommonNeonVecAcrossCall(CIRGenFunction &cgf,
2306
2306
cir::VectorType vTy =
2307
2307
cir::VectorType::get (&cgf.getMLIRContext (), eltTy, vecLen);
2308
2308
llvm::SmallVector<mlir::Value, 1 > args{op};
2309
- return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(builder, {vTy}, args, intrincsName, eltTy,
2310
- cgf.getLoc (e->getExprLoc ()));
2309
+ return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
2310
+ builder, {vTy}, args, intrincsName, eltTy, cgf.getLoc (e->getExprLoc ()));
2311
2311
}
2312
2312
2313
2313
mlir::Value CIRGenFunction::emitCommonNeonBuiltinExpr (
@@ -2389,25 +2389,26 @@ mlir::Value CIRGenFunction::emitCommonNeonBuiltinExpr(
2389
2389
case NEON::BI__builtin_neon_vpaddlq_v: {
2390
2390
// The source operand type has twice as many elements of half the size.
2391
2391
cir::VectorType narrowTy = getHalfEltSizeTwiceNumElemsVecType (builder, vTy);
2392
- return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(builder, {narrowTy}, ops,
2393
- isUnsigned ? " aarch64.neon.uaddlp "
2394
- : " aarch64.neon.saddlp" ,
2395
- vTy, getLoc (e->getExprLoc ()));
2392
+ return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
2393
+ builder, {narrowTy}, ops,
2394
+ isUnsigned ? " aarch64.neon.uaddlp " : " aarch64.neon.saddlp" , vTy ,
2395
+ getLoc (e->getExprLoc ()));
2396
2396
}
2397
2397
case NEON::BI__builtin_neon_vqdmlal_v:
2398
2398
case NEON::BI__builtin_neon_vqdmlsl_v: {
2399
2399
llvm::SmallVector<mlir::Value, 2 > mulOps (ops.begin () + 1 , ops.end ());
2400
2400
cir::VectorType srcVty = builder.getExtendedOrTruncatedElementVectorType (
2401
2401
vTy, false , /* truncate */
2402
2402
mlir::cast<cir::IntType>(vTy.getEltType ()).isSigned ());
2403
- ops[1 ] = emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(builder, {srcVty, srcVty}, mulOps,
2404
- " aarch64.neon.sqdmull" , vTy, getLoc (e->getExprLoc ()));
2403
+ ops[1 ] = emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
2404
+ builder, {srcVty, srcVty}, mulOps, " aarch64.neon.sqdmull" , vTy,
2405
+ getLoc (e->getExprLoc ()));
2405
2406
ops.resize (2 );
2406
- return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(builder, {vTy, vTy}, ops,
2407
- builtinID == NEON::BI__builtin_neon_vqdmlal_v
2408
- ? " aarch64.neon.sqadd"
2409
- : " aarch64.neon.sqsub" ,
2410
- vTy, getLoc (e->getExprLoc ()));
2407
+ return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
2408
+ builder, {vTy, vTy}, ops,
2409
+ builtinID == NEON::BI__builtin_neon_vqdmlal_v ? " aarch64.neon.sqadd"
2410
+ : " aarch64.neon.sqsub" ,
2411
+ vTy, getLoc (e->getExprLoc ()));
2411
2412
}
2412
2413
case NEON::BI__builtin_neon_vcvt_f32_v:
2413
2414
case NEON::BI__builtin_neon_vcvtq_f32_v: {
@@ -2441,23 +2442,24 @@ mlir::Value CIRGenFunction::emitCommonNeonBuiltinExpr(
2441
2442
cir::VectorType mulVecT =
2442
2443
GetNeonType (this , NeonTypeFlags (neonType.getEltType (), false ,
2443
2444
/* isQuad*/ false ));
2444
- return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(builder, {resTy, mulVecT, SInt32Ty}, ops,
2445
- (builtinID == NEON::BI__builtin_neon_vqdmulhq_lane_v ||
2446
- builtinID == NEON::BI__builtin_neon_vqdmulh_lane_v)
2447
- ? " aarch64.neon.sqdmulh.lane"
2448
- : " aarch64.neon.sqrdmulh.lane" ,
2449
- resTy, getLoc (e->getExprLoc ()));
2445
+ return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
2446
+ builder, {resTy, mulVecT, SInt32Ty}, ops,
2447
+ (builtinID == NEON::BI__builtin_neon_vqdmulhq_lane_v ||
2448
+ builtinID == NEON::BI__builtin_neon_vqdmulh_lane_v)
2449
+ ? " aarch64.neon.sqdmulh.lane"
2450
+ : " aarch64.neon.sqrdmulh.lane" ,
2451
+ resTy, getLoc (e->getExprLoc ()));
2450
2452
}
2451
2453
case NEON::BI__builtin_neon_vqshlu_n_v:
2452
2454
case NEON::BI__builtin_neon_vqshluq_n_v: {
2453
2455
// These intrinsics expect signed vector type as input, but
2454
2456
// return unsigned vector type.
2455
2457
cir::VectorType srcTy = getSignChangedVectorType (builder, vTy);
2456
- return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(builder, {srcTy, srcTy}, ops, " aarch64.neon.sqshlu " ,
2457
- vTy, getLoc (e-> getExprLoc ()) ,
2458
- false , /* not fp constrained op */
2459
- 1 , /* second arg is shift amount */
2460
- false /* leftshift */ );
2458
+ return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
2459
+ builder, {srcTy, srcTy}, ops, " aarch64.neon.sqshlu " , vTy ,
2460
+ getLoc (e-> getExprLoc ()), false , /* not fp constrained op */
2461
+ 1 , /* second arg is shift amount */
2462
+ false /* leftshift */ );
2461
2463
}
2462
2464
case NEON::BI__builtin_neon_vrshr_n_v:
2463
2465
case NEON::BI__builtin_neon_vrshrq_n_v: {
@@ -2667,26 +2669,26 @@ static mlir::Value emitCommonNeonSISDBuiltinExpr(
2667
2669
case NEON::BI__builtin_neon_vaddlvq_s32:
2668
2670
llvm_unreachable (" neon_vaddlvq_s32 NYI " );
2669
2671
case NEON::BI__builtin_neon_vaddlvq_u32:
2670
- return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(builder, {argTy}, ops, " aarch64.neon.uaddlv " , resultTy,
2671
- loc);
2672
+ return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
2673
+ builder, {argTy}, ops, " aarch64.neon.uaddlv " , resultTy, loc);
2672
2674
case NEON::BI__builtin_neon_vaddv_f32:
2673
2675
case NEON::BI__builtin_neon_vaddvq_f32:
2674
2676
case NEON::BI__builtin_neon_vaddvq_f64:
2675
- return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(builder, {argTy}, ops, " aarch64.neon.faddv " , resultTy,
2676
- loc);
2677
+ return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
2678
+ builder, {argTy}, ops, " aarch64.neon.faddv " , resultTy, loc);
2677
2679
case NEON::BI__builtin_neon_vaddv_s32:
2678
2680
case NEON::BI__builtin_neon_vaddvq_s32:
2679
2681
case NEON::BI__builtin_neon_vaddvq_s64:
2680
- return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(builder, {argTy}, ops, " aarch64.neon.saddv " , resultTy,
2681
- loc);
2682
+ return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
2683
+ builder, {argTy}, ops, " aarch64.neon.saddv " , resultTy, loc);
2682
2684
case NEON::BI__builtin_neon_vaddv_u32:
2683
2685
case NEON::BI__builtin_neon_vaddvq_u32:
2684
2686
case NEON::BI__builtin_neon_vaddvq_u64:
2685
- return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(builder, {argTy}, ops, " aarch64.neon.uaddv " , resultTy,
2686
- loc);
2687
+ return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
2688
+ builder, {argTy}, ops, " aarch64.neon.uaddv " , resultTy, loc);
2687
2689
case NEON::BI__builtin_neon_vcaged_f64: {
2688
- return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(builder, {argTy}, ops, " aarch64.neon.facge " , resultTy,
2689
- loc);
2690
+ return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
2691
+ builder, {argTy}, ops, " aarch64.neon.facge " , resultTy, loc);
2690
2692
}
2691
2693
case NEON::BI__builtin_neon_vcages_f32:
2692
2694
llvm_unreachable (" neon_vcages_f32 NYI " );
@@ -2875,8 +2877,8 @@ static mlir::Value emitCommonNeonSISDBuiltinExpr(
2875
2877
cir::VectorType resVecTy =
2876
2878
cir::VectorType::get (&(cgf.getMLIRContext ()), cgf.SInt16Ty , 4 );
2877
2879
vecExtendIntValue (cgf, argVecTy, ops[0 ], loc);
2878
- mlir::Value result = emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(builder, {argVecTy}, ops,
2879
- " aarch64.neon.sqxtn" , resVecTy, loc);
2880
+ mlir::Value result = emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
2881
+ builder, {argVecTy}, ops, " aarch64.neon.sqxtn" , resVecTy, loc);
2880
2882
return vecReduceIntValue (cgf, result, loc);
2881
2883
}
2882
2884
case NEON::BI__builtin_neon_vqmovns_u32:
@@ -2906,8 +2908,9 @@ static mlir::Value emitCommonNeonSISDBuiltinExpr(
2906
2908
case NEON::BI__builtin_neon_vqrdmulhh_s16:
2907
2909
llvm_unreachable (" neon_vqrdmulhh_s16 NYI " );
2908
2910
case NEON::BI__builtin_neon_vqrdmulhs_s32:
2909
- return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(builder, {resultTy, resultTy}, ops,
2910
- " aarch64.neon.sqrdmulh" , resultTy, loc);
2911
+ return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
2912
+ builder, {resultTy, resultTy}, ops, " aarch64.neon.sqrdmulh" , resultTy,
2913
+ loc);
2911
2914
case NEON::BI__builtin_neon_vqrshlb_s8:
2912
2915
llvm_unreachable (" neon_vqrshlb_s8 NYI " );
2913
2916
case NEON::BI__builtin_neon_vqrshlb_u8:
@@ -3812,8 +3815,9 @@ CIRGenFunction::emitAArch64BuiltinExpr(unsigned BuiltinID, const CallExpr *E,
3812
3815
assert (APSInt && " Expected argument to be a constant" );
3813
3816
Ops[1 ] = builder.getSInt64 (APSInt->getZExtValue (), getLoc (E->getExprLoc ()));
3814
3817
const StringRef Intrinsic = " aarch64.neon.sqshlu" ;
3815
- return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(builder, {IntType, IntType}, Ops, Intrinsic, IntType,
3816
- getLoc (E->getExprLoc ()));
3818
+ return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
3819
+ builder, {IntType, IntType}, Ops, Intrinsic, IntType,
3820
+ getLoc (E->getExprLoc ()));
3817
3821
}
3818
3822
case NEON::BI__builtin_neon_vqshld_n_u64:
3819
3823
case NEON::BI__builtin_neon_vqshld_n_s64: {
@@ -3826,8 +3830,9 @@ CIRGenFunction::emitAArch64BuiltinExpr(unsigned BuiltinID, const CallExpr *E,
3826
3830
: " aarch64.neon.sqshl" ;
3827
3831
Ops.push_back (emitScalarExpr (E->getArg (1 )));
3828
3832
Ops[1 ] = builder.createIntCast (Ops[1 ], IntType);
3829
- return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(builder, {IntType, IntType}, Ops, Intrinsic, IntType,
3830
- getLoc (E->getExprLoc ()));
3833
+ return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
3834
+ builder, {IntType, IntType}, Ops, Intrinsic, IntType,
3835
+ getLoc (E->getExprLoc ()));
3831
3836
}
3832
3837
case NEON::BI__builtin_neon_vrshrd_n_u64:
3833
3838
case NEON::BI__builtin_neon_vrshrd_n_s64: {
@@ -3844,8 +3849,9 @@ CIRGenFunction::emitAArch64BuiltinExpr(unsigned BuiltinID, const CallExpr *E,
3844
3849
assert (APSInt && " Expected argument to be a constant" );
3845
3850
int64_t SV = -APSInt->getSExtValue ();
3846
3851
Ops[1 ] = builder.getSInt64 (SV, getLoc (E->getExprLoc ()));
3847
- return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(builder, {IntType, builder.getSInt64Ty ()}, Ops,
3848
- Intrinsic, IntType, getLoc (E->getExprLoc ()));
3852
+ return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
3853
+ builder, {IntType, builder.getSInt64Ty ()}, Ops, Intrinsic, IntType,
3854
+ getLoc (E->getExprLoc ()));
3849
3855
}
3850
3856
case NEON::BI__builtin_neon_vrsrad_n_u64:
3851
3857
case NEON::BI__builtin_neon_vrsrad_n_s64: {
@@ -3861,8 +3867,9 @@ CIRGenFunction::emitAArch64BuiltinExpr(unsigned BuiltinID, const CallExpr *E,
3861
3867
3862
3868
llvm::SmallVector<mlir::Value, 2 > args = {
3863
3869
Ops[1 ], builder.createIntCast (Ops[2 ], IntType)};
3864
- Ops[1 ] = emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(builder, {IntType, IntType}, args, Intrinsic, IntType,
3865
- getLoc (E->getExprLoc ()));
3870
+ Ops[1 ] = emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
3871
+ builder, {IntType, IntType}, args, Intrinsic, IntType,
3872
+ getLoc (E->getExprLoc ()));
3866
3873
return builder.createAdd (Ops[0 ], builder.createBitcast (Ops[1 ], IntType));
3867
3874
}
3868
3875
case NEON::BI__builtin_neon_vshld_n_s64:
@@ -4009,8 +4016,8 @@ CIRGenFunction::emitAArch64BuiltinExpr(unsigned BuiltinID, const CallExpr *E,
4009
4016
name = " aarch64.neon.pmull" ;
4010
4017
cir::VectorType argTy = builder.getExtendedOrTruncatedElementVectorType (
4011
4018
ty, false /* truncated */ , !usgn);
4012
- return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(builder, {argTy, argTy}, Ops, name, ty,
4013
- getLoc (E->getExprLoc ()));
4019
+ return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
4020
+ builder, {argTy, argTy}, Ops, name, ty, getLoc (E->getExprLoc ()));
4014
4021
}
4015
4022
case NEON::BI__builtin_neon_vmax_v:
4016
4023
case NEON::BI__builtin_neon_vmaxq_v: {
@@ -4030,8 +4037,8 @@ CIRGenFunction::emitAArch64BuiltinExpr(unsigned BuiltinID, const CallExpr *E,
4030
4037
llvm::StringRef name = usgn ? " aarch64.neon.umin" : " aarch64.neon.smin" ;
4031
4038
if (cir::isFPOrFPVectorTy (ty))
4032
4039
name = " aarch64.neon.fmin" ;
4033
- return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(builder, {ty, ty}, Ops, name, ty,
4034
- getLoc (E->getExprLoc ()));
4040
+ return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
4041
+ builder, {ty, ty}, Ops, name, ty, getLoc (E->getExprLoc ()));
4035
4042
}
4036
4043
case NEON::BI__builtin_neon_vminh_f16: {
4037
4044
llvm_unreachable (" NEON::BI__builtin_neon_vminh_f16 NYI" );
@@ -4041,8 +4048,8 @@ CIRGenFunction::emitAArch64BuiltinExpr(unsigned BuiltinID, const CallExpr *E,
4041
4048
llvm::StringRef name = usgn ? " aarch64.neon.uabd" : " aarch64.neon.sabd" ;
4042
4049
if (cir::isFPOrFPVectorTy (ty))
4043
4050
name = " aarch64.neon.fabd" ;
4044
- return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(builder, {ty, ty}, Ops, name, ty,
4045
- getLoc (E->getExprLoc ()));
4051
+ return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
4052
+ builder, {ty, ty}, Ops, name, ty, getLoc (E->getExprLoc ()));
4046
4053
}
4047
4054
case NEON::BI__builtin_neon_vpadal_v:
4048
4055
case NEON::BI__builtin_neon_vpadalq_v: {
@@ -4120,8 +4127,8 @@ CIRGenFunction::emitAArch64BuiltinExpr(unsigned BuiltinID, const CallExpr *E,
4120
4127
case NEON::BI__builtin_neon_vrnda_v:
4121
4128
case NEON::BI__builtin_neon_vrndaq_v: {
4122
4129
assert (!cir::MissingFeatures::emitConstrainedFPCall ());
4123
- return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(builder, {ty}, Ops, " round " , ty,
4124
- getLoc (E->getExprLoc ()));
4130
+ return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
4131
+ builder, {ty}, Ops, " round " , ty, getLoc (E->getExprLoc ()));
4125
4132
}
4126
4133
case NEON::BI__builtin_neon_vrndih_f16: {
4127
4134
llvm_unreachable (" NEON::BI__builtin_neon_vrndih_f16 NYI" );
@@ -4143,9 +4150,9 @@ CIRGenFunction::emitAArch64BuiltinExpr(unsigned BuiltinID, const CallExpr *E,
4143
4150
case NEON::BI__builtin_neon_vrndns_f32: {
4144
4151
mlir::Value arg0 = emitScalarExpr (E->getArg (0 ));
4145
4152
args.push_back (arg0);
4146
- return emitNeonCallToOp<cir::RoundEvenOp>(builder, {arg0. getType ()}, args, std::nullopt,
4147
- getCIRGenModule (). FloatTy ,
4148
- getLoc (E->getExprLoc ()));
4153
+ return emitNeonCallToOp<cir::RoundEvenOp>(
4154
+ builder, {arg0. getType ()}, args, std::nullopt ,
4155
+ getCIRGenModule (). FloatTy , getLoc (E->getExprLoc ()));
4149
4156
}
4150
4157
case NEON::BI__builtin_neon_vrndph_f16: {
4151
4158
llvm_unreachable (" NEON::BI__builtin_neon_vrndph_f16 NYI" );
@@ -4303,9 +4310,9 @@ CIRGenFunction::emitAArch64BuiltinExpr(unsigned BuiltinID, const CallExpr *E,
4303
4310
cir::VectorType vTy = cir::VectorType::get (builder.getContext (), eltTy, 4 );
4304
4311
Ops.push_back (emitScalarExpr (E->getArg (0 )));
4305
4312
// This is to add across the vector elements, so wider result type needed.
4306
- Ops[0 ] = emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(builder, {vTy}, Ops,
4307
- usgn ? " aarch64.neon.uaddv" : " aarch64.neon.saddv" ,
4308
- SInt32Ty, getLoc (E->getExprLoc ()));
4313
+ Ops[0 ] = emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
4314
+ builder, {vTy}, Ops, usgn ? " aarch64.neon.uaddv" : " aarch64.neon.saddv" ,
4315
+ SInt32Ty, getLoc (E->getExprLoc ()));
4309
4316
return builder.createIntCast (Ops[0 ], eltTy);
4310
4317
}
4311
4318
case NEON::BI__builtin_neon_vaddvq_u8:
@@ -4412,9 +4419,10 @@ CIRGenFunction::emitAArch64BuiltinExpr(unsigned BuiltinID, const CallExpr *E,
4412
4419
mlir::Type argTy = cir::VectorType::get (builder.getContext (),
4413
4420
usgn ? UInt16Ty : SInt16Ty, 8 );
4414
4421
llvm::SmallVector<mlir::Value, 1 > argOps = {emitScalarExpr (E->getArg (0 ))};
4415
- return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(builder, {argTy}, argOps,
4416
- usgn ? " aarch64.neon.uaddlv" : " aarch64.neon.saddlv" ,
4417
- usgn ? UInt32Ty : SInt32Ty, getLoc (E->getExprLoc ()));
4422
+ return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
4423
+ builder, {argTy}, argOps,
4424
+ usgn ? " aarch64.neon.uaddlv" : " aarch64.neon.saddlv" ,
4425
+ usgn ? UInt32Ty : SInt32Ty, getLoc (E->getExprLoc ()));
4418
4426
}
4419
4427
case NEON::BI__builtin_neon_vaddlv_s8: {
4420
4428
llvm_unreachable (" NEON::BI__builtin_neon_vaddlv_s8 NYI" );
@@ -4426,9 +4434,10 @@ CIRGenFunction::emitAArch64BuiltinExpr(unsigned BuiltinID, const CallExpr *E,
4426
4434
mlir::Type argTy = cir::VectorType::get (builder.getContext (),
4427
4435
usgn ? UInt16Ty : SInt16Ty, 4 );
4428
4436
llvm::SmallVector<mlir::Value, 1 > argOps = {emitScalarExpr (E->getArg (0 ))};
4429
- return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(builder, {argTy}, argOps,
4430
- usgn ? " aarch64.neon.uaddlv" : " aarch64.neon.saddlv" ,
4431
- usgn ? UInt32Ty : SInt32Ty, getLoc (E->getExprLoc ()));
4437
+ return emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
4438
+ builder, {argTy}, argOps,
4439
+ usgn ? " aarch64.neon.uaddlv" : " aarch64.neon.saddlv" ,
4440
+ usgn ? UInt32Ty : SInt32Ty, getLoc (E->getExprLoc ()));
4432
4441
}
4433
4442
case NEON::BI__builtin_neon_vaddlvq_s8: {
4434
4443
llvm_unreachable (" NEON::BI__builtin_neon_vaddlvq_s8 NYI" );
@@ -4455,11 +4464,11 @@ CIRGenFunction::emitAArch64BuiltinExpr(unsigned BuiltinID, const CallExpr *E,
4455
4464
// Thus we have to make shift amount vec type to be signed.
4456
4465
cir::VectorType shitAmtVecTy =
4457
4466
usgn ? getSignChangedVectorType (builder, vTy) : vTy;
4458
- mlir::Value tmp =
4459
- emitNeonCallToOp<cir::LLVMIntrinsicCallOp>( builder, {vTy, shitAmtVecTy}, tmpOps,
4460
- usgn ? " aarch64.neon.urshl" : " aarch64.neon.srshl" , vTy,
4461
- getLoc (E->getExprLoc ()), false ,
4462
- 1 /* shift amount is args[1] */ , true /* right shift */ );
4467
+ mlir::Value tmp = emitNeonCallToOp<cir::LLVMIntrinsicCallOp>(
4468
+ builder, {vTy, shitAmtVecTy}, tmpOps,
4469
+ usgn ? " aarch64.neon.urshl" : " aarch64.neon.srshl" , vTy,
4470
+ getLoc (E->getExprLoc ()), false , 1 /* shift amount is args[1] */ ,
4471
+ true /* right shift */ );
4463
4472
Ops[0 ] = builder.createBitcast (Ops[0 ], vTy);
4464
4473
return builder.createBinop (Ops[0 ], cir::BinOpKind::Add, tmp);
4465
4474
}
0 commit comments