]> granicus.if.org Git - clang/commitdiff
Stop using a clang builtin for Neon vmull_lane intrinsic.
authorBob Wilson <bob.wilson@apple.com>
Tue, 7 Dec 2010 22:03:46 +0000 (22:03 +0000)
committerBob Wilson <bob.wilson@apple.com>
Tue, 7 Dec 2010 22:03:46 +0000 (22:03 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@121189 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/arm_neon.td
lib/CodeGen/CGBuiltin.cpp

index 3ddbdddf5151b380148890c6ca11e3787b39048c..2bea694c23ee37367c1fea170b0e20ea82af5974 100644 (file)
@@ -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">;
index 3b495539cc5d7448d5af5a0d8312ebb6226a1f2c..89d8863c0ecf1916191faf65991394acc20a7419 100644 (file)
@@ -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<Constant>(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;