CGBuiltin.cpp revision 9631939f82c0eaa6fb3936a0ce58a41adfbc9011
1022012e6e5626c3372e1a5493c0929dfc1fa9e47Anders Carlsson//===---- CGBuiltin.cpp - Emit LLVM Code for builtins ---------------------===//
2022012e6e5626c3372e1a5493c0929dfc1fa9e47Anders Carlsson//
3022012e6e5626c3372e1a5493c0929dfc1fa9e47Anders Carlsson//                     The LLVM Compiler Infrastructure
4022012e6e5626c3372e1a5493c0929dfc1fa9e47Anders Carlsson//
50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// This file is distributed under the University of Illinois Open Source
60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// License. See LICENSE.TXT for details.
7022012e6e5626c3372e1a5493c0929dfc1fa9e47Anders Carlsson//
8022012e6e5626c3372e1a5493c0929dfc1fa9e47Anders Carlsson//===----------------------------------------------------------------------===//
9022012e6e5626c3372e1a5493c0929dfc1fa9e47Anders Carlsson//
10022012e6e5626c3372e1a5493c0929dfc1fa9e47Anders Carlsson// This contains code to emit Builtin calls as LLVM code.
11022012e6e5626c3372e1a5493c0929dfc1fa9e47Anders Carlsson//
12022012e6e5626c3372e1a5493c0929dfc1fa9e47Anders Carlsson//===----------------------------------------------------------------------===//
13022012e6e5626c3372e1a5493c0929dfc1fa9e47Anders Carlsson
14d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall#include "TargetInfo.h"
15022012e6e5626c3372e1a5493c0929dfc1fa9e47Anders Carlsson#include "CodeGenFunction.h"
16022012e6e5626c3372e1a5493c0929dfc1fa9e47Anders Carlsson#include "CodeGenModule.h"
1755bcace250e1ff366e4482714b344b8cbc8be5f3Fariborz Jahanian#include "CGObjCRuntime.h"
18ca6fcfad547dcec3fdd17790b4fab0918df74b37Anders Carlsson#include "clang/Basic/TargetInfo.h"
191f32999ec79a980576e100d64d5f3267eb19ea49Chris Lattner#include "clang/AST/APValue.h"
20bef20ac367a09555b30d6eb3847a81ec164caf88Chris Lattner#include "clang/AST/ASTContext.h"
21c4a1dea2dc56bd1357ec91b829a0b9e68229a13eDaniel Dunbar#include "clang/AST/Decl.h"
226b15cdc1312f8fc45c86ee75e2a85106700e97f6Chris Lattner#include "clang/Basic/TargetBuiltins.h"
23793680ed8104bf088d1b382b963a8badcb3f07deAnders Carlsson#include "llvm/Intrinsics.h"
24d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall#include "llvm/Target/TargetData.h"
25558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak
26022012e6e5626c3372e1a5493c0929dfc1fa9e47Anders Carlssonusing namespace clang;
27022012e6e5626c3372e1a5493c0929dfc1fa9e47Anders Carlssonusing namespace CodeGen;
28ca6fcfad547dcec3fdd17790b4fab0918df74b37Anders Carlssonusing namespace llvm;
29ca6fcfad547dcec3fdd17790b4fab0918df74b37Anders Carlsson
30a45680b7e7c49ea9893c6cff585984f3e4120366John McCall/// getBuiltinLibFunction - Given a builtin id for a function like
31a45680b7e7c49ea9893c6cff585984f3e4120366John McCall/// "__builtin_fabsf", return a Function* for "fabsf".
32a45680b7e7c49ea9893c6cff585984f3e4120366John McCallllvm::Value *CodeGenModule::getBuiltinLibFunction(const FunctionDecl *FD,
33a45680b7e7c49ea9893c6cff585984f3e4120366John McCall                                                  unsigned BuiltinID) {
34a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  assert(Context.BuiltinInfo.isLibFunction(BuiltinID));
35a45680b7e7c49ea9893c6cff585984f3e4120366John McCall
36a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  // Get the name, skip over the __builtin_ prefix (if necessary).
37a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  StringRef Name;
38a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  GlobalDecl D(FD);
39a45680b7e7c49ea9893c6cff585984f3e4120366John McCall
40a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  // If the builtin has been declared explicitly with an assembler label,
41a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  // use the mangled name. This differs from the plain label on platforms
42a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  // that prefix labels.
43a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  if (FD->hasAttr<AsmLabelAttr>())
44a45680b7e7c49ea9893c6cff585984f3e4120366John McCall    Name = getMangledName(D);
45a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  else
46a45680b7e7c49ea9893c6cff585984f3e4120366John McCall    Name = Context.BuiltinInfo.GetName(BuiltinID) + 10;
47a45680b7e7c49ea9893c6cff585984f3e4120366John McCall
48a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  llvm::FunctionType *Ty =
49a45680b7e7c49ea9893c6cff585984f3e4120366John McCall    cast<llvm::FunctionType>(getTypes().ConvertType(FD->getType()));
50a45680b7e7c49ea9893c6cff585984f3e4120366John McCall
51a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  return GetOrCreateLLVMFunction(Name, Ty, D, /*ForVTable=*/false);
52a45680b7e7c49ea9893c6cff585984f3e4120366John McCall}
53a45680b7e7c49ea9893c6cff585984f3e4120366John McCall
5426815d97c5743481e317f17a8d53a6819d061862John McCall/// Emit the conversions required to turn the given value into an
5526815d97c5743481e317f17a8d53a6819d061862John McCall/// integer of the given size.
5626815d97c5743481e317f17a8d53a6819d061862John McCallstatic Value *EmitToInt(CodeGenFunction &CGF, llvm::Value *V,
572acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner                        QualType T, llvm::IntegerType *IntType) {
5826815d97c5743481e317f17a8d53a6819d061862John McCall  V = CGF.EmitToMemory(V, T);
5926815d97c5743481e317f17a8d53a6819d061862John McCall
6026815d97c5743481e317f17a8d53a6819d061862John McCall  if (V->getType()->isPointerTy())
6126815d97c5743481e317f17a8d53a6819d061862John McCall    return CGF.Builder.CreatePtrToInt(V, IntType);
6226815d97c5743481e317f17a8d53a6819d061862John McCall
6326815d97c5743481e317f17a8d53a6819d061862John McCall  assert(V->getType() == IntType);
6426815d97c5743481e317f17a8d53a6819d061862John McCall  return V;
65db4325b098eff5e9e660db19f0148423fb21f27fChandler Carruth}
66db4325b098eff5e9e660db19f0148423fb21f27fChandler Carruth
6726815d97c5743481e317f17a8d53a6819d061862John McCallstatic Value *EmitFromInt(CodeGenFunction &CGF, llvm::Value *V,
682acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner                          QualType T, llvm::Type *ResultType) {
6926815d97c5743481e317f17a8d53a6819d061862John McCall  V = CGF.EmitFromMemory(V, T);
7026815d97c5743481e317f17a8d53a6819d061862John McCall
7126815d97c5743481e317f17a8d53a6819d061862John McCall  if (ResultType->isPointerTy())
7226815d97c5743481e317f17a8d53a6819d061862John McCall    return CGF.Builder.CreateIntToPtr(V, ResultType);
7326815d97c5743481e317f17a8d53a6819d061862John McCall
7426815d97c5743481e317f17a8d53a6819d061862John McCall  assert(V->getType() == ResultType);
7526815d97c5743481e317f17a8d53a6819d061862John McCall  return V;
76db4325b098eff5e9e660db19f0148423fb21f27fChandler Carruth}
77db4325b098eff5e9e660db19f0148423fb21f27fChandler Carruth
780002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar/// Utility to insert an atomic instruction based on Instrinsic::ID
790002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar/// and the expression node.
80cb61a7bbe635cfa941b1aeaaa1fbda1bf900ee51Daniel Dunbarstatic RValue EmitBinaryAtomic(CodeGenFunction &CGF,
81c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman                               llvm::AtomicRMWInst::BinOp Kind,
82c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman                               const CallExpr *E) {
8326815d97c5743481e317f17a8d53a6819d061862John McCall  QualType T = E->getType();
8426815d97c5743481e317f17a8d53a6819d061862John McCall  assert(E->getArg(0)->getType()->isPointerType());
8526815d97c5743481e317f17a8d53a6819d061862John McCall  assert(CGF.getContext().hasSameUnqualifiedType(T,
8626815d97c5743481e317f17a8d53a6819d061862John McCall                                  E->getArg(0)->getType()->getPointeeType()));
8726815d97c5743481e317f17a8d53a6819d061862John McCall  assert(CGF.getContext().hasSameUnqualifiedType(T, E->getArg(1)->getType()));
8826815d97c5743481e317f17a8d53a6819d061862John McCall
894f209445c06a43283c6f72dda7c925538b1578e9Chris Lattner  llvm::Value *DestPtr = CGF.EmitScalarExpr(E->getArg(0));
904f209445c06a43283c6f72dda7c925538b1578e9Chris Lattner  unsigned AddrSpace =
914f209445c06a43283c6f72dda7c925538b1578e9Chris Lattner    cast<llvm::PointerType>(DestPtr->getType())->getAddressSpace();
9226815d97c5743481e317f17a8d53a6819d061862John McCall
939cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner  llvm::IntegerType *IntType =
94db4325b098eff5e9e660db19f0148423fb21f27fChandler Carruth    llvm::IntegerType::get(CGF.getLLVMContext(),
9526815d97c5743481e317f17a8d53a6819d061862John McCall                           CGF.getContext().getTypeSize(T));
969cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner  llvm::Type *IntPtrType = IntType->getPointerTo(AddrSpace);
9726815d97c5743481e317f17a8d53a6819d061862John McCall
9826815d97c5743481e317f17a8d53a6819d061862John McCall  llvm::Value *Args[2];
9926815d97c5743481e317f17a8d53a6819d061862John McCall  Args[0] = CGF.Builder.CreateBitCast(DestPtr, IntPtrType);
10026815d97c5743481e317f17a8d53a6819d061862John McCall  Args[1] = CGF.EmitScalarExpr(E->getArg(1));
1012acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner  llvm::Type *ValueType = Args[1]->getType();
10226815d97c5743481e317f17a8d53a6819d061862John McCall  Args[1] = EmitToInt(CGF, Args[1], T, IntType);
10326815d97c5743481e317f17a8d53a6819d061862John McCall
104c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman  llvm::Value *Result =
105c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman      CGF.Builder.CreateAtomicRMW(Kind, Args[0], Args[1],
106c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman                                  llvm::SequentiallyConsistent);
10726815d97c5743481e317f17a8d53a6819d061862John McCall  Result = EmitFromInt(CGF, Result, T, ValueType);
10826815d97c5743481e317f17a8d53a6819d061862John McCall  return RValue::get(Result);
1090002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar}
1100002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar
1110002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar/// Utility to insert an atomic instruction based Instrinsic::ID and
11226815d97c5743481e317f17a8d53a6819d061862John McCall/// the expression node, where the return value is the result of the
11326815d97c5743481e317f17a8d53a6819d061862John McCall/// operation.
114420b11850d3f4557421f43f519b59d528329c668Chris Lattnerstatic RValue EmitBinaryAtomicPost(CodeGenFunction &CGF,
115c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman                                   llvm::AtomicRMWInst::BinOp Kind,
116c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman                                   const CallExpr *E,
1170002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar                                   Instruction::BinaryOps Op) {
11826815d97c5743481e317f17a8d53a6819d061862John McCall  QualType T = E->getType();
11926815d97c5743481e317f17a8d53a6819d061862John McCall  assert(E->getArg(0)->getType()->isPointerType());
12026815d97c5743481e317f17a8d53a6819d061862John McCall  assert(CGF.getContext().hasSameUnqualifiedType(T,
12126815d97c5743481e317f17a8d53a6819d061862John McCall                                  E->getArg(0)->getType()->getPointeeType()));
12226815d97c5743481e317f17a8d53a6819d061862John McCall  assert(CGF.getContext().hasSameUnqualifiedType(T, E->getArg(1)->getType()));
12326815d97c5743481e317f17a8d53a6819d061862John McCall
1244f209445c06a43283c6f72dda7c925538b1578e9Chris Lattner  llvm::Value *DestPtr = CGF.EmitScalarExpr(E->getArg(0));
1254f209445c06a43283c6f72dda7c925538b1578e9Chris Lattner  unsigned AddrSpace =
1264f209445c06a43283c6f72dda7c925538b1578e9Chris Lattner    cast<llvm::PointerType>(DestPtr->getType())->getAddressSpace();
12726815d97c5743481e317f17a8d53a6819d061862John McCall
1289cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner  llvm::IntegerType *IntType =
129db4325b098eff5e9e660db19f0148423fb21f27fChandler Carruth    llvm::IntegerType::get(CGF.getLLVMContext(),
13026815d97c5743481e317f17a8d53a6819d061862John McCall                           CGF.getContext().getTypeSize(T));
1319cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner  llvm::Type *IntPtrType = IntType->getPointerTo(AddrSpace);
13226815d97c5743481e317f17a8d53a6819d061862John McCall
13326815d97c5743481e317f17a8d53a6819d061862John McCall  llvm::Value *Args[2];
13426815d97c5743481e317f17a8d53a6819d061862John McCall  Args[1] = CGF.EmitScalarExpr(E->getArg(1));
1352acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner  llvm::Type *ValueType = Args[1]->getType();
13626815d97c5743481e317f17a8d53a6819d061862John McCall  Args[1] = EmitToInt(CGF, Args[1], T, IntType);
13726815d97c5743481e317f17a8d53a6819d061862John McCall  Args[0] = CGF.Builder.CreateBitCast(DestPtr, IntPtrType);
13826815d97c5743481e317f17a8d53a6819d061862John McCall
139c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman  llvm::Value *Result =
140c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman      CGF.Builder.CreateAtomicRMW(Kind, Args[0], Args[1],
141c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman                                  llvm::SequentiallyConsistent);
14226815d97c5743481e317f17a8d53a6819d061862John McCall  Result = CGF.Builder.CreateBinOp(Op, Result, Args[1]);
14326815d97c5743481e317f17a8d53a6819d061862John McCall  Result = EmitFromInt(CGF, Result, T, ValueType);
14426815d97c5743481e317f17a8d53a6819d061862John McCall  return RValue::get(Result);
1451ffe281890f3cd7728316b45a1f3dd4d3120af7bMon P Wang}
1461ffe281890f3cd7728316b45a1f3dd4d3120af7bMon P Wang
147420b11850d3f4557421f43f519b59d528329c668Chris Lattner/// EmitFAbs - Emit a call to fabs/fabsf/fabsl, depending on the type of ValTy,
148420b11850d3f4557421f43f519b59d528329c668Chris Lattner/// which must be a scalar floating point type.
149420b11850d3f4557421f43f519b59d528329c668Chris Lattnerstatic Value *EmitFAbs(CodeGenFunction &CGF, Value *V, QualType ValTy) {
150420b11850d3f4557421f43f519b59d528329c668Chris Lattner  const BuiltinType *ValTyP = ValTy->getAs<BuiltinType>();
151420b11850d3f4557421f43f519b59d528329c668Chris Lattner  assert(ValTyP && "isn't scalar fp type!");
152420b11850d3f4557421f43f519b59d528329c668Chris Lattner
153420b11850d3f4557421f43f519b59d528329c668Chris Lattner  StringRef FnName;
154420b11850d3f4557421f43f519b59d528329c668Chris Lattner  switch (ValTyP->getKind()) {
155b219cfc4d75f0a03630b7c4509ef791b7e97b2c8David Blaikie  default: llvm_unreachable("Isn't a scalar fp type!");
156420b11850d3f4557421f43f519b59d528329c668Chris Lattner  case BuiltinType::Float:      FnName = "fabsf"; break;
157420b11850d3f4557421f43f519b59d528329c668Chris Lattner  case BuiltinType::Double:     FnName = "fabs"; break;
158420b11850d3f4557421f43f519b59d528329c668Chris Lattner  case BuiltinType::LongDouble: FnName = "fabsl"; break;
159420b11850d3f4557421f43f519b59d528329c668Chris Lattner  }
160420b11850d3f4557421f43f519b59d528329c668Chris Lattner
161420b11850d3f4557421f43f519b59d528329c668Chris Lattner  // The prototype is something that takes and returns whatever V's type is.
162da549e8995c447542d5631b8b67fcc3a9582797aJay Foad  llvm::FunctionType *FT = llvm::FunctionType::get(V->getType(), V->getType(),
16395d318c4c10437db40ca6e15fdf32e04012da58eBenjamin Kramer                                                   false);
164420b11850d3f4557421f43f519b59d528329c668Chris Lattner  llvm::Value *Fn = CGF.CGM.CreateRuntimeFunction(FT, FnName);
165420b11850d3f4557421f43f519b59d528329c668Chris Lattner
166420b11850d3f4557421f43f519b59d528329c668Chris Lattner  return CGF.Builder.CreateCall(Fn, V, "abs");
167420b11850d3f4557421f43f519b59d528329c668Chris Lattner}
168420b11850d3f4557421f43f519b59d528329c668Chris Lattner
169a45680b7e7c49ea9893c6cff585984f3e4120366John McCallstatic RValue emitLibraryCall(CodeGenFunction &CGF, const FunctionDecl *Fn,
170a45680b7e7c49ea9893c6cff585984f3e4120366John McCall                              const CallExpr *E, llvm::Value *calleeValue) {
171a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  return CGF.EmitCall(E->getCallee()->getType(), calleeValue,
172a45680b7e7c49ea9893c6cff585984f3e4120366John McCall                      ReturnValueSlot(), E->arg_begin(), E->arg_end(), Fn);
173a45680b7e7c49ea9893c6cff585984f3e4120366John McCall}
174a45680b7e7c49ea9893c6cff585984f3e4120366John McCall
1751eb4433ac451dc16f4133a88af2d002ac26c58efMike StumpRValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD,
176ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar                                        unsigned BuiltinID, const CallExpr *E) {
177564ea2a99b3afeac9ded332730a56db1f6358a58Chris Lattner  // See if we can constant fold this builtin.  If so, don't emit it at all.
178f35d35a2316dcb65d078844696c2032b71a7f103Anders Carlsson  Expr::EvalResult Result;
17951f4708c00110940ca3f337961915f2ca1668375Richard Smith  if (E->EvaluateAsRValue(Result, CGM.getContext()) &&
180dd697bc8629f0fa6777245610d52ca7ceb3b67f4Fariborz Jahanian      !Result.hasSideEffects()) {
181f35d35a2316dcb65d078844696c2032b71a7f103Anders Carlsson    if (Result.Val.isInt())
182d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall      return RValue::get(llvm::ConstantInt::get(getLLVMContext(),
1834a28d5deeba33722aa009eab488591fb9055cc7eOwen Anderson                                                Result.Val.getInt()));
184a1aa9e36e6e21f74c56cf9e72cb5bd9aa2a92fd4Chris Lattner    if (Result.Val.isFloat())
185d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall      return RValue::get(llvm::ConstantFP::get(getLLVMContext(),
186d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall                                               Result.Val.getFloat()));
1871f32999ec79a980576e100d64d5f3267eb19ea49Chris Lattner  }
1881eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
189564ea2a99b3afeac9ded332730a56db1f6358a58Chris Lattner  switch (BuiltinID) {
190564ea2a99b3afeac9ded332730a56db1f6358a58Chris Lattner  default: break;  // Handle intrinsics and libm functions below.
191506ff88f44562df267b6a06608ab841b76df2a2bChris Lattner  case Builtin::BI__builtin___CFStringMakeConstantString:
1920d13f6fdbdd6f06e2449b8834dda53334abd399aDavid Chisnall  case Builtin::BI__builtin___NSStringMakeConstantString:
193e9352cc9818ba59e7cf88500ef048991c90f3821Anders Carlsson    return RValue::get(CGM.EmitConstantExpr(E, E->getType(), 0));
1946a705f0443f8398ece14d80e71d8e8c9e71aa84aChris Lattner  case Builtin::BI__builtin_stdarg_start:
195793680ed8104bf088d1b382b963a8badcb3f07deAnders Carlsson  case Builtin::BI__builtin_va_start:
196793680ed8104bf088d1b382b963a8badcb3f07deAnders Carlsson  case Builtin::BI__builtin_va_end: {
1970785570af3ef5f8c5a0377129e41efe6f3f8d770Daniel Dunbar    Value *ArgValue = EmitVAListRef(E->getArg(0));
1982acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *DestType = Int8PtrTy;
199793680ed8104bf088d1b382b963a8badcb3f07deAnders Carlsson    if (ArgValue->getType() != DestType)
2001eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      ArgValue = Builder.CreateBitCast(ArgValue, DestType,
201b27ffbef8e8aa1e87b63cbc0d9cd630aba30dae5Daniel Dunbar                                       ArgValue->getName().data());
202793680ed8104bf088d1b382b963a8badcb3f07deAnders Carlsson
2031eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    Intrinsic::ID inst = (BuiltinID == Builtin::BI__builtin_va_end) ?
2046a705f0443f8398ece14d80e71d8e8c9e71aa84aChris Lattner      Intrinsic::vaend : Intrinsic::vastart;
2057acda7c4a0e4aec6c003b3169ca45a5f3bc7e033Chris Lattner    return RValue::get(Builder.CreateCall(CGM.getIntrinsic(inst), ArgValue));
206793680ed8104bf088d1b382b963a8badcb3f07deAnders Carlsson  }
207a28ef8b5c6ea452472d89041128fac8b683fe968Anders Carlsson  case Builtin::BI__builtin_va_copy: {
2084fd0aa5803357d8c72eeac2cae15e12649ea08feEli Friedman    Value *DstPtr = EmitVAListRef(E->getArg(0));
2094fd0aa5803357d8c72eeac2cae15e12649ea08feEli Friedman    Value *SrcPtr = EmitVAListRef(E->getArg(1));
210a28ef8b5c6ea452472d89041128fac8b683fe968Anders Carlsson
2112acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *Type = Int8PtrTy;
212a28ef8b5c6ea452472d89041128fac8b683fe968Anders Carlsson
213a28ef8b5c6ea452472d89041128fac8b683fe968Anders Carlsson    DstPtr = Builder.CreateBitCast(DstPtr, Type);
214a28ef8b5c6ea452472d89041128fac8b683fe968Anders Carlsson    SrcPtr = Builder.CreateBitCast(SrcPtr, Type);
2151eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    return RValue::get(Builder.CreateCall2(CGM.getIntrinsic(Intrinsic::vacopy),
2163eae03e7d165f20a863a9a4d7122ba2a691ab16dChris Lattner                                           DstPtr, SrcPtr));
217a28ef8b5c6ea452472d89041128fac8b683fe968Anders Carlsson  }
218c2251dc59b0edc28f9303637dec970a7520939adAnders Carlsson  case Builtin::BI__builtin_abs: {
2191eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    Value *ArgValue = EmitScalarExpr(E->getArg(0));
2201eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2219a847f598c4907a72b8593b364b9e6b94b086e75Chris Lattner    Value *NegOp = Builder.CreateNeg(ArgValue, "neg");
2221eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    Value *CmpResult =
2231eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    Builder.CreateICmpSGE(ArgValue,
224c9c88b4159791c48e486ca94e3743b5979e2b7a6Owen Anderson                          llvm::Constant::getNullValue(ArgValue->getType()),
2259a847f598c4907a72b8593b364b9e6b94b086e75Chris Lattner                                                            "abscond");
2261eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    Value *Result =
227c2251dc59b0edc28f9303637dec970a7520939adAnders Carlsson      Builder.CreateSelect(CmpResult, ArgValue, NegOp, "abs");
2281eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
229c2251dc59b0edc28f9303637dec970a7520939adAnders Carlsson    return RValue::get(Result);
230c2251dc59b0edc28f9303637dec970a7520939adAnders Carlsson  }
2313a31d60cffedfb7c9e6d129a5c9ba15fa74f179aAnders Carlsson  case Builtin::BI__builtin_ctz:
2323a31d60cffedfb7c9e6d129a5c9ba15fa74f179aAnders Carlsson  case Builtin::BI__builtin_ctzl:
2333a31d60cffedfb7c9e6d129a5c9ba15fa74f179aAnders Carlsson  case Builtin::BI__builtin_ctzll: {
2343a31d60cffedfb7c9e6d129a5c9ba15fa74f179aAnders Carlsson    Value *ArgValue = EmitScalarExpr(E->getArg(0));
2351eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2369cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *ArgType = ArgValue->getType();
2378dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::cttz, ArgType);
2383a31d60cffedfb7c9e6d129a5c9ba15fa74f179aAnders Carlsson
2392acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *ResultType = ConvertType(E->getType());
24050058ec63f38eabeb94391a61d2e7fb18a062173Chandler Carruth    Value *Result = Builder.CreateCall2(F, ArgValue, Builder.getTrue());
2413a31d60cffedfb7c9e6d129a5c9ba15fa74f179aAnders Carlsson    if (Result->getType() != ResultType)
242eac73e5b3eb3862945bcaa2770c71a727a3ee542Duncan Sands      Result = Builder.CreateIntCast(Result, ResultType, /*isSigned*/true,
243eac73e5b3eb3862945bcaa2770c71a727a3ee542Duncan Sands                                     "cast");
2443a31d60cffedfb7c9e6d129a5c9ba15fa74f179aAnders Carlsson    return RValue::get(Result);
2453a31d60cffedfb7c9e6d129a5c9ba15fa74f179aAnders Carlsson  }
246f4e853340590d5c32e58379e8c379ea1777d3101Eli Friedman  case Builtin::BI__builtin_clz:
247f4e853340590d5c32e58379e8c379ea1777d3101Eli Friedman  case Builtin::BI__builtin_clzl:
248f4e853340590d5c32e58379e8c379ea1777d3101Eli Friedman  case Builtin::BI__builtin_clzll: {
249f4e853340590d5c32e58379e8c379ea1777d3101Eli Friedman    Value *ArgValue = EmitScalarExpr(E->getArg(0));
2501eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2519cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *ArgType = ArgValue->getType();
2528dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::ctlz, ArgType);
253f4e853340590d5c32e58379e8c379ea1777d3101Eli Friedman
2542acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *ResultType = ConvertType(E->getType());
25550058ec63f38eabeb94391a61d2e7fb18a062173Chandler Carruth    Value *Result = Builder.CreateCall2(F, ArgValue, Builder.getTrue());
256f4e853340590d5c32e58379e8c379ea1777d3101Eli Friedman    if (Result->getType() != ResultType)
257eac73e5b3eb3862945bcaa2770c71a727a3ee542Duncan Sands      Result = Builder.CreateIntCast(Result, ResultType, /*isSigned*/true,
258eac73e5b3eb3862945bcaa2770c71a727a3ee542Duncan Sands                                     "cast");
259f4e853340590d5c32e58379e8c379ea1777d3101Eli Friedman    return RValue::get(Result);
260f4e853340590d5c32e58379e8c379ea1777d3101Eli Friedman  }
26104b290030eee33295600728450f348989d1a627eDaniel Dunbar  case Builtin::BI__builtin_ffs:
26204b290030eee33295600728450f348989d1a627eDaniel Dunbar  case Builtin::BI__builtin_ffsl:
26304b290030eee33295600728450f348989d1a627eDaniel Dunbar  case Builtin::BI__builtin_ffsll: {
26404b290030eee33295600728450f348989d1a627eDaniel Dunbar    // ffs(x) -> x ? cttz(x) + 1 : 0
26504b290030eee33295600728450f348989d1a627eDaniel Dunbar    Value *ArgValue = EmitScalarExpr(E->getArg(0));
2661eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2679cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *ArgType = ArgValue->getType();
2688dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::cttz, ArgType);
2691eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2702acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *ResultType = ConvertType(E->getType());
27150058ec63f38eabeb94391a61d2e7fb18a062173Chandler Carruth    Value *Tmp = Builder.CreateAdd(Builder.CreateCall2(F, ArgValue,
27250058ec63f38eabeb94391a61d2e7fb18a062173Chandler Carruth                                                       Builder.getTrue()),
273578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer                                   llvm::ConstantInt::get(ArgType, 1));
274c9c88b4159791c48e486ca94e3743b5979e2b7a6Owen Anderson    Value *Zero = llvm::Constant::getNullValue(ArgType);
27504b290030eee33295600728450f348989d1a627eDaniel Dunbar    Value *IsZero = Builder.CreateICmpEQ(ArgValue, Zero, "iszero");
27604b290030eee33295600728450f348989d1a627eDaniel Dunbar    Value *Result = Builder.CreateSelect(IsZero, Zero, Tmp, "ffs");
27704b290030eee33295600728450f348989d1a627eDaniel Dunbar    if (Result->getType() != ResultType)
278eac73e5b3eb3862945bcaa2770c71a727a3ee542Duncan Sands      Result = Builder.CreateIntCast(Result, ResultType, /*isSigned*/true,
279eac73e5b3eb3862945bcaa2770c71a727a3ee542Duncan Sands                                     "cast");
28004b290030eee33295600728450f348989d1a627eDaniel Dunbar    return RValue::get(Result);
28104b290030eee33295600728450f348989d1a627eDaniel Dunbar  }
28204b290030eee33295600728450f348989d1a627eDaniel Dunbar  case Builtin::BI__builtin_parity:
28304b290030eee33295600728450f348989d1a627eDaniel Dunbar  case Builtin::BI__builtin_parityl:
28404b290030eee33295600728450f348989d1a627eDaniel Dunbar  case Builtin::BI__builtin_parityll: {
28504b290030eee33295600728450f348989d1a627eDaniel Dunbar    // parity(x) -> ctpop(x) & 1
28604b290030eee33295600728450f348989d1a627eDaniel Dunbar    Value *ArgValue = EmitScalarExpr(E->getArg(0));
2871eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2889cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *ArgType = ArgValue->getType();
2898dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::ctpop, ArgType);
2901eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2912acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *ResultType = ConvertType(E->getType());
292578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    Value *Tmp = Builder.CreateCall(F, ArgValue);
293578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    Value *Result = Builder.CreateAnd(Tmp, llvm::ConstantInt::get(ArgType, 1));
29404b290030eee33295600728450f348989d1a627eDaniel Dunbar    if (Result->getType() != ResultType)
295eac73e5b3eb3862945bcaa2770c71a727a3ee542Duncan Sands      Result = Builder.CreateIntCast(Result, ResultType, /*isSigned*/true,
296eac73e5b3eb3862945bcaa2770c71a727a3ee542Duncan Sands                                     "cast");
29704b290030eee33295600728450f348989d1a627eDaniel Dunbar    return RValue::get(Result);
29804b290030eee33295600728450f348989d1a627eDaniel Dunbar  }
29904b290030eee33295600728450f348989d1a627eDaniel Dunbar  case Builtin::BI__builtin_popcount:
30004b290030eee33295600728450f348989d1a627eDaniel Dunbar  case Builtin::BI__builtin_popcountl:
30104b290030eee33295600728450f348989d1a627eDaniel Dunbar  case Builtin::BI__builtin_popcountll: {
30204b290030eee33295600728450f348989d1a627eDaniel Dunbar    Value *ArgValue = EmitScalarExpr(E->getArg(0));
3031eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
3049cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *ArgType = ArgValue->getType();
3058dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::ctpop, ArgType);
3061eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
3072acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *ResultType = ConvertType(E->getType());
308578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    Value *Result = Builder.CreateCall(F, ArgValue);
30904b290030eee33295600728450f348989d1a627eDaniel Dunbar    if (Result->getType() != ResultType)
310eac73e5b3eb3862945bcaa2770c71a727a3ee542Duncan Sands      Result = Builder.CreateIntCast(Result, ResultType, /*isSigned*/true,
311eac73e5b3eb3862945bcaa2770c71a727a3ee542Duncan Sands                                     "cast");
31204b290030eee33295600728450f348989d1a627eDaniel Dunbar    return RValue::get(Result);
31304b290030eee33295600728450f348989d1a627eDaniel Dunbar  }
314e42b8a596886fc98e367c73e54d761446700029eFariborz Jahanian  case Builtin::BI__builtin_expect: {
315dd697bc8629f0fa6777245610d52ca7ceb3b67f4Fariborz Jahanian    Value *ArgValue = EmitScalarExpr(E->getArg(0));
3169cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *ArgType = ArgValue->getType();
317558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak
3188dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *FnExpect = CGM.getIntrinsic(Intrinsic::expect, ArgType);
319558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak    Value *ExpectedValue = EmitScalarExpr(E->getArg(1));
320558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak
321558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak    Value *Result = Builder.CreateCall2(FnExpect, ArgValue, ExpectedValue,
322558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak                                        "expval");
323558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak    return RValue::get(Result);
324e42b8a596886fc98e367c73e54d761446700029eFariborz Jahanian  }
325df4852ac816e6050d53b808b86d7c1c9738eb99eAnders Carlsson  case Builtin::BI__builtin_bswap32:
326df4852ac816e6050d53b808b86d7c1c9738eb99eAnders Carlsson  case Builtin::BI__builtin_bswap64: {
3271feedd84221e8dbcc3faf3de27cc42b559db845dChris Lattner    Value *ArgValue = EmitScalarExpr(E->getArg(0));
3289cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *ArgType = ArgValue->getType();
3298dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::bswap, ArgType);
330578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    return RValue::get(Builder.CreateCall(F, ArgValue));
3311eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  }
332d5f8a4fd4d6dfb0415b93bb7ab721bba5cab1332Daniel Dunbar  case Builtin::BI__builtin_object_size: {
333b16d32f74ffc467a5604934a1f844906be20cf7dMike Stump    // We pass this builtin onto the optimizer so that it can
334b16d32f74ffc467a5604934a1f844906be20cf7dMike Stump    // figure out the object size in more complex cases.
3358dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    llvm::Type *ResType = ConvertType(E->getType());
336fee667f35e64751baa7fefe70b4e7bab06c8cd86Eric Christopher
337fee667f35e64751baa7fefe70b4e7bab06c8cd86Eric Christopher    // LLVM only supports 0 and 2, make sure that we pass along that
338fee667f35e64751baa7fefe70b4e7bab06c8cd86Eric Christopher    // as a boolean.
339fee667f35e64751baa7fefe70b4e7bab06c8cd86Eric Christopher    Value *Ty = EmitScalarExpr(E->getArg(1));
340fee667f35e64751baa7fefe70b4e7bab06c8cd86Eric Christopher    ConstantInt *CI = dyn_cast<ConstantInt>(Ty);
341fee667f35e64751baa7fefe70b4e7bab06c8cd86Eric Christopher    assert(CI);
342fee667f35e64751baa7fefe70b4e7bab06c8cd86Eric Christopher    uint64_t val = CI->getZExtValue();
343d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    CI = ConstantInt::get(Builder.getInt1Ty(), (val & 0x2) >> 1);
344fee667f35e64751baa7fefe70b4e7bab06c8cd86Eric Christopher
3458dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::objectsize, ResType);
346c4c9045dabfc0f0d37dea1b3eb2992654d5b2db1Mike Stump    return RValue::get(Builder.CreateCall2(F,
347c4c9045dabfc0f0d37dea1b3eb2992654d5b2db1Mike Stump                                           EmitScalarExpr(E->getArg(0)),
348fee667f35e64751baa7fefe70b4e7bab06c8cd86Eric Christopher                                           CI));
349d5f8a4fd4d6dfb0415b93bb7ab721bba5cab1332Daniel Dunbar  }
3504493f79fce48cd9cbd9f55fa9d452cde736747a0Daniel Dunbar  case Builtin::BI__builtin_prefetch: {
3514493f79fce48cd9cbd9f55fa9d452cde736747a0Daniel Dunbar    Value *Locality, *RW, *Address = EmitScalarExpr(E->getArg(0));
3524493f79fce48cd9cbd9f55fa9d452cde736747a0Daniel Dunbar    // FIXME: Technically these constants should of type 'int', yes?
3531eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    RW = (E->getNumArgs() > 1) ? EmitScalarExpr(E->getArg(1)) :
35477b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner      llvm::ConstantInt::get(Int32Ty, 0);
3551eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    Locality = (E->getNumArgs() > 2) ? EmitScalarExpr(E->getArg(2)) :
35677b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner      llvm::ConstantInt::get(Int32Ty, 3);
3572eccb672799d19fb535ce349566fea6729cbb891Bruno Cardoso Lopes    Value *Data = llvm::ConstantInt::get(Int32Ty, 1);
3588dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::prefetch);
3592eccb672799d19fb535ce349566fea6729cbb891Bruno Cardoso Lopes    return RValue::get(Builder.CreateCall4(F, Address, RW, Locality, Data));
3604493f79fce48cd9cbd9f55fa9d452cde736747a0Daniel Dunbar  }
3614493f79fce48cd9cbd9f55fa9d452cde736747a0Daniel Dunbar  case Builtin::BI__builtin_trap: {
3628dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::trap);
3634493f79fce48cd9cbd9f55fa9d452cde736747a0Daniel Dunbar    return RValue::get(Builder.CreateCall(F));
364df4852ac816e6050d53b808b86d7c1c9738eb99eAnders Carlsson  }
36521190d54634d6e244e85d28ad915ce2fe86ecbffChris Lattner  case Builtin::BI__builtin_unreachable: {
366cd5b22e12b6513163dd131589746c194090f14e6John McCall    if (CatchUndefined)
367fba565d044a8979cfd916ce52655a6847bfaa601Mike Stump      EmitBranch(getTrapBB());
368cd5b22e12b6513163dd131589746c194090f14e6John McCall    else
369cd5b22e12b6513163dd131589746c194090f14e6John McCall      Builder.CreateUnreachable();
370cd5b22e12b6513163dd131589746c194090f14e6John McCall
371cd5b22e12b6513163dd131589746c194090f14e6John McCall    // We do need to preserve an insertion point.
372d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    EmitBlock(createBasicBlock("unreachable.cont"));
373cd5b22e12b6513163dd131589746c194090f14e6John McCall
374cd5b22e12b6513163dd131589746c194090f14e6John McCall    return RValue::get(0);
37521190d54634d6e244e85d28ad915ce2fe86ecbffChris Lattner  }
37621190d54634d6e244e85d28ad915ce2fe86ecbffChris Lattner
377a933c3c052bbd87b01cc6fc7a7745e1c4b1757fbDaniel Dunbar  case Builtin::BI__builtin_powi:
378a933c3c052bbd87b01cc6fc7a7745e1c4b1757fbDaniel Dunbar  case Builtin::BI__builtin_powif:
379a933c3c052bbd87b01cc6fc7a7745e1c4b1757fbDaniel Dunbar  case Builtin::BI__builtin_powil: {
380a933c3c052bbd87b01cc6fc7a7745e1c4b1757fbDaniel Dunbar    Value *Base = EmitScalarExpr(E->getArg(0));
381a933c3c052bbd87b01cc6fc7a7745e1c4b1757fbDaniel Dunbar    Value *Exponent = EmitScalarExpr(E->getArg(1));
3829cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *ArgType = Base->getType();
3838dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::powi, ArgType);
384578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    return RValue::get(Builder.CreateCall2(F, Base, Exponent));
385a933c3c052bbd87b01cc6fc7a7745e1c4b1757fbDaniel Dunbar  }
386a933c3c052bbd87b01cc6fc7a7745e1c4b1757fbDaniel Dunbar
387fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner  case Builtin::BI__builtin_isgreater:
388fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner  case Builtin::BI__builtin_isgreaterequal:
389fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner  case Builtin::BI__builtin_isless:
390fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner  case Builtin::BI__builtin_islessequal:
391fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner  case Builtin::BI__builtin_islessgreater:
392fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner  case Builtin::BI__builtin_isunordered: {
393fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner    // Ordered comparisons: we know the arguments to these are matching scalar
394fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner    // floating point values.
3951eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    Value *LHS = EmitScalarExpr(E->getArg(0));
396fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner    Value *RHS = EmitScalarExpr(E->getArg(1));
3971eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
398fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner    switch (BuiltinID) {
399b219cfc4d75f0a03630b7c4509ef791b7e97b2c8David Blaikie    default: llvm_unreachable("Unknown ordered comparison");
400fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner    case Builtin::BI__builtin_isgreater:
401fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner      LHS = Builder.CreateFCmpOGT(LHS, RHS, "cmp");
402fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner      break;
403fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner    case Builtin::BI__builtin_isgreaterequal:
404fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner      LHS = Builder.CreateFCmpOGE(LHS, RHS, "cmp");
405fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner      break;
406fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner    case Builtin::BI__builtin_isless:
407fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner      LHS = Builder.CreateFCmpOLT(LHS, RHS, "cmp");
408fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner      break;
409fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner    case Builtin::BI__builtin_islessequal:
410fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner      LHS = Builder.CreateFCmpOLE(LHS, RHS, "cmp");
411fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner      break;
412fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner    case Builtin::BI__builtin_islessgreater:
413fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner      LHS = Builder.CreateFCmpONE(LHS, RHS, "cmp");
414fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner      break;
4151eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    case Builtin::BI__builtin_isunordered:
416fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner      LHS = Builder.CreateFCmpUNO(LHS, RHS, "cmp");
417fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner      break;
418fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner    }
419fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner    // ZExt bool to int type.
420578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    return RValue::get(Builder.CreateZExt(LHS, ConvertType(E->getType())));
421fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner  }
422d6139895f43d161a972d134ffda4229d2f548eb6Eli Friedman  case Builtin::BI__builtin_isnan: {
423d6139895f43d161a972d134ffda4229d2f548eb6Eli Friedman    Value *V = EmitScalarExpr(E->getArg(0));
424d6139895f43d161a972d134ffda4229d2f548eb6Eli Friedman    V = Builder.CreateFCmpUNO(V, V, "cmp");
425578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    return RValue::get(Builder.CreateZExt(V, ConvertType(E->getType())));
426d6139895f43d161a972d134ffda4229d2f548eb6Eli Friedman  }
427420b11850d3f4557421f43f519b59d528329c668Chris Lattner
428420b11850d3f4557421f43f519b59d528329c668Chris Lattner  case Builtin::BI__builtin_isinf: {
429420b11850d3f4557421f43f519b59d528329c668Chris Lattner    // isinf(x) --> fabs(x) == infinity
430420b11850d3f4557421f43f519b59d528329c668Chris Lattner    Value *V = EmitScalarExpr(E->getArg(0));
431420b11850d3f4557421f43f519b59d528329c668Chris Lattner    V = EmitFAbs(*this, V, E->getArg(0)->getType());
432420b11850d3f4557421f43f519b59d528329c668Chris Lattner
433420b11850d3f4557421f43f519b59d528329c668Chris Lattner    V = Builder.CreateFCmpOEQ(V, ConstantFP::getInfinity(V->getType()),"isinf");
434578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    return RValue::get(Builder.CreateZExt(V, ConvertType(E->getType())));
435420b11850d3f4557421f43f519b59d528329c668Chris Lattner  }
43658ae5b4b1e2fc02b95d6650af5755a59639aa153Chris Lattner
43758ae5b4b1e2fc02b95d6650af5755a59639aa153Chris Lattner  // TODO: BI__builtin_isinf_sign
43858ae5b4b1e2fc02b95d6650af5755a59639aa153Chris Lattner  //   isinf_sign(x) -> isinf(x) ? (signbit(x) ? -1 : 1) : 0
4396349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer
4406349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer  case Builtin::BI__builtin_isnormal: {
4416349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer    // isnormal(x) --> x == x && fabsf(x) < infinity && fabsf(x) >= float_min
4426349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer    Value *V = EmitScalarExpr(E->getArg(0));
4436349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer    Value *Eq = Builder.CreateFCmpOEQ(V, V, "iseq");
4446349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer
4456349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer    Value *Abs = EmitFAbs(*this, V, E->getArg(0)->getType());
4466349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer    Value *IsLessThanInf =
4476349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer      Builder.CreateFCmpULT(Abs, ConstantFP::getInfinity(V->getType()),"isinf");
4486349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer    APFloat Smallest = APFloat::getSmallestNormalized(
4496349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer                   getContext().getFloatTypeSemantics(E->getArg(0)->getType()));
4506349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer    Value *IsNormal =
4516349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer      Builder.CreateFCmpUGE(Abs, ConstantFP::get(V->getContext(), Smallest),
4526349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer                            "isnormal");
4536349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer    V = Builder.CreateAnd(Eq, IsLessThanInf, "and");
4546349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer    V = Builder.CreateAnd(V, IsNormal, "and");
4556349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer    return RValue::get(Builder.CreateZExt(V, ConvertType(E->getType())));
4566349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer  }
4576349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer
458ed074150c9a775c5e2e1c4ececeba18ba880ce7dChris Lattner  case Builtin::BI__builtin_isfinite: {
459ef004ec5adb0e11815cef3435fa5ac7366d783a9Julien Lerouge    // isfinite(x) --> x == x && fabs(x) != infinity;
460ed074150c9a775c5e2e1c4ececeba18ba880ce7dChris Lattner    Value *V = EmitScalarExpr(E->getArg(0));
461ed074150c9a775c5e2e1c4ececeba18ba880ce7dChris Lattner    Value *Eq = Builder.CreateFCmpOEQ(V, V, "iseq");
462ed074150c9a775c5e2e1c4ececeba18ba880ce7dChris Lattner
463ed074150c9a775c5e2e1c4ececeba18ba880ce7dChris Lattner    Value *Abs = EmitFAbs(*this, V, E->getArg(0)->getType());
464ed074150c9a775c5e2e1c4ececeba18ba880ce7dChris Lattner    Value *IsNotInf =
465ed074150c9a775c5e2e1c4ececeba18ba880ce7dChris Lattner      Builder.CreateFCmpUNE(Abs, ConstantFP::getInfinity(V->getType()),"isinf");
466ed074150c9a775c5e2e1c4ececeba18ba880ce7dChris Lattner
467ed074150c9a775c5e2e1c4ececeba18ba880ce7dChris Lattner    V = Builder.CreateAnd(Eq, IsNotInf, "and");
468ed074150c9a775c5e2e1c4ececeba18ba880ce7dChris Lattner    return RValue::get(Builder.CreateZExt(V, ConvertType(E->getType())));
469ed074150c9a775c5e2e1c4ececeba18ba880ce7dChris Lattner  }
4707867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer
4717867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer  case Builtin::BI__builtin_fpclassify: {
4727867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Value *V = EmitScalarExpr(E->getArg(5));
4732acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *Ty = ConvertType(E->getArg(5)->getType());
4747867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer
4757867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    // Create Result
4767867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    BasicBlock *Begin = Builder.GetInsertBlock();
4777867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    BasicBlock *End = createBasicBlock("fpclassify_end", this->CurFn);
4787867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Builder.SetInsertPoint(End);
4797867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    PHINode *Result =
480bbf3bacb3e0c1ebb3e8a4a8b1330404a7e379315Jay Foad      Builder.CreatePHI(ConvertType(E->getArg(0)->getType()), 4,
4817867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer                        "fpclassify_result");
4827867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer
4837867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    // if (V==0) return FP_ZERO
4847867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Builder.SetInsertPoint(Begin);
4857867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Value *IsZero = Builder.CreateFCmpOEQ(V, Constant::getNullValue(Ty),
4867867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer                                          "iszero");
4877867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Value *ZeroLiteral = EmitScalarExpr(E->getArg(4));
4887867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    BasicBlock *NotZero = createBasicBlock("fpclassify_not_zero", this->CurFn);
4897867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Builder.CreateCondBr(IsZero, End, NotZero);
4907867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Result->addIncoming(ZeroLiteral, Begin);
4917867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer
4927867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    // if (V != V) return FP_NAN
4937867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Builder.SetInsertPoint(NotZero);
4947867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Value *IsNan = Builder.CreateFCmpUNO(V, V, "cmp");
4957867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Value *NanLiteral = EmitScalarExpr(E->getArg(0));
4967867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    BasicBlock *NotNan = createBasicBlock("fpclassify_not_nan", this->CurFn);
4977867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Builder.CreateCondBr(IsNan, End, NotNan);
4987867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Result->addIncoming(NanLiteral, NotZero);
4997867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer
5007867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    // if (fabs(V) == infinity) return FP_INFINITY
5017867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Builder.SetInsertPoint(NotNan);
5027867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Value *VAbs = EmitFAbs(*this, V, E->getArg(5)->getType());
5037867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Value *IsInf =
5047867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer      Builder.CreateFCmpOEQ(VAbs, ConstantFP::getInfinity(V->getType()),
5057867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer                            "isinf");
5067867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Value *InfLiteral = EmitScalarExpr(E->getArg(1));
5077867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    BasicBlock *NotInf = createBasicBlock("fpclassify_not_inf", this->CurFn);
5087867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Builder.CreateCondBr(IsInf, End, NotInf);
5097867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Result->addIncoming(InfLiteral, NotNan);
5107867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer
5117867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    // if (fabs(V) >= MIN_NORMAL) return FP_NORMAL else FP_SUBNORMAL
5127867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Builder.SetInsertPoint(NotInf);
5137867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    APFloat Smallest = APFloat::getSmallestNormalized(
5147867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer        getContext().getFloatTypeSemantics(E->getArg(5)->getType()));
5157867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Value *IsNormal =
5167867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer      Builder.CreateFCmpUGE(VAbs, ConstantFP::get(V->getContext(), Smallest),
5177867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer                            "isnormal");
5187867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Value *NormalResult =
5197867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer      Builder.CreateSelect(IsNormal, EmitScalarExpr(E->getArg(2)),
5207867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer                           EmitScalarExpr(E->getArg(3)));
5217867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Builder.CreateBr(End);
5227867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Result->addIncoming(NormalResult, NotInf);
5237867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer
5247867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    // return Result
5257867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Builder.SetInsertPoint(End);
5267867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    return RValue::get(Result);
5277867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer  }
528ed074150c9a775c5e2e1c4ececeba18ba880ce7dChris Lattner
529b52fe9ce99970955a5f581f5c66fcd89be9a268bEli Friedman  case Builtin::BIalloca:
5309e800e3dd80d77f6c47054738177bf824089f55aChris Lattner  case Builtin::BI__builtin_alloca: {
5319e800e3dd80d77f6c47054738177bf824089f55aChris Lattner    Value *Size = EmitScalarExpr(E->getArg(0));
532578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    return RValue::get(Builder.CreateAlloca(Builder.getInt8Ty(), Size));
5331caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar  }
534e6dddfd907f6ea58daed5e26eeaacd893d98db9bEli Friedman  case Builtin::BIbzero:
5351caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar  case Builtin::BI__builtin_bzero: {
5361caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar    Value *Address = EmitScalarExpr(E->getArg(0));
5373ecd785aff34381f3704d9cb28fe3ef85af759deMon P Wang    Value *SizeVal = EmitScalarExpr(E->getArg(1));
5389f0c7cc36d29cf591c33962931f5862847145f3eBenjamin Kramer    Builder.CreateMemSet(Address, Builder.getInt8(0), SizeVal, 1, false);
5391caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar    return RValue::get(Address);
5409e800e3dd80d77f6c47054738177bf824089f55aChris Lattner  }
541e6ec205d6d0f4aec27bf49ca1e8fbb139acc2f2bEli Friedman  case Builtin::BImemcpy:
542d4b32e46517358f34e8cfbea35010adfcc3786e0Eli Friedman  case Builtin::BI__builtin_memcpy: {
5431caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar    Value *Address = EmitScalarExpr(E->getArg(0));
5443ecd785aff34381f3704d9cb28fe3ef85af759deMon P Wang    Value *SrcAddr = EmitScalarExpr(E->getArg(1));
5453ecd785aff34381f3704d9cb28fe3ef85af759deMon P Wang    Value *SizeVal = EmitScalarExpr(E->getArg(2));
5469f0c7cc36d29cf591c33962931f5862847145f3eBenjamin Kramer    Builder.CreateMemCpy(Address, SrcAddr, SizeVal, 1, false);
5471caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar    return RValue::get(Address);
5481caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar  }
54955bcace250e1ff366e4482714b344b8cbc8be5f3Fariborz Jahanian
550a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner  case Builtin::BI__builtin___memcpy_chk: {
551a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    // fold __builtin_memcpy_chk(x, y, cst1, cst2) to memset iff cst1<=cst2.
552a6b8b2c09610b8bc4330e948ece8b940c2386406Richard Smith    llvm::APSInt Size, DstSize;
553a6b8b2c09610b8bc4330e948ece8b940c2386406Richard Smith    if (!E->getArg(2)->EvaluateAsInt(Size, CGM.getContext()) ||
554a6b8b2c09610b8bc4330e948ece8b940c2386406Richard Smith        !E->getArg(3)->EvaluateAsInt(DstSize, CGM.getContext()))
555a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner      break;
556a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    if (Size.ugt(DstSize))
557a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner      break;
558a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    Value *Dest = EmitScalarExpr(E->getArg(0));
559a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    Value *Src = EmitScalarExpr(E->getArg(1));
560a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    Value *SizeVal = llvm::ConstantInt::get(Builder.getContext(), Size);
561a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    Builder.CreateMemCpy(Dest, Src, SizeVal, 1, false);
56242f681b83378de1541919c7f72e7555e35158867Chris Lattner    return RValue::get(Dest);
563a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner  }
564a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner
5658e2eab27056a78bf1db50ee09929438ed5ea9d93Fariborz Jahanian  case Builtin::BI__builtin_objc_memmove_collectable: {
56655bcace250e1ff366e4482714b344b8cbc8be5f3Fariborz Jahanian    Value *Address = EmitScalarExpr(E->getArg(0));
56755bcace250e1ff366e4482714b344b8cbc8be5f3Fariborz Jahanian    Value *SrcAddr = EmitScalarExpr(E->getArg(1));
56855bcace250e1ff366e4482714b344b8cbc8be5f3Fariborz Jahanian    Value *SizeVal = EmitScalarExpr(E->getArg(2));
56955bcace250e1ff366e4482714b344b8cbc8be5f3Fariborz Jahanian    CGM.getObjCRuntime().EmitGCMemmoveCollectable(*this,
57055bcace250e1ff366e4482714b344b8cbc8be5f3Fariborz Jahanian                                                  Address, SrcAddr, SizeVal);
57155bcace250e1ff366e4482714b344b8cbc8be5f3Fariborz Jahanian    return RValue::get(Address);
57255bcace250e1ff366e4482714b344b8cbc8be5f3Fariborz Jahanian  }
573a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner
574a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner  case Builtin::BI__builtin___memmove_chk: {
575a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    // fold __builtin_memmove_chk(x, y, cst1, cst2) to memset iff cst1<=cst2.
576a6b8b2c09610b8bc4330e948ece8b940c2386406Richard Smith    llvm::APSInt Size, DstSize;
577a6b8b2c09610b8bc4330e948ece8b940c2386406Richard Smith    if (!E->getArg(2)->EvaluateAsInt(Size, CGM.getContext()) ||
578a6b8b2c09610b8bc4330e948ece8b940c2386406Richard Smith        !E->getArg(3)->EvaluateAsInt(DstSize, CGM.getContext()))
579a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner      break;
580a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    if (Size.ugt(DstSize))
581a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner      break;
582a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    Value *Dest = EmitScalarExpr(E->getArg(0));
583a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    Value *Src = EmitScalarExpr(E->getArg(1));
584a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    Value *SizeVal = llvm::ConstantInt::get(Builder.getContext(), Size);
585a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    Builder.CreateMemMove(Dest, Src, SizeVal, 1, false);
58642f681b83378de1541919c7f72e7555e35158867Chris Lattner    return RValue::get(Dest);
587a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner  }
588a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner
589e6ec205d6d0f4aec27bf49ca1e8fbb139acc2f2bEli Friedman  case Builtin::BImemmove:
5901caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar  case Builtin::BI__builtin_memmove: {
5911caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar    Value *Address = EmitScalarExpr(E->getArg(0));
5923ecd785aff34381f3704d9cb28fe3ef85af759deMon P Wang    Value *SrcAddr = EmitScalarExpr(E->getArg(1));
5933ecd785aff34381f3704d9cb28fe3ef85af759deMon P Wang    Value *SizeVal = EmitScalarExpr(E->getArg(2));
5949f0c7cc36d29cf591c33962931f5862847145f3eBenjamin Kramer    Builder.CreateMemMove(Address, SrcAddr, SizeVal, 1, false);
5951caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar    return RValue::get(Address);
5961caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar  }
597e6ec205d6d0f4aec27bf49ca1e8fbb139acc2f2bEli Friedman  case Builtin::BImemset:
5981caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar  case Builtin::BI__builtin_memset: {
5991caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar    Value *Address = EmitScalarExpr(E->getArg(0));
6009f0c7cc36d29cf591c33962931f5862847145f3eBenjamin Kramer    Value *ByteVal = Builder.CreateTrunc(EmitScalarExpr(E->getArg(1)),
6019f0c7cc36d29cf591c33962931f5862847145f3eBenjamin Kramer                                         Builder.getInt8Ty());
6023ecd785aff34381f3704d9cb28fe3ef85af759deMon P Wang    Value *SizeVal = EmitScalarExpr(E->getArg(2));
6039f0c7cc36d29cf591c33962931f5862847145f3eBenjamin Kramer    Builder.CreateMemSet(Address, ByteVal, SizeVal, 1, false);
6041caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar    return RValue::get(Address);
605d4b32e46517358f34e8cfbea35010adfcc3786e0Eli Friedman  }
606a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner  case Builtin::BI__builtin___memset_chk: {
607a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    // fold __builtin_memset_chk(x, y, cst1, cst2) to memset iff cst1<=cst2.
608a6b8b2c09610b8bc4330e948ece8b940c2386406Richard Smith    llvm::APSInt Size, DstSize;
609a6b8b2c09610b8bc4330e948ece8b940c2386406Richard Smith    if (!E->getArg(2)->EvaluateAsInt(Size, CGM.getContext()) ||
610a6b8b2c09610b8bc4330e948ece8b940c2386406Richard Smith        !E->getArg(3)->EvaluateAsInt(DstSize, CGM.getContext()))
611a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner      break;
612a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    if (Size.ugt(DstSize))
613a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner      break;
614a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    Value *Address = EmitScalarExpr(E->getArg(0));
615a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    Value *ByteVal = Builder.CreateTrunc(EmitScalarExpr(E->getArg(1)),
616a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner                                         Builder.getInt8Ty());
617a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    Value *SizeVal = llvm::ConstantInt::get(Builder.getContext(), Size);
618a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    Builder.CreateMemSet(Address, ByteVal, SizeVal, 1, false);
619a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner
62042f681b83378de1541919c7f72e7555e35158867Chris Lattner    return RValue::get(Address);
621a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner  }
622fb17a562135dd7597121da9245d0c1bdcda4146fJohn McCall  case Builtin::BI__builtin_dwarf_cfa: {
623fb17a562135dd7597121da9245d0c1bdcda4146fJohn McCall    // The offset in bytes from the first argument to the CFA.
624fb17a562135dd7597121da9245d0c1bdcda4146fJohn McCall    //
625fb17a562135dd7597121da9245d0c1bdcda4146fJohn McCall    // Why on earth is this in the frontend?  Is there any reason at
626fb17a562135dd7597121da9245d0c1bdcda4146fJohn McCall    // all that the backend can't reasonably determine this while
627fb17a562135dd7597121da9245d0c1bdcda4146fJohn McCall    // lowering llvm.eh.dwarf.cfa()?
628fb17a562135dd7597121da9245d0c1bdcda4146fJohn McCall    //
629fb17a562135dd7597121da9245d0c1bdcda4146fJohn McCall    // TODO: If there's a satisfactory reason, add a target hook for
630fb17a562135dd7597121da9245d0c1bdcda4146fJohn McCall    // this instead of hard-coding 0, which is correct for most targets.
631fb17a562135dd7597121da9245d0c1bdcda4146fJohn McCall    int32_t Offset = 0;
632fb17a562135dd7597121da9245d0c1bdcda4146fJohn McCall
6338dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::eh_dwarf_cfa);
63477b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner    return RValue::get(Builder.CreateCall(F,
63577b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner                                      llvm::ConstantInt::get(Int32Ty, Offset)));
636fb17a562135dd7597121da9245d0c1bdcda4146fJohn McCall  }
637256f77e431bc6b920ec94cf0bb4ad339ca21b8c9Eli Friedman  case Builtin::BI__builtin_return_address: {
63883c2a98012a65b51be66fd76c3a1b13ed782c558Anton Korobeynikov    Value *Depth = EmitScalarExpr(E->getArg(0));
639578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    Depth = Builder.CreateIntCast(Depth, Int32Ty, false);
6408dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::returnaddress);
64183c2a98012a65b51be66fd76c3a1b13ed782c558Anton Korobeynikov    return RValue::get(Builder.CreateCall(F, Depth));
642256f77e431bc6b920ec94cf0bb4ad339ca21b8c9Eli Friedman  }
643256f77e431bc6b920ec94cf0bb4ad339ca21b8c9Eli Friedman  case Builtin::BI__builtin_frame_address: {
64483c2a98012a65b51be66fd76c3a1b13ed782c558Anton Korobeynikov    Value *Depth = EmitScalarExpr(E->getArg(0));
645578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    Depth = Builder.CreateIntCast(Depth, Int32Ty, false);
6468dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::frameaddress);
64783c2a98012a65b51be66fd76c3a1b13ed782c558Anton Korobeynikov    return RValue::get(Builder.CreateCall(F, Depth));
648256f77e431bc6b920ec94cf0bb4ad339ca21b8c9Eli Friedman  }
6493b660efb9f9fa3e87096f4a96a2093cd17c43c2eEli Friedman  case Builtin::BI__builtin_extract_return_addr: {
650492c4f998d848673d3d6c9e6416115df4036a71dJohn McCall    Value *Address = EmitScalarExpr(E->getArg(0));
651492c4f998d848673d3d6c9e6416115df4036a71dJohn McCall    Value *Result = getTargetHooks().decodeReturnAddress(*this, Address);
652492c4f998d848673d3d6c9e6416115df4036a71dJohn McCall    return RValue::get(Result);
653492c4f998d848673d3d6c9e6416115df4036a71dJohn McCall  }
654492c4f998d848673d3d6c9e6416115df4036a71dJohn McCall  case Builtin::BI__builtin_frob_return_addr: {
655492c4f998d848673d3d6c9e6416115df4036a71dJohn McCall    Value *Address = EmitScalarExpr(E->getArg(0));
656492c4f998d848673d3d6c9e6416115df4036a71dJohn McCall    Value *Result = getTargetHooks().encodeReturnAddress(*this, Address);
657492c4f998d848673d3d6c9e6416115df4036a71dJohn McCall    return RValue::get(Result);
6583b660efb9f9fa3e87096f4a96a2093cd17c43c2eEli Friedman  }
6596374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall  case Builtin::BI__builtin_dwarf_sp_column: {
6602acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::IntegerType *Ty
6616374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall      = cast<llvm::IntegerType>(ConvertType(E->getType()));
6626374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall    int Column = getTargetHooks().getDwarfEHStackPointer(CGM);
6636374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall    if (Column == -1) {
6646374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall      CGM.ErrorUnsupported(E, "__builtin_dwarf_sp_column");
6656374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall      return RValue::get(llvm::UndefValue::get(Ty));
6666374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall    }
6676374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall    return RValue::get(llvm::ConstantInt::get(Ty, Column, true));
6686374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall  }
6696374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall  case Builtin::BI__builtin_init_dwarf_reg_size_table: {
6706374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall    Value *Address = EmitScalarExpr(E->getArg(0));
6716374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall    if (getTargetHooks().initDwarfEHRegSizeTable(*this, Address))
6726374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall      CGM.ErrorUnsupported(E, "__builtin_init_dwarf_reg_size_table");
6736374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall    return RValue::get(llvm::UndefValue::get(ConvertType(E->getType())));
6746374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall  }
6757ada111fd5e81aff355e67bad0e4083f552b34bdJohn McCall  case Builtin::BI__builtin_eh_return: {
6767ada111fd5e81aff355e67bad0e4083f552b34bdJohn McCall    Value *Int = EmitScalarExpr(E->getArg(0));
6777ada111fd5e81aff355e67bad0e4083f552b34bdJohn McCall    Value *Ptr = EmitScalarExpr(E->getArg(1));
6787ada111fd5e81aff355e67bad0e4083f552b34bdJohn McCall
6792acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::IntegerType *IntTy = cast<llvm::IntegerType>(Int->getType());
6807ada111fd5e81aff355e67bad0e4083f552b34bdJohn McCall    assert((IntTy->getBitWidth() == 32 || IntTy->getBitWidth() == 64) &&
6817ada111fd5e81aff355e67bad0e4083f552b34bdJohn McCall           "LLVM's __builtin_eh_return only supports 32- and 64-bit variants");
6827ada111fd5e81aff355e67bad0e4083f552b34bdJohn McCall    Value *F = CGM.getIntrinsic(IntTy->getBitWidth() == 32
6837ada111fd5e81aff355e67bad0e4083f552b34bdJohn McCall                                  ? Intrinsic::eh_return_i32
6848dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer                                  : Intrinsic::eh_return_i64);
6857ada111fd5e81aff355e67bad0e4083f552b34bdJohn McCall    Builder.CreateCall2(F, Int, Ptr);
686cd5b22e12b6513163dd131589746c194090f14e6John McCall    Builder.CreateUnreachable();
687cd5b22e12b6513163dd131589746c194090f14e6John McCall
688cd5b22e12b6513163dd131589746c194090f14e6John McCall    // We do need to preserve an insertion point.
689d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    EmitBlock(createBasicBlock("builtin_eh_return.cont"));
690cd5b22e12b6513163dd131589746c194090f14e6John McCall
691cd5b22e12b6513163dd131589746c194090f14e6John McCall    return RValue::get(0);
6927ada111fd5e81aff355e67bad0e4083f552b34bdJohn McCall  }
693a6d75c0324ac690107bbaa7193b526ef21466212Eli Friedman  case Builtin::BI__builtin_unwind_init: {
6948dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::eh_unwind_init);
695a6d75c0324ac690107bbaa7193b526ef21466212Eli Friedman    return RValue::get(Builder.CreateCall(F));
696a6d75c0324ac690107bbaa7193b526ef21466212Eli Friedman  }
6975e11085830d4d4c53ff75575ab75889ee5126854John McCall  case Builtin::BI__builtin_extend_pointer: {
6985e11085830d4d4c53ff75575ab75889ee5126854John McCall    // Extends a pointer to the size of an _Unwind_Word, which is
699d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall    // uint64_t on all platforms.  Generally this gets poked into a
700d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall    // register and eventually used as an address, so if the
701d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall    // addressing registers are wider than pointers and the platform
702d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall    // doesn't implicitly ignore high-order bits when doing
703d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall    // addressing, we need to make sure we zext / sext based on
704d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall    // the platform's expectations.
7055e11085830d4d4c53ff75575ab75889ee5126854John McCall    //
7065e11085830d4d4c53ff75575ab75889ee5126854John McCall    // See: http://gcc.gnu.org/ml/gcc-bugs/2002-02/msg00237.html
707d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall
708d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall    // Cast the pointer to intptr_t.
7095e11085830d4d4c53ff75575ab75889ee5126854John McCall    Value *Ptr = EmitScalarExpr(E->getArg(0));
710d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall    Value *Result = Builder.CreatePtrToInt(Ptr, IntPtrTy, "extend.cast");
711d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall
712d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall    // If that's 64 bits, we're done.
713d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall    if (IntPtrTy->getBitWidth() == 64)
714d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall      return RValue::get(Result);
715d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall
716d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall    // Otherwise, ask the codegen data what to do.
717492c4f998d848673d3d6c9e6416115df4036a71dJohn McCall    if (getTargetHooks().extendPointerWithSExt())
718d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall      return RValue::get(Builder.CreateSExt(Result, Int64Ty, "extend.sext"));
719d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall    else
720d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall      return RValue::get(Builder.CreateZExt(Result, Int64Ty, "extend.zext"));
7215e11085830d4d4c53ff75575ab75889ee5126854John McCall  }
722a6d75c0324ac690107bbaa7193b526ef21466212Eli Friedman  case Builtin::BI__builtin_setjmp: {
72378673d9f910e8dfe13248c2426c51d8f9fb28572John McCall    // Buffer is a void**.
724a6d75c0324ac690107bbaa7193b526ef21466212Eli Friedman    Value *Buf = EmitScalarExpr(E->getArg(0));
72578673d9f910e8dfe13248c2426c51d8f9fb28572John McCall
72678673d9f910e8dfe13248c2426c51d8f9fb28572John McCall    // Store the frame pointer to the setjmp buffer.
727a6d75c0324ac690107bbaa7193b526ef21466212Eli Friedman    Value *FrameAddr =
72878673d9f910e8dfe13248c2426c51d8f9fb28572John McCall      Builder.CreateCall(CGM.getIntrinsic(Intrinsic::frameaddress),
72977b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner                         ConstantInt::get(Int32Ty, 0));
730a6d75c0324ac690107bbaa7193b526ef21466212Eli Friedman    Builder.CreateStore(FrameAddr, Buf);
73178673d9f910e8dfe13248c2426c51d8f9fb28572John McCall
7326d172e2985346e55095c75f456901ea5d40fddaaJim Grosbach    // Store the stack pointer to the setjmp buffer.
7336d172e2985346e55095c75f456901ea5d40fddaaJim Grosbach    Value *StackAddr =
7346d172e2985346e55095c75f456901ea5d40fddaaJim Grosbach      Builder.CreateCall(CGM.getIntrinsic(Intrinsic::stacksave));
7356d172e2985346e55095c75f456901ea5d40fddaaJim Grosbach    Value *StackSaveSlot =
73677b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner      Builder.CreateGEP(Buf, ConstantInt::get(Int32Ty, 2));
7376d172e2985346e55095c75f456901ea5d40fddaaJim Grosbach    Builder.CreateStore(StackAddr, StackSaveSlot);
7386d172e2985346e55095c75f456901ea5d40fddaaJim Grosbach
73978673d9f910e8dfe13248c2426c51d8f9fb28572John McCall    // Call LLVM's EH setjmp, which is lightweight.
74078673d9f910e8dfe13248c2426c51d8f9fb28572John McCall    Value *F = CGM.getIntrinsic(Intrinsic::eh_sjlj_setjmp);
741d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    Buf = Builder.CreateBitCast(Buf, Int8PtrTy);
742a6d75c0324ac690107bbaa7193b526ef21466212Eli Friedman    return RValue::get(Builder.CreateCall(F, Buf));
743a6d75c0324ac690107bbaa7193b526ef21466212Eli Friedman  }
744a6d75c0324ac690107bbaa7193b526ef21466212Eli Friedman  case Builtin::BI__builtin_longjmp: {
745a6d75c0324ac690107bbaa7193b526ef21466212Eli Friedman    Value *Buf = EmitScalarExpr(E->getArg(0));
746d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    Buf = Builder.CreateBitCast(Buf, Int8PtrTy);
74778673d9f910e8dfe13248c2426c51d8f9fb28572John McCall
74878673d9f910e8dfe13248c2426c51d8f9fb28572John McCall    // Call LLVM's EH longjmp, which is lightweight.
74978673d9f910e8dfe13248c2426c51d8f9fb28572John McCall    Builder.CreateCall(CGM.getIntrinsic(Intrinsic::eh_sjlj_longjmp), Buf);
75078673d9f910e8dfe13248c2426c51d8f9fb28572John McCall
751cd5b22e12b6513163dd131589746c194090f14e6John McCall    // longjmp doesn't return; mark this as unreachable.
752cd5b22e12b6513163dd131589746c194090f14e6John McCall    Builder.CreateUnreachable();
753cd5b22e12b6513163dd131589746c194090f14e6John McCall
754cd5b22e12b6513163dd131589746c194090f14e6John McCall    // We do need to preserve an insertion point.
755d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    EmitBlock(createBasicBlock("longjmp.cont"));
756cd5b22e12b6513163dd131589746c194090f14e6John McCall
757cd5b22e12b6513163dd131589746c194090f14e6John McCall    return RValue::get(0);
758a6d75c0324ac690107bbaa7193b526ef21466212Eli Friedman  }
7591ffe281890f3cd7728316b45a1f3dd4d3120af7bMon P Wang  case Builtin::BI__sync_fetch_and_add:
7601ffe281890f3cd7728316b45a1f3dd4d3120af7bMon P Wang  case Builtin::BI__sync_fetch_and_sub:
7615caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_or:
7625caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_and:
7635caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_xor:
7645caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_add_and_fetch:
7655caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_sub_and_fetch:
7665caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_and_and_fetch:
7675caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_or_and_fetch:
7685caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_xor_and_fetch:
7695caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_val_compare_and_swap:
7705caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_bool_compare_and_swap:
7715caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_lock_test_and_set:
7725caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_lock_release:
77323aa9c8ca0bc441aab2a38a4c9fc7a1c9e9ac16aChris Lattner  case Builtin::BI__sync_swap:
774b219cfc4d75f0a03630b7c4509ef791b7e97b2c8David Blaikie    llvm_unreachable("Shouldn't make it through sema");
7755caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_add_1:
7765caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_add_2:
7775caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_add_4:
7785caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_add_8:
7795caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_add_16:
780c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomic(*this, llvm::AtomicRMWInst::Add, E);
7815caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_sub_1:
7825caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_sub_2:
7835caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_sub_4:
7845caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_sub_8:
7855caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_sub_16:
786c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomic(*this, llvm::AtomicRMWInst::Sub, E);
7875caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_or_1:
7885caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_or_2:
7895caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_or_4:
7905caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_or_8:
7915caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_or_16:
792c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomic(*this, llvm::AtomicRMWInst::Or, E);
7935caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_and_1:
7945caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_and_2:
7955caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_and_4:
7965caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_and_8:
7975caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_and_16:
798c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomic(*this, llvm::AtomicRMWInst::And, E);
7995caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_xor_1:
8005caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_xor_2:
8015caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_xor_4:
8025caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_xor_8:
8035caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_xor_16:
804c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomic(*this, llvm::AtomicRMWInst::Xor, E);
8051eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
8065caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  // Clang extensions: not overloaded yet.
8071ffe281890f3cd7728316b45a1f3dd4d3120af7bMon P Wang  case Builtin::BI__sync_fetch_and_min:
808c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomic(*this, llvm::AtomicRMWInst::Min, E);
8091ffe281890f3cd7728316b45a1f3dd4d3120af7bMon P Wang  case Builtin::BI__sync_fetch_and_max:
810c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomic(*this, llvm::AtomicRMWInst::Max, E);
8111ffe281890f3cd7728316b45a1f3dd4d3120af7bMon P Wang  case Builtin::BI__sync_fetch_and_umin:
812c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomic(*this, llvm::AtomicRMWInst::UMin, E);
8131ffe281890f3cd7728316b45a1f3dd4d3120af7bMon P Wang  case Builtin::BI__sync_fetch_and_umax:
814c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomic(*this, llvm::AtomicRMWInst::UMax, E);
8150002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar
8165caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_add_and_fetch_1:
8175caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_add_and_fetch_2:
8185caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_add_and_fetch_4:
8195caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_add_and_fetch_8:
8205caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_add_and_fetch_16:
821c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomicPost(*this, llvm::AtomicRMWInst::Add, E,
8220002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar                                llvm::Instruction::Add);
8235caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_sub_and_fetch_1:
8245caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_sub_and_fetch_2:
8255caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_sub_and_fetch_4:
8265caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_sub_and_fetch_8:
8275caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_sub_and_fetch_16:
828c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomicPost(*this, llvm::AtomicRMWInst::Sub, E,
8290002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar                                llvm::Instruction::Sub);
8305caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_and_and_fetch_1:
8315caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_and_and_fetch_2:
8325caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_and_and_fetch_4:
8335caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_and_and_fetch_8:
8345caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_and_and_fetch_16:
835c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomicPost(*this, llvm::AtomicRMWInst::And, E,
8360002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar                                llvm::Instruction::And);
8375caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_or_and_fetch_1:
8385caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_or_and_fetch_2:
8395caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_or_and_fetch_4:
8405caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_or_and_fetch_8:
8415caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_or_and_fetch_16:
842c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomicPost(*this, llvm::AtomicRMWInst::Or, E,
8430002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar                                llvm::Instruction::Or);
8445caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_xor_and_fetch_1:
8455caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_xor_and_fetch_2:
8465caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_xor_and_fetch_4:
8475caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_xor_and_fetch_8:
8485caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_xor_and_fetch_16:
849c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomicPost(*this, llvm::AtomicRMWInst::Xor, E,
8500002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar                                llvm::Instruction::Xor);
8511eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
8525caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_val_compare_and_swap_1:
8535caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_val_compare_and_swap_2:
8545caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_val_compare_and_swap_4:
8555caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_val_compare_and_swap_8:
856cb61a7bbe635cfa941b1aeaaa1fbda1bf900ee51Daniel Dunbar  case Builtin::BI__sync_val_compare_and_swap_16: {
85726815d97c5743481e317f17a8d53a6819d061862John McCall    QualType T = E->getType();
858d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    llvm::Value *DestPtr = EmitScalarExpr(E->getArg(0));
859780a2eb227c3f395a390a143f61bba1724913817Chris Lattner    unsigned AddrSpace =
8604f209445c06a43283c6f72dda7c925538b1578e9Chris Lattner      cast<llvm::PointerType>(DestPtr->getType())->getAddressSpace();
86126815d97c5743481e317f17a8d53a6819d061862John McCall
8629cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::IntegerType *IntType =
863d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall      llvm::IntegerType::get(getLLVMContext(),
864d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall                             getContext().getTypeSize(T));
8659cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *IntPtrType = IntType->getPointerTo(AddrSpace);
866db4325b098eff5e9e660db19f0148423fb21f27fChandler Carruth
86726815d97c5743481e317f17a8d53a6819d061862John McCall    Value *Args[3];
86826815d97c5743481e317f17a8d53a6819d061862John McCall    Args[0] = Builder.CreateBitCast(DestPtr, IntPtrType);
869d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    Args[1] = EmitScalarExpr(E->getArg(1));
8702acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *ValueType = Args[1]->getType();
871d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    Args[1] = EmitToInt(*this, Args[1], T, IntType);
872d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    Args[2] = EmitToInt(*this, EmitScalarExpr(E->getArg(2)), T, IntType);
87326815d97c5743481e317f17a8d53a6819d061862John McCall
874c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    Value *Result = Builder.CreateAtomicCmpXchg(Args[0], Args[1], Args[2],
875c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman                                                llvm::SequentiallyConsistent);
876d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    Result = EmitFromInt(*this, Result, T, ValueType);
87726815d97c5743481e317f17a8d53a6819d061862John McCall    return RValue::get(Result);
878022012e6e5626c3372e1a5493c0929dfc1fa9e47Anders Carlsson  }
8790002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar
8805caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_bool_compare_and_swap_1:
8815caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_bool_compare_and_swap_2:
8825caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_bool_compare_and_swap_4:
8835caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_bool_compare_and_swap_8:
884cb61a7bbe635cfa941b1aeaaa1fbda1bf900ee51Daniel Dunbar  case Builtin::BI__sync_bool_compare_and_swap_16: {
88526815d97c5743481e317f17a8d53a6819d061862John McCall    QualType T = E->getArg(1)->getType();
886d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    llvm::Value *DestPtr = EmitScalarExpr(E->getArg(0));
887f2b95277be59f7d2a82cef8ea9f4cf6a36074593Chris Lattner    unsigned AddrSpace =
8884f209445c06a43283c6f72dda7c925538b1578e9Chris Lattner      cast<llvm::PointerType>(DestPtr->getType())->getAddressSpace();
88926815d97c5743481e317f17a8d53a6819d061862John McCall
8909cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::IntegerType *IntType =
891d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall      llvm::IntegerType::get(getLLVMContext(),
892d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall                             getContext().getTypeSize(T));
8939cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *IntPtrType = IntType->getPointerTo(AddrSpace);
894db4325b098eff5e9e660db19f0148423fb21f27fChandler Carruth
89526815d97c5743481e317f17a8d53a6819d061862John McCall    Value *Args[3];
89626815d97c5743481e317f17a8d53a6819d061862John McCall    Args[0] = Builder.CreateBitCast(DestPtr, IntPtrType);
897d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    Args[1] = EmitToInt(*this, EmitScalarExpr(E->getArg(1)), T, IntType);
898d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    Args[2] = EmitToInt(*this, EmitScalarExpr(E->getArg(2)), T, IntType);
89926815d97c5743481e317f17a8d53a6819d061862John McCall
900db4325b098eff5e9e660db19f0148423fb21f27fChandler Carruth    Value *OldVal = Args[1];
901c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    Value *PrevVal = Builder.CreateAtomicCmpXchg(Args[0], Args[1], Args[2],
902c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman                                                 llvm::SequentiallyConsistent);
9030002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar    Value *Result = Builder.CreateICmpEQ(PrevVal, OldVal);
9040002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar    // zext bool to int.
90526815d97c5743481e317f17a8d53a6819d061862John McCall    Result = Builder.CreateZExt(Result, ConvertType(E->getType()));
90626815d97c5743481e317f17a8d53a6819d061862John McCall    return RValue::get(Result);
9070002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar  }
9080002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar
90923aa9c8ca0bc441aab2a38a4c9fc7a1c9e9ac16aChris Lattner  case Builtin::BI__sync_swap_1:
91023aa9c8ca0bc441aab2a38a4c9fc7a1c9e9ac16aChris Lattner  case Builtin::BI__sync_swap_2:
91123aa9c8ca0bc441aab2a38a4c9fc7a1c9e9ac16aChris Lattner  case Builtin::BI__sync_swap_4:
91223aa9c8ca0bc441aab2a38a4c9fc7a1c9e9ac16aChris Lattner  case Builtin::BI__sync_swap_8:
91323aa9c8ca0bc441aab2a38a4c9fc7a1c9e9ac16aChris Lattner  case Builtin::BI__sync_swap_16:
914c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomic(*this, llvm::AtomicRMWInst::Xchg, E);
91523aa9c8ca0bc441aab2a38a4c9fc7a1c9e9ac16aChris Lattner
9165caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_lock_test_and_set_1:
9175caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_lock_test_and_set_2:
9185caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_lock_test_and_set_4:
9195caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_lock_test_and_set_8:
9205caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_lock_test_and_set_16:
921c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomic(*this, llvm::AtomicRMWInst::Xchg, E);
922cb61a7bbe635cfa941b1aeaaa1fbda1bf900ee51Daniel Dunbar
9235caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_lock_release_1:
9245caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_lock_release_2:
9255caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_lock_release_4:
9265caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_lock_release_8:
927f58cd9bca9c2e7373300fc8bb7c57cff7e4eda4fChris Lattner  case Builtin::BI__sync_lock_release_16: {
928f58cd9bca9c2e7373300fc8bb7c57cff7e4eda4fChris Lattner    Value *Ptr = EmitScalarExpr(E->getArg(0));
929eb43f4a8f133c2bc510ae136a556e92b68a6ff44Eli Friedman    llvm::Type *ElLLVMTy =
930f58cd9bca9c2e7373300fc8bb7c57cff7e4eda4fChris Lattner      cast<llvm::PointerType>(Ptr->getType())->getElementType();
931007b56738b00426688ee85baa75174358bd849f9Daniel Dunbar    llvm::StoreInst *Store =
932eb43f4a8f133c2bc510ae136a556e92b68a6ff44Eli Friedman      Builder.CreateStore(llvm::Constant::getNullValue(ElLLVMTy), Ptr);
933eb43f4a8f133c2bc510ae136a556e92b68a6ff44Eli Friedman    QualType ElTy = E->getArg(0)->getType()->getPointeeType();
934eb43f4a8f133c2bc510ae136a556e92b68a6ff44Eli Friedman    CharUnits StoreSize = getContext().getTypeSizeInChars(ElTy);
935eb43f4a8f133c2bc510ae136a556e92b68a6ff44Eli Friedman    Store->setAlignment(StoreSize.getQuantity());
936eb43f4a8f133c2bc510ae136a556e92b68a6ff44Eli Friedman    Store->setAtomic(llvm::Release);
937eb4f81e174b11633f7b85f555ea5d2834d6dae8aDaniel Dunbar    return RValue::get(0);
938f58cd9bca9c2e7373300fc8bb7c57cff7e4eda4fChris Lattner  }
939ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar
940f58cd9bca9c2e7373300fc8bb7c57cff7e4eda4fChris Lattner  case Builtin::BI__sync_synchronize: {
941c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    // We assume this is supposed to correspond to a C++0x-style
942c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    // sequentially-consistent fence (i.e. this is only usable for
943c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    // synchonization, not device I/O or anything like that). This intrinsic
944c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    // is really badly designed in the sense that in theory, there isn't
945c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    // any way to safely use it... but in practice, it mostly works
946c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    // to use it with non-atomic loads and stores to get acquire/release
947c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    // semantics.
948c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    Builder.CreateFence(llvm::SequentiallyConsistent);
949eb4f81e174b11633f7b85f555ea5d2834d6dae8aDaniel Dunbar    return RValue::get(0);
950f58cd9bca9c2e7373300fc8bb7c57cff7e4eda4fChris Lattner  }
9511eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
952276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman  case Builtin::BI__atomic_thread_fence:
953276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman  case Builtin::BI__atomic_signal_fence: {
954276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    llvm::SynchronizationScope Scope;
955276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    if (BuiltinID == Builtin::BI__atomic_signal_fence)
956276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      Scope = llvm::SingleThread;
957276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    else
958276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      Scope = llvm::CrossThread;
959276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Value *Order = EmitScalarExpr(E->getArg(0));
960276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    if (isa<llvm::ConstantInt>(Order)) {
961276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      int ord = cast<llvm::ConstantInt>(Order)->getZExtValue();
962276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      switch (ord) {
963276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      case 0:  // memory_order_relaxed
964276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      default: // invalid order
965276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman        break;
966276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      case 1:  // memory_order_consume
967276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      case 2:  // memory_order_acquire
968276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman        Builder.CreateFence(llvm::Acquire, Scope);
969276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman        break;
970276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      case 3:  // memory_order_release
971276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman        Builder.CreateFence(llvm::Release, Scope);
972276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman        break;
973276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      case 4:  // memory_order_acq_rel
974276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman        Builder.CreateFence(llvm::AcquireRelease, Scope);
975276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman        break;
976276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      case 5:  // memory_order_seq_cst
977276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman        Builder.CreateFence(llvm::SequentiallyConsistent, Scope);
978276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman        break;
979276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      }
980276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      return RValue::get(0);
981276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    }
982276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman
983276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    llvm::BasicBlock *AcquireBB, *ReleaseBB, *AcqRelBB, *SeqCstBB;
984276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    AcquireBB = createBasicBlock("acquire", CurFn);
985276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    ReleaseBB = createBasicBlock("release", CurFn);
986276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    AcqRelBB = createBasicBlock("acqrel", CurFn);
987276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    SeqCstBB = createBasicBlock("seqcst", CurFn);
988276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    llvm::BasicBlock *ContBB = createBasicBlock("atomic.continue", CurFn);
989276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman
990276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Order = Builder.CreateIntCast(Order, Builder.getInt32Ty(), false);
991276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    llvm::SwitchInst *SI = Builder.CreateSwitch(Order, ContBB);
992276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman
993276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.SetInsertPoint(AcquireBB);
994276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.CreateFence(llvm::Acquire, Scope);
995276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.CreateBr(ContBB);
996276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    SI->addCase(Builder.getInt32(1), AcquireBB);
997276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    SI->addCase(Builder.getInt32(2), AcquireBB);
998276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman
999276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.SetInsertPoint(ReleaseBB);
1000276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.CreateFence(llvm::Release, Scope);
1001276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.CreateBr(ContBB);
1002276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    SI->addCase(Builder.getInt32(3), ReleaseBB);
1003276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman
1004276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.SetInsertPoint(AcqRelBB);
1005276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.CreateFence(llvm::AcquireRelease, Scope);
1006276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.CreateBr(ContBB);
1007276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    SI->addCase(Builder.getInt32(4), AcqRelBB);
1008276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman
1009276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.SetInsertPoint(SeqCstBB);
1010276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.CreateFence(llvm::SequentiallyConsistent, Scope);
1011276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.CreateBr(ContBB);
1012276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    SI->addCase(Builder.getInt32(5), SeqCstBB);
1013276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman
1014276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.SetInsertPoint(ContBB);
1015276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    return RValue::get(0);
1016276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman  }
1017276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman
1018ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar    // Library functions with special handling.
1019ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar  case Builtin::BIsqrt:
1020ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar  case Builtin::BIsqrtf:
1021ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar  case Builtin::BIsqrtl: {
1022beb41281f8355caa05700d0a77539defbdf428f8John McCall    // TODO: there is currently no set of optimizer flags
1023beb41281f8355caa05700d0a77539defbdf428f8John McCall    // sufficient for us to rewrite sqrt to @llvm.sqrt.
1024beb41281f8355caa05700d0a77539defbdf428f8John McCall    // -fmath-errno=0 is not good enough; we need finiteness.
1025beb41281f8355caa05700d0a77539defbdf428f8John McCall    // We could probably precondition the call with an ult
1026beb41281f8355caa05700d0a77539defbdf428f8John McCall    // against 0, but is that worth the complexity?
1027beb41281f8355caa05700d0a77539defbdf428f8John McCall    break;
1028ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar  }
1029ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar
1030ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar  case Builtin::BIpow:
1031ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar  case Builtin::BIpowf:
1032ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar  case Builtin::BIpowl: {
1033ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar    // Rewrite sqrt to intrinsic if allowed.
103440b598eea1310ec9ed554d56ce3e25b34c585458Argyrios Kyrtzidis    if (!FD->hasAttr<ConstAttr>())
1035ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar      break;
1036ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar    Value *Base = EmitScalarExpr(E->getArg(0));
1037ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar    Value *Exponent = EmitScalarExpr(E->getArg(1));
10389cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *ArgType = Base->getType();
10398dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::pow, ArgType);
1040578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    return RValue::get(Builder.CreateCall2(F, Base, Exponent));
1041ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar  }
1042ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman
1043094240ab184c3ca4b94e9d7eac80fcd34d8dd30cCameron Zwarich  case Builtin::BIfma:
1044094240ab184c3ca4b94e9d7eac80fcd34d8dd30cCameron Zwarich  case Builtin::BIfmaf:
1045094240ab184c3ca4b94e9d7eac80fcd34d8dd30cCameron Zwarich  case Builtin::BIfmal:
1046094240ab184c3ca4b94e9d7eac80fcd34d8dd30cCameron Zwarich  case Builtin::BI__builtin_fma:
1047094240ab184c3ca4b94e9d7eac80fcd34d8dd30cCameron Zwarich  case Builtin::BI__builtin_fmaf:
1048094240ab184c3ca4b94e9d7eac80fcd34d8dd30cCameron Zwarich  case Builtin::BI__builtin_fmal: {
1049094240ab184c3ca4b94e9d7eac80fcd34d8dd30cCameron Zwarich    // Rewrite fma to intrinsic.
1050094240ab184c3ca4b94e9d7eac80fcd34d8dd30cCameron Zwarich    Value *FirstArg = EmitScalarExpr(E->getArg(0));
10519cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *ArgType = FirstArg->getType();
10528dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::fma, ArgType);
1053094240ab184c3ca4b94e9d7eac80fcd34d8dd30cCameron Zwarich    return RValue::get(Builder.CreateCall3(F, FirstArg,
1054094240ab184c3ca4b94e9d7eac80fcd34d8dd30cCameron Zwarich                                              EmitScalarExpr(E->getArg(1)),
1055578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer                                              EmitScalarExpr(E->getArg(2))));
1056094240ab184c3ca4b94e9d7eac80fcd34d8dd30cCameron Zwarich  }
1057094240ab184c3ca4b94e9d7eac80fcd34d8dd30cCameron Zwarich
1058ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman  case Builtin::BI__builtin_signbit:
1059ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman  case Builtin::BI__builtin_signbitf:
1060ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman  case Builtin::BI__builtin_signbitl: {
1061ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman    LLVMContext &C = CGM.getLLVMContext();
1062ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman
1063ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman    Value *Arg = EmitScalarExpr(E->getArg(0));
10642acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *ArgTy = Arg->getType();
1065ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman    if (ArgTy->isPPC_FP128Ty())
1066ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman      break; // FIXME: I'm not sure what the right implementation is here.
1067ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman    int ArgWidth = ArgTy->getPrimitiveSizeInBits();
10682acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *ArgIntTy = llvm::IntegerType::get(C, ArgWidth);
1069ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman    Value *BCArg = Builder.CreateBitCast(Arg, ArgIntTy);
1070ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman    Value *ZeroCmp = llvm::Constant::getNullValue(ArgIntTy);
1071ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman    Value *Result = Builder.CreateICmpSLT(BCArg, ZeroCmp);
1072ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman    return RValue::get(Builder.CreateZExt(Result, ConvertType(E->getType())));
1073ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman  }
107477f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge  case Builtin::BI__builtin_annotation: {
107577f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge    llvm::Value *AnnVal = EmitScalarExpr(E->getArg(0));
107677f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge    llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::annotation,
107777f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge                                      AnnVal->getType());
107877f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge
107977f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge    // Get the annotation string, go through casts. Sema requires this to be a
108077f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge    // non-wide string literal, potentially casted, so the cast<> is safe.
108177f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge    const Expr *AnnotationStrExpr = E->getArg(1)->IgnoreParenCasts();
108277f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge    llvm::StringRef Str = cast<StringLiteral>(AnnotationStrExpr)->getString();
108377f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge    return RValue::get(EmitAnnotationCall(F, AnnVal, Str, E->getExprLoc()));
108477f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge  }
10857ea2e3f6aae9b7511686d3d26dee690fee81c3aaNate Begeman  }
10861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1087a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  // If this is an alias for a lib function (e.g. __builtin_sin), emit
1088a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  // the call using the normal call path, but using the unmangled
1089a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  // version of the function name.
1090a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  if (getContext().BuiltinInfo.isLibFunction(BuiltinID))
1091a45680b7e7c49ea9893c6cff585984f3e4120366John McCall    return emitLibraryCall(*this, FD, E,
1092a45680b7e7c49ea9893c6cff585984f3e4120366John McCall                           CGM.getBuiltinLibFunction(FD, BuiltinID));
1093a45680b7e7c49ea9893c6cff585984f3e4120366John McCall
1094a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  // If this is a predefined lib function (e.g. malloc), emit the call
1095a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  // using exactly the normal call path.
1096a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  if (getContext().BuiltinInfo.isPredefinedLibFunction(BuiltinID))
1097a45680b7e7c49ea9893c6cff585984f3e4120366John McCall    return emitLibraryCall(*this, FD, E, EmitScalarExpr(E->getCallee()));
10981eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1099b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner  // See if we have a target specific intrinsic.
1100a6f80ef997f0363386749087b325607eaa5adcfcDale Johannesen  const char *Name = getContext().BuiltinInfo.GetName(BuiltinID);
110155cc2ed722e041228670d26d548e5590e355acedDaniel Dunbar  Intrinsic::ID IntrinsicID = Intrinsic::not_intrinsic;
110255cc2ed722e041228670d26d548e5590e355acedDaniel Dunbar  if (const char *Prefix =
11031eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      llvm::Triple::getArchTypePrefix(Target.getTriple().getArch()))
110455cc2ed722e041228670d26d548e5590e355acedDaniel Dunbar    IntrinsicID = Intrinsic::getIntrinsicForGCCBuiltin(Prefix, Name);
11051eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1106b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner  if (IntrinsicID != Intrinsic::not_intrinsic) {
1107b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    SmallVector<Value*, 16> Args;
11081eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
110946c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    // Find out if any arguments are required to be integer constant
111046c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    // expressions.
111146c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    unsigned ICEArguments = 0;
111246c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    ASTContext::GetBuiltinTypeError Error;
111346c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    getContext().GetBuiltinType(BuiltinID, Error, &ICEArguments);
111446c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    assert(Error == ASTContext::GE_None && "Should not codegen an error");
111546c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner
1116b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    Function *F = CGM.getIntrinsic(IntrinsicID);
11172acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::FunctionType *FTy = F->getFunctionType();
11181eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1119b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    for (unsigned i = 0, e = E->getNumArgs(); i != e; ++i) {
112046c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner      Value *ArgValue;
112146c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner      // If this is a normal argument, just emit it as a scalar.
112246c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner      if ((ICEArguments & (1 << i)) == 0) {
112346c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner        ArgValue = EmitScalarExpr(E->getArg(i));
112446c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner      } else {
112546c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner        // If this is required to be a constant, constant fold it so that we
112646c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner        // know that the generated intrinsic gets a ConstantInt.
112746c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner        llvm::APSInt Result;
112846c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner        bool IsConst = E->getArg(i)->isIntegerConstantExpr(Result,getContext());
112946c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner        assert(IsConst && "Constant arg isn't actually constant?");
113046c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner        (void)IsConst;
1131d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall        ArgValue = llvm::ConstantInt::get(getLLVMContext(), Result);
113246c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner      }
11331eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1134b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner      // If the intrinsic arg type is different from the builtin arg type
1135b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner      // we need to do a bit cast.
11362acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner      llvm::Type *PTy = FTy->getParamType(i);
1137b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner      if (PTy != ArgValue->getType()) {
1138b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner        assert(PTy->canLosslesslyBitCastTo(FTy->getParamType(i)) &&
1139b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner               "Must be able to losslessly bit cast to param");
1140b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner        ArgValue = Builder.CreateBitCast(ArgValue, PTy);
1141b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner      }
11421eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1143b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner      Args.push_back(ArgValue);
1144b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    }
11451eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
11464c7d9f1507d0f102bd4133bba63348636facd469Jay Foad    Value *V = Builder.CreateCall(F, Args);
1147b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    QualType BuiltinRetType = E->getType();
11481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
11492acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *RetTy = llvm::Type::getVoidTy(getLLVMContext());
1150b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    if (!BuiltinRetType->isVoidType()) RetTy = ConvertType(BuiltinRetType);
11511eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1152b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    if (RetTy != V->getType()) {
1153b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner      assert(V->getType()->canLosslesslyBitCastTo(RetTy) &&
1154b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner             "Must be able to losslessly bit cast result type");
1155b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner      V = Builder.CreateBitCast(V, RetTy);
1156b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    }
11571eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1158b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    return RValue::get(V);
1159b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner  }
11601eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1161b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner  // See if we have a target specific builtin that needs to be lowered.
1162f02e9ddf5efc75917af712b3c7f909581205f0a5Daniel Dunbar  if (Value *V = EmitTargetBuiltinExpr(BuiltinID, E))
1163b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    return RValue::get(V);
11641eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1165488e993a135ce700b982bf099c3d6b856301d642Daniel Dunbar  ErrorUnsupported(E, "builtin function");
11661eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1167b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner  // Unknown builtin, for now just dump it out and return undef.
1168b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner  if (hasAggregateLLVMType(E->getType()))
1169195337d2e5d4625ae9dc1328c7cdbc7115b0261bDaniel Dunbar    return RValue::getAggregate(CreateMemTemp(E->getType()));
117003e205031b08669f05c41eed5b896fc94c4a12bbOwen Anderson  return RValue::get(llvm::UndefValue::get(ConvertType(E->getType())));
11711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump}
1172564f1de67d7ba43646b8740db86d6269e3dfbe0bAnders Carlsson
1173f02e9ddf5efc75917af712b3c7f909581205f0a5Daniel DunbarValue *CodeGenFunction::EmitTargetBuiltinExpr(unsigned BuiltinID,
1174f02e9ddf5efc75917af712b3c7f909581205f0a5Daniel Dunbar                                              const CallExpr *E) {
117555cc2ed722e041228670d26d548e5590e355acedDaniel Dunbar  switch (Target.getTriple().getArch()) {
11762752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner  case llvm::Triple::arm:
11772752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner  case llvm::Triple::thumb:
11782752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner    return EmitARMBuiltinExpr(BuiltinID, E);
117955cc2ed722e041228670d26d548e5590e355acedDaniel Dunbar  case llvm::Triple::x86:
118055cc2ed722e041228670d26d548e5590e355acedDaniel Dunbar  case llvm::Triple::x86_64:
1181f02e9ddf5efc75917af712b3c7f909581205f0a5Daniel Dunbar    return EmitX86BuiltinExpr(BuiltinID, E);
118255cc2ed722e041228670d26d548e5590e355acedDaniel Dunbar  case llvm::Triple::ppc:
118355cc2ed722e041228670d26d548e5590e355acedDaniel Dunbar  case llvm::Triple::ppc64:
1184f02e9ddf5efc75917af712b3c7f909581205f0a5Daniel Dunbar    return EmitPPCBuiltinExpr(BuiltinID, E);
11859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case llvm::Triple::hexagon:
11869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    return EmitHexagonBuiltinExpr(BuiltinID, E);
118755cc2ed722e041228670d26d548e5590e355acedDaniel Dunbar  default:
118855cc2ed722e041228670d26d548e5590e355acedDaniel Dunbar    return 0;
118955cc2ed722e041228670d26d548e5590e355acedDaniel Dunbar  }
1190f02e9ddf5efc75917af712b3c7f909581205f0a5Daniel Dunbar}
1191f02e9ddf5efc75917af712b3c7f909581205f0a5Daniel Dunbar
119283084c863572b48579767a4dd5dc686e1a8d669dNAKAMURA Takumistatic llvm::VectorType *GetNeonType(LLVMContext &C, NeonTypeFlags TypeFlags) {
119383084c863572b48579767a4dd5dc686e1a8d669dNAKAMURA Takumi  int IsQuad = TypeFlags.isQuad();
119483084c863572b48579767a4dd5dc686e1a8d669dNAKAMURA Takumi  switch (TypeFlags.getEltType()) {
1195da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  default: break;
1196da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  case NeonTypeFlags::Int8:
1197da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  case NeonTypeFlags::Poly8:
1198da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    return llvm::VectorType::get(llvm::Type::getInt8Ty(C), 8 << IsQuad);
1199da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  case NeonTypeFlags::Int16:
1200da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  case NeonTypeFlags::Poly16:
1201da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  case NeonTypeFlags::Float16:
1202da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    return llvm::VectorType::get(llvm::Type::getInt16Ty(C), 4 << IsQuad);
1203da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  case NeonTypeFlags::Int32:
1204da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    return llvm::VectorType::get(llvm::Type::getInt32Ty(C), 2 << IsQuad);
1205da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  case NeonTypeFlags::Int64:
1206da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    return llvm::VectorType::get(llvm::Type::getInt64Ty(C), 1 << IsQuad);
1207da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  case NeonTypeFlags::Float32:
1208da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    return llvm::VectorType::get(llvm::Type::getFloatTy(C), 2 << IsQuad);
1209998622c10198a25ba06c93d7e908f88ba0acc920Nate Begeman  };
1210998622c10198a25ba06c93d7e908f88ba0acc920Nate Begeman  return 0;
1211998622c10198a25ba06c93d7e908f88ba0acc920Nate Begeman}
1212998622c10198a25ba06c93d7e908f88ba0acc920Nate Begeman
1213cf55652cf668c1402eee0b12edd2e5a1bc34d7a1Bob WilsonValue *CodeGenFunction::EmitNeonSplat(Value *V, Constant *C) {
1214d075c01c359b9cc120c3accc7166990f9f4ac423Nate Begeman  unsigned nElts = cast<llvm::VectorType>(V->getType())->getNumElements();
1215d075c01c359b9cc120c3accc7166990f9f4ac423Nate Begeman  SmallVector<Constant*, 16> Indices(nElts, C);
1216fb018d153cbf12fd2a4a278cbf7614b9a2e2835eChris Lattner  Value* SV = llvm::ConstantVector::get(Indices);
1217d075c01c359b9cc120c3accc7166990f9f4ac423Nate Begeman  return Builder.CreateShuffleVector(V, V, SV, "lane");
1218d075c01c359b9cc120c3accc7166990f9f4ac423Nate Begeman}
1219d075c01c359b9cc120c3accc7166990f9f4ac423Nate Begeman
122030d91718a676177f0d0d0210ce4fdb4f616df6e5Nate BegemanValue *CodeGenFunction::EmitNeonCall(Function *F, SmallVectorImpl<Value*> &Ops,
1221db3d4d036037f379f12643e067b229862d61e932Bob Wilson                                     const char *name,
122261eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman                                     unsigned shift, bool rightshift) {
122330d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman  unsigned j = 0;
122430d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman  for (Function::const_arg_iterator ai = F->arg_begin(), ae = F->arg_end();
122530d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman       ai != ae; ++ai, ++j)
122661eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman    if (shift > 0 && shift == j)
122761eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman      Ops[j] = EmitNeonShiftVector(Ops[j], ai->getType(), rightshift);
122861eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman    else
122961eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman      Ops[j] = Builder.CreateBitCast(Ops[j], ai->getType(), name);
123030d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman
12314c7d9f1507d0f102bd4133bba63348636facd469Jay Foad  return Builder.CreateCall(F, Ops, name);
123230d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman}
123330d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman
12342acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris LattnerValue *CodeGenFunction::EmitNeonShiftVector(Value *V, llvm::Type *Ty,
1235464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                                            bool neg) {
1236464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman  ConstantInt *CI = cast<ConstantInt>(V);
1237464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman  int SV = CI->getSExtValue();
1238464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman
12392acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner  llvm::VectorType *VTy = cast<llvm::VectorType>(Ty);
1240464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman  llvm::Constant *C = ConstantInt::get(VTy->getElementType(), neg ? -SV : SV);
1241464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman  SmallVector<llvm::Constant*, 16> CV(VTy->getNumElements(), C);
1242fb018d153cbf12fd2a4a278cbf7614b9a2e2835eChris Lattner  return llvm::ConstantVector::get(CV);
1243464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman}
1244464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman
124506b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson/// GetPointeeAlignment - Given an expression with a pointer type, find the
124606b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson/// alignment of the type referenced by the pointer.  Skip over implicit
124706b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson/// casts.
124806b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilsonstatic Value *GetPointeeAlignment(CodeGenFunction &CGF, const Expr *Addr) {
124906b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson  unsigned Align = 1;
125006b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson  // Check if the type is a pointer.  The implicit cast operand might not be.
125106b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson  while (Addr->getType()->isPointerType()) {
125206b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    QualType PtTy = Addr->getType()->getPointeeType();
125306b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    unsigned NewA = CGF.getContext().getTypeAlignInChars(PtTy).getQuantity();
125406b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    if (NewA > Align)
125506b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson      Align = NewA;
125606b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson
125706b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    // If the address is an implicit cast, repeat with the cast operand.
125806b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    if (const ImplicitCastExpr *CastAddr = dyn_cast<ImplicitCastExpr>(Addr)) {
125906b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson      Addr = CastAddr->getSubExpr();
126006b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson      continue;
126106b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    }
126206b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    break;
126306b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson  }
126406b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson  return llvm::ConstantInt::get(CGF.Int32Ty, Align);
126506b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson}
126606b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson
12672752c0137d95aa2f4ee1cdff4b564bac842e041bChris LattnerValue *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID,
12682752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner                                           const CallExpr *E) {
1269e140af3e27016f902146023fba7680b43043ec07Rafael Espindola  if (BuiltinID == ARM::BI__clear_cache) {
127079ba509b0106fd0a1ff832baeb1fdb5430527efeRafael Espindola    const FunctionDecl *FD = E->getDirectCallee();
12718a37c79f03e62aecfa2c58b9179f90dd1fcdb253Eric Christopher    // Oddly people write this call without args on occasion and gcc accepts
12728a37c79f03e62aecfa2c58b9179f90dd1fcdb253Eric Christopher    // it - it's also marked as varargs in the description file.
12735f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner    SmallVector<Value*, 2> Ops;
12748a37c79f03e62aecfa2c58b9179f90dd1fcdb253Eric Christopher    for (unsigned i = 0; i < E->getNumArgs(); i++)
12758a37c79f03e62aecfa2c58b9179f90dd1fcdb253Eric Christopher      Ops.push_back(EmitScalarExpr(E->getArg(i)));
12762acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *Ty = CGM.getTypes().ConvertType(FD->getType());
12772acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::FunctionType *FTy = cast<llvm::FunctionType>(Ty);
12785f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner    StringRef Name = FD->getName();
12794c7d9f1507d0f102bd4133bba63348636facd469Jay Foad    return Builder.CreateCall(CGM.CreateRuntimeFunction(FTy, Name), Ops);
12802752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner  }
1281e140af3e27016f902146023fba7680b43043ec07Rafael Espindola
128226c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes  if (BuiltinID == ARM::BI__builtin_arm_ldrexd) {
128326c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Function *F = CGM.getIntrinsic(Intrinsic::arm_ldrexd);
128426c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes
128526c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Value *LdPtr = EmitScalarExpr(E->getArg(0));
128626c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Value *Val = Builder.CreateCall(F, LdPtr, "ldrexd");
128726c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes
128826c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Value *Val0 = Builder.CreateExtractValue(Val, 1);
128926c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Value *Val1 = Builder.CreateExtractValue(Val, 0);
129026c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Val0 = Builder.CreateZExt(Val0, Int64Ty);
129126c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Val1 = Builder.CreateZExt(Val1, Int64Ty);
129226c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes
129326c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Value *ShiftCst = llvm::ConstantInt::get(Int64Ty, 32);
129426c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Val = Builder.CreateShl(Val0, ShiftCst, "shl", true /* nuw */);
129526c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    return Builder.CreateOr(Val, Val1);
129626c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes  }
129726c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes
129826c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes  if (BuiltinID == ARM::BI__builtin_arm_strexd) {
129926c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Function *F = CGM.getIntrinsic(Intrinsic::arm_strexd);
13007650d95a1a616ea300f37126a8dfc93dc19a662aChris Lattner    llvm::Type *STy = llvm::StructType::get(Int32Ty, Int32Ty, NULL);
130126c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes
130226c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Value *One = llvm::ConstantInt::get(Int32Ty, 1);
1303578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    Value *Tmp = Builder.CreateAlloca(Int64Ty, One);
130426c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Value *Val = EmitScalarExpr(E->getArg(0));
130526c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Builder.CreateStore(Val, Tmp);
130626c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes
130726c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Value *LdPtr = Builder.CreateBitCast(Tmp,llvm::PointerType::getUnqual(STy));
130826c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Val = Builder.CreateLoad(LdPtr);
130926c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes
131026c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Value *Arg0 = Builder.CreateExtractValue(Val, 0);
131126c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Value *Arg1 = Builder.CreateExtractValue(Val, 1);
131226c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Value *StPtr = EmitScalarExpr(E->getArg(1));
131326c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    return Builder.CreateCall3(F, Arg0, Arg1, StPtr, "strexd");
131426c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes  }
131526c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes
13165f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner  SmallVector<Value*, 4> Ops;
1317e140af3e27016f902146023fba7680b43043ec07Rafael Espindola  for (unsigned i = 0, e = E->getNumArgs() - 1; i != e; i++)
1318e140af3e27016f902146023fba7680b43043ec07Rafael Espindola    Ops.push_back(EmitScalarExpr(E->getArg(i)));
1319e140af3e27016f902146023fba7680b43043ec07Rafael Espindola
132083bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  // vget_lane and vset_lane are not overloaded and do not have an extra
132183bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  // argument that specifies the vector type.
132283bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  switch (BuiltinID) {
132383bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  default: break;
132483bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vget_lane_i8:
132583bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vget_lane_i16:
132683bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vget_lane_i32:
132783bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vget_lane_i64:
132883bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vget_lane_f32:
132983bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vgetq_lane_i8:
133083bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vgetq_lane_i16:
133183bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vgetq_lane_i32:
133283bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vgetq_lane_i64:
133383bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vgetq_lane_f32:
133483bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson    return Builder.CreateExtractElement(Ops[0], EmitScalarExpr(E->getArg(1)),
133583bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson                                        "vget_lane");
133683bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vset_lane_i8:
133783bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vset_lane_i16:
133883bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vset_lane_i32:
133983bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vset_lane_i64:
134083bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vset_lane_f32:
134183bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vsetq_lane_i8:
134283bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vsetq_lane_i16:
134383bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vsetq_lane_i32:
134483bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vsetq_lane_i64:
134583bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vsetq_lane_f32:
134683bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson    Ops.push_back(EmitScalarExpr(E->getArg(2)));
134783bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson    return Builder.CreateInsertElement(Ops[1], Ops[0], Ops[2], "vset_lane");
134883bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  }
134983bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson
135083bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  // Get the last argument, which specifies the vector type.
1351e140af3e27016f902146023fba7680b43043ec07Rafael Espindola  llvm::APSInt Result;
1352e140af3e27016f902146023fba7680b43043ec07Rafael Espindola  const Expr *Arg = E->getArg(E->getNumArgs()-1);
1353e140af3e27016f902146023fba7680b43043ec07Rafael Espindola  if (!Arg->isIntegerConstantExpr(Result, getContext()))
1354e140af3e27016f902146023fba7680b43043ec07Rafael Espindola    return 0;
1355e140af3e27016f902146023fba7680b43043ec07Rafael Espindola
135699c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman  if (BuiltinID == ARM::BI__builtin_arm_vcvtr_f ||
135799c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman      BuiltinID == ARM::BI__builtin_arm_vcvtr_d) {
135899c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman    // Determine the overloaded type of this builtin.
13599cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *Ty;
136099c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman    if (BuiltinID == ARM::BI__builtin_arm_vcvtr_f)
1361d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall      Ty = llvm::Type::getFloatTy(getLLVMContext());
136299c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman    else
1363d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall      Ty = llvm::Type::getDoubleTy(getLLVMContext());
136499c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman
136599c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman    // Determine whether this is an unsigned conversion or not.
136699c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman    bool usgn = Result.getZExtValue() == 1;
136799c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman    unsigned Int = usgn ? Intrinsic::arm_vcvtru : Intrinsic::arm_vcvtr;
136899c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman
136999c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman    // Call the appropriate intrinsic.
13708dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Int, Ty);
13714c7d9f1507d0f102bd4133bba63348636facd469Jay Foad    return Builder.CreateCall(F, Ops, "vcvtr");
137299c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman  }
137399c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman
137499c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman  // Determine the type of this overloaded NEON intrinsic.
1375da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  NeonTypeFlags Type(Result.getZExtValue());
1376da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  bool usgn = Type.isUnsigned();
1377da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  bool quad = Type.isQuad();
13787965396d8d6ac23ec4c4f9d01d216f2e73d7fc72Bob Wilson  bool rightShift = false;
1379e140af3e27016f902146023fba7680b43043ec07Rafael Espindola
1380da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  llvm::VectorType *VTy = GetNeonType(getLLVMContext(), Type);
13819cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner  llvm::Type *Ty = VTy;
1382e140af3e27016f902146023fba7680b43043ec07Rafael Espindola  if (!Ty)
1383e140af3e27016f902146023fba7680b43043ec07Rafael Espindola    return 0;
1384e140af3e27016f902146023fba7680b43043ec07Rafael Espindola
1385e140af3e27016f902146023fba7680b43043ec07Rafael Espindola  unsigned Int;
1386e140af3e27016f902146023fba7680b43043ec07Rafael Espindola  switch (BuiltinID) {
1387e140af3e27016f902146023fba7680b43043ec07Rafael Espindola  default: return 0;
1388537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vabd_v:
1389537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vabdq_v:
1390998622c10198a25ba06c93d7e908f88ba0acc920Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vabdu : Intrinsic::arm_neon_vabds;
13918dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vabd");
1392537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vabs_v:
1393537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vabsq_v:
13948dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vabs, Ty),
1395548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman                        Ops, "vabs");
1396537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vaddhn_v:
13978dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vaddhn, Ty),
1398548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman                        Ops, "vaddhn");
1399537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcale_v:
14009eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman    std::swap(Ops[0], Ops[1]);
1401537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcage_v: {
1402d185035263b98cdde75a869b26b5e5e2e6b13fdfBob Wilson    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vacged);
140330d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman    return EmitNeonCall(F, Ops, "vcage");
140430d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman  }
1405537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcaleq_v:
14069eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman    std::swap(Ops[0], Ops[1]);
1407537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcageq_v: {
1408d185035263b98cdde75a869b26b5e5e2e6b13fdfBob Wilson    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vacgeq);
140930d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman    return EmitNeonCall(F, Ops, "vcage");
141030d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman  }
1411537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcalt_v:
14129eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman    std::swap(Ops[0], Ops[1]);
1413537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcagt_v: {
1414d185035263b98cdde75a869b26b5e5e2e6b13fdfBob Wilson    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vacgtd);
141530d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman    return EmitNeonCall(F, Ops, "vcagt");
141630d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman  }
1417537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcaltq_v:
14189eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman    std::swap(Ops[0], Ops[1]);
1419537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcagtq_v: {
1420d185035263b98cdde75a869b26b5e5e2e6b13fdfBob Wilson    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vacgtq);
142130d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman    return EmitNeonCall(F, Ops, "vcagt");
142230d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman  }
1423537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcls_v:
1424537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vclsq_v: {
14258dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vcls, Ty);
142630d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman    return EmitNeonCall(F, Ops, "vcls");
14279eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman  }
1428537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vclz_v:
1429537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vclzq_v: {
14308dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vclz, Ty);
143130d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman    return EmitNeonCall(F, Ops, "vclz");
14329eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman  }
1433537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcnt_v:
1434537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcntq_v: {
14358dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vcnt, Ty);
143630d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman    return EmitNeonCall(F, Ops, "vcnt");
14379eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman  }
1438537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvt_f16_v: {
1439da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    assert(Type.getEltType() == NeonTypeFlags::Float16 && !quad &&
1440da95f73b59f9af964e33725c515139d34c90c863Bob Wilson           "unexpected vcvt_f16_v builtin");
144146e392ae6d09979b087d7b1aca3b816ba4199b89Bob Wilson    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vcvtfp2hf);
144246e392ae6d09979b087d7b1aca3b816ba4199b89Bob Wilson    return EmitNeonCall(F, Ops, "vcvt");
144346e392ae6d09979b087d7b1aca3b816ba4199b89Bob Wilson  }
1444537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvt_f32_f16: {
1445da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    assert(Type.getEltType() == NeonTypeFlags::Float16 && !quad &&
1446da95f73b59f9af964e33725c515139d34c90c863Bob Wilson           "unexpected vcvt_f32_f16 builtin");
144746e392ae6d09979b087d7b1aca3b816ba4199b89Bob Wilson    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vcvthf2fp);
144846e392ae6d09979b087d7b1aca3b816ba4199b89Bob Wilson    return EmitNeonCall(F, Ops, "vcvt");
144946e392ae6d09979b087d7b1aca3b816ba4199b89Bob Wilson  }
1450537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvt_f32_v:
1451da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  case ARM::BI__builtin_neon_vcvtq_f32_v:
145230d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
1453da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    Ty = GetNeonType(getLLVMContext(),
1454da95f73b59f9af964e33725c515139d34c90c863Bob Wilson                     NeonTypeFlags(NeonTypeFlags::Float32, false, quad));
14559eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman    return usgn ? Builder.CreateUIToFP(Ops[0], Ty, "vcvt")
14569eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman                : Builder.CreateSIToFP(Ops[0], Ty, "vcvt");
1457537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvt_s32_v:
1458537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvt_u32_v:
1459537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvtq_s32_v:
1460537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvtq_u32_v: {
1461da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    llvm::Type *FloatTy =
1462da95f73b59f9af964e33725c515139d34c90c863Bob Wilson      GetNeonType(getLLVMContext(),
1463da95f73b59f9af964e33725c515139d34c90c863Bob Wilson                  NeonTypeFlags(NeonTypeFlags::Float32, false, quad));
1464da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    Ops[0] = Builder.CreateBitCast(Ops[0], FloatTy);
14659eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman    return usgn ? Builder.CreateFPToUI(Ops[0], Ty, "vcvt")
14669eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman                : Builder.CreateFPToSI(Ops[0], Ty, "vcvt");
14679eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman  }
1468537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvt_n_f32_v:
1469537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvtq_n_f32_v: {
1470da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    llvm::Type *FloatTy =
1471da95f73b59f9af964e33725c515139d34c90c863Bob Wilson      GetNeonType(getLLVMContext(),
1472da95f73b59f9af964e33725c515139d34c90c863Bob Wilson                  NeonTypeFlags(NeonTypeFlags::Float32, false, quad));
1473da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    llvm::Type *Tys[2] = { FloatTy, Ty };
1474da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    Int = usgn ? Intrinsic::arm_neon_vcvtfxu2fp
1475da95f73b59f9af964e33725c515139d34c90c863Bob Wilson               : Intrinsic::arm_neon_vcvtfxs2fp;
14768dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Int, Tys);
147730d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman    return EmitNeonCall(F, Ops, "vcvt_n");
14789eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman  }
1479537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvt_n_s32_v:
1480537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvt_n_u32_v:
1481537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvtq_n_s32_v:
1482537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvtq_n_u32_v: {
1483da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    llvm::Type *FloatTy =
1484da95f73b59f9af964e33725c515139d34c90c863Bob Wilson      GetNeonType(getLLVMContext(),
1485da95f73b59f9af964e33725c515139d34c90c863Bob Wilson                  NeonTypeFlags(NeonTypeFlags::Float32, false, quad));
1486da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    llvm::Type *Tys[2] = { Ty, FloatTy };
1487da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    Int = usgn ? Intrinsic::arm_neon_vcvtfp2fxu
1488da95f73b59f9af964e33725c515139d34c90c863Bob Wilson               : Intrinsic::arm_neon_vcvtfp2fxs;
14898dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Int, Tys);
149030d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman    return EmitNeonCall(F, Ops, "vcvt_n");
149130d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman  }
1492537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vext_v:
1493537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vextq_v: {
1494fb018d153cbf12fd2a4a278cbf7614b9a2e2835eChris Lattner    int CV = cast<ConstantInt>(Ops[2])->getSExtValue();
14951c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    SmallVector<Constant*, 16> Indices;
14964be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i)
149777b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner      Indices.push_back(ConstantInt::get(Int32Ty, i+CV));
149830d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman
149930d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
150030d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman    Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
1501fb018d153cbf12fd2a4a278cbf7614b9a2e2835eChris Lattner    Value *SV = llvm::ConstantVector::get(Indices);
15021c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    return Builder.CreateShuffleVector(Ops[0], Ops[1], SV, "vext");
15031c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman  }
1504537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vhadd_v:
1505537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vhaddq_v:
1506df98e1d1da5ab1ca7c325378fc1c2eaa90a6476dNate Begeman    Int = usgn ? Intrinsic::arm_neon_vhaddu : Intrinsic::arm_neon_vhadds;
15078dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vhadd");
1508537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vhsub_v:
1509537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vhsubq_v:
1510df98e1d1da5ab1ca7c325378fc1c2eaa90a6476dNate Begeman    Int = usgn ? Intrinsic::arm_neon_vhsubu : Intrinsic::arm_neon_vhsubs;
15118dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vhsub");
1512537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld1_v:
1513537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld1q_v:
151406b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    Ops.push_back(GetPointeeAlignment(*this, E->getArg(0)));
15158dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vld1, Ty),
15164be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman                        Ops, "vld1");
1517537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld1_lane_v:
1518537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld1q_lane_v:
15194be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
15204be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ty = llvm::PointerType::getUnqual(VTy->getElementType());
15214be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
15224be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateLoad(Ops[0]);
15234be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    return Builder.CreateInsertElement(Ops[1], Ops[0], Ops[2], "vld1_lane");
1524537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld1_dup_v:
1525537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld1q_dup_v: {
15264be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Value *V = UndefValue::get(Ty);
15274be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ty = llvm::PointerType::getUnqual(VTy->getElementType());
15284be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
15294be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateLoad(Ops[0]);
153077b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner    llvm::Constant *CI = ConstantInt::get(Int32Ty, 0);
15314be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateInsertElement(V, Ops[0], CI);
15324be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    return EmitNeonSplat(Ops[0], CI);
15334be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman  }
1534537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld2_v:
1535537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld2q_v: {
15368dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vld2, Ty);
153706b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    Value *Align = GetPointeeAlignment(*this, E->getArg(1));
153806b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    Ops[1] = Builder.CreateCall2(F, Ops[1], Align, "vld2");
15394be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ty = llvm::PointerType::getUnqual(Ops[1]->getType());
15404be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
15414be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    return Builder.CreateStore(Ops[1], Ops[0]);
15424be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman  }
1543537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld3_v:
1544537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld3q_v: {
15458dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vld3, Ty);
154606b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    Value *Align = GetPointeeAlignment(*this, E->getArg(1));
154706b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    Ops[1] = Builder.CreateCall2(F, Ops[1], Align, "vld3");
15484be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ty = llvm::PointerType::getUnqual(Ops[1]->getType());
15494be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
15504be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    return Builder.CreateStore(Ops[1], Ops[0]);
15514be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman  }
1552537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld4_v:
1553537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld4q_v: {
15548dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vld4, Ty);
155506b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    Value *Align = GetPointeeAlignment(*this, E->getArg(1));
155606b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    Ops[1] = Builder.CreateCall2(F, Ops[1], Align, "vld4");
15574be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ty = llvm::PointerType::getUnqual(Ops[1]->getType());
15584be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
15594be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    return Builder.CreateStore(Ops[1], Ops[0]);
15604be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman  }
1561537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld2_lane_v:
1562537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld2q_lane_v: {
15638dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vld2lane, Ty);
15644be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
15654be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[3] = Builder.CreateBitCast(Ops[3], Ty);
156606b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    Ops.push_back(GetPointeeAlignment(*this, E->getArg(1)));
15671cbac8ac446cf513dbc7486dd50abd55bcfc62c6Frits van Bommel    Ops[1] = Builder.CreateCall(F, makeArrayRef(Ops).slice(1), "vld2_lane");
15684be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ty = llvm::PointerType::getUnqual(Ops[1]->getType());
15694be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
15704be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    return Builder.CreateStore(Ops[1], Ops[0]);
15714be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman  }
1572537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld3_lane_v:
1573537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld3q_lane_v: {
15748dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vld3lane, Ty);
15754be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
15764be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[3] = Builder.CreateBitCast(Ops[3], Ty);
15774be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[4] = Builder.CreateBitCast(Ops[4], Ty);
157806b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    Ops.push_back(GetPointeeAlignment(*this, E->getArg(1)));
15791cbac8ac446cf513dbc7486dd50abd55bcfc62c6Frits van Bommel    Ops[1] = Builder.CreateCall(F, makeArrayRef(Ops).slice(1), "vld3_lane");
15804be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ty = llvm::PointerType::getUnqual(Ops[1]->getType());
15814be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
15824be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    return Builder.CreateStore(Ops[1], Ops[0]);
15834be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman  }
1584537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld4_lane_v:
1585537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld4q_lane_v: {
15868dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vld4lane, Ty);
15874be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
15884be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[3] = Builder.CreateBitCast(Ops[3], Ty);
15894be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[4] = Builder.CreateBitCast(Ops[4], Ty);
15904be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[5] = Builder.CreateBitCast(Ops[5], Ty);
159106b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    Ops.push_back(GetPointeeAlignment(*this, E->getArg(1)));
15921cbac8ac446cf513dbc7486dd50abd55bcfc62c6Frits van Bommel    Ops[1] = Builder.CreateCall(F, makeArrayRef(Ops).slice(1), "vld3_lane");
15934be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ty = llvm::PointerType::getUnqual(Ops[1]->getType());
15944be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
15954be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    return Builder.CreateStore(Ops[1], Ops[0]);
15964be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman  }
1597537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld2_dup_v:
1598537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld3_dup_v:
1599537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld4_dup_v: {
1600a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson    // Handle 64-bit elements as a special-case.  There is no "dup" needed.
1601a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson    if (VTy->getElementType()->getPrimitiveSizeInBits() == 64) {
1602a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson      switch (BuiltinID) {
1603537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson      case ARM::BI__builtin_neon_vld2_dup_v:
1604a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson        Int = Intrinsic::arm_neon_vld2;
1605a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson        break;
1606537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson      case ARM::BI__builtin_neon_vld3_dup_v:
1607a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson        Int = Intrinsic::arm_neon_vld2;
1608a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson        break;
1609537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson      case ARM::BI__builtin_neon_vld4_dup_v:
1610a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson        Int = Intrinsic::arm_neon_vld2;
1611a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson        break;
1612b219cfc4d75f0a03630b7c4509ef791b7e97b2c8David Blaikie      default: llvm_unreachable("unknown vld_dup intrinsic?");
1613a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson      }
16148dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer      Function *F = CGM.getIntrinsic(Int, Ty);
1615a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson      Value *Align = GetPointeeAlignment(*this, E->getArg(1));
1616a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson      Ops[1] = Builder.CreateCall2(F, Ops[1], Align, "vld_dup");
1617a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson      Ty = llvm::PointerType::getUnqual(Ops[1]->getType());
1618a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson      Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
1619a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson      return Builder.CreateStore(Ops[1], Ops[0]);
1620a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson    }
16214be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    switch (BuiltinID) {
1622537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson    case ARM::BI__builtin_neon_vld2_dup_v:
16234be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      Int = Intrinsic::arm_neon_vld2lane;
16244be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      break;
1625537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson    case ARM::BI__builtin_neon_vld3_dup_v:
16264be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      Int = Intrinsic::arm_neon_vld2lane;
16274be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      break;
1628537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson    case ARM::BI__builtin_neon_vld4_dup_v:
16294be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      Int = Intrinsic::arm_neon_vld2lane;
16304be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      break;
1631b219cfc4d75f0a03630b7c4509ef791b7e97b2c8David Blaikie    default: llvm_unreachable("unknown vld_dup intrinsic?");
16324be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    }
16338dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Int, Ty);
16342acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::StructType *STy = cast<llvm::StructType>(F->getReturnType());
16354be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman
16364be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    SmallVector<Value*, 6> Args;
16374be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Args.push_back(Ops[1]);
16384be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Args.append(STy->getNumElements(), UndefValue::get(Ty));
16394be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman
164077b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner    llvm::Constant *CI = ConstantInt::get(Int32Ty, 0);
16414be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Args.push_back(CI);
164206b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    Args.push_back(GetPointeeAlignment(*this, E->getArg(1)));
16434be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman
16444c7d9f1507d0f102bd4133bba63348636facd469Jay Foad    Ops[1] = Builder.CreateCall(F, Args, "vld_dup");
16454be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    // splat lane 0 to all elts in each vector of the result.
16464be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) {
16474be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      Value *Val = Builder.CreateExtractValue(Ops[1], i);
16484be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      Value *Elt = Builder.CreateBitCast(Val, Ty);
16494be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      Elt = EmitNeonSplat(Elt, CI);
16504be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      Elt = Builder.CreateBitCast(Elt, Val->getType());
16514be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      Ops[1] = Builder.CreateInsertValue(Ops[1], Elt, i);
16524be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    }
16534be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ty = llvm::PointerType::getUnqual(Ops[1]->getType());
16544be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
16554be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    return Builder.CreateStore(Ops[1], Ops[0]);
16564be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman  }
1657537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vmax_v:
1658537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vmaxq_v:
1659df98e1d1da5ab1ca7c325378fc1c2eaa90a6476dNate Begeman    Int = usgn ? Intrinsic::arm_neon_vmaxu : Intrinsic::arm_neon_vmaxs;
16608dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vmax");
1661537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vmin_v:
1662537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vminq_v:
1663df98e1d1da5ab1ca7c325378fc1c2eaa90a6476dNate Begeman    Int = usgn ? Intrinsic::arm_neon_vminu : Intrinsic::arm_neon_vmins;
16648dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vmin");
1665537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vmovl_v: {
16662acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *DTy =llvm::VectorType::getTruncatedElementVectorType(VTy);
16672235941293353325835d182da4470f61828fe789Bob Wilson    Ops[0] = Builder.CreateBitCast(Ops[0], DTy);
16687cea322bf019b0d38867a27e20e3771d84dbb1afBob Wilson    if (usgn)
16697cea322bf019b0d38867a27e20e3771d84dbb1afBob Wilson      return Builder.CreateZExt(Ops[0], Ty, "vmovl");
16707cea322bf019b0d38867a27e20e3771d84dbb1afBob Wilson    return Builder.CreateSExt(Ops[0], Ty, "vmovl");
16712235941293353325835d182da4470f61828fe789Bob Wilson  }
1672537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vmovn_v: {
16732acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *QTy = llvm::VectorType::getExtendedElementVectorType(VTy);
16742235941293353325835d182da4470f61828fe789Bob Wilson    Ops[0] = Builder.CreateBitCast(Ops[0], QTy);
16753b6081bf49b7506cb96131247f209d1e03610df8Bob Wilson    return Builder.CreateTrunc(Ops[0], Ty, "vmovn");
16762235941293353325835d182da4470f61828fe789Bob Wilson  }
1677537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vmul_v:
1678537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vmulq_v:
1679da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    assert(Type.isPoly() && "vmul builtin only supported for polynomial types");
16808dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vmulp, Ty),
1681953d513c7ee79b3d9e37597e64317e75c0fbf7f6Bob Wilson                        Ops, "vmul");
1682537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vmull_v:
16832d33e423d5091b7d2cb8618952752abd55bba965Bob Wilson    Int = usgn ? Intrinsic::arm_neon_vmullu : Intrinsic::arm_neon_vmulls;
1684da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    Int = Type.isPoly() ? (unsigned)Intrinsic::arm_neon_vmullp : Int;
16858dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vmull");
1686537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vpadal_v:
1687537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vpadalq_v: {
1688df98e1d1da5ab1ca7c325378fc1c2eaa90a6476dNate Begeman    Int = usgn ? Intrinsic::arm_neon_vpadalu : Intrinsic::arm_neon_vpadals;
1689c1fa01b69d9377a69087a6006a65a8fcc526d565Bob Wilson    // The source operand type has twice as many elements of half the size.
1690c1fa01b69d9377a69087a6006a65a8fcc526d565Bob Wilson    unsigned EltBits = VTy->getElementType()->getPrimitiveSizeInBits();
16912acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *EltTy =
1692d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall      llvm::IntegerType::get(getLLVMContext(), EltBits / 2);
16939cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *NarrowTy =
1694c1fa01b69d9377a69087a6006a65a8fcc526d565Bob Wilson      llvm::VectorType::get(EltTy, VTy->getNumElements() * 2);
16959cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *Tys[2] = { Ty, NarrowTy };
16968dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vpadal");
1697c1fa01b69d9377a69087a6006a65a8fcc526d565Bob Wilson  }
1698537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vpadd_v:
16998dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vpadd, Ty),
1700548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman                        Ops, "vpadd");
1701537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vpaddl_v:
1702537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vpaddlq_v: {
1703548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vpaddlu : Intrinsic::arm_neon_vpaddls;
1704c1fa01b69d9377a69087a6006a65a8fcc526d565Bob Wilson    // The source operand type has twice as many elements of half the size.
1705c1fa01b69d9377a69087a6006a65a8fcc526d565Bob Wilson    unsigned EltBits = VTy->getElementType()->getPrimitiveSizeInBits();
17062acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *EltTy = llvm::IntegerType::get(getLLVMContext(), EltBits / 2);
17079cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *NarrowTy =
1708c1fa01b69d9377a69087a6006a65a8fcc526d565Bob Wilson      llvm::VectorType::get(EltTy, VTy->getNumElements() * 2);
17099cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *Tys[2] = { Ty, NarrowTy };
17108dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vpaddl");
1711c1fa01b69d9377a69087a6006a65a8fcc526d565Bob Wilson  }
1712537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vpmax_v:
1713548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vpmaxu : Intrinsic::arm_neon_vpmaxs;
17148dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vpmax");
1715537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vpmin_v:
1716548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vpminu : Intrinsic::arm_neon_vpmins;
17178dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vpmin");
1718537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqabs_v:
1719537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqabsq_v:
17208dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vqabs, Ty),
1721548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman                        Ops, "vqabs");
1722537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqadd_v:
1723537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqaddq_v:
1724548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vqaddu : Intrinsic::arm_neon_vqadds;
17258dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqadd");
1726537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqdmlal_v:
17278dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vqdmlal, Ty),
1728db3d4d036037f379f12643e067b229862d61e932Bob Wilson                        Ops, "vqdmlal");
1729537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqdmlsl_v:
17308dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vqdmlsl, Ty),
1731db3d4d036037f379f12643e067b229862d61e932Bob Wilson                        Ops, "vqdmlsl");
1732537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqdmulh_v:
1733537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqdmulhq_v:
17348dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vqdmulh, Ty),
1735db3d4d036037f379f12643e067b229862d61e932Bob Wilson                        Ops, "vqdmulh");
1736537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqdmull_v:
17378dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vqdmull, Ty),
1738db3d4d036037f379f12643e067b229862d61e932Bob Wilson                        Ops, "vqdmull");
1739537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqmovn_v:
1740548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vqmovnu : Intrinsic::arm_neon_vqmovns;
17418dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqmovn");
1742537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqmovun_v:
17438dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vqmovnsu, Ty),
1744548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman                        Ops, "vqdmull");
1745537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqneg_v:
1746537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqnegq_v:
17478dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vqneg, Ty),
174861eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman                        Ops, "vqneg");
1749537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqrdmulh_v:
1750537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqrdmulhq_v:
17518dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vqrdmulh, Ty),
1752db3d4d036037f379f12643e067b229862d61e932Bob Wilson                        Ops, "vqrdmulh");
1753537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqrshl_v:
1754537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqrshlq_v:
1755548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vqrshiftu : Intrinsic::arm_neon_vqrshifts;
17568dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqrshl");
1757537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqrshrn_n_v:
1758548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vqrshiftnu : Intrinsic::arm_neon_vqrshiftns;
17598dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqrshrn_n",
176061eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman                        1, true);
1761537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqrshrun_n_v:
17628dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vqrshiftnsu, Ty),
1763db3d4d036037f379f12643e067b229862d61e932Bob Wilson                        Ops, "vqrshrun_n", 1, true);
1764537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqshl_v:
1765537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqshlq_v:
176661eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman    Int = usgn ? Intrinsic::arm_neon_vqshiftu : Intrinsic::arm_neon_vqshifts;
17678dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqshl");
1768537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqshl_n_v:
1769537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqshlq_n_v:
177061eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman    Int = usgn ? Intrinsic::arm_neon_vqshiftu : Intrinsic::arm_neon_vqshifts;
17718dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqshl_n",
177261eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman                        1, false);
1773537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqshlu_n_v:
1774537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqshluq_n_v:
17758dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vqshiftsu, Ty),
1776db3d4d036037f379f12643e067b229862d61e932Bob Wilson                        Ops, "vqshlu", 1, false);
1777537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqshrn_n_v:
177861eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman    Int = usgn ? Intrinsic::arm_neon_vqshiftnu : Intrinsic::arm_neon_vqshiftns;
17798dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqshrn_n",
178061eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman                        1, true);
1781537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqshrun_n_v:
17828dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vqshiftnsu, Ty),
1783db3d4d036037f379f12643e067b229862d61e932Bob Wilson                        Ops, "vqshrun_n", 1, true);
1784537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqsub_v:
1785537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqsubq_v:
1786464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vqsubu : Intrinsic::arm_neon_vqsubs;
17878dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqsub");
1788537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vraddhn_v:
17898dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vraddhn, Ty),
1790464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                        Ops, "vraddhn");
1791537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrecpe_v:
1792537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrecpeq_v:
17938dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vrecpe, Ty),
1794464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                        Ops, "vrecpe");
1795537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrecps_v:
1796537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrecpsq_v:
17978dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vrecps, Ty),
1798464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                        Ops, "vrecps");
1799537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrhadd_v:
1800537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrhaddq_v:
1801464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vrhaddu : Intrinsic::arm_neon_vrhadds;
18028dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrhadd");
1803537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrshl_v:
1804537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrshlq_v:
18055af93efc01f4acd247aa6d3124db6c92c3679198Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vrshiftu : Intrinsic::arm_neon_vrshifts;
18068dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrshl");
1807537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrshrn_n_v:
18088dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vrshiftn, Ty),
1809db3d4d036037f379f12643e067b229862d61e932Bob Wilson                        Ops, "vrshrn_n", 1, true);
1810537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrshr_n_v:
1811537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrshrq_n_v:
18125af93efc01f4acd247aa6d3124db6c92c3679198Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vrshiftu : Intrinsic::arm_neon_vrshifts;
18138dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrshr_n", 1, true);
1814537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrsqrte_v:
1815537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrsqrteq_v:
18168dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vrsqrte, Ty),
18175af93efc01f4acd247aa6d3124db6c92c3679198Nate Begeman                        Ops, "vrsqrte");
1818537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrsqrts_v:
1819537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrsqrtsq_v:
18208dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vrsqrts, Ty),
18215af93efc01f4acd247aa6d3124db6c92c3679198Nate Begeman                        Ops, "vrsqrts");
1822537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrsra_n_v:
1823537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrsraq_n_v:
18245af93efc01f4acd247aa6d3124db6c92c3679198Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
18255af93efc01f4acd247aa6d3124db6c92c3679198Nate Begeman    Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
18265af93efc01f4acd247aa6d3124db6c92c3679198Nate Begeman    Ops[2] = EmitNeonShiftVector(Ops[2], Ty, true);
18275af93efc01f4acd247aa6d3124db6c92c3679198Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vrshiftu : Intrinsic::arm_neon_vrshifts;
18288dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Ops[1] = Builder.CreateCall2(CGM.getIntrinsic(Int, Ty), Ops[1], Ops[2]);
18295af93efc01f4acd247aa6d3124db6c92c3679198Nate Begeman    return Builder.CreateAdd(Ops[0], Ops[1], "vrsra_n");
1830537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrsubhn_v:
18318dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vrsubhn, Ty),
1832464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                        Ops, "vrsubhn");
1833537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vshl_v:
1834537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vshlq_v:
1835464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vshiftu : Intrinsic::arm_neon_vshifts;
18368dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vshl");
1837537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vshll_n_v:
1838464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vshiftlu : Intrinsic::arm_neon_vshiftls;
18398dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vshll", 1);
1840537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vshl_n_v:
1841537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vshlq_n_v:
184261eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman    Ops[1] = EmitNeonShiftVector(Ops[1], Ty, false);
184361eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman    return Builder.CreateShl(Builder.CreateBitCast(Ops[0],Ty), Ops[1], "vshl_n");
1844537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vshrn_n_v:
18458dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vshiftn, Ty),
1846db3d4d036037f379f12643e067b229862d61e932Bob Wilson                        Ops, "vshrn_n", 1, true);
1847537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vshr_n_v:
1848537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vshrq_n_v:
1849464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
185061eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman    Ops[1] = EmitNeonShiftVector(Ops[1], Ty, false);
1851464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    if (usgn)
1852464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman      return Builder.CreateLShr(Ops[0], Ops[1], "vshr_n");
1853464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    else
1854464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman      return Builder.CreateAShr(Ops[0], Ops[1], "vshr_n");
1855537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vsri_n_v:
1856537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vsriq_n_v:
18577965396d8d6ac23ec4c4f9d01d216f2e73d7fc72Bob Wilson    rightShift = true;
1858537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vsli_n_v:
1859537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vsliq_n_v:
18607965396d8d6ac23ec4c4f9d01d216f2e73d7fc72Bob Wilson    Ops[2] = EmitNeonShiftVector(Ops[2], Ty, rightShift);
18618dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vshiftins, Ty),
1862464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                        Ops, "vsli_n");
1863537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vsra_n_v:
1864537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vsraq_n_v:
1865464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
1866464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
186761eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman    Ops[2] = EmitNeonShiftVector(Ops[2], Ty, false);
1868464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    if (usgn)
1869464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman      Ops[1] = Builder.CreateLShr(Ops[1], Ops[2], "vsra_n");
1870464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    else
1871464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman      Ops[1] = Builder.CreateAShr(Ops[1], Ops[2], "vsra_n");
1872464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    return Builder.CreateAdd(Ops[0], Ops[1]);
1873537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst1_v:
1874537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst1q_v:
187506b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    Ops.push_back(GetPointeeAlignment(*this, E->getArg(0)));
18768dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vst1, Ty),
1877464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                        Ops, "");
1878537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst1_lane_v:
1879537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst1q_lane_v:
1880464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
1881464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    Ops[1] = Builder.CreateExtractElement(Ops[1], Ops[2]);
1882464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    Ty = llvm::PointerType::getUnqual(Ops[1]->getType());
1883464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    return Builder.CreateStore(Ops[1], Builder.CreateBitCast(Ops[0], Ty));
1884537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst2_v:
1885537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst2q_v:
188606b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    Ops.push_back(GetPointeeAlignment(*this, E->getArg(0)));
18878dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vst2, Ty),
1888464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                        Ops, "");
1889537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst2_lane_v:
1890537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst2q_lane_v:
189106b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    Ops.push_back(GetPointeeAlignment(*this, E->getArg(0)));
18928dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vst2lane, Ty),
1893464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                        Ops, "");
1894537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst3_v:
1895537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst3q_v:
189606b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    Ops.push_back(GetPointeeAlignment(*this, E->getArg(0)));
18978dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vst3, Ty),
1898464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                        Ops, "");
1899537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst3_lane_v:
1900537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst3q_lane_v:
190106b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    Ops.push_back(GetPointeeAlignment(*this, E->getArg(0)));
19028dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vst3lane, Ty),
1903464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                        Ops, "");
1904537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst4_v:
1905537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst4q_v:
190606b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    Ops.push_back(GetPointeeAlignment(*this, E->getArg(0)));
19078dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vst4, Ty),
1908464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                        Ops, "");
1909537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst4_lane_v:
1910537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst4q_lane_v:
191106b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    Ops.push_back(GetPointeeAlignment(*this, E->getArg(0)));
19128dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vst4lane, Ty),
1913464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                        Ops, "");
1914537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vsubhn_v:
19158dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vsubhn, Ty),
1916548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman                        Ops, "vsubhn");
1917537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vtbl1_v:
19181c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vtbl1),
19191c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman                        Ops, "vtbl1");
1920537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vtbl2_v:
19211c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vtbl2),
19221c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman                        Ops, "vtbl2");
1923537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vtbl3_v:
19241c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vtbl3),
19251c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman                        Ops, "vtbl3");
1926537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vtbl4_v:
19271c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vtbl4),
19281c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman                        Ops, "vtbl4");
1929537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vtbx1_v:
19301c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vtbx1),
19311c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman                        Ops, "vtbx1");
1932537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vtbx2_v:
19331c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vtbx2),
19341c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman                        Ops, "vtbx2");
1935537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vtbx3_v:
19361c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vtbx3),
19371c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman                        Ops, "vtbx3");
1938537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vtbx4_v:
19391c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vtbx4),
19401c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman                        Ops, "vtbx4");
1941537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vtst_v:
1942537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vtstq_v: {
19431c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
19441c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
19451c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    Ops[0] = Builder.CreateAnd(Ops[0], Ops[1]);
19461c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    Ops[0] = Builder.CreateICmp(ICmpInst::ICMP_NE, Ops[0],
19471c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman                                ConstantAggregateZero::get(Ty));
19481c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    return Builder.CreateSExt(Ops[0], Ty, "vtst");
19491c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman  }
1950537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vtrn_v:
1951537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vtrnq_v: {
19524be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], llvm::PointerType::getUnqual(Ty));
19534be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
19544be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
19559577abc63f2c7afe5adf6e4e101ae91d29c3b8a6Ted Kremenek    Value *SV = 0;
19564be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman
19571c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    for (unsigned vi = 0; vi != 2; ++vi) {
19584be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      SmallVector<Constant*, 16> Indices;
19594be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      for (unsigned i = 0, e = VTy->getNumElements(); i != e; i += 2) {
196077b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner        Indices.push_back(ConstantInt::get(Int32Ty, i+vi));
196177b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner        Indices.push_back(ConstantInt::get(Int32Ty, i+e+vi));
19621c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman      }
19634be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      Value *Addr = Builder.CreateConstInBoundsGEP1_32(Ops[0], vi);
1964fb018d153cbf12fd2a4a278cbf7614b9a2e2835eChris Lattner      SV = llvm::ConstantVector::get(Indices);
19654be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      SV = Builder.CreateShuffleVector(Ops[1], Ops[2], SV, "vtrn");
19664be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      SV = Builder.CreateStore(SV, Addr);
19671c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    }
19684be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    return SV;
19691c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman  }
1970537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vuzp_v:
1971537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vuzpq_v: {
19724be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], llvm::PointerType::getUnqual(Ty));
19731c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
19744be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
19759577abc63f2c7afe5adf6e4e101ae91d29c3b8a6Ted Kremenek    Value *SV = 0;
19764be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman
19774be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    for (unsigned vi = 0; vi != 2; ++vi) {
19784be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      SmallVector<Constant*, 16> Indices;
19794be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i)
198077b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner        Indices.push_back(ConstantInt::get(Int32Ty, 2*i+vi));
19814be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman
19824be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      Value *Addr = Builder.CreateConstInBoundsGEP1_32(Ops[0], vi);
1983fb018d153cbf12fd2a4a278cbf7614b9a2e2835eChris Lattner      SV = llvm::ConstantVector::get(Indices);
19844be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      SV = Builder.CreateShuffleVector(Ops[1], Ops[2], SV, "vuzp");
19854be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      SV = Builder.CreateStore(SV, Addr);
19864be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    }
19874be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    return SV;
19881c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman  }
1989537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vzip_v:
1990537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vzipq_v: {
19914be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], llvm::PointerType::getUnqual(Ty));
19921c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
19934be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
19949577abc63f2c7afe5adf6e4e101ae91d29c3b8a6Ted Kremenek    Value *SV = 0;
19954be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman
19964be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    for (unsigned vi = 0; vi != 2; ++vi) {
19974be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      SmallVector<Constant*, 16> Indices;
19984be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      for (unsigned i = 0, e = VTy->getNumElements(); i != e; i += 2) {
1999e361cc3daa6c22e4413d48bd8b8934ea9fd5a55fDaniel Dunbar        Indices.push_back(ConstantInt::get(Int32Ty, (i + vi*e) >> 1));
2000e361cc3daa6c22e4413d48bd8b8934ea9fd5a55fDaniel Dunbar        Indices.push_back(ConstantInt::get(Int32Ty, ((i + vi*e) >> 1)+e));
20014be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      }
20024be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      Value *Addr = Builder.CreateConstInBoundsGEP1_32(Ops[0], vi);
2003fb018d153cbf12fd2a4a278cbf7614b9a2e2835eChris Lattner      SV = llvm::ConstantVector::get(Indices);
20044be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      SV = Builder.CreateShuffleVector(Ops[1], Ops[2], SV, "vzip");
20054be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      SV = Builder.CreateStore(SV, Addr);
20064be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    }
20074be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    return SV;
20089eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman  }
20092752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner  }
20102752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner}
20112752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner
2012aa51e513850688b7963efc62abf1eface7037602Bill Wendlingllvm::Value *CodeGenFunction::
20135f9e272e632e951b1efe824cd16acb4d96077930Chris LattnerBuildVector(const SmallVectorImpl<llvm::Value*> &Ops) {
2014aa51e513850688b7963efc62abf1eface7037602Bill Wendling  assert((Ops.size() & (Ops.size() - 1)) == 0 &&
2015aa51e513850688b7963efc62abf1eface7037602Bill Wendling         "Not a power-of-two sized vector!");
2016aa51e513850688b7963efc62abf1eface7037602Bill Wendling  bool AllConstants = true;
2017aa51e513850688b7963efc62abf1eface7037602Bill Wendling  for (unsigned i = 0, e = Ops.size(); i != e && AllConstants; ++i)
2018aa51e513850688b7963efc62abf1eface7037602Bill Wendling    AllConstants &= isa<Constant>(Ops[i]);
2019aa51e513850688b7963efc62abf1eface7037602Bill Wendling
2020aa51e513850688b7963efc62abf1eface7037602Bill Wendling  // If this is a constant vector, create a ConstantVector.
2021aa51e513850688b7963efc62abf1eface7037602Bill Wendling  if (AllConstants) {
2022aa51e513850688b7963efc62abf1eface7037602Bill Wendling    std::vector<llvm::Constant*> CstOps;
2023aa51e513850688b7963efc62abf1eface7037602Bill Wendling    for (unsigned i = 0, e = Ops.size(); i != e; ++i)
2024aa51e513850688b7963efc62abf1eface7037602Bill Wendling      CstOps.push_back(cast<Constant>(Ops[i]));
2025aa51e513850688b7963efc62abf1eface7037602Bill Wendling    return llvm::ConstantVector::get(CstOps);
2026aa51e513850688b7963efc62abf1eface7037602Bill Wendling  }
2027aa51e513850688b7963efc62abf1eface7037602Bill Wendling
2028aa51e513850688b7963efc62abf1eface7037602Bill Wendling  // Otherwise, insertelement the values to build the vector.
2029aa51e513850688b7963efc62abf1eface7037602Bill Wendling  Value *Result =
2030aa51e513850688b7963efc62abf1eface7037602Bill Wendling    llvm::UndefValue::get(llvm::VectorType::get(Ops[0]->getType(), Ops.size()));
2031aa51e513850688b7963efc62abf1eface7037602Bill Wendling
2032aa51e513850688b7963efc62abf1eface7037602Bill Wendling  for (unsigned i = 0, e = Ops.size(); i != e; ++i)
2033aa51e513850688b7963efc62abf1eface7037602Bill Wendling    Result = Builder.CreateInsertElement(Result, Ops[i],
2034d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall               llvm::ConstantInt::get(llvm::Type::getInt32Ty(getLLVMContext()), i));
2035aa51e513850688b7963efc62abf1eface7037602Bill Wendling
2036aa51e513850688b7963efc62abf1eface7037602Bill Wendling  return Result;
2037aa51e513850688b7963efc62abf1eface7037602Bill Wendling}
2038aa51e513850688b7963efc62abf1eface7037602Bill Wendling
20391eb4433ac451dc16f4133a88af2d002ac26c58efMike StumpValue *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID,
20401feedd84221e8dbcc3faf3de27cc42b559db845dChris Lattner                                           const CallExpr *E) {
20415f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner  SmallVector<Value*, 4> Ops;
20422929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson
204346c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner  // Find out if any arguments are required to be integer constant expressions.
204446c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner  unsigned ICEArguments = 0;
204546c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner  ASTContext::GetBuiltinTypeError Error;
204646c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner  getContext().GetBuiltinType(BuiltinID, Error, &ICEArguments);
204746c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner  assert(Error == ASTContext::GE_None && "Should not codegen an error");
204846c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner
204946c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner  for (unsigned i = 0, e = E->getNumArgs(); i != e; i++) {
205046c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    // If this is a normal argument, just emit it as a scalar.
205146c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    if ((ICEArguments & (1 << i)) == 0) {
205246c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner      Ops.push_back(EmitScalarExpr(E->getArg(i)));
205346c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner      continue;
205446c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    }
205546c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner
205646c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    // If this is required to be a constant, constant fold it so that we know
205746c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    // that the generated intrinsic gets a ConstantInt.
205846c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    llvm::APSInt Result;
205946c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    bool IsConst = E->getArg(i)->isIntegerConstantExpr(Result, getContext());
206046c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    assert(IsConst && "Constant arg isn't actually constant?"); (void)IsConst;
2061d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    Ops.push_back(llvm::ConstantInt::get(getLLVMContext(), Result));
206246c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner  }
20632929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson
2064564f1de67d7ba43646b8740db86d6269e3dfbe0bAnders Carlsson  switch (BuiltinID) {
206546a26b0b0e2ec1557bad9b70e8e20836524ebdfcAnders Carlsson  default: return 0;
20661eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  case X86::BI__builtin_ia32_pslldi128:
2067e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman  case X86::BI__builtin_ia32_psllqi128:
20681eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  case X86::BI__builtin_ia32_psllwi128:
2069e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman  case X86::BI__builtin_ia32_psradi128:
2070e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman  case X86::BI__builtin_ia32_psrawi128:
2071e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman  case X86::BI__builtin_ia32_psrldi128:
2072e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman  case X86::BI__builtin_ia32_psrlqi128:
2073e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman  case X86::BI__builtin_ia32_psrlwi128: {
207477b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner    Ops[1] = Builder.CreateZExt(Ops[1], Int64Ty, "zext");
20752acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *Ty = llvm::VectorType::get(Int64Ty, 2);
207677b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner    llvm::Value *Zero = llvm::ConstantInt::get(Int32Ty, 0);
207703e205031b08669f05c41eed5b896fc94c4a12bbOwen Anderson    Ops[1] = Builder.CreateInsertElement(llvm::UndefValue::get(Ty),
2078e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman                                         Ops[1], Zero, "insert");
2079e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    Ops[1] = Builder.CreateBitCast(Ops[1], Ops[0]->getType(), "bitcast");
2080e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    const char *name = 0;
2081e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    Intrinsic::ID ID = Intrinsic::not_intrinsic;
20821eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2083e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    switch (BuiltinID) {
2084b219cfc4d75f0a03630b7c4509ef791b7e97b2c8David Blaikie    default: llvm_unreachable("Unsupported shift intrinsic!");
2085e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    case X86::BI__builtin_ia32_pslldi128:
2086e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman      name = "pslldi";
2087e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman      ID = Intrinsic::x86_sse2_psll_d;
2088e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman      break;
2089e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    case X86::BI__builtin_ia32_psllqi128:
2090e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman      name = "psllqi";
2091e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman      ID = Intrinsic::x86_sse2_psll_q;
2092e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman      break;
2093e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    case X86::BI__builtin_ia32_psllwi128:
2094e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman      name = "psllwi";
2095e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman      ID = Intrinsic::x86_sse2_psll_w;
2096e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman      break;
2097e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    case X86::BI__builtin_ia32_psradi128:
2098e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman      name = "psradi";
2099e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman      ID = Intrinsic::x86_sse2_psra_d;
2100e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman      break;
2101e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    case X86::BI__builtin_ia32_psrawi128:
2102e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman      name = "psrawi";
2103e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman      ID = Intrinsic::x86_sse2_psra_w;
2104e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman      break;
2105e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    case X86::BI__builtin_ia32_psrldi128:
2106e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman      name = "psrldi";
2107e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman      ID = Intrinsic::x86_sse2_psrl_d;
2108e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman      break;
2109e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    case X86::BI__builtin_ia32_psrlqi128:
2110e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman      name = "psrlqi";
2111e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman      ID = Intrinsic::x86_sse2_psrl_q;
2112e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman      break;
2113e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    case X86::BI__builtin_ia32_psrlwi128:
2114e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman      name = "psrlwi";
2115e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman      ID = Intrinsic::x86_sse2_psrl_w;
2116e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman      break;
2117e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    }
2118e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    llvm::Function *F = CGM.getIntrinsic(ID);
21194c7d9f1507d0f102bd4133bba63348636facd469Jay Foad    return Builder.CreateCall(F, Ops, name);
2120e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman  }
2121aa51e513850688b7963efc62abf1eface7037602Bill Wendling  case X86::BI__builtin_ia32_vec_init_v8qi:
2122aa51e513850688b7963efc62abf1eface7037602Bill Wendling  case X86::BI__builtin_ia32_vec_init_v4hi:
2123aa51e513850688b7963efc62abf1eface7037602Bill Wendling  case X86::BI__builtin_ia32_vec_init_v2si:
2124aa51e513850688b7963efc62abf1eface7037602Bill Wendling    return Builder.CreateBitCast(BuildVector(Ops),
2125d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall                                 llvm::Type::getX86_MMXTy(getLLVMContext()));
21261944ec188408aff1931c62c79a069e30f2549ec2Argyrios Kyrtzidis  case X86::BI__builtin_ia32_vec_ext_v2si:
21271944ec188408aff1931c62c79a069e30f2549ec2Argyrios Kyrtzidis    return Builder.CreateExtractElement(Ops[0],
21281944ec188408aff1931c62c79a069e30f2549ec2Argyrios Kyrtzidis                                  llvm::ConstantInt::get(Ops[1]->getType(), 0));
21291eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  case X86::BI__builtin_ia32_pslldi:
21302929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson  case X86::BI__builtin_ia32_psllqi:
21311eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  case X86::BI__builtin_ia32_psllwi:
21322929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson  case X86::BI__builtin_ia32_psradi:
21332929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson  case X86::BI__builtin_ia32_psrawi:
21342929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson  case X86::BI__builtin_ia32_psrldi:
21352929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson  case X86::BI__builtin_ia32_psrlqi:
21362929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson  case X86::BI__builtin_ia32_psrlwi: {
213777b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner    Ops[1] = Builder.CreateZExt(Ops[1], Int64Ty, "zext");
21382acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *Ty = llvm::VectorType::get(Int64Ty, 1);
21392929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson    Ops[1] = Builder.CreateBitCast(Ops[1], Ty, "bitcast");
21402929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson    const char *name = 0;
21412929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson    Intrinsic::ID ID = Intrinsic::not_intrinsic;
21421eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
21432929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson    switch (BuiltinID) {
2144b219cfc4d75f0a03630b7c4509ef791b7e97b2c8David Blaikie    default: llvm_unreachable("Unsupported shift intrinsic!");
21452929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson    case X86::BI__builtin_ia32_pslldi:
21462929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson      name = "pslldi";
2147df4d4825050f8b0eedcfc70c461a21160e48d993Bill Wendling      ID = Intrinsic::x86_mmx_psll_d;
21482929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson      break;
21492929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson    case X86::BI__builtin_ia32_psllqi:
21502929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson      name = "psllqi";
2151df4d4825050f8b0eedcfc70c461a21160e48d993Bill Wendling      ID = Intrinsic::x86_mmx_psll_q;
21522929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson      break;
21532929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson    case X86::BI__builtin_ia32_psllwi:
21542929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson      name = "psllwi";
2155df4d4825050f8b0eedcfc70c461a21160e48d993Bill Wendling      ID = Intrinsic::x86_mmx_psll_w;
21562929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson      break;
21572929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson    case X86::BI__builtin_ia32_psradi:
21582929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson      name = "psradi";
2159df4d4825050f8b0eedcfc70c461a21160e48d993Bill Wendling      ID = Intrinsic::x86_mmx_psra_d;
21602929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson      break;
21612929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson    case X86::BI__builtin_ia32_psrawi:
21622929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson      name = "psrawi";
2163df4d4825050f8b0eedcfc70c461a21160e48d993Bill Wendling      ID = Intrinsic::x86_mmx_psra_w;
21642929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson      break;
21652929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson    case X86::BI__builtin_ia32_psrldi:
21662929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson      name = "psrldi";
2167df4d4825050f8b0eedcfc70c461a21160e48d993Bill Wendling      ID = Intrinsic::x86_mmx_psrl_d;
21682929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson      break;
21692929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson    case X86::BI__builtin_ia32_psrlqi:
21702929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson      name = "psrlqi";
2171df4d4825050f8b0eedcfc70c461a21160e48d993Bill Wendling      ID = Intrinsic::x86_mmx_psrl_q;
21722929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson      break;
21732929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson    case X86::BI__builtin_ia32_psrlwi:
21742929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson      name = "psrlwi";
2175df4d4825050f8b0eedcfc70c461a21160e48d993Bill Wendling      ID = Intrinsic::x86_mmx_psrl_w;
21762929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson      break;
21772929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson    }
21787acda7c4a0e4aec6c003b3169ca45a5f3bc7e033Chris Lattner    llvm::Function *F = CGM.getIntrinsic(ID);
21794c7d9f1507d0f102bd4133bba63348636facd469Jay Foad    return Builder.CreateCall(F, Ops, name);
21802929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson  }
218179dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  case X86::BI__builtin_ia32_cmpps: {
218279dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson    llvm::Function *F = CGM.getIntrinsic(Intrinsic::x86_sse_cmp_ps);
21834c7d9f1507d0f102bd4133bba63348636facd469Jay Foad    return Builder.CreateCall(F, Ops, "cmpps");
218479dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  }
218579dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  case X86::BI__builtin_ia32_cmpss: {
218679dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson    llvm::Function *F = CGM.getIntrinsic(Intrinsic::x86_sse_cmp_ss);
21874c7d9f1507d0f102bd4133bba63348636facd469Jay Foad    return Builder.CreateCall(F, Ops, "cmpss");
2188cc8b7f911892b3257e381677d0a82d43bf7b067cAnders Carlsson  }
2189e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman  case X86::BI__builtin_ia32_ldmxcsr: {
21902acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *PtrTy = Int8PtrTy;
219177b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner    Value *One = llvm::ConstantInt::get(Int32Ty, 1);
2192578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    Value *Tmp = Builder.CreateAlloca(Int32Ty, One);
2193e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    Builder.CreateStore(Ops[0], Tmp);
2194e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_sse_ldmxcsr),
21953eae03e7d165f20a863a9a4d7122ba2a691ab16dChris Lattner                              Builder.CreateBitCast(Tmp, PtrTy));
2196e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman  }
2197e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman  case X86::BI__builtin_ia32_stmxcsr: {
21982acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *PtrTy = Int8PtrTy;
219977b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner    Value *One = llvm::ConstantInt::get(Int32Ty, 1);
2200578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    Value *Tmp = Builder.CreateAlloca(Int32Ty, One);
2201012614ecf78442368ec82ee30efb3bc047b413e6Ted Kremenek    Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_sse_stmxcsr),
2202012614ecf78442368ec82ee30efb3bc047b413e6Ted Kremenek                       Builder.CreateBitCast(Tmp, PtrTy));
2203e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    return Builder.CreateLoad(Tmp, "stmxcsr");
2204e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman  }
220579dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  case X86::BI__builtin_ia32_cmppd: {
220679dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson    llvm::Function *F = CGM.getIntrinsic(Intrinsic::x86_sse2_cmp_pd);
22074c7d9f1507d0f102bd4133bba63348636facd469Jay Foad    return Builder.CreateCall(F, Ops, "cmppd");
220879dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  }
220979dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson  case X86::BI__builtin_ia32_cmpsd: {
221079dcf5f96ad75259867d19bbf69512f320032fceAnders Carlsson    llvm::Function *F = CGM.getIntrinsic(Intrinsic::x86_sse2_cmp_sd);
22114c7d9f1507d0f102bd4133bba63348636facd469Jay Foad    return Builder.CreateCall(F, Ops, "cmpsd");
2212cc8b7f911892b3257e381677d0a82d43bf7b067cAnders Carlsson  }
2213e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman  case X86::BI__builtin_ia32_storehps:
2214e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman  case X86::BI__builtin_ia32_storelps: {
221577b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner    llvm::Type *PtrTy = llvm::PointerType::getUnqual(Int64Ty);
221677b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner    llvm::Type *VecTy = llvm::VectorType::get(Int64Ty, 2);
22171eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2218e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    // cast val v2i64
2219e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    Ops[1] = Builder.CreateBitCast(Ops[1], VecTy, "cast");
22201eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2221e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    // extract (0, 1)
2222e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    unsigned Index = BuiltinID == X86::BI__builtin_ia32_storelps ? 0 : 1;
222377b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner    llvm::Value *Idx = llvm::ConstantInt::get(Int32Ty, Index);
2224e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    Ops[1] = Builder.CreateExtractElement(Ops[1], Idx, "extract");
2225e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman
2226e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    // cast pointer to i64 & store
2227e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], PtrTy);
2228e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    return Builder.CreateStore(Ops[1], Ops[0]);
2229e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman  }
223028cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling  case X86::BI__builtin_ia32_palignr: {
223128cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling    unsigned shiftVal = cast<llvm::ConstantInt>(Ops[2])->getZExtValue();
223228cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling
223328cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling    // If palignr is shifting the pair of input vectors less than 9 bytes,
223428cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling    // emit a shuffle instruction.
223528cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling    if (shiftVal <= 8) {
22365f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner      SmallVector<llvm::Constant*, 8> Indices;
223728cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling      for (unsigned i = 0; i != 8; ++i)
223828cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling        Indices.push_back(llvm::ConstantInt::get(Int32Ty, shiftVal + i));
223928cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling
2240fb018d153cbf12fd2a4a278cbf7614b9a2e2835eChris Lattner      Value* SV = llvm::ConstantVector::get(Indices);
224128cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling      return Builder.CreateShuffleVector(Ops[1], Ops[0], SV, "palignr");
224228cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling    }
224328cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling
224428cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling    // If palignr is shifting the pair of input vectors more than 8 but less
224528cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling    // than 16 bytes, emit a logical right shift of the destination.
224628cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling    if (shiftVal < 16) {
224728cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling      // MMX has these as 1 x i64 vectors for some odd optimization reasons.
22482acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner      llvm::Type *VecTy = llvm::VectorType::get(Int64Ty, 1);
224928cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling
225028cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling      Ops[0] = Builder.CreateBitCast(Ops[0], VecTy, "cast");
225128cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling      Ops[1] = llvm::ConstantInt::get(VecTy, (shiftVal-8) * 8);
225228cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling
225328cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling      // create i32 constant
225428cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling      llvm::Function *F = CGM.getIntrinsic(Intrinsic::x86_mmx_psrl_q);
2255e9c0265d6e6b5bf865f4a0c2c00d00ac251e6437Frits van Bommel      return Builder.CreateCall(F, makeArrayRef(&Ops[0], 2), "palignr");
225628cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling    }
225728cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling
22585c22ad2ef6bf39da22d5190025e0ddfd4b568b2aEli Friedman    // If palignr is shifting the pair of vectors more than 16 bytes, emit zero.
225928cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling    return llvm::Constant::getNullValue(ConvertType(E->getType()));
226028cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling  }
2261c3420ffb282c6ffc0192013bf8045b6c21eddeceNate Begeman  case X86::BI__builtin_ia32_palignr128: {
2262ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman    unsigned shiftVal = cast<llvm::ConstantInt>(Ops[2])->getZExtValue();
2263ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman
2264ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman    // If palignr is shifting the pair of input vectors less than 17 bytes,
2265ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman    // emit a shuffle instruction.
2266ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman    if (shiftVal <= 16) {
22675f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner      SmallVector<llvm::Constant*, 16> Indices;
2268ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman      for (unsigned i = 0; i != 16; ++i)
226977b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner        Indices.push_back(llvm::ConstantInt::get(Int32Ty, shiftVal + i));
2270ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman
2271fb018d153cbf12fd2a4a278cbf7614b9a2e2835eChris Lattner      Value* SV = llvm::ConstantVector::get(Indices);
2272ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman      return Builder.CreateShuffleVector(Ops[1], Ops[0], SV, "palignr");
2273ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman    }
2274ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman
2275ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman    // If palignr is shifting the pair of input vectors more than 16 but less
2276ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman    // than 32 bytes, emit a logical right shift of the destination.
2277ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman    if (shiftVal < 32) {
22782acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner      llvm::Type *VecTy = llvm::VectorType::get(Int64Ty, 2);
2279ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman
2280ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman      Ops[0] = Builder.CreateBitCast(Ops[0], VecTy, "cast");
228177b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner      Ops[1] = llvm::ConstantInt::get(Int32Ty, (shiftVal-16) * 8);
2282ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman
2283ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman      // create i32 constant
2284ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman      llvm::Function *F = CGM.getIntrinsic(Intrinsic::x86_sse2_psrl_dq);
2285e9c0265d6e6b5bf865f4a0c2c00d00ac251e6437Frits van Bommel      return Builder.CreateCall(F, makeArrayRef(&Ops[0], 2), "palignr");
2286ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman    }
2287ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman
2288ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman    // If palignr is shifting the pair of vectors more than 32 bytes, emit zero.
2289ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman    return llvm::Constant::getNullValue(ConvertType(E->getType()));
229091b59274439f776cdd545bd7bf5849fdb1842160Eric Christopher  }
2291b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling  case X86::BI__builtin_ia32_movntps:
2292b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling  case X86::BI__builtin_ia32_movntpd:
2293b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling  case X86::BI__builtin_ia32_movntdq:
2294b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling  case X86::BI__builtin_ia32_movnti: {
2295b107dd02f5e365f60b036b8a27c784f2d0d0a855Bill Wendling    llvm::MDNode *Node = llvm::MDNode::get(getLLVMContext(),
2296b107dd02f5e365f60b036b8a27c784f2d0d0a855Bill Wendling                                           Builder.getInt32(1));
2297b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling
2298b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling    // Convert the type of the pointer to a pointer to the stored type.
2299b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling    Value *BC = Builder.CreateBitCast(Ops[0],
2300b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling                                llvm::PointerType::getUnqual(Ops[1]->getType()),
2301b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling                                      "cast");
2302b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling    StoreInst *SI = Builder.CreateStore(Ops[1], BC);
2303b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling    SI->setMetadata(CGM.getModule().getMDKindID("nontemporal"), Node);
2304b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling    SI->setAlignment(16);
2305b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling    return SI;
2306b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling  }
23078b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  // 3DNow!
23088b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pavgusb:
23098b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pf2id:
23108b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pfacc:
23118b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pfadd:
23128b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pfcmpeq:
23138b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pfcmpge:
23148b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pfcmpgt:
23158b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pfmax:
23168b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pfmin:
23178b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pfmul:
23188b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pfrcp:
23198b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pfrcpit1:
23208b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pfrcpit2:
23218b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pfrsqrt:
23228b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pfrsqit1:
23238b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pfrsqrtit1:
23248b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pfsub:
23258b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pfsubr:
23268b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pi2fd:
23278b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pmulhrw:
23288b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pf2iw:
23298b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pfnacc:
23308b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pfpnacc:
23318b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pi2fw:
23328b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pswapdsf:
23338b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pswapdsi: {
23348b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    const char *name = 0;
23358b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    Intrinsic::ID ID = Intrinsic::not_intrinsic;
23368b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    switch(BuiltinID) {
23378b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pavgusb:
23388b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pavgusb";
23398b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnow_pavgusb;
23408b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
23418b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pf2id:
23428b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pf2id";
23438b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnow_pf2id;
23448b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
23458b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pfacc:
23468b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pfacc";
23478b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnow_pfacc;
23488b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
23498b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pfadd:
23508b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pfadd";
23518b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnow_pfadd;
23528b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
23538b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pfcmpeq:
23548b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pfcmpeq";
23558b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnow_pfcmpeq;
23568b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
23578b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pfcmpge:
23588b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pfcmpge";
23598b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnow_pfcmpge;
23608b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
23618b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pfcmpgt:
23628b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pfcmpgt";
23638b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnow_pfcmpgt;
23648b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
23658b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pfmax:
23668b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pfmax";
23678b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnow_pfmax;
23688b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
23698b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pfmin:
23708b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pfmin";
23718b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnow_pfmin;
23728b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
23738b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pfmul:
23748b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pfmul";
23758b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnow_pfmul;
23768b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
23778b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pfrcp:
23788b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pfrcp";
23798b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnow_pfrcp;
23808b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
23818b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pfrcpit1:
23828b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pfrcpit1";
23838b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnow_pfrcpit1;
23848b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
23858b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pfrcpit2:
23868b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pfrcpit2";
23878b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnow_pfrcpit2;
23888b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
23898b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pfrsqrt:
23908b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pfrsqrt";
23918b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnow_pfrsqrt;
23928b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
23938b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pfrsqit1:
23948b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pfrsqrtit1:
23958b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pfrsqit1";
23968b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnow_pfrsqit1;
23978b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
23988b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pfsub:
23998b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pfsub";
24008b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnow_pfsub;
24018b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
24028b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pfsubr:
24038b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pfsubr";
24048b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnow_pfsubr;
24058b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
24068b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pi2fd:
24078b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pi2fd";
24088b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnow_pi2fd;
24098b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
24108b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pmulhrw:
24118b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pmulhrw";
24128b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnow_pmulhrw;
24138b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
24148b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pf2iw:
24158b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pf2iw";
24168b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnowa_pf2iw;
24178b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
24188b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pfnacc:
24198b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pfnacc";
24208b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnowa_pfnacc;
24218b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
24228b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pfpnacc:
24238b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pfpnacc";
24248b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnowa_pfpnacc;
24258b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
24268b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pi2fw:
24278b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pi2fw";
24288b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnowa_pi2fw;
24298b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
24308b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pswapdsf:
24318b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pswapdsi:
24328b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pswapd";
24338b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnowa_pswapd;
24348b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
24358b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    }
24368b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    llvm::Function *F = CGM.getIntrinsic(ID);
24374c7d9f1507d0f102bd4133bba63348636facd469Jay Foad    return Builder.CreateCall(F, Ops, name);
24388b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  }
2439564f1de67d7ba43646b8740db86d6269e3dfbe0bAnders Carlsson  }
2440564f1de67d7ba43646b8740db86d6269e3dfbe0bAnders Carlsson}
2441564f1de67d7ba43646b8740db86d6269e3dfbe0bAnders Carlsson
24429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony LinthicumValue *CodeGenFunction::EmitHexagonBuiltinExpr(unsigned BuiltinID,
24449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum                                             const CallExpr *E) {
24459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  llvm::SmallVector<Value*, 4> Ops;
24469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  for (unsigned i = 0, e = E->getNumArgs(); i != e; i++)
24489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    Ops.push_back(EmitScalarExpr(E->getArg(i)));
24499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  Intrinsic::ID ID = Intrinsic::not_intrinsic;
24519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  switch (BuiltinID) {
24539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  default: return 0;
24549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmpeq:
24569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmpeq; break;
24579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmpgt:
24599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmpgt; break;
24609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmpgtu:
24629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmpgtu; break;
24639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmpeqp:
24659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmpeqp; break;
24669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmpgtp:
24689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmpgtp; break;
24699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmpgtup:
24719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmpgtup; break;
24729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_bitsset:
24749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_bitsset; break;
24759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_bitsclr:
24779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_bitsclr; break;
24789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmpeqi:
24809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmpeqi; break;
24819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmpgti:
24839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmpgti; break;
24849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmpgtui:
24869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmpgtui; break;
24879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmpgei:
24899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmpgei; break;
24909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmpgeui:
24929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmpgeui; break;
24939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmplt:
24959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmplt; break;
24969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmpltu:
24989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmpltu; break;
24999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_bitsclri:
25019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_bitsclri; break;
25029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_and:
25049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_and; break;
25059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_or:
25079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_or; break;
25089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_xor:
25109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_xor; break;
25119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_andn:
25139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_andn; break;
25149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_not:
25169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_not; break;
25179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_orn:
25199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_orn; break;
25209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_pxfer_map:
25229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_pxfer_map; break;
25239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_any8:
25259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_any8; break;
25269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_all8:
25289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_all8; break;
25299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_vitpack:
25319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_vitpack; break;
25329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_mux:
25349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_mux; break;
25359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_muxii:
25379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_muxii; break;
25389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_muxir:
25409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_muxir; break;
25419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_muxri:
25439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_muxri; break;
25449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_vmux:
25469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_vmux; break;
25479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_mask:
25499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_mask; break;
25509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vcmpbeq:
25529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vcmpbeq; break;
25539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vcmpbgtu:
25559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vcmpbgtu; break;
25569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vcmpheq:
25589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vcmpheq; break;
25599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vcmphgt:
25619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vcmphgt; break;
25629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vcmphgtu:
25649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vcmphgtu; break;
25659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vcmpweq:
25679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vcmpweq; break;
25689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vcmpwgt:
25709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vcmpwgt; break;
25719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vcmpwgtu:
25739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vcmpwgtu; break;
25749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_tfrpr:
25769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_tfrpr; break;
25779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_tfrrp:
25799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_tfrrp; break;
25809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_hh_s0:
25829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_hh_s0; break;
25839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_hh_s1:
25859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_hh_s1; break;
25869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_hl_s0:
25889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_hl_s0; break;
25899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_hl_s1:
25919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_hl_s1; break;
25929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_lh_s0:
25949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_lh_s0; break;
25959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_lh_s1:
25979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_lh_s1; break;
25989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_ll_s0:
26009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_ll_s0; break;
26019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_ll_s1:
26039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_ll_s1; break;
26049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_hh_s0:
26069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_hh_s0; break;
26079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_hh_s1:
26099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_hh_s1; break;
26109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_hl_s0:
26129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_hl_s0; break;
26139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_hl_s1:
26159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_hl_s1; break;
26169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_lh_s0:
26189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_lh_s0; break;
26199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_lh_s1:
26219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_lh_s1; break;
26229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_ll_s0:
26249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_ll_s0; break;
26259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_ll_s1:
26279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_ll_s1; break;
26289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_sat_hh_s0:
26309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_sat_hh_s0; break;
26319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_sat_hh_s1:
26339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_sat_hh_s1; break;
26349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_sat_hl_s0:
26369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_sat_hl_s0; break;
26379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_sat_hl_s1:
26399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_sat_hl_s1; break;
26409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_sat_lh_s0:
26429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_sat_lh_s0; break;
26439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_sat_lh_s1:
26459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_sat_lh_s1; break;
26469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_sat_ll_s0:
26489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_sat_ll_s0; break;
26499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_sat_ll_s1:
26519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_sat_ll_s1; break;
26529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_sat_hh_s0:
26549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_sat_hh_s0; break;
26559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_sat_hh_s1:
26579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_sat_hh_s1; break;
26589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_sat_hl_s0:
26609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_sat_hl_s0; break;
26619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_sat_hl_s1:
26639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_sat_hl_s1; break;
26649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_sat_lh_s0:
26669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_sat_lh_s0; break;
26679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_sat_lh_s1:
26699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_sat_lh_s1; break;
26709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_sat_ll_s0:
26729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_sat_ll_s0; break;
26739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_sat_ll_s1:
26759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_sat_ll_s1; break;
26769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_hh_s0:
26789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_hh_s0; break;
26799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_hh_s1:
26819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_hh_s1; break;
26829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_hl_s0:
26849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_hl_s0; break;
26859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_hl_s1:
26879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_hl_s1; break;
26889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_lh_s0:
26909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_lh_s0; break;
26919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_lh_s1:
26939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_lh_s1; break;
26949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_ll_s0:
26969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_ll_s0; break;
26979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_ll_s1:
26999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_ll_s1; break;
27009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_hh_s0:
27029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_hh_s0; break;
27039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_hh_s1:
27059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_hh_s1; break;
27069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_hl_s0:
27089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_hl_s0; break;
27099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_hl_s1:
27119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_hl_s1; break;
27129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_lh_s0:
27149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_lh_s0; break;
27159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_lh_s1:
27179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_lh_s1; break;
27189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_ll_s0:
27209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_ll_s0; break;
27219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_ll_s1:
27239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_ll_s1; break;
27249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_rnd_hh_s0:
27269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_rnd_hh_s0; break;
27279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_rnd_hh_s1:
27299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_rnd_hh_s1; break;
27309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_rnd_hl_s0:
27329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_rnd_hl_s0; break;
27339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_rnd_hl_s1:
27359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_rnd_hl_s1; break;
27369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_rnd_lh_s0:
27389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_rnd_lh_s0; break;
27399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_rnd_lh_s1:
27419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_rnd_lh_s1; break;
27429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_rnd_ll_s0:
27449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_rnd_ll_s0; break;
27459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_rnd_ll_s1:
27479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_rnd_ll_s1; break;
27489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_rnd_hh_s0:
27509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_rnd_hh_s0; break;
27519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_rnd_hh_s1:
27539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_rnd_hh_s1; break;
27549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_rnd_hl_s0:
27569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_rnd_hl_s0; break;
27579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_rnd_hl_s1:
27599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_rnd_hl_s1; break;
27609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_rnd_lh_s0:
27629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_rnd_lh_s0; break;
27639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_rnd_lh_s1:
27659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_rnd_lh_s1; break;
27669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_rnd_ll_s0:
27689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_rnd_ll_s0; break;
27699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_rnd_ll_s1:
27719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_rnd_ll_s1; break;
27729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_acc_hh_s0:
27749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_acc_hh_s0; break;
27759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_acc_hh_s1:
27779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_acc_hh_s1; break;
27789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_acc_hl_s0:
27809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_acc_hl_s0; break;
27819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_acc_hl_s1:
27839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_acc_hl_s1; break;
27849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_acc_lh_s0:
27869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_acc_lh_s0; break;
27879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_acc_lh_s1:
27899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_acc_lh_s1; break;
27909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_acc_ll_s0:
27929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_acc_ll_s0; break;
27939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_acc_ll_s1:
27959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_acc_ll_s1; break;
27969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_nac_hh_s0:
27989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_nac_hh_s0; break;
27999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_nac_hh_s1:
28019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_nac_hh_s1; break;
28029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_nac_hl_s0:
28049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_nac_hl_s0; break;
28059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_nac_hl_s1:
28079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_nac_hl_s1; break;
28089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_nac_lh_s0:
28109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_nac_lh_s0; break;
28119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_nac_lh_s1:
28139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_nac_lh_s1; break;
28149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_nac_ll_s0:
28169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_nac_ll_s0; break;
28179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_nac_ll_s1:
28199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_nac_ll_s1; break;
28209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_hh_s0:
28229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_hh_s0; break;
28239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_hh_s1:
28259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_hh_s1; break;
28269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_hl_s0:
28289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_hl_s0; break;
28299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_hl_s1:
28319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_hl_s1; break;
28329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_lh_s0:
28349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_lh_s0; break;
28359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_lh_s1:
28379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_lh_s1; break;
28389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_ll_s0:
28409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_ll_s0; break;
28419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_ll_s1:
28439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_ll_s1; break;
28449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_rnd_hh_s0:
28469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_rnd_hh_s0; break;
28479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_rnd_hh_s1:
28499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_rnd_hh_s1; break;
28509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_rnd_hl_s0:
28529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_rnd_hl_s0; break;
28539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_rnd_hl_s1:
28559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_rnd_hl_s1; break;
28569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_rnd_lh_s0:
28589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_rnd_lh_s0; break;
28599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_rnd_lh_s1:
28619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_rnd_lh_s1; break;
28629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_rnd_ll_s0:
28649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_rnd_ll_s0; break;
28659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_rnd_ll_s1:
28679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_rnd_ll_s1; break;
28689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_acc_hh_s0:
28709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_acc_hh_s0; break;
28719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_acc_hh_s1:
28739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_acc_hh_s1; break;
28749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_acc_hl_s0:
28769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_acc_hl_s0; break;
28779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_acc_hl_s1:
28799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_acc_hl_s1; break;
28809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_acc_lh_s0:
28829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_acc_lh_s0; break;
28839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_acc_lh_s1:
28859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_acc_lh_s1; break;
28869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_acc_ll_s0:
28889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_acc_ll_s0; break;
28899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_acc_ll_s1:
28919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_acc_ll_s1; break;
28929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_nac_hh_s0:
28949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_nac_hh_s0; break;
28959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_nac_hh_s1:
28979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_nac_hh_s1; break;
28989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_nac_hl_s0:
29009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_nac_hl_s0; break;
29019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_nac_hl_s1:
29039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_nac_hl_s1; break;
29049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_nac_lh_s0:
29069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_nac_lh_s0; break;
29079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_nac_lh_s1:
29099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_nac_lh_s1; break;
29109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_nac_ll_s0:
29129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_nac_ll_s0; break;
29139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_nac_ll_s1:
29159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_nac_ll_s1; break;
29169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_hh_s0:
29189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_hh_s0; break;
29199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_hh_s1:
29219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_hh_s1; break;
29229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_hl_s0:
29249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_hl_s0; break;
29259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_hl_s1:
29279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_hl_s1; break;
29289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_lh_s0:
29309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_lh_s0; break;
29319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_lh_s1:
29339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_lh_s1; break;
29349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_ll_s0:
29369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_ll_s0; break;
29379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_ll_s1:
29399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_ll_s1; break;
29409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_acc_hh_s0:
29429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_acc_hh_s0; break;
29439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_acc_hh_s1:
29459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_acc_hh_s1; break;
29469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_acc_hl_s0:
29489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_acc_hl_s0; break;
29499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_acc_hl_s1:
29519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_acc_hl_s1; break;
29529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_acc_lh_s0:
29549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_acc_lh_s0; break;
29559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_acc_lh_s1:
29579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_acc_lh_s1; break;
29589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_acc_ll_s0:
29609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_acc_ll_s0; break;
29619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_acc_ll_s1:
29639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_acc_ll_s1; break;
29649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_nac_hh_s0:
29669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_nac_hh_s0; break;
29679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_nac_hh_s1:
29699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_nac_hh_s1; break;
29709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_nac_hl_s0:
29729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_nac_hl_s0; break;
29739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_nac_hl_s1:
29759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_nac_hl_s1; break;
29769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_nac_lh_s0:
29789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_nac_lh_s0; break;
29799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_nac_lh_s1:
29819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_nac_lh_s1; break;
29829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_nac_ll_s0:
29849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_nac_ll_s0; break;
29859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_nac_ll_s1:
29879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_nac_ll_s1; break;
29889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_hh_s0:
29909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_hh_s0; break;
29919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_hh_s1:
29939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_hh_s1; break;
29949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_hl_s0:
29969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_hl_s0; break;
29979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_hl_s1:
29999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_hl_s1; break;
30009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_lh_s0:
30029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_lh_s0; break;
30039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_lh_s1:
30059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_lh_s1; break;
30069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_ll_s0:
30089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_ll_s0; break;
30099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_ll_s1:
30119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_ll_s1; break;
30129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpysmi:
30149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpysmi; break;
30159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_macsip:
30179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_macsip; break;
30189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_macsin:
30209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_macsin; break;
30219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_dpmpyss_s0:
30239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_dpmpyss_s0; break;
30249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_dpmpyss_acc_s0:
30269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_dpmpyss_acc_s0; break;
30279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_dpmpyss_nac_s0:
30299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_dpmpyss_nac_s0; break;
30309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_dpmpyuu_s0:
30329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_dpmpyuu_s0; break;
30339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_dpmpyuu_acc_s0:
30359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_dpmpyuu_acc_s0; break;
30369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_dpmpyuu_nac_s0:
30389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_dpmpyuu_nac_s0; break;
30399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_up:
30419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_up; break;
30429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_up:
30449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_up; break;
30459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_dpmpyss_rnd_s0:
30479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_dpmpyss_rnd_s0; break;
30489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyi:
30509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyi; break;
30519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyui:
30539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyui; break;
30549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_maci:
30569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_maci; break;
30579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_acci:
30599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_acci; break;
30609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_accii:
30629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_accii; break;
30639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_nacci:
30659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_nacci; break;
30669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_naccii:
30689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_naccii; break;
30699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_subacc:
30719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_subacc; break;
30729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vmpy2s_s0:
30749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vmpy2s_s0; break;
30759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vmpy2s_s1:
30779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vmpy2s_s1; break;
30789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vmac2s_s0:
30809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vmac2s_s0; break;
30819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vmac2s_s1:
30839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vmac2s_s1; break;
30849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vmpy2s_s0pack:
30869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vmpy2s_s0pack; break;
30879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vmpy2s_s1pack:
30899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vmpy2s_s1pack; break;
30909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vmac2:
30929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vmac2; break;
30939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vmpy2es_s0:
30959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vmpy2es_s0; break;
30969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vmpy2es_s1:
30989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vmpy2es_s1; break;
30999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vmac2es_s0:
31019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vmac2es_s0; break;
31029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vmac2es_s1:
31049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vmac2es_s1; break;
31059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vmac2es:
31079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vmac2es; break;
31089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrmac_s0:
31109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrmac_s0; break;
31119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrmpy_s0:
31139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrmpy_s0; break;
31149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vdmpyrs_s0:
31169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vdmpyrs_s0; break;
31179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vdmpyrs_s1:
31199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vdmpyrs_s1; break;
31209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vdmacs_s0:
31229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vdmacs_s0; break;
31239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vdmacs_s1:
31259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vdmacs_s1; break;
31269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vdmpys_s0:
31289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vdmpys_s0; break;
31299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vdmpys_s1:
31319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vdmpys_s1; break;
31329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmpyrs_s0:
31349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmpyrs_s0; break;
31359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmpyrs_s1:
31379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmpyrs_s1; break;
31389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmpyrsc_s0:
31409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmpyrsc_s0; break;
31419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmpyrsc_s1:
31439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmpyrsc_s1; break;
31449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmacs_s0:
31469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmacs_s0; break;
31479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmacs_s1:
31499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmacs_s1; break;
31509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmacsc_s0:
31529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmacsc_s0; break;
31539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmacsc_s1:
31559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmacsc_s1; break;
31569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmpys_s0:
31589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmpys_s0; break;
31599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmpys_s1:
31619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmpys_s1; break;
31629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmpysc_s0:
31649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmpysc_s0; break;
31659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmpysc_s1:
31679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmpysc_s1; break;
31689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cnacs_s0:
31709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cnacs_s0; break;
31719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cnacs_s1:
31739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cnacs_s1; break;
31749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cnacsc_s0:
31769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cnacsc_s0; break;
31779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cnacsc_s1:
31799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cnacsc_s1; break;
31809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrcmpys_s1:
31829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrcmpys_s1; break;
31839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrcmpys_acc_s1:
31859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrcmpys_acc_s1; break;
31869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrcmpys_s1rp:
31889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrcmpys_s1rp; break;
31899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmacls_s0:
31919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmacls_s0; break;
31929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmacls_s1:
31949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmacls_s1; break;
31959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmachs_s0:
31979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmachs_s0; break;
31989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmachs_s1:
32009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmachs_s1; break;
32019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyl_s0:
32039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyl_s0; break;
32049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyl_s1:
32069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyl_s1; break;
32079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyh_s0:
32099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyh_s0; break;
32109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyh_s1:
32129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyh_s1; break;
32139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmacls_rs0:
32159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmacls_rs0; break;
32169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmacls_rs1:
32189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmacls_rs1; break;
32199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmachs_rs0:
32219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmachs_rs0; break;
32229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmachs_rs1:
32249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmachs_rs1; break;
32259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyl_rs0:
32279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyl_rs0; break;
32289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyl_rs1:
32309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyl_rs1; break;
32319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyh_rs0:
32339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyh_rs0; break;
32349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyh_rs1:
32369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyh_rs1; break;
32379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_hmmpyl_rs1:
32399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_hmmpyl_rs1; break;
32409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_hmmpyh_rs1:
32429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_hmmpyh_rs1; break;
32439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmaculs_s0:
32459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmaculs_s0; break;
32469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmaculs_s1:
32489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmaculs_s1; break;
32499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmacuhs_s0:
32519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmacuhs_s0; break;
32529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmacuhs_s1:
32549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmacuhs_s1; break;
32559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyul_s0:
32579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyul_s0; break;
32589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyul_s1:
32609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyul_s1; break;
32619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyuh_s0:
32639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyuh_s0; break;
32649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyuh_s1:
32669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyuh_s1; break;
32679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmaculs_rs0:
32699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmaculs_rs0; break;
32709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmaculs_rs1:
32729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmaculs_rs1; break;
32739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmacuhs_rs0:
32759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmacuhs_rs0; break;
32769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmacuhs_rs1:
32789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmacuhs_rs1; break;
32799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyul_rs0:
32819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyul_rs0; break;
32829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyul_rs1:
32849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyul_rs1; break;
32859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyuh_rs0:
32879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyuh_rs0; break;
32889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyuh_rs1:
32909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyuh_rs1; break;
32919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrcmaci_s0:
32939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrcmaci_s0; break;
32949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrcmacr_s0:
32969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrcmacr_s0; break;
32979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrcmaci_s0c:
32999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrcmaci_s0c; break;
33009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrcmacr_s0c:
33029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrcmacr_s0c; break;
33039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmaci_s0:
33059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmaci_s0; break;
33069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmacr_s0:
33089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmacr_s0; break;
33099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrcmpyi_s0:
33119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrcmpyi_s0; break;
33129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrcmpyr_s0:
33149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrcmpyr_s0; break;
33159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrcmpyi_s0c:
33179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrcmpyi_s0c; break;
33189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrcmpyr_s0c:
33209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrcmpyr_s0c; break;
33219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmpyi_s0:
33239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmpyi_s0; break;
33249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmpyr_s0:
33269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmpyr_s0; break;
33279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vcmpy_s0_sat_i:
33299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vcmpy_s0_sat_i; break;
33309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vcmpy_s0_sat_r:
33329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vcmpy_s0_sat_r; break;
33339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vcmpy_s1_sat_i:
33359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vcmpy_s1_sat_i; break;
33369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vcmpy_s1_sat_r:
33389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vcmpy_s1_sat_r; break;
33399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vcmac_s0_sat_i:
33419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vcmac_s0_sat_i; break;
33429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vcmac_s0_sat_r:
33449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vcmac_s0_sat_r; break;
33459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vcrotate:
33479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vcrotate; break;
33489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_add:
33509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_add; break;
33519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_sub:
33539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_sub; break;
33549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addsat:
33569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addsat; break;
33579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subsat:
33599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subsat; break;
33609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addi:
33629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addi; break;
33639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addh_l16_ll:
33659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addh_l16_ll; break;
33669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addh_l16_hl:
33689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addh_l16_hl; break;
33699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addh_l16_sat_ll:
33719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addh_l16_sat_ll; break;
33729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addh_l16_sat_hl:
33749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addh_l16_sat_hl; break;
33759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subh_l16_ll:
33779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subh_l16_ll; break;
33789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subh_l16_hl:
33809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subh_l16_hl; break;
33819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subh_l16_sat_ll:
33839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subh_l16_sat_ll; break;
33849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subh_l16_sat_hl:
33869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subh_l16_sat_hl; break;
33879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addh_h16_ll:
33899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addh_h16_ll; break;
33909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addh_h16_lh:
33929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addh_h16_lh; break;
33939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addh_h16_hl:
33959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addh_h16_hl; break;
33969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addh_h16_hh:
33989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addh_h16_hh; break;
33999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addh_h16_sat_ll:
34019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addh_h16_sat_ll; break;
34029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addh_h16_sat_lh:
34049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addh_h16_sat_lh; break;
34059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addh_h16_sat_hl:
34079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addh_h16_sat_hl; break;
34089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addh_h16_sat_hh:
34109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addh_h16_sat_hh; break;
34119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subh_h16_ll:
34139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subh_h16_ll; break;
34149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subh_h16_lh:
34169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subh_h16_lh; break;
34179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subh_h16_hl:
34199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subh_h16_hl; break;
34209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subh_h16_hh:
34229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subh_h16_hh; break;
34239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subh_h16_sat_ll:
34259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subh_h16_sat_ll; break;
34269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subh_h16_sat_lh:
34289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subh_h16_sat_lh; break;
34299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subh_h16_sat_hl:
34319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subh_h16_sat_hl; break;
34329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subh_h16_sat_hh:
34349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subh_h16_sat_hh; break;
34359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_aslh:
34379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_aslh; break;
34389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_asrh:
34409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_asrh; break;
34419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addp:
34439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addp; break;
34449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addpsat:
34469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addpsat; break;
34479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addsp:
34499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addsp; break;
34509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subp:
34529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subp; break;
34539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_neg:
34559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_neg; break;
34569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_negsat:
34589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_negsat; break;
34599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_abs:
34619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_abs; break;
34629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_abssat:
34649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_abssat; break;
34659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vconj:
34679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vconj; break;
34689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_negp:
34709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_negp; break;
34719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_absp:
34739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_absp; break;
34749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_max:
34769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_max; break;
34779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_maxu:
34799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_maxu; break;
34809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_min:
34829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_min; break;
34839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_minu:
34859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_minu; break;
34869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_maxp:
34889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_maxp; break;
34899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_maxup:
34919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_maxup; break;
34929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_minp:
34949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_minp; break;
34959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_minup:
34979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_minup; break;
34989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_tfr:
35009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_tfr; break;
35019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_tfrsi:
35039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_tfrsi; break;
35049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_tfrp:
35069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_tfrp; break;
35079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_tfrpi:
35099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_tfrpi; break;
35109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_zxtb:
35129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_zxtb; break;
35139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_sxtb:
35159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_sxtb; break;
35169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_zxth:
35189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_zxth; break;
35199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_sxth:
35219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_sxth; break;
35229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_combinew:
35249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_combinew; break;
35259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_combineii:
35279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_combineii; break;
35289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_combine_hh:
35309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_combine_hh; break;
35319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_combine_hl:
35339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_combine_hl; break;
35349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_combine_lh:
35369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_combine_lh; break;
35379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_combine_ll:
35399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_combine_ll; break;
35409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_tfril:
35429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_tfril; break;
35439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_tfrih:
35459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_tfrih; break;
35469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_and:
35489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_and; break;
35499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_or:
35519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_or; break;
35529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_xor:
35549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_xor; break;
35559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_not:
35579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_not; break;
35589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_xor_xacc:
35609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_xor_xacc; break;
35619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subri:
35639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subri; break;
35649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_andir:
35669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_andir; break;
35679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_orir:
35699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_orir; break;
35709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_andp:
35729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_andp; break;
35739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_orp:
35759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_orp; break;
35769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_xorp:
35789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_xorp; break;
35799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_notp:
35819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_notp; break;
35829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_sxtw:
35849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_sxtw; break;
35859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_sat:
35879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_sat; break;
35889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_sath:
35909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_sath; break;
35919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_satuh:
35939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_satuh; break;
35949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_satub:
35969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_satub; break;
35979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_satb:
35999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_satb; break;
36009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vaddub:
36029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vaddub; break;
36039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vaddubs:
36059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vaddubs; break;
36069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vaddh:
36089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vaddh; break;
36099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vaddhs:
36119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vaddhs; break;
36129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vadduhs:
36149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vadduhs; break;
36159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vaddw:
36179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vaddw; break;
36189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vaddws:
36209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vaddws; break;
36219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_svavgh:
36239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_svavgh; break;
36249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_svavghs:
36269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_svavghs; break;
36279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_svnavgh:
36299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_svnavgh; break;
36309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_svaddh:
36329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_svaddh; break;
36339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_svaddhs:
36359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_svaddhs; break;
36369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_svadduhs:
36389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_svadduhs; break;
36399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_svsubh:
36419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_svsubh; break;
36429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_svsubhs:
36449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_svsubhs; break;
36459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_svsubuhs:
36479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_svsubuhs; break;
36489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vraddub:
36509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vraddub; break;
36519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vraddub_acc:
36539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vraddub_acc; break;
36549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vradduh:
36569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vradduh; break;
36579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vsubub:
36599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vsubub; break;
36609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vsububs:
36629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vsububs; break;
36639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vsubh:
36659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vsubh; break;
36669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vsubhs:
36689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vsubhs; break;
36699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vsubuhs:
36719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vsubuhs; break;
36729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vsubw:
36749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vsubw; break;
36759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vsubws:
36779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vsubws; break;
36789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vabsh:
36809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vabsh; break;
36819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vabshsat:
36839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vabshsat; break;
36849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vabsw:
36869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vabsw; break;
36879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vabswsat:
36899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vabswsat; break;
36909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vabsdiffw:
36929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vabsdiffw; break;
36939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vabsdiffh:
36959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vabsdiffh; break;
36969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vrsadub:
36989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vrsadub; break;
36999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vrsadub_acc:
37019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vrsadub_acc; break;
37029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vavgub:
37049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vavgub; break;
37059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vavguh:
37079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vavguh; break;
37089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vavgh:
37109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vavgh; break;
37119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vnavgh:
37139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vnavgh; break;
37149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vavgw:
37169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vavgw; break;
37179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vnavgw:
37199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vnavgw; break;
37209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vavgwr:
37229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vavgwr; break;
37239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vnavgwr:
37259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vnavgwr; break;
37269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vavgwcr:
37289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vavgwcr; break;
37299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vnavgwcr:
37319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vnavgwcr; break;
37329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vavghcr:
37349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vavghcr; break;
37359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vnavghcr:
37379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vnavghcr; break;
37389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vavguw:
37409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vavguw; break;
37419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vavguwr:
37439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vavguwr; break;
37449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vavgubr:
37469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vavgubr; break;
37479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vavguhr:
37499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vavguhr; break;
37509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vavghr:
37529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vavghr; break;
37539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vnavghr:
37559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vnavghr; break;
37569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vminh:
37589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vminh; break;
37599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vmaxh:
37619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vmaxh; break;
37629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vminub:
37649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vminub; break;
37659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vmaxub:
37679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vmaxub; break;
37689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vminuh:
37709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vminuh; break;
37719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vmaxuh:
37739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vmaxuh; break;
37749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vminw:
37769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vminw; break;
37779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vmaxw:
37799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vmaxw; break;
37809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vminuw:
37829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vminuw; break;
37839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vmaxuw:
37859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vmaxuw; break;
37869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_r:
37889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_r; break;
37899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_r:
37919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_r; break;
37929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_r_r:
37949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_r_r; break;
37959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsl_r_r:
37979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsl_r_r; break;
37989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_p:
38009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_p; break;
38019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_p:
38039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_p; break;
38049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_r_p:
38069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_r_p; break;
38079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsl_r_p:
38099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsl_r_p; break;
38109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_r_acc:
38129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_r_acc; break;
38139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_r_acc:
38159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_r_acc; break;
38169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_r_r_acc:
38189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_r_r_acc; break;
38199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsl_r_r_acc:
38219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsl_r_r_acc; break;
38229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_p_acc:
38249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_p_acc; break;
38259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_p_acc:
38279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_p_acc; break;
38289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_r_p_acc:
38309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_r_p_acc; break;
38319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsl_r_p_acc:
38339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsl_r_p_acc; break;
38349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_r_nac:
38369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_r_nac; break;
38379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_r_nac:
38399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_r_nac; break;
38409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_r_r_nac:
38429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_r_r_nac; break;
38439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsl_r_r_nac:
38459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsl_r_r_nac; break;
38469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_p_nac:
38489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_p_nac; break;
38499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_p_nac:
38519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_p_nac; break;
38529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_r_p_nac:
38549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_r_p_nac; break;
38559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsl_r_p_nac:
38579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsl_r_p_nac; break;
38589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_r_and:
38609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_r_and; break;
38619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_r_and:
38639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_r_and; break;
38649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_r_r_and:
38669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_r_r_and; break;
38679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsl_r_r_and:
38699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsl_r_r_and; break;
38709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_r_or:
38729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_r_or; break;
38739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_r_or:
38759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_r_or; break;
38769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_r_r_or:
38789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_r_r_or; break;
38799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsl_r_r_or:
38819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsl_r_r_or; break;
38829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_p_and:
38849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_p_and; break;
38859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_p_and:
38879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_p_and; break;
38889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_r_p_and:
38909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_r_p_and; break;
38919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsl_r_p_and:
38939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsl_r_p_and; break;
38949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_p_or:
38969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_p_or; break;
38979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_p_or:
38999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_p_or; break;
39009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_r_p_or:
39029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_r_p_or; break;
39039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsl_r_p_or:
39059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsl_r_p_or; break;
39069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_r_sat:
39089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_r_sat; break;
39099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_r_sat:
39119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_r_sat; break;
39129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_r:
39149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_r; break;
39159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_r:
39179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_r; break;
39189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_r:
39209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_r; break;
39219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_p:
39239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_p; break;
39249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_p:
39269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_p; break;
39279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_p:
39299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_p; break;
39309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_r_acc:
39329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_r_acc; break;
39339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_r_acc:
39359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_r_acc; break;
39369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_r_acc:
39389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_r_acc; break;
39399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_p_acc:
39419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_p_acc; break;
39429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_p_acc:
39449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_p_acc; break;
39459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_p_acc:
39479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_p_acc; break;
39489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_r_nac:
39509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_r_nac; break;
39519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_r_nac:
39539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_r_nac; break;
39549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_r_nac:
39569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_r_nac; break;
39579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_p_nac:
39599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_p_nac; break;
39609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_p_nac:
39629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_p_nac; break;
39639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_p_nac:
39659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_p_nac; break;
39669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_r_xacc:
39689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_r_xacc; break;
39699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_r_xacc:
39719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_r_xacc; break;
39729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_p_xacc:
39749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_p_xacc; break;
39759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_p_xacc:
39779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_p_xacc; break;
39789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_r_and:
39809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_r_and; break;
39819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_r_and:
39839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_r_and; break;
39849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_r_and:
39869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_r_and; break;
39879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_r_or:
39899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_r_or; break;
39909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_r_or:
39929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_r_or; break;
39939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_r_or:
39959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_r_or; break;
39969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_p_and:
39989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_p_and; break;
39999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_p_and:
40019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_p_and; break;
40029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_p_and:
40049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_p_and; break;
40059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_p_or:
40079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_p_or; break;
40089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_p_or:
40109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_p_or; break;
40119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_p_or:
40139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_p_or; break;
40149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_r_sat:
40169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_r_sat; break;
40179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_r_rnd:
40199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_r_rnd; break;
40209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_r_rnd_goodsyntax:
40229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_r_rnd_goodsyntax; break;
40239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_addasl_rrri:
40259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_addasl_rrri; break;
40269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_valignib:
40289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_valignib; break;
40299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_valignrb:
40319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_valignrb; break;
40329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vspliceib:
40349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vspliceib; break;
40359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsplicerb:
40379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsplicerb; break;
40389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsplatrh:
40409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsplatrh; break;
40419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsplatrb:
40439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsplatrb; break;
40449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_insert:
40469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_insert; break;
40479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_tableidxb_goodsyntax:
40499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_tableidxb_goodsyntax; break;
40509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_tableidxh_goodsyntax:
40529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_tableidxh_goodsyntax; break;
40539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_tableidxw_goodsyntax:
40559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_tableidxw_goodsyntax; break;
40569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_tableidxd_goodsyntax:
40589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_tableidxd_goodsyntax; break;
40599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_extractu:
40619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_extractu; break;
40629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_insertp:
40649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_insertp; break;
40659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_extractup:
40679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_extractup; break;
40689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_insert_rp:
40709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_insert_rp; break;
40719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_extractu_rp:
40739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_extractu_rp; break;
40749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_insertp_rp:
40769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_insertp_rp; break;
40779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_extractup_rp:
40799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_extractup_rp; break;
40809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_tstbit_i:
40829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_tstbit_i; break;
40839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_setbit_i:
40859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_setbit_i; break;
40869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_togglebit_i:
40889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_togglebit_i; break;
40899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_clrbit_i:
40919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_clrbit_i; break;
40929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_tstbit_r:
40949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_tstbit_r; break;
40959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_setbit_r:
40979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_setbit_r; break;
40989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_togglebit_r:
41009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_togglebit_r; break;
41019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_clrbit_r:
41039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_clrbit_r; break;
41049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_vh:
41069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_vh; break;
41079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_vh:
41099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_vh; break;
41109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_vh:
41129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_vh; break;
41139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_vh:
41159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_vh; break;
41169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_vh:
41189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_vh; break;
41199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_r_vh:
41219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_r_vh; break;
41229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsl_r_vh:
41249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsl_r_vh; break;
41259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_vw:
41279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_vw; break;
41289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_svw_trun:
41309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_svw_trun; break;
41319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_svw_trun:
41339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_svw_trun; break;
41349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_vw:
41369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_vw; break;
41379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_vw:
41399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_vw; break;
41409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_vw:
41429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_vw; break;
41439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_vw:
41459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_vw; break;
41469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_r_vw:
41489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_r_vw; break;
41499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsl_r_vw:
41519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsl_r_vw; break;
41529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vrndpackwh:
41549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vrndpackwh; break;
41559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vrndpackwhs:
41579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vrndpackwhs; break;
41589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsxtbh:
41609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsxtbh; break;
41619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vzxtbh:
41639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vzxtbh; break;
41649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsathub:
41669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsathub; break;
41679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_svsathub:
41699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_svsathub; break;
41709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_svsathb:
41729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_svsathb; break;
41739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsathb:
41759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsathb; break;
41769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vtrunohb:
41789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vtrunohb; break;
41799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vtrunewh:
41819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vtrunewh; break;
41829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vtrunowh:
41849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vtrunowh; break;
41859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vtrunehb:
41879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vtrunehb; break;
41889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsxthw:
41909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsxthw; break;
41919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vzxthw:
41939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vzxthw; break;
41949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsatwh:
41969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsatwh; break;
41979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsatwuh:
41999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsatwuh; break;
42009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_packhl:
42029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_packhl; break;
42039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_swiz:
42059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_swiz; break;
42069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsathub_nopack:
42089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsathub_nopack; break;
42099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsathb_nopack:
42119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsathb_nopack; break;
42129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsatwh_nopack:
42149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsatwh_nopack; break;
42159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsatwuh_nopack:
42179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsatwuh_nopack; break;
42189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_shuffob:
42209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_shuffob; break;
42219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_shuffeb:
42239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_shuffeb; break;
42249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_shuffoh:
42269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_shuffoh; break;
42279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_shuffeh:
42299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_shuffeh; break;
42309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_parityp:
42329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_parityp; break;
42339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lfsp:
42359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lfsp; break;
42369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_clbnorm:
42389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_clbnorm; break;
42399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_clb:
42419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_clb; break;
42429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_cl0:
42449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_cl0; break;
42459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_cl1:
42479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_cl1; break;
42489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_clbp:
42509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_clbp; break;
42519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_cl0p:
42539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_cl0p; break;
42549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_cl1p:
42569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_cl1p; break;
42579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_brev:
42599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_brev; break;
42609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_ct0:
42629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_ct0; break;
42639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_ct1:
42659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_ct1; break;
42669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_interleave:
42689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_interleave; break;
42699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_deinterleave:
42719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_deinterleave; break;
42729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_SI_to_SXTHI_asrh:
42749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_SI_to_SXTHI_asrh; break;
42759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_orn:
42779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_orn; break;
42789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_andn:
42809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_andn; break;
42819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_ornp:
42839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_ornp; break;
42849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_andnp:
42869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_andnp; break;
42879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_combineir:
42899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_combineir; break;
42909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_combineri:
42929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_combineri; break;
42939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_cmpneqi:
42959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_cmpneqi; break;
42969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_cmpneq:
42989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_cmpneq; break;
42999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_cmpltei:
43019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_cmpltei; break;
43029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_cmplte:
43049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_cmplte; break;
43059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_cmplteui:
43079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_cmplteui; break;
43089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_cmplteu:
43109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_cmplteu; break;
43119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_rcmpneq:
43139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_rcmpneq; break;
43149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_rcmpneqi:
43169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_rcmpneqi; break;
43179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_rcmpeq:
43199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_rcmpeq; break;
43209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_rcmpeqi:
43229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_rcmpeqi; break;
43239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_fastcorner9:
43259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_fastcorner9; break;
43269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_fastcorner9_not:
43289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_fastcorner9_not; break;
43299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_and_andn:
43319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_and_andn; break;
43329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_and_and:
43349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_and_and; break;
43359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_and_orn:
43379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_and_orn; break;
43389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_and_or:
43409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_and_or; break;
43419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_or_andn:
43439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_or_andn; break;
43449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_or_and:
43469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_or_and; break;
43479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_or_orn:
43499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_or_orn; break;
43509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_or_or:
43529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_or_or; break;
43539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S4_addaddi:
43559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S4_addaddi; break;
43569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S4_subaddi:
43589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S4_subaddi; break;
43599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M4_xor_xacc:
43619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M4_xor_xacc; break;
43629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M4_and_and:
43649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M4_and_and; break;
43659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M4_and_or:
43679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M4_and_or; break;
43689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M4_and_xor:
43709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M4_and_xor; break;
43719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M4_and_andn:
43739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M4_and_andn; break;
43749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M4_xor_and:
43769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M4_xor_and; break;
43779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M4_xor_or:
43799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M4_xor_or; break;
43809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M4_xor_andn:
43829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M4_xor_andn; break;
43839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M4_or_and:
43859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M4_or_and; break;
43869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M4_or_or:
43889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M4_or_or; break;
43899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M4_or_xor:
43919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M4_or_xor; break;
43929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M4_or_andn:
43949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M4_or_andn; break;
43959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S4_or_andix:
43979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S4_or_andix; break;
43989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S4_or_andi:
44009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S4_or_andi; break;
44019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
44029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S4_or_ori:
44039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S4_or_ori; break;
44049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
44059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_modwrapu:
44069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_modwrapu; break;
44079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
44089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_cround_rr:
44099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_cround_rr; break;
44109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
44119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_round_ri:
44129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_round_ri; break;
44139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
44149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_round_rr:
44159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_round_rr; break;
44169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
44179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_round_ri_sat:
44189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_round_ri_sat; break;
44199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
44209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_round_rr_sat:
44219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_round_rr_sat; break;
44229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
44239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  }
44249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
44259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  llvm::Function *F = CGM.getIntrinsic(ID);
44269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  return Builder.CreateCall(F, Ops, "");
44279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum}
44289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
44291eb4433ac451dc16f4133a88af2d002ac26c58efMike StumpValue *CodeGenFunction::EmitPPCBuiltinExpr(unsigned BuiltinID,
44301feedd84221e8dbcc3faf3de27cc42b559db845dChris Lattner                                           const CallExpr *E) {
44315f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner  SmallVector<Value*, 4> Ops;
4432dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner
4433dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  for (unsigned i = 0, e = E->getNumArgs(); i != e; i++)
4434dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner    Ops.push_back(EmitScalarExpr(E->getArg(i)));
4435dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner
4436dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  Intrinsic::ID ID = Intrinsic::not_intrinsic;
4437dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner
4438dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  switch (BuiltinID) {
4439dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  default: return 0;
4440dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner
44414d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov  // vec_ld, vec_lvsl, vec_lvsr
44424d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov  case PPC::BI__builtin_altivec_lvx:
44434d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov  case PPC::BI__builtin_altivec_lvxl:
44444d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov  case PPC::BI__builtin_altivec_lvebx:
44454d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov  case PPC::BI__builtin_altivec_lvehx:
44464d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov  case PPC::BI__builtin_altivec_lvewx:
44474d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov  case PPC::BI__builtin_altivec_lvsl:
44484d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov  case PPC::BI__builtin_altivec_lvsr:
44494d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov  {
4450d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    Ops[1] = Builder.CreateBitCast(Ops[1], Int8PtrTy);
44514d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov
4452578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    Ops[0] = Builder.CreateGEP(Ops[1], Ops[0]);
44534d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov    Ops.pop_back();
44544d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov
44554d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov    switch (BuiltinID) {
4456b219cfc4d75f0a03630b7c4509ef791b7e97b2c8David Blaikie    default: llvm_unreachable("Unsupported ld/lvsl/lvsr intrinsic!");
44574d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov    case PPC::BI__builtin_altivec_lvx:
44584d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      ID = Intrinsic::ppc_altivec_lvx;
44594d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      break;
44604d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov    case PPC::BI__builtin_altivec_lvxl:
44614d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      ID = Intrinsic::ppc_altivec_lvxl;
44624d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      break;
44634d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov    case PPC::BI__builtin_altivec_lvebx:
44644d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      ID = Intrinsic::ppc_altivec_lvebx;
44654d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      break;
44664d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov    case PPC::BI__builtin_altivec_lvehx:
44674d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      ID = Intrinsic::ppc_altivec_lvehx;
44684d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      break;
44694d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov    case PPC::BI__builtin_altivec_lvewx:
44704d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      ID = Intrinsic::ppc_altivec_lvewx;
44714d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      break;
44724d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov    case PPC::BI__builtin_altivec_lvsl:
44734d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      ID = Intrinsic::ppc_altivec_lvsl;
44744d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      break;
44754d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov    case PPC::BI__builtin_altivec_lvsr:
44764d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      ID = Intrinsic::ppc_altivec_lvsr;
44774d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      break;
44784d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov    }
44794d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov    llvm::Function *F = CGM.getIntrinsic(ID);
44804c7d9f1507d0f102bd4133bba63348636facd469Jay Foad    return Builder.CreateCall(F, Ops, "");
44814d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov  }
44824d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov
4483dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  // vec_st
4484dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  case PPC::BI__builtin_altivec_stvx:
4485dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  case PPC::BI__builtin_altivec_stvxl:
4486dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  case PPC::BI__builtin_altivec_stvebx:
4487dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  case PPC::BI__builtin_altivec_stvehx:
4488dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  case PPC::BI__builtin_altivec_stvewx:
4489dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  {
4490d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    Ops[2] = Builder.CreateBitCast(Ops[2], Int8PtrTy);
4491578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    Ops[1] = Builder.CreateGEP(Ops[2], Ops[1]);
4492dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner    Ops.pop_back();
4493dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner
4494dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner    switch (BuiltinID) {
4495b219cfc4d75f0a03630b7c4509ef791b7e97b2c8David Blaikie    default: llvm_unreachable("Unsupported st intrinsic!");
4496dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner    case PPC::BI__builtin_altivec_stvx:
4497dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner      ID = Intrinsic::ppc_altivec_stvx;
4498dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner      break;
4499dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner    case PPC::BI__builtin_altivec_stvxl:
4500dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner      ID = Intrinsic::ppc_altivec_stvxl;
4501dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner      break;
4502dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner    case PPC::BI__builtin_altivec_stvebx:
4503dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner      ID = Intrinsic::ppc_altivec_stvebx;
4504dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner      break;
4505dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner    case PPC::BI__builtin_altivec_stvehx:
4506dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner      ID = Intrinsic::ppc_altivec_stvehx;
4507dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner      break;
4508dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner    case PPC::BI__builtin_altivec_stvewx:
4509dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner      ID = Intrinsic::ppc_altivec_stvewx;
4510dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner      break;
4511dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner    }
4512dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner    llvm::Function *F = CGM.getIntrinsic(ID);
45134c7d9f1507d0f102bd4133bba63348636facd469Jay Foad    return Builder.CreateCall(F, Ops, "");
4514dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  }
4515dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  }
4516b0b84385f0cb0ea4036579f5f384f1c19b917c7eDaniel Dunbar  return 0;
45171eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump}
4518