From 95450f6ffc89ee218faa550433265f80930469c4 Mon Sep 17 00:00:00 2001 From: Nate Begeman Date: Wed, 9 Jun 2010 05:30:26 +0000 Subject: [PATCH] More accurate BuiltinsARM.def vget_lane support git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@105684 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/BuiltinsARM.def | 128 ++++++++++++++-------------- lib/CodeGen/CGBuiltin.cpp | 11 +++ 2 files changed, 75 insertions(+), 64 deletions(-) diff --git a/include/clang/Basic/BuiltinsARM.def b/include/clang/Basic/BuiltinsARM.def index b168ac75a5..338d0c1d0c 100644 --- a/include/clang/Basic/BuiltinsARM.def +++ b/include/clang/Basic/BuiltinsARM.def @@ -34,14 +34,14 @@ BUILTIN(__builtin_neon_vaddl_v, "V16cV8cV8ci", "n") BUILTIN(__builtin_neon_vaddw_v, "V16cV16cV8ci", "n") BUILTIN(__builtin_neon_vbsl_v, "V8cV8cV8cV8ci", "n") BUILTIN(__builtin_neon_vbslq_v, "V16cV16cV16cV16ci", "n") -BUILTIN(__builtin_neon_vcage_v, "V2iV8cV8ci", "n") -BUILTIN(__builtin_neon_vcageq_v, "V4iV16cV16ci", "n") -BUILTIN(__builtin_neon_vcagt_v, "V2iV8cV8ci", "n") -BUILTIN(__builtin_neon_vcagtq_v, "V4iV16cV16ci", "n") -BUILTIN(__builtin_neon_vcale_v, "V2iV8cV8ci", "n") -BUILTIN(__builtin_neon_vcaleq_v, "V4iV16cV16ci", "n") -BUILTIN(__builtin_neon_vcalt_v, "V2iV8cV8ci", "n") -BUILTIN(__builtin_neon_vcaltq_v, "V4iV16cV16ci", "n") +BUILTIN(__builtin_neon_vcage_v, "V8cV8cV8ci", "n") +BUILTIN(__builtin_neon_vcageq_v, "V16cV16cV16ci", "n") +BUILTIN(__builtin_neon_vcagt_v, "V8cV8cV8ci", "n") +BUILTIN(__builtin_neon_vcagtq_v, "V16cV16cV16ci", "n") +BUILTIN(__builtin_neon_vcale_v, "V8cV8cV8ci", "n") +BUILTIN(__builtin_neon_vcaleq_v, "V16cV16cV16ci", "n") +BUILTIN(__builtin_neon_vcalt_v, "V8cV8cV8ci", "n") +BUILTIN(__builtin_neon_vcaltq_v, "V16cV16cV16ci", "n") BUILTIN(__builtin_neon_vcls_v, "V8cV8ci", "n") BUILTIN(__builtin_neon_vclsq_v, "V16cV16ci", "n") BUILTIN(__builtin_neon_vclz_v, "V8cV8ci", "n") @@ -54,26 +54,26 @@ BUILTIN(__builtin_neon_vcvtq_f32_v, "V4fV16ci", "n") BUILTIN(__builtin_neon_vcvt_f32_f16, "V16cV8ci", "n") BUILTIN(__builtin_neon_vcvt_n_f32_v, "V2fV8cii", "n") BUILTIN(__builtin_neon_vcvtq_n_f32_v, "V4fV16cii", "n") -BUILTIN(__builtin_neon_vcvt_n_s32_v, "V2iV8cii", "n") -BUILTIN(__builtin_neon_vcvtq_n_s32_v, "V4iV16cii", "n") -BUILTIN(__builtin_neon_vcvt_n_u32_v, "V2iV8cii", "n") -BUILTIN(__builtin_neon_vcvtq_n_u32_v, "V4iV16cii", "n") -BUILTIN(__builtin_neon_vcvt_s32_v, "V2iV8ci", "n") -BUILTIN(__builtin_neon_vcvtq_s32_v, "V4iV16ci", "n") -BUILTIN(__builtin_neon_vcvt_u32_v, "V2iV8ci", "n") -BUILTIN(__builtin_neon_vcvtq_u32_v, "V4iV16ci", "n") +BUILTIN(__builtin_neon_vcvt_n_s32_v, "V8cV8cii", "n") +BUILTIN(__builtin_neon_vcvtq_n_s32_v, "V16cV16cii", "n") +BUILTIN(__builtin_neon_vcvt_n_u32_v, "V8cV8cii", "n") +BUILTIN(__builtin_neon_vcvtq_n_u32_v, "V16cV16cii", "n") +BUILTIN(__builtin_neon_vcvt_s32_v, "V8cV8ci", "n") +BUILTIN(__builtin_neon_vcvtq_s32_v, "V16cV16ci", "n") +BUILTIN(__builtin_neon_vcvt_u32_v, "V8cV8ci", "n") +BUILTIN(__builtin_neon_vcvtq_u32_v, "V16cV16ci", "n") BUILTIN(__builtin_neon_vext_v, "V8cV8cV8cii", "n") BUILTIN(__builtin_neon_vextq_v, "V16cV16cV16cii", "n") BUILTIN(__builtin_neon_vget_lane_i8, "UcV8ci", "n") -BUILTIN(__builtin_neon_vget_lane_i16, "UsV8ci", "n") -BUILTIN(__builtin_neon_vget_lane_i32, "UiV8ci", "n") -BUILTIN(__builtin_neon_vget_lane_f32, "fV8ci", "n") +BUILTIN(__builtin_neon_vget_lane_i16, "UsV4si", "n") +BUILTIN(__builtin_neon_vget_lane_i32, "UiV2ii", "n") +BUILTIN(__builtin_neon_vget_lane_f32, "fV2fi", "n") BUILTIN(__builtin_neon_vgetq_lane_i8, "UcV16ci", "n") -BUILTIN(__builtin_neon_vgetq_lane_i16, "UsV16ci", "n") -BUILTIN(__builtin_neon_vgetq_lane_i32, "UiV16ci", "n") -BUILTIN(__builtin_neon_vgetq_lane_f32, "fV16ci", "n") -BUILTIN(__builtin_neon_vget_lane_i64, "ULLiV8ci", "n") -BUILTIN(__builtin_neon_vgetq_lane_i64, "ULLiV16ci", "n") +BUILTIN(__builtin_neon_vgetq_lane_i16, "UsV8si", "n") +BUILTIN(__builtin_neon_vgetq_lane_i32, "UiV4ii", "n") +BUILTIN(__builtin_neon_vgetq_lane_f32, "fV4fi", "n") +BUILTIN(__builtin_neon_vget_lane_i64, "ULLiV1LLii", "n") +BUILTIN(__builtin_neon_vgetq_lane_i64, "ULLiV2LLii", "n") BUILTIN(__builtin_neon_vhadd_v, "V8cV8cV8ci", "n") BUILTIN(__builtin_neon_vhaddq_v, "V16cV16cV16ci", "n") BUILTIN(__builtin_neon_vhsub_v, "V8cV8cV8ci", "n") @@ -111,12 +111,12 @@ BUILTIN(__builtin_neon_vmlal_n_u16, "V16cV16cV8cUs", "n") BUILTIN(__builtin_neon_vmlal_n_u32, "V16cV16cV8cUi", "n") BUILTIN(__builtin_neon_vmla_lane_v, "V8cV8cV8cV8cii", "n") BUILTIN(__builtin_neon_vmlaq_lane_v, "V16cV16cV16cV16cii", "n") -BUILTIN(__builtin_neon_vmla_n_i16, "V8cV8cV8cUs", "n") -BUILTIN(__builtin_neon_vmla_n_i32, "V8cV8cV8cUi", "n") -BUILTIN(__builtin_neon_vmla_n_f32, "V8cV8cV8cf", "n") -BUILTIN(__builtin_neon_vmlaq_n_i16, "V16cV16cV16cUs", "n") -BUILTIN(__builtin_neon_vmlaq_n_i32, "V16cV16cV16cUi", "n") -BUILTIN(__builtin_neon_vmlaq_n_f32, "V16cV16cV16cf", "n") +BUILTIN(__builtin_neon_vmla_n_i16, "V4sV4sV4sUs", "n") +BUILTIN(__builtin_neon_vmla_n_i32, "V2iV2iV2iUi", "n") +BUILTIN(__builtin_neon_vmla_n_f32, "V2fV2fV2ff", "n") +BUILTIN(__builtin_neon_vmlaq_n_i16, "V8sV8sV8sUs", "n") +BUILTIN(__builtin_neon_vmlaq_n_i32, "V4iV4iV4iUi", "n") +BUILTIN(__builtin_neon_vmlaq_n_f32, "V4fV4fV4ff", "n") BUILTIN(__builtin_neon_vmlsl_v, "V16cV16cV8cV8ci", "n") BUILTIN(__builtin_neon_vmlsl_lane_v, "V16cV16cV8cV8cii", "n") BUILTIN(__builtin_neon_vmlsl_n_s16, "V16cV16cV8cs", "n") @@ -125,36 +125,36 @@ BUILTIN(__builtin_neon_vmlsl_n_u16, "V16cV16cV8cUs", "n") BUILTIN(__builtin_neon_vmlsl_n_u32, "V16cV16cV8cUi", "n") BUILTIN(__builtin_neon_vmls_lane_v, "V8cV8cV8cV8cii", "n") BUILTIN(__builtin_neon_vmlsq_lane_v, "V16cV16cV16cV16cii", "n") -BUILTIN(__builtin_neon_vmls_n_i16, "V8cV8cV8cUs", "n") -BUILTIN(__builtin_neon_vmls_n_i32, "V8cV8cV8cUi", "n") -BUILTIN(__builtin_neon_vmls_n_f32, "V8cV8cV8cf", "n") -BUILTIN(__builtin_neon_vmlsq_n_i16, "V16cV16cV16cUs", "n") -BUILTIN(__builtin_neon_vmlsq_n_i32, "V16cV16cV16cUi", "n") -BUILTIN(__builtin_neon_vmlsq_n_f32, "V16cV16cV16cf", "n") +BUILTIN(__builtin_neon_vmls_n_i16, "V4sV4sV4sUs", "n") +BUILTIN(__builtin_neon_vmls_n_i32, "V2iV2iV2iUi", "n") +BUILTIN(__builtin_neon_vmls_n_f32, "V2fV2fV2ff", "n") +BUILTIN(__builtin_neon_vmlsq_n_i16, "V8sV8sV8sUs", "n") +BUILTIN(__builtin_neon_vmlsq_n_i32, "V4iV4iV4iUi", "n") +BUILTIN(__builtin_neon_vmlsq_n_f32, "V4fV4fV4ff", "n") BUILTIN(__builtin_neon_vmovl_v, "V16cV8ci", "n") BUILTIN(__builtin_neon_vmovn_v, "V8cV16ci", "n") BUILTIN(__builtin_neon_vmov_n_i8, "V8cUc", "n") -BUILTIN(__builtin_neon_vmov_n_i16, "V8cUs", "n") -BUILTIN(__builtin_neon_vmov_n_i32, "V8cUi", "n") -BUILTIN(__builtin_neon_vmov_n_f32, "V8cf", "n") +BUILTIN(__builtin_neon_vmov_n_i16, "V4sUs", "n") +BUILTIN(__builtin_neon_vmov_n_i32, "V2iUi", "n") +BUILTIN(__builtin_neon_vmov_n_f32, "V2ff", "n") BUILTIN(__builtin_neon_vmovq_n_i8, "V16cUc", "n") -BUILTIN(__builtin_neon_vmovq_n_i16, "V16cUs", "n") -BUILTIN(__builtin_neon_vmovq_n_i32, "V16cUi", "n") -BUILTIN(__builtin_neon_vmovq_n_f32, "V16cf", "n") -BUILTIN(__builtin_neon_vmov_n_i64, "V8cULLi", "n") -BUILTIN(__builtin_neon_vmovq_n_i64, "V16cULLi", "n") +BUILTIN(__builtin_neon_vmovq_n_i16, "V8sUs", "n") +BUILTIN(__builtin_neon_vmovq_n_i32, "V4iUi", "n") +BUILTIN(__builtin_neon_vmovq_n_f32, "V4ff", "n") +BUILTIN(__builtin_neon_vmov_n_i64, "V1LLiULLi", "n") +BUILTIN(__builtin_neon_vmovq_n_i64, "V2LLiULLi", "n") BUILTIN(__builtin_neon_vmull_v, "V16cV8cV8ci", "n") BUILTIN(__builtin_neon_vmull_lane_v, "V16cV8cV8cii", "n") BUILTIN(__builtin_neon_vmull_n_s16, "V16cV8cs", "n") BUILTIN(__builtin_neon_vmull_n_s32, "V16cV8ci", "n") BUILTIN(__builtin_neon_vmull_n_u16, "V16cV8cUs", "n") BUILTIN(__builtin_neon_vmull_n_u32, "V16cV8cUi", "n") -BUILTIN(__builtin_neon_vmul_n_i16, "V8cV8cUs", "n") -BUILTIN(__builtin_neon_vmul_n_i32, "V8cV8cUi", "n") -BUILTIN(__builtin_neon_vmul_n_f32, "V8cV8cf", "n") -BUILTIN(__builtin_neon_vmulq_n_i16, "V16cV16cUs", "n") -BUILTIN(__builtin_neon_vmulq_n_i32, "V16cV16cUi", "n") -BUILTIN(__builtin_neon_vmulq_n_f32, "V16cV16cf", "n") +BUILTIN(__builtin_neon_vmul_n_i16, "V4sV4sUs", "n") +BUILTIN(__builtin_neon_vmul_n_i32, "V2iV2iUi", "n") +BUILTIN(__builtin_neon_vmul_n_f32, "V2fV2ff", "n") +BUILTIN(__builtin_neon_vmulq_n_i16, "V8sV8sUs", "n") +BUILTIN(__builtin_neon_vmulq_n_i32, "V4iV4iUi", "n") +BUILTIN(__builtin_neon_vmulq_n_f32, "V4fV4ff", "n") BUILTIN(__builtin_neon_vpadal_v, "V8cV8cV8ci", "n") BUILTIN(__builtin_neon_vpadalq_v, "V16cV16cV16ci", "n") BUILTIN(__builtin_neon_vpadd_v, "V8cV8cV8ci", "n") @@ -201,15 +201,15 @@ BUILTIN(__builtin_neon_vqrdmulhq_n_s32, "V16cV16ci", "n") BUILTIN(__builtin_neon_vqrshl_v, "V8cV8cV8ci", "n") BUILTIN(__builtin_neon_vqrshlq_v, "V16cV16cV16ci", "n") BUILTIN(__builtin_neon_vqrshrn_n_v, "V8cV16cii", "n") -BUILTIN(__builtin_neon_vqrshrun_n_v, "V2iV16cii", "n") +BUILTIN(__builtin_neon_vqrshrun_n_v, "V8cV16cii", "n") BUILTIN(__builtin_neon_vqshl_v, "V8cV8cV8ci", "n") BUILTIN(__builtin_neon_vqshlq_v, "V16cV16cV16ci", "n") -BUILTIN(__builtin_neon_vqshlu_n_v, "V2iV8cii", "n") -BUILTIN(__builtin_neon_vqshluq_n_v, "V4iV16cii", "n") +BUILTIN(__builtin_neon_vqshlu_n_v, "V8cV8cii", "n") +BUILTIN(__builtin_neon_vqshluq_n_v, "V16cV16cii", "n") BUILTIN(__builtin_neon_vqshl_n_v, "V8cV8cii", "n") BUILTIN(__builtin_neon_vqshlq_n_v, "V16cV16cii", "n") BUILTIN(__builtin_neon_vqshrn_n_v, "V8cV16cii", "n") -BUILTIN(__builtin_neon_vqshrun_n_v, "V2iV16cii", "n") +BUILTIN(__builtin_neon_vqshrun_n_v, "V8cV16cii", "n") BUILTIN(__builtin_neon_vqsub_v, "V8cV8cV8ci", "n") BUILTIN(__builtin_neon_vqsubq_v, "V16cV16cV16ci", "n") BUILTIN(__builtin_neon_vraddhn_v, "V8cV16cV16ci", "n") @@ -238,15 +238,15 @@ BUILTIN(__builtin_neon_vrsra_n_v, "V8cV8cV8cii", "n") BUILTIN(__builtin_neon_vrsraq_n_v, "V16cV16cV16cii", "n") BUILTIN(__builtin_neon_vrsubhn_v, "V8cV16cV16ci", "n") BUILTIN(__builtin_neon_vset_lane_i8, "V8cUcV8ci", "n") -BUILTIN(__builtin_neon_vset_lane_i16, "V8cUsV8ci", "n") -BUILTIN(__builtin_neon_vset_lane_i32, "V8cUiV8ci", "n") -BUILTIN(__builtin_neon_vset_lane_f32, "V8cfV8ci", "n") +BUILTIN(__builtin_neon_vset_lane_i16, "V4sUsV4si", "n") +BUILTIN(__builtin_neon_vset_lane_i32, "V2iUiV2ii", "n") +BUILTIN(__builtin_neon_vset_lane_f32, "V2ffV2fi", "n") BUILTIN(__builtin_neon_vsetq_lane_i8, "V16cUcV16ci", "n") -BUILTIN(__builtin_neon_vsetq_lane_i16, "V16cUsV16ci", "n") -BUILTIN(__builtin_neon_vsetq_lane_i32, "V16cUiV16ci", "n") -BUILTIN(__builtin_neon_vsetq_lane_f32, "V16cfV16ci", "n") -BUILTIN(__builtin_neon_vset_lane_i64, "V8cULLiV8ci", "n") -BUILTIN(__builtin_neon_vsetq_lane_i64, "V16cULLiV16ci", "n") +BUILTIN(__builtin_neon_vsetq_lane_i16, "V8sUsV8si", "n") +BUILTIN(__builtin_neon_vsetq_lane_i32, "V4iUiV4ii", "n") +BUILTIN(__builtin_neon_vsetq_lane_f32, "V4ffV4fi", "n") +BUILTIN(__builtin_neon_vset_lane_i64, "V1LLiULLiV1LLii", "n") +BUILTIN(__builtin_neon_vsetq_lane_i64, "V2LLiULLiV2LLii", "n") BUILTIN(__builtin_neon_vshl_v, "V8cV8cV8ci", "n") BUILTIN(__builtin_neon_vshlq_v, "V16cV16cV16ci", "n") BUILTIN(__builtin_neon_vshll_n_v, "V16cV8cii", "n") @@ -290,8 +290,8 @@ BUILTIN(__builtin_neon_vtbx3_v, "V8cV8cV8cV8cV8cV8ci", "n") BUILTIN(__builtin_neon_vtbx4_v, "V8cV8cV8cV8cV8cV8cV8ci", "n") BUILTIN(__builtin_neon_vtrn_v, "V16cV8cV8ci", "n") BUILTIN(__builtin_neon_vtrnq_v, "V32cV16cV16ci", "n") -BUILTIN(__builtin_neon_vtst_v, "V2iV8cV8ci", "n") -BUILTIN(__builtin_neon_vtstq_v, "V4iV16cV16ci", "n") +BUILTIN(__builtin_neon_vtst_v, "V8cV8cV8ci", "n") +BUILTIN(__builtin_neon_vtstq_v, "V16cV16cV16ci", "n") BUILTIN(__builtin_neon_vuzp_v, "V16cV8cV8ci", "n") BUILTIN(__builtin_neon_vuzpq_v, "V32cV16cV16ci", "n") BUILTIN(__builtin_neon_vzip_v, "V16cV8cV8ci", "n") diff --git a/lib/CodeGen/CGBuiltin.cpp b/lib/CodeGen/CGBuiltin.cpp index 1c903094b4..3ef3e17198 100644 --- a/lib/CodeGen/CGBuiltin.cpp +++ b/lib/CodeGen/CGBuiltin.cpp @@ -1058,6 +1058,17 @@ Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID, Value* SV = llvm::ConstantVector::get(Indices.begin(), Indices.size()); return Builder.CreateShuffleVector(Ops[0], Ops[1], SV, "vext"); } + case ARM::BI__builtin_neon_vget_lane_i8: + case ARM::BI__builtin_neon_vget_lane_i16: + case ARM::BI__builtin_neon_vget_lane_i32: + case ARM::BI__builtin_neon_vget_lane_i64: + case ARM::BI__builtin_neon_vget_lane_f32: + case ARM::BI__builtin_neon_vgetq_lane_i8: + case ARM::BI__builtin_neon_vgetq_lane_i16: + case ARM::BI__builtin_neon_vgetq_lane_i32: + case ARM::BI__builtin_neon_vgetq_lane_i64: + case ARM::BI__builtin_neon_vgetq_lane_f32: + return Builder.CreateExtractElement(Ops[0], EmitScalarExpr(E->getArg(1))); case ARM::BI__builtin_neon_vtbl1_v: return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vtbl1), Ops, "vtbl1"); -- 2.40.0