r189464 - ARM: comment on why vmull intrinsic has to exist for now.

Tim Northover tnorthover at apple.com
Wed Aug 28 02:46:40 PDT 2013


Author: tnorthover
Date: Wed Aug 28 04:46:40 2013
New Revision: 189464

URL: http://llvm.org/viewvc/llvm-project?rev=189464&view=rev
Log:
ARM: comment on why vmull intrinsic has to exist for now.

Modified:
    cfe/trunk/lib/CodeGen/CGBuiltin.cpp

Modified: cfe/trunk/lib/CodeGen/CGBuiltin.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBuiltin.cpp?rev=189464&r1=189463&r2=189464&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGBuiltin.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGBuiltin.cpp Wed Aug 28 04:46:40 2013
@@ -2523,6 +2523,11 @@ Value *CodeGenFunction::EmitARMBuiltinEx
     return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vmulp, Ty),
                         Ops, "vmul");
   case ARM::BI__builtin_neon_vmull_v:
+    // FIXME: the integer vmull operations could be emitted in terms of pure
+    // LLVM IR (2 exts followed by a mul). Unfortunately LLVM has a habit of
+    // hoisting the exts outside loops. Until global ISel comes along that can
+    // see through such movement this leads to bad CodeGen. So we need an
+    // intrinsic for now.
     Int = usgn ? Intrinsic::arm_neon_vmullu : Intrinsic::arm_neon_vmulls;
     Int = Type.isPoly() ? (unsigned)Intrinsic::arm_neon_vmullp : Int;
     return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vmull");





More information about the cfe-commits mailing list