@@ -2952,6 +2952,7 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
2952
2952
// Determine the type of this overloaded NEON intrinsic.
2953
2953
NeonTypeFlags Type (Result.getZExtValue ());
2954
2954
bool usgn = Type.isUnsigned ();
2955
+ bool quad = Type.isQuad ();
2955
2956
2956
2957
llvm::VectorType *VTy = GetNeonType (this , Type);
2957
2958
llvm::Type *Ty = VTy;
@@ -3212,9 +3213,10 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
3212
3213
return EmitARMBuiltinExpr (ARM::BI__builtin_neon_vcvt_n_f32_v, E);
3213
3214
case AArch64::BI__builtin_neon_vcvtq_n_f32_v:
3214
3215
return EmitARMBuiltinExpr (ARM::BI__builtin_neon_vcvtq_n_f32_v, E);
3216
+ case AArch64::BI__builtin_neon_vcvt_n_f64_v:
3215
3217
case AArch64::BI__builtin_neon_vcvtq_n_f64_v: {
3216
3218
llvm::Type *FloatTy =
3217
- GetNeonType (this , NeonTypeFlags (NeonTypeFlags::Float64, false , true ));
3219
+ GetNeonType (this , NeonTypeFlags (NeonTypeFlags::Float64, false , quad ));
3218
3220
llvm::Type *Tys[2 ] = { FloatTy, Ty };
3219
3221
Int = usgn ? Intrinsic::arm_neon_vcvtfxu2fp
3220
3222
: Intrinsic::arm_neon_vcvtfxs2fp;
@@ -3229,10 +3231,12 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
3229
3231
return EmitARMBuiltinExpr (ARM::BI__builtin_neon_vcvt_n_u32_v, E);
3230
3232
case AArch64::BI__builtin_neon_vcvtq_n_u32_v:
3231
3233
return EmitARMBuiltinExpr (ARM::BI__builtin_neon_vcvtq_n_u32_v, E);
3234
+ case AArch64::BI__builtin_neon_vcvt_n_s64_v:
3235
+ case AArch64::BI__builtin_neon_vcvt_n_u64_v:
3232
3236
case AArch64::BI__builtin_neon_vcvtq_n_s64_v:
3233
3237
case AArch64::BI__builtin_neon_vcvtq_n_u64_v: {
3234
3238
llvm::Type *FloatTy =
3235
- GetNeonType (this , NeonTypeFlags (NeonTypeFlags::Float64, false , true ));
3239
+ GetNeonType (this , NeonTypeFlags (NeonTypeFlags::Float64, false , quad ));
3236
3240
llvm::Type *Tys[2 ] = { Ty, FloatTy };
3237
3241
Int = usgn ? Intrinsic::arm_neon_vcvtfp2fxu
3238
3242
: Intrinsic::arm_neon_vcvtfp2fxs;
@@ -3477,7 +3481,7 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
3477
3481
Quad = true ;
3478
3482
Ops[0 ] = Builder.CreateBitCast (Ops[0 ], DoubleTy);
3479
3483
llvm::Type *VTy = GetNeonType (this ,
3480
- NeonTypeFlags (NeonTypeFlags::Float64, false , Quad ? true : false ));
3484
+ NeonTypeFlags (NeonTypeFlags::Float64, false , Quad));
3481
3485
Ops[1 ] = Builder.CreateBitCast (Ops[1 ], VTy);
3482
3486
Ops[1 ] = Builder.CreateExtractElement (Ops[1 ], Ops[2 ], " extract" );
3483
3487
Value *Result = Builder.CreateFMul (Ops[0 ], Ops[1 ]);
@@ -3671,15 +3675,16 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
3671
3675
Int = Intrinsic::aarch64_neon_fcvtxn;
3672
3676
return EmitNeonCall (CGM.getIntrinsic (Int, Tys), Ops, " vcvtx_f32_f64" );
3673
3677
}
3674
- case AArch64::BI__builtin_neon_vcvt_f64_v : {
3678
+ case AArch64::BI__builtin_neon_vcvt_f64_f32 : {
3675
3679
llvm::Type *OpTy =
3676
3680
GetNeonType (this , NeonTypeFlags (NeonTypeFlags::Float32, false , false ));
3677
3681
Ops[0 ] = Builder.CreateBitCast (Ops[0 ], OpTy);
3678
3682
return Builder.CreateFPExt (Ops[0 ], Ty, " vcvt" );
3679
3683
}
3684
+ case AArch64::BI__builtin_neon_vcvt_f64_v:
3680
3685
case AArch64::BI__builtin_neon_vcvtq_f64_v: {
3681
3686
Ops[0 ] = Builder.CreateBitCast (Ops[0 ], Ty);
3682
- Ty = GetNeonType (this , NeonTypeFlags (NeonTypeFlags::Float64, false , true ));
3687
+ Ty = GetNeonType (this , NeonTypeFlags (NeonTypeFlags::Float64, false , quad ));
3683
3688
return usgn ? Builder.CreateUIToFP (Ops[0 ], Ty, " vcvt" )
3684
3689
: Builder.CreateSIToFP (Ops[0 ], Ty, " vcvt" );
3685
3690
}
@@ -3723,10 +3728,12 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
3723
3728
case AArch64::BI__builtin_neon_vcvtq_s32_v:
3724
3729
case AArch64::BI__builtin_neon_vcvtq_u32_v:
3725
3730
return EmitARMBuiltinExpr (ARM::BI__builtin_neon_vcvtq_u32_v, E);
3731
+ case AArch64::BI__builtin_neon_vcvt_s64_v:
3732
+ case AArch64::BI__builtin_neon_vcvt_u64_v:
3726
3733
case AArch64::BI__builtin_neon_vcvtq_s64_v:
3727
3734
case AArch64::BI__builtin_neon_vcvtq_u64_v: {
3728
3735
llvm::Type *DoubleTy =
3729
- GetNeonType (this , NeonTypeFlags (NeonTypeFlags::Float64, false , true ));
3736
+ GetNeonType (this , NeonTypeFlags (NeonTypeFlags::Float64, false , quad ));
3730
3737
Ops[0 ] = Builder.CreateBitCast (Ops[0 ], DoubleTy);
3731
3738
return usgn ? Builder.CreateFPToUI (Ops[0 ], Ty, " vcvt" )
3732
3739
: Builder.CreateFPToSI (Ops[0 ], Ty, " vcvt" );
@@ -3738,6 +3745,7 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
3738
3745
Int = Intrinsic::aarch64_neon_fcvtns;
3739
3746
return EmitNeonCall (CGM.getIntrinsic (Int, Tys), Ops, " vcvtns_f32" );
3740
3747
}
3748
+ case AArch64::BI__builtin_neon_vcvtn_s64_v:
3741
3749
case AArch64::BI__builtin_neon_vcvtnq_s64_v: {
3742
3750
llvm::Type *OpTy = llvm::VectorType::get (DoubleTy, VTy->getNumElements ());
3743
3751
llvm::Type *Tys[2 ] = { Ty, OpTy };
@@ -3751,6 +3759,7 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
3751
3759
Int = Intrinsic::aarch64_neon_fcvtnu;
3752
3760
return EmitNeonCall (CGM.getIntrinsic (Int, Tys), Ops, " vcvtnu_f32" );
3753
3761
}
3762
+ case AArch64::BI__builtin_neon_vcvtn_u64_v:
3754
3763
case AArch64::BI__builtin_neon_vcvtnq_u64_v: {
3755
3764
llvm::Type *OpTy = llvm::VectorType::get (DoubleTy, VTy->getNumElements ());
3756
3765
llvm::Type *Tys[2 ] = { Ty, OpTy };
@@ -3764,6 +3773,7 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
3764
3773
Int = Intrinsic::aarch64_neon_fcvtps;
3765
3774
return EmitNeonCall (CGM.getIntrinsic (Int, Tys), Ops, " vcvtps_f32" );
3766
3775
}
3776
+ case AArch64::BI__builtin_neon_vcvtp_s64_v:
3767
3777
case AArch64::BI__builtin_neon_vcvtpq_s64_v: {
3768
3778
llvm::Type *OpTy = llvm::VectorType::get (DoubleTy, VTy->getNumElements ());
3769
3779
llvm::Type *Tys[2 ] = { Ty, OpTy };
@@ -3777,6 +3787,7 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
3777
3787
Int = Intrinsic::aarch64_neon_fcvtpu;
3778
3788
return EmitNeonCall (CGM.getIntrinsic (Int, Tys), Ops, " vcvtpu_f32" );
3779
3789
}
3790
+ case AArch64::BI__builtin_neon_vcvtp_u64_v:
3780
3791
case AArch64::BI__builtin_neon_vcvtpq_u64_v: {
3781
3792
llvm::Type *OpTy = llvm::VectorType::get (DoubleTy, VTy->getNumElements ());
3782
3793
llvm::Type *Tys[2 ] = { Ty, OpTy };
@@ -3790,6 +3801,7 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
3790
3801
Int = Intrinsic::aarch64_neon_fcvtms;
3791
3802
return EmitNeonCall (CGM.getIntrinsic (Int, Tys), Ops, " vcvtms_f32" );
3792
3803
}
3804
+ case AArch64::BI__builtin_neon_vcvtm_s64_v:
3793
3805
case AArch64::BI__builtin_neon_vcvtmq_s64_v: {
3794
3806
llvm::Type *OpTy = llvm::VectorType::get (DoubleTy, VTy->getNumElements ());
3795
3807
llvm::Type *Tys[2 ] = { Ty, OpTy };
@@ -3803,6 +3815,7 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
3803
3815
Int = Intrinsic::aarch64_neon_fcvtmu;
3804
3816
return EmitNeonCall (CGM.getIntrinsic (Int, Tys), Ops, " vcvtmu_f32" );
3805
3817
}
3818
+ case AArch64::BI__builtin_neon_vcvtm_u64_v:
3806
3819
case AArch64::BI__builtin_neon_vcvtmq_u64_v: {
3807
3820
llvm::Type *OpTy = llvm::VectorType::get (DoubleTy, VTy->getNumElements ());
3808
3821
llvm::Type *Tys[2 ] = { Ty, OpTy };
@@ -3816,6 +3829,7 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
3816
3829
Int = Intrinsic::aarch64_neon_fcvtas;
3817
3830
return EmitNeonCall (CGM.getIntrinsic (Int, Tys), Ops, " vcvtas_f32" );
3818
3831
}
3832
+ case AArch64::BI__builtin_neon_vcvta_s64_v:
3819
3833
case AArch64::BI__builtin_neon_vcvtaq_s64_v: {
3820
3834
llvm::Type *OpTy = llvm::VectorType::get (DoubleTy, VTy->getNumElements ());
3821
3835
llvm::Type *Tys[2 ] = { Ty, OpTy };
@@ -3829,6 +3843,7 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
3829
3843
Int = Intrinsic::aarch64_neon_fcvtau;
3830
3844
return EmitNeonCall (CGM.getIntrinsic (Int, Tys), Ops, " vcvtau_f32" );
3831
3845
}
3846
+ case AArch64::BI__builtin_neon_vcvta_u64_v:
3832
3847
case AArch64::BI__builtin_neon_vcvtaq_u64_v: {
3833
3848
llvm::Type *OpTy = llvm::VectorType::get (DoubleTy, VTy->getNumElements ());
3834
3849
llvm::Type *Tys[2 ] = { Ty, OpTy };
@@ -3843,7 +3858,7 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
3843
3858
return EmitARMBuiltinExpr (ARM::BI__builtin_neon_vrsqrte_v, E);
3844
3859
case AArch64::BI__builtin_neon_vsqrt_v:
3845
3860
case AArch64::BI__builtin_neon_vsqrtq_v: {
3846
- Int = Intrinsic::aarch64_neon_fsqrt ;
3861
+ Int = Intrinsic::sqrt ;
3847
3862
return EmitNeonCall (CGM.getIntrinsic (Int, Ty), Ops, " vsqrt" );
3848
3863
}
3849
3864
case AArch64::BI__builtin_neon_vcvt_f32_v:
0 commit comments