From: Bob Wilson Date: Tue, 7 Dec 2010 22:03:46 +0000 (+0000) Subject: Stop using a clang builtin for Neon vmull_lane intrinsic. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c92b7721603484ddf337034c6f291d1b419a0528;p=clang Stop using a clang builtin for Neon vmull_lane intrinsic. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@121189 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/arm_neon.td b/include/clang/Basic/arm_neon.td index 3ddbdddf51..2bea694c23 100644 --- a/include/clang/Basic/arm_neon.td +++ b/include/clang/Basic/arm_neon.td @@ -26,6 +26,7 @@ def OP_MULL_N: Op; def OP_MLA_N : Op; def OP_MLS_N : Op; def OP_MUL_LN: Op; +def OP_MULL_LN : Op; def OP_MLA_LN: Op; def OP_MLS_LN: Op; def OP_EQ : Op; @@ -312,7 +313,7 @@ def VQDMLSL_LANE : SInst<"vqdmlsl_lane", "wwddi", "si">; def VMUL_N : Inst<"vmul_n", "dds", "sifUsUiQsQiQfQUsQUi", OP_MUL_N>; def VMUL_LANE : Inst<"vmul_lane", "dddi", "sifUsUiQsQiQfQUsQUi", OP_MUL_LN>; def VMULL_N : Inst<"vmull_n", "wda", "siUsUi", OP_MULL_N>; -def VMULL_LANE : SInst<"vmull_lane", "wddi", "siUsUi">; +def VMULL_LANE : Inst<"vmull_lane", "wddi", "siUsUi", OP_MULL_LN>; def VQDMULL_N : SInst<"vqdmull_n", "wda", "si">; def VQDMULL_LANE : SInst<"vqdmull_lane", "wddi", "si">; def VQDMULH_N : SInst<"vqdmulh_n", "dda", "siQsQi">; diff --git a/lib/CodeGen/CGBuiltin.cpp b/lib/CodeGen/CGBuiltin.cpp index 3b495539cc..89d8863c0e 100644 --- a/lib/CodeGen/CGBuiltin.cpp +++ b/lib/CodeGen/CGBuiltin.cpp @@ -1541,27 +1541,10 @@ Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID, assert(poly && "vmul builtin only supported for polynomial types"); return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vmulp, &Ty, 1), Ops, "vmul"); - case ARM::BI__builtin_neon_vmull_lane_v: { - const llvm::Type *DTy =llvm::VectorType::getTruncatedElementVectorType(VTy); - Ops[1] = Builder.CreateBitCast(Ops[1], DTy); - Ops[1] = EmitNeonSplat(Ops[1], cast(Ops[2])); - } - case ARM::BI__builtin_neon_vmull_v: { - if (poly) - return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vmullp, &Ty, 1), - Ops, "vmull"); - const llvm::Type *DTy =llvm::VectorType::getTruncatedElementVectorType(VTy); - Ops[0] = Builder.CreateBitCast(Ops[0], DTy); - Ops[1] = Builder.CreateBitCast(Ops[1], DTy); - if (usgn) { - Ops[0] = Builder.CreateZExt(Ops[0], Ty); - Ops[1] = Builder.CreateZExt(Ops[1], Ty); - } else { - Ops[0] = Builder.CreateSExt(Ops[0], Ty); - Ops[1] = Builder.CreateSExt(Ops[1], Ty); - } - return Builder.CreateMul(Ops[0], Ops[1], "vmull"); - } + case ARM::BI__builtin_neon_vmull_v: + assert(poly && "vmull builtin only supported for polynomial types"); + return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vmullp, &Ty, 1), + Ops, "vmull"); case ARM::BI__builtin_neon_vpadal_v: case ARM::BI__builtin_neon_vpadalq_v: Int = usgn ? Intrinsic::arm_neon_vpadalu : Intrinsic::arm_neon_vpadals;