[llvm-commits] [llvm-gcc-4.2] r78527 - /llvm-gcc-4.2/trunk/gcc/config/arm/llvm-arm.cpp

Bob Wilson bob.wilson at apple.com
Sat Aug 8 23:06:41 PDT 2009


Author: bwilson
Date: Sun Aug  9 01:06:41 2009
New Revision: 78527

URL: http://llvm.org/viewvc/llvm-project?rev=78527&view=rev
Log:
Update translation of VTBL and VTBX builtins to pass table vectors to the
intrinsics as separate arguments, matching the corresponding change to the
intrinsics in LLVM.

Modified:
    llvm-gcc-4.2/trunk/gcc/config/arm/llvm-arm.cpp

Modified: llvm-gcc-4.2/trunk/gcc/config/arm/llvm-arm.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/llvm-arm.cpp?rev=78527&r1=78526&r2=78527&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/arm/llvm-arm.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/config/arm/llvm-arm.cpp Sun Aug  9 01:06:41 2009
@@ -1880,11 +1880,38 @@
   case NEON_BUILTIN_vtbl2:
   case NEON_BUILTIN_vtbl3:
   case NEON_BUILTIN_vtbl4: {
-    unsigned NUnits = Ops[0]->getType()->getPrimitiveSizeInBits() / 8;
-    intOpTypes[0] = VectorType::get(IntegerType::get(8), NUnits);
-    intID = Intrinsic::arm_neon_vtbl;
-    intFn = Intrinsic::getDeclaration(TheModule, intID, intOpTypes, 1);
-    Result = Builder.CreateCall2(intFn, Ops[0], Ops[1]);
+    unsigned TblVecs = 0;
+    switch (neon_code) {
+    case NEON_BUILTIN_vtbl1:
+      intID = Intrinsic::arm_neon_vtbl1;
+      TblVecs = 1;
+      break;
+    case NEON_BUILTIN_vtbl2:
+      intID = Intrinsic::arm_neon_vtbl2;
+      TblVecs = 2;
+      break;
+    case NEON_BUILTIN_vtbl3:
+      intID = Intrinsic::arm_neon_vtbl3;
+      TblVecs = 3;
+      break;
+    case NEON_BUILTIN_vtbl4:
+      intID = Intrinsic::arm_neon_vtbl4;
+      TblVecs = 4;
+      break;
+    default:
+      assert(false);
+    }
+    intFn = Intrinsic::getDeclaration(TheModule, intID);
+    std::vector<Value*> Args;
+    if (TblVecs == 1) {
+      Args.push_back(Ops[0]);
+    } else {
+      for (unsigned n = 0; n < TblVecs; ++n) {
+        Args.push_back(Builder.CreateExtractValue(Ops[0], n));
+      }
+    }
+    Args.push_back(Ops[1]);
+    Result = Builder.CreateCall(intFn, Args.begin(), Args.end());
     break;
   }
 
@@ -1892,11 +1919,39 @@
   case NEON_BUILTIN_vtbx2:
   case NEON_BUILTIN_vtbx3:
   case NEON_BUILTIN_vtbx4: {
-    unsigned NUnits = Ops[1]->getType()->getPrimitiveSizeInBits() / 8;
-    intOpTypes[0] = VectorType::get(IntegerType::get(8), NUnits);
-    intID = Intrinsic::arm_neon_vtbx;
-    intFn = Intrinsic::getDeclaration(TheModule, intID, intOpTypes, 1);
-    Result = Builder.CreateCall3(intFn, Ops[0], Ops[1], Ops[2]);
+    unsigned TblVecs = 0;
+    switch (neon_code) {
+    case NEON_BUILTIN_vtbx1:
+      intID = Intrinsic::arm_neon_vtbx1;
+      TblVecs = 1;
+      break;
+    case NEON_BUILTIN_vtbx2:
+      intID = Intrinsic::arm_neon_vtbx2;
+      TblVecs = 2;
+      break;
+    case NEON_BUILTIN_vtbx3:
+      intID = Intrinsic::arm_neon_vtbx3;
+      TblVecs = 3;
+      break;
+    case NEON_BUILTIN_vtbx4:
+      intID = Intrinsic::arm_neon_vtbx4;
+      TblVecs = 4;
+      break;
+    default:
+      assert(false);
+    }
+    intFn = Intrinsic::getDeclaration(TheModule, intID);
+    std::vector<Value*> Args;
+    Args.push_back(Ops[0]);
+    if (TblVecs == 1) {
+      Args.push_back(Ops[1]);
+    } else {
+      for (unsigned n = 0; n < TblVecs; ++n) {
+        Args.push_back(Builder.CreateExtractValue(Ops[1], n));
+      }
+    }
+    Args.push_back(Ops[2]);
+    Result = Builder.CreateCall(intFn, Args.begin(), Args.end());
     break;
   }
 





More information about the llvm-commits mailing list