Implement transpose/zip/unzip & table lookup.
Test out some basic constant-checking.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@105667 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp
index 76407ef..6e54dab 100644
--- a/lib/Sema/SemaChecking.cpp
+++ b/lib/Sema/SemaChecking.cpp
@@ -241,7 +241,28 @@
 }
 
 bool Sema::CheckARMBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
-  // TODO: verify NEON intrinsic constant args.
+  llvm::APSInt Result;
+
+  switch (BuiltinID) {
+    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_f32:
+    case ARM::BI__builtin_neon_vget_lane_i64:
+    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_f32:
+    case ARM::BI__builtin_neon_vgetq_lane_i64:
+      // Check constant-ness first.
+      if (SemaBuiltinConstantArg(TheCall, 1, Result))
+        return true;
+      break;
+  }
+  
+  // Now, range check values.
+  //unsigned lower = 0, upper = 0;
+  
   return false;
 }