CGBuiltin.cpp revision 2c39d71bb7cefdfe6116fa52454f3b3dc5abd517
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"
19bef20ac367a09555b30d6eb3847a81ec164caf88Chris Lattner#include "clang/AST/ASTContext.h"
20c4a1dea2dc56bd1357ec91b829a0b9e68229a13eDaniel Dunbar#include "clang/AST/Decl.h"
216b15cdc1312f8fc45c86ee75e2a85106700e97f6Chris Lattner#include "clang/Basic/TargetBuiltins.h"
22793680ed8104bf088d1b382b963a8badcb3f07deAnders Carlsson#include "llvm/Intrinsics.h"
23d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall#include "llvm/Target/TargetData.h"
24558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak
25022012e6e5626c3372e1a5493c0929dfc1fa9e47Anders Carlssonusing namespace clang;
26022012e6e5626c3372e1a5493c0929dfc1fa9e47Anders Carlssonusing namespace CodeGen;
27ca6fcfad547dcec3fdd17790b4fab0918df74b37Anders Carlssonusing namespace llvm;
28ca6fcfad547dcec3fdd17790b4fab0918df74b37Anders Carlsson
29a45680b7e7c49ea9893c6cff585984f3e4120366John McCall/// getBuiltinLibFunction - Given a builtin id for a function like
30a45680b7e7c49ea9893c6cff585984f3e4120366John McCall/// "__builtin_fabsf", return a Function* for "fabsf".
31a45680b7e7c49ea9893c6cff585984f3e4120366John McCallllvm::Value *CodeGenModule::getBuiltinLibFunction(const FunctionDecl *FD,
32a45680b7e7c49ea9893c6cff585984f3e4120366John McCall                                                  unsigned BuiltinID) {
33a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  assert(Context.BuiltinInfo.isLibFunction(BuiltinID));
34a45680b7e7c49ea9893c6cff585984f3e4120366John McCall
35a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  // Get the name, skip over the __builtin_ prefix (if necessary).
36a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  StringRef Name;
37a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  GlobalDecl D(FD);
38a45680b7e7c49ea9893c6cff585984f3e4120366John McCall
39a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  // If the builtin has been declared explicitly with an assembler label,
40a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  // use the mangled name. This differs from the plain label on platforms
41a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  // that prefix labels.
42a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  if (FD->hasAttr<AsmLabelAttr>())
43a45680b7e7c49ea9893c6cff585984f3e4120366John McCall    Name = getMangledName(D);
44a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  else
45a45680b7e7c49ea9893c6cff585984f3e4120366John McCall    Name = Context.BuiltinInfo.GetName(BuiltinID) + 10;
46a45680b7e7c49ea9893c6cff585984f3e4120366John McCall
47a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  llvm::FunctionType *Ty =
48a45680b7e7c49ea9893c6cff585984f3e4120366John McCall    cast<llvm::FunctionType>(getTypes().ConvertType(FD->getType()));
49a45680b7e7c49ea9893c6cff585984f3e4120366John McCall
50a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  return GetOrCreateLLVMFunction(Name, Ty, D, /*ForVTable=*/false);
51a45680b7e7c49ea9893c6cff585984f3e4120366John McCall}
52a45680b7e7c49ea9893c6cff585984f3e4120366John McCall
5326815d97c5743481e317f17a8d53a6819d061862John McCall/// Emit the conversions required to turn the given value into an
5426815d97c5743481e317f17a8d53a6819d061862John McCall/// integer of the given size.
5526815d97c5743481e317f17a8d53a6819d061862John McCallstatic Value *EmitToInt(CodeGenFunction &CGF, llvm::Value *V,
562acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner                        QualType T, llvm::IntegerType *IntType) {
5726815d97c5743481e317f17a8d53a6819d061862John McCall  V = CGF.EmitToMemory(V, T);
5826815d97c5743481e317f17a8d53a6819d061862John McCall
5926815d97c5743481e317f17a8d53a6819d061862John McCall  if (V->getType()->isPointerTy())
6026815d97c5743481e317f17a8d53a6819d061862John McCall    return CGF.Builder.CreatePtrToInt(V, IntType);
6126815d97c5743481e317f17a8d53a6819d061862John McCall
6226815d97c5743481e317f17a8d53a6819d061862John McCall  assert(V->getType() == IntType);
6326815d97c5743481e317f17a8d53a6819d061862John McCall  return V;
64db4325b098eff5e9e660db19f0148423fb21f27fChandler Carruth}
65db4325b098eff5e9e660db19f0148423fb21f27fChandler Carruth
6626815d97c5743481e317f17a8d53a6819d061862John McCallstatic Value *EmitFromInt(CodeGenFunction &CGF, llvm::Value *V,
672acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner                          QualType T, llvm::Type *ResultType) {
6826815d97c5743481e317f17a8d53a6819d061862John McCall  V = CGF.EmitFromMemory(V, T);
6926815d97c5743481e317f17a8d53a6819d061862John McCall
7026815d97c5743481e317f17a8d53a6819d061862John McCall  if (ResultType->isPointerTy())
7126815d97c5743481e317f17a8d53a6819d061862John McCall    return CGF.Builder.CreateIntToPtr(V, ResultType);
7226815d97c5743481e317f17a8d53a6819d061862John McCall
7326815d97c5743481e317f17a8d53a6819d061862John McCall  assert(V->getType() == ResultType);
7426815d97c5743481e317f17a8d53a6819d061862John McCall  return V;
75db4325b098eff5e9e660db19f0148423fb21f27fChandler Carruth}
76db4325b098eff5e9e660db19f0148423fb21f27fChandler Carruth
770002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar/// Utility to insert an atomic instruction based on Instrinsic::ID
780002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar/// and the expression node.
79cb61a7bbe635cfa941b1aeaaa1fbda1bf900ee51Daniel Dunbarstatic RValue EmitBinaryAtomic(CodeGenFunction &CGF,
80c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman                               llvm::AtomicRMWInst::BinOp Kind,
81c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman                               const CallExpr *E) {
8226815d97c5743481e317f17a8d53a6819d061862John McCall  QualType T = E->getType();
8326815d97c5743481e317f17a8d53a6819d061862John McCall  assert(E->getArg(0)->getType()->isPointerType());
8426815d97c5743481e317f17a8d53a6819d061862John McCall  assert(CGF.getContext().hasSameUnqualifiedType(T,
8526815d97c5743481e317f17a8d53a6819d061862John McCall                                  E->getArg(0)->getType()->getPointeeType()));
8626815d97c5743481e317f17a8d53a6819d061862John McCall  assert(CGF.getContext().hasSameUnqualifiedType(T, E->getArg(1)->getType()));
8726815d97c5743481e317f17a8d53a6819d061862John McCall
884f209445c06a43283c6f72dda7c925538b1578e9Chris Lattner  llvm::Value *DestPtr = CGF.EmitScalarExpr(E->getArg(0));
894f209445c06a43283c6f72dda7c925538b1578e9Chris Lattner  unsigned AddrSpace =
904f209445c06a43283c6f72dda7c925538b1578e9Chris Lattner    cast<llvm::PointerType>(DestPtr->getType())->getAddressSpace();
9126815d97c5743481e317f17a8d53a6819d061862John McCall
929cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner  llvm::IntegerType *IntType =
93db4325b098eff5e9e660db19f0148423fb21f27fChandler Carruth    llvm::IntegerType::get(CGF.getLLVMContext(),
9426815d97c5743481e317f17a8d53a6819d061862John McCall                           CGF.getContext().getTypeSize(T));
959cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner  llvm::Type *IntPtrType = IntType->getPointerTo(AddrSpace);
9626815d97c5743481e317f17a8d53a6819d061862John McCall
9726815d97c5743481e317f17a8d53a6819d061862John McCall  llvm::Value *Args[2];
9826815d97c5743481e317f17a8d53a6819d061862John McCall  Args[0] = CGF.Builder.CreateBitCast(DestPtr, IntPtrType);
9926815d97c5743481e317f17a8d53a6819d061862John McCall  Args[1] = CGF.EmitScalarExpr(E->getArg(1));
1002acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner  llvm::Type *ValueType = Args[1]->getType();
10126815d97c5743481e317f17a8d53a6819d061862John McCall  Args[1] = EmitToInt(CGF, Args[1], T, IntType);
10226815d97c5743481e317f17a8d53a6819d061862John McCall
103c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman  llvm::Value *Result =
104c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman      CGF.Builder.CreateAtomicRMW(Kind, Args[0], Args[1],
105c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman                                  llvm::SequentiallyConsistent);
10626815d97c5743481e317f17a8d53a6819d061862John McCall  Result = EmitFromInt(CGF, Result, T, ValueType);
10726815d97c5743481e317f17a8d53a6819d061862John McCall  return RValue::get(Result);
1080002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar}
1090002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar
1100002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar/// Utility to insert an atomic instruction based Instrinsic::ID and
11126815d97c5743481e317f17a8d53a6819d061862John McCall/// the expression node, where the return value is the result of the
11226815d97c5743481e317f17a8d53a6819d061862John McCall/// operation.
113420b11850d3f4557421f43f519b59d528329c668Chris Lattnerstatic RValue EmitBinaryAtomicPost(CodeGenFunction &CGF,
114c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman                                   llvm::AtomicRMWInst::BinOp Kind,
115c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman                                   const CallExpr *E,
1160002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar                                   Instruction::BinaryOps Op) {
11726815d97c5743481e317f17a8d53a6819d061862John McCall  QualType T = E->getType();
11826815d97c5743481e317f17a8d53a6819d061862John McCall  assert(E->getArg(0)->getType()->isPointerType());
11926815d97c5743481e317f17a8d53a6819d061862John McCall  assert(CGF.getContext().hasSameUnqualifiedType(T,
12026815d97c5743481e317f17a8d53a6819d061862John McCall                                  E->getArg(0)->getType()->getPointeeType()));
12126815d97c5743481e317f17a8d53a6819d061862John McCall  assert(CGF.getContext().hasSameUnqualifiedType(T, E->getArg(1)->getType()));
12226815d97c5743481e317f17a8d53a6819d061862John McCall
1234f209445c06a43283c6f72dda7c925538b1578e9Chris Lattner  llvm::Value *DestPtr = CGF.EmitScalarExpr(E->getArg(0));
1244f209445c06a43283c6f72dda7c925538b1578e9Chris Lattner  unsigned AddrSpace =
1254f209445c06a43283c6f72dda7c925538b1578e9Chris Lattner    cast<llvm::PointerType>(DestPtr->getType())->getAddressSpace();
12626815d97c5743481e317f17a8d53a6819d061862John McCall
1279cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner  llvm::IntegerType *IntType =
128db4325b098eff5e9e660db19f0148423fb21f27fChandler Carruth    llvm::IntegerType::get(CGF.getLLVMContext(),
12926815d97c5743481e317f17a8d53a6819d061862John McCall                           CGF.getContext().getTypeSize(T));
1309cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner  llvm::Type *IntPtrType = IntType->getPointerTo(AddrSpace);
13126815d97c5743481e317f17a8d53a6819d061862John McCall
13226815d97c5743481e317f17a8d53a6819d061862John McCall  llvm::Value *Args[2];
13326815d97c5743481e317f17a8d53a6819d061862John McCall  Args[1] = CGF.EmitScalarExpr(E->getArg(1));
1342acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner  llvm::Type *ValueType = Args[1]->getType();
13526815d97c5743481e317f17a8d53a6819d061862John McCall  Args[1] = EmitToInt(CGF, Args[1], T, IntType);
13626815d97c5743481e317f17a8d53a6819d061862John McCall  Args[0] = CGF.Builder.CreateBitCast(DestPtr, IntPtrType);
13726815d97c5743481e317f17a8d53a6819d061862John McCall
138c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman  llvm::Value *Result =
139c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman      CGF.Builder.CreateAtomicRMW(Kind, Args[0], Args[1],
140c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman                                  llvm::SequentiallyConsistent);
14126815d97c5743481e317f17a8d53a6819d061862John McCall  Result = CGF.Builder.CreateBinOp(Op, Result, Args[1]);
14226815d97c5743481e317f17a8d53a6819d061862John McCall  Result = EmitFromInt(CGF, Result, T, ValueType);
14326815d97c5743481e317f17a8d53a6819d061862John McCall  return RValue::get(Result);
1441ffe281890f3cd7728316b45a1f3dd4d3120af7bMon P Wang}
1451ffe281890f3cd7728316b45a1f3dd4d3120af7bMon P Wang
146420b11850d3f4557421f43f519b59d528329c668Chris Lattner/// EmitFAbs - Emit a call to fabs/fabsf/fabsl, depending on the type of ValTy,
147420b11850d3f4557421f43f519b59d528329c668Chris Lattner/// which must be a scalar floating point type.
148420b11850d3f4557421f43f519b59d528329c668Chris Lattnerstatic Value *EmitFAbs(CodeGenFunction &CGF, Value *V, QualType ValTy) {
149420b11850d3f4557421f43f519b59d528329c668Chris Lattner  const BuiltinType *ValTyP = ValTy->getAs<BuiltinType>();
150420b11850d3f4557421f43f519b59d528329c668Chris Lattner  assert(ValTyP && "isn't scalar fp type!");
151420b11850d3f4557421f43f519b59d528329c668Chris Lattner
152420b11850d3f4557421f43f519b59d528329c668Chris Lattner  StringRef FnName;
153420b11850d3f4557421f43f519b59d528329c668Chris Lattner  switch (ValTyP->getKind()) {
154b219cfc4d75f0a03630b7c4509ef791b7e97b2c8David Blaikie  default: llvm_unreachable("Isn't a scalar fp type!");
155420b11850d3f4557421f43f519b59d528329c668Chris Lattner  case BuiltinType::Float:      FnName = "fabsf"; break;
156420b11850d3f4557421f43f519b59d528329c668Chris Lattner  case BuiltinType::Double:     FnName = "fabs"; break;
157420b11850d3f4557421f43f519b59d528329c668Chris Lattner  case BuiltinType::LongDouble: FnName = "fabsl"; break;
158420b11850d3f4557421f43f519b59d528329c668Chris Lattner  }
159420b11850d3f4557421f43f519b59d528329c668Chris Lattner
160420b11850d3f4557421f43f519b59d528329c668Chris Lattner  // The prototype is something that takes and returns whatever V's type is.
161da549e8995c447542d5631b8b67fcc3a9582797aJay Foad  llvm::FunctionType *FT = llvm::FunctionType::get(V->getType(), V->getType(),
16295d318c4c10437db40ca6e15fdf32e04012da58eBenjamin Kramer                                                   false);
163420b11850d3f4557421f43f519b59d528329c668Chris Lattner  llvm::Value *Fn = CGF.CGM.CreateRuntimeFunction(FT, FnName);
164420b11850d3f4557421f43f519b59d528329c668Chris Lattner
165420b11850d3f4557421f43f519b59d528329c668Chris Lattner  return CGF.Builder.CreateCall(Fn, V, "abs");
166420b11850d3f4557421f43f519b59d528329c668Chris Lattner}
167420b11850d3f4557421f43f519b59d528329c668Chris Lattner
168a45680b7e7c49ea9893c6cff585984f3e4120366John McCallstatic RValue emitLibraryCall(CodeGenFunction &CGF, const FunctionDecl *Fn,
169a45680b7e7c49ea9893c6cff585984f3e4120366John McCall                              const CallExpr *E, llvm::Value *calleeValue) {
170a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  return CGF.EmitCall(E->getCallee()->getType(), calleeValue,
171a45680b7e7c49ea9893c6cff585984f3e4120366John McCall                      ReturnValueSlot(), E->arg_begin(), E->arg_end(), Fn);
172a45680b7e7c49ea9893c6cff585984f3e4120366John McCall}
173a45680b7e7c49ea9893c6cff585984f3e4120366John McCall
1741eb4433ac451dc16f4133a88af2d002ac26c58efMike StumpRValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD,
175ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar                                        unsigned BuiltinID, const CallExpr *E) {
176564ea2a99b3afeac9ded332730a56db1f6358a58Chris Lattner  // See if we can constant fold this builtin.  If so, don't emit it at all.
177f35d35a2316dcb65d078844696c2032b71a7f103Anders Carlsson  Expr::EvalResult Result;
17852a27f5be98d99fd5339949d8a3d0b2aec655e0bEli Friedman  if (E->EvaluateAsRValue(Result, CGM.getContext()) &&
179dd697bc8629f0fa6777245610d52ca7ceb3b67f4Fariborz Jahanian      !Result.hasSideEffects()) {
180f35d35a2316dcb65d078844696c2032b71a7f103Anders Carlsson    if (Result.Val.isInt())
181d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall      return RValue::get(llvm::ConstantInt::get(getLLVMContext(),
1824a28d5deeba33722aa009eab488591fb9055cc7eOwen Anderson                                                Result.Val.getInt()));
183a1aa9e36e6e21f74c56cf9e72cb5bd9aa2a92fd4Chris Lattner    if (Result.Val.isFloat())
184d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall      return RValue::get(llvm::ConstantFP::get(getLLVMContext(),
185d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall                                               Result.Val.getFloat()));
1861f32999ec79a980576e100d64d5f3267eb19ea49Chris Lattner  }
1871eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
188564ea2a99b3afeac9ded332730a56db1f6358a58Chris Lattner  switch (BuiltinID) {
189564ea2a99b3afeac9ded332730a56db1f6358a58Chris Lattner  default: break;  // Handle intrinsics and libm functions below.
190506ff88f44562df267b6a06608ab841b76df2a2bChris Lattner  case Builtin::BI__builtin___CFStringMakeConstantString:
1910d13f6fdbdd6f06e2449b8834dda53334abd399aDavid Chisnall  case Builtin::BI__builtin___NSStringMakeConstantString:
192e9352cc9818ba59e7cf88500ef048991c90f3821Anders Carlsson    return RValue::get(CGM.EmitConstantExpr(E, E->getType(), 0));
1936a705f0443f8398ece14d80e71d8e8c9e71aa84aChris Lattner  case Builtin::BI__builtin_stdarg_start:
194793680ed8104bf088d1b382b963a8badcb3f07deAnders Carlsson  case Builtin::BI__builtin_va_start:
195793680ed8104bf088d1b382b963a8badcb3f07deAnders Carlsson  case Builtin::BI__builtin_va_end: {
1960785570af3ef5f8c5a0377129e41efe6f3f8d770Daniel Dunbar    Value *ArgValue = EmitVAListRef(E->getArg(0));
1972acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *DestType = Int8PtrTy;
198793680ed8104bf088d1b382b963a8badcb3f07deAnders Carlsson    if (ArgValue->getType() != DestType)
1991eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      ArgValue = Builder.CreateBitCast(ArgValue, DestType,
200b27ffbef8e8aa1e87b63cbc0d9cd630aba30dae5Daniel Dunbar                                       ArgValue->getName().data());
201793680ed8104bf088d1b382b963a8badcb3f07deAnders Carlsson
2021eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    Intrinsic::ID inst = (BuiltinID == Builtin::BI__builtin_va_end) ?
2036a705f0443f8398ece14d80e71d8e8c9e71aa84aChris Lattner      Intrinsic::vaend : Intrinsic::vastart;
2047acda7c4a0e4aec6c003b3169ca45a5f3bc7e033Chris Lattner    return RValue::get(Builder.CreateCall(CGM.getIntrinsic(inst), ArgValue));
205793680ed8104bf088d1b382b963a8badcb3f07deAnders Carlsson  }
206a28ef8b5c6ea452472d89041128fac8b683fe968Anders Carlsson  case Builtin::BI__builtin_va_copy: {
2074fd0aa5803357d8c72eeac2cae15e12649ea08feEli Friedman    Value *DstPtr = EmitVAListRef(E->getArg(0));
2084fd0aa5803357d8c72eeac2cae15e12649ea08feEli Friedman    Value *SrcPtr = EmitVAListRef(E->getArg(1));
209a28ef8b5c6ea452472d89041128fac8b683fe968Anders Carlsson
2102acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *Type = Int8PtrTy;
211a28ef8b5c6ea452472d89041128fac8b683fe968Anders Carlsson
212a28ef8b5c6ea452472d89041128fac8b683fe968Anders Carlsson    DstPtr = Builder.CreateBitCast(DstPtr, Type);
213a28ef8b5c6ea452472d89041128fac8b683fe968Anders Carlsson    SrcPtr = Builder.CreateBitCast(SrcPtr, Type);
2141eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    return RValue::get(Builder.CreateCall2(CGM.getIntrinsic(Intrinsic::vacopy),
2153eae03e7d165f20a863a9a4d7122ba2a691ab16dChris Lattner                                           DstPtr, SrcPtr));
216a28ef8b5c6ea452472d89041128fac8b683fe968Anders Carlsson  }
217f7b2d8b3b1971e73e2d2f0662520dc7693235a7fEli Friedman  case Builtin::BI__builtin_abs:
218f7b2d8b3b1971e73e2d2f0662520dc7693235a7fEli Friedman  case Builtin::BI__builtin_labs:
219f7b2d8b3b1971e73e2d2f0662520dc7693235a7fEli Friedman  case Builtin::BI__builtin_llabs: {
2201eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    Value *ArgValue = EmitScalarExpr(E->getArg(0));
2211eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2229a847f598c4907a72b8593b364b9e6b94b086e75Chris Lattner    Value *NegOp = Builder.CreateNeg(ArgValue, "neg");
2231eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    Value *CmpResult =
2241eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    Builder.CreateICmpSGE(ArgValue,
225c9c88b4159791c48e486ca94e3743b5979e2b7a6Owen Anderson                          llvm::Constant::getNullValue(ArgValue->getType()),
2269a847f598c4907a72b8593b364b9e6b94b086e75Chris Lattner                                                            "abscond");
2271eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    Value *Result =
228c2251dc59b0edc28f9303637dec970a7520939adAnders Carlsson      Builder.CreateSelect(CmpResult, ArgValue, NegOp, "abs");
2291eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
230c2251dc59b0edc28f9303637dec970a7520939adAnders Carlsson    return RValue::get(Result);
231c2251dc59b0edc28f9303637dec970a7520939adAnders Carlsson  }
232a49a2839266f0bac2b6286e9f49fdc0c292938feBenjamin Kramer  case Builtin::BI__builtin_ctzs:
2333a31d60cffedfb7c9e6d129a5c9ba15fa74f179aAnders Carlsson  case Builtin::BI__builtin_ctz:
2343a31d60cffedfb7c9e6d129a5c9ba15fa74f179aAnders Carlsson  case Builtin::BI__builtin_ctzl:
2353a31d60cffedfb7c9e6d129a5c9ba15fa74f179aAnders Carlsson  case Builtin::BI__builtin_ctzll: {
2363a31d60cffedfb7c9e6d129a5c9ba15fa74f179aAnders Carlsson    Value *ArgValue = EmitScalarExpr(E->getArg(0));
2371eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2389cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *ArgType = ArgValue->getType();
2398dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::cttz, ArgType);
2403a31d60cffedfb7c9e6d129a5c9ba15fa74f179aAnders Carlsson
2412acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *ResultType = ConvertType(E->getType());
2428b30a9379f730875ba8fb2d0fe2d43611e0c20ffBob Wilson    Value *ZeroUndef = Builder.getInt1(Target.isCLZForZeroUndef());
2438b30a9379f730875ba8fb2d0fe2d43611e0c20ffBob Wilson    Value *Result = Builder.CreateCall2(F, ArgValue, ZeroUndef);
2443a31d60cffedfb7c9e6d129a5c9ba15fa74f179aAnders Carlsson    if (Result->getType() != ResultType)
245eac73e5b3eb3862945bcaa2770c71a727a3ee542Duncan Sands      Result = Builder.CreateIntCast(Result, ResultType, /*isSigned*/true,
246eac73e5b3eb3862945bcaa2770c71a727a3ee542Duncan Sands                                     "cast");
2473a31d60cffedfb7c9e6d129a5c9ba15fa74f179aAnders Carlsson    return RValue::get(Result);
2483a31d60cffedfb7c9e6d129a5c9ba15fa74f179aAnders Carlsson  }
249a49a2839266f0bac2b6286e9f49fdc0c292938feBenjamin Kramer  case Builtin::BI__builtin_clzs:
250f4e853340590d5c32e58379e8c379ea1777d3101Eli Friedman  case Builtin::BI__builtin_clz:
251f4e853340590d5c32e58379e8c379ea1777d3101Eli Friedman  case Builtin::BI__builtin_clzl:
252f4e853340590d5c32e58379e8c379ea1777d3101Eli Friedman  case Builtin::BI__builtin_clzll: {
253f4e853340590d5c32e58379e8c379ea1777d3101Eli Friedman    Value *ArgValue = EmitScalarExpr(E->getArg(0));
2541eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2559cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *ArgType = ArgValue->getType();
2568dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::ctlz, ArgType);
257f4e853340590d5c32e58379e8c379ea1777d3101Eli Friedman
2582acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *ResultType = ConvertType(E->getType());
2598b30a9379f730875ba8fb2d0fe2d43611e0c20ffBob Wilson    Value *ZeroUndef = Builder.getInt1(Target.isCLZForZeroUndef());
2608b30a9379f730875ba8fb2d0fe2d43611e0c20ffBob Wilson    Value *Result = Builder.CreateCall2(F, ArgValue, ZeroUndef);
261f4e853340590d5c32e58379e8c379ea1777d3101Eli Friedman    if (Result->getType() != ResultType)
262eac73e5b3eb3862945bcaa2770c71a727a3ee542Duncan Sands      Result = Builder.CreateIntCast(Result, ResultType, /*isSigned*/true,
263eac73e5b3eb3862945bcaa2770c71a727a3ee542Duncan Sands                                     "cast");
264f4e853340590d5c32e58379e8c379ea1777d3101Eli Friedman    return RValue::get(Result);
265f4e853340590d5c32e58379e8c379ea1777d3101Eli Friedman  }
26604b290030eee33295600728450f348989d1a627eDaniel Dunbar  case Builtin::BI__builtin_ffs:
26704b290030eee33295600728450f348989d1a627eDaniel Dunbar  case Builtin::BI__builtin_ffsl:
26804b290030eee33295600728450f348989d1a627eDaniel Dunbar  case Builtin::BI__builtin_ffsll: {
26904b290030eee33295600728450f348989d1a627eDaniel Dunbar    // ffs(x) -> x ? cttz(x) + 1 : 0
27004b290030eee33295600728450f348989d1a627eDaniel Dunbar    Value *ArgValue = EmitScalarExpr(E->getArg(0));
2711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2729cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *ArgType = ArgValue->getType();
2738dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::cttz, ArgType);
2741eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2752acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *ResultType = ConvertType(E->getType());
27650058ec63f38eabeb94391a61d2e7fb18a062173Chandler Carruth    Value *Tmp = Builder.CreateAdd(Builder.CreateCall2(F, ArgValue,
27750058ec63f38eabeb94391a61d2e7fb18a062173Chandler Carruth                                                       Builder.getTrue()),
278578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer                                   llvm::ConstantInt::get(ArgType, 1));
279c9c88b4159791c48e486ca94e3743b5979e2b7a6Owen Anderson    Value *Zero = llvm::Constant::getNullValue(ArgType);
28004b290030eee33295600728450f348989d1a627eDaniel Dunbar    Value *IsZero = Builder.CreateICmpEQ(ArgValue, Zero, "iszero");
28104b290030eee33295600728450f348989d1a627eDaniel Dunbar    Value *Result = Builder.CreateSelect(IsZero, Zero, Tmp, "ffs");
28204b290030eee33295600728450f348989d1a627eDaniel Dunbar    if (Result->getType() != ResultType)
283eac73e5b3eb3862945bcaa2770c71a727a3ee542Duncan Sands      Result = Builder.CreateIntCast(Result, ResultType, /*isSigned*/true,
284eac73e5b3eb3862945bcaa2770c71a727a3ee542Duncan Sands                                     "cast");
28504b290030eee33295600728450f348989d1a627eDaniel Dunbar    return RValue::get(Result);
28604b290030eee33295600728450f348989d1a627eDaniel Dunbar  }
28704b290030eee33295600728450f348989d1a627eDaniel Dunbar  case Builtin::BI__builtin_parity:
28804b290030eee33295600728450f348989d1a627eDaniel Dunbar  case Builtin::BI__builtin_parityl:
28904b290030eee33295600728450f348989d1a627eDaniel Dunbar  case Builtin::BI__builtin_parityll: {
29004b290030eee33295600728450f348989d1a627eDaniel Dunbar    // parity(x) -> ctpop(x) & 1
29104b290030eee33295600728450f348989d1a627eDaniel Dunbar    Value *ArgValue = EmitScalarExpr(E->getArg(0));
2921eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2939cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *ArgType = ArgValue->getType();
2948dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::ctpop, ArgType);
2951eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2962acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *ResultType = ConvertType(E->getType());
297578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    Value *Tmp = Builder.CreateCall(F, ArgValue);
298578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    Value *Result = Builder.CreateAnd(Tmp, llvm::ConstantInt::get(ArgType, 1));
29904b290030eee33295600728450f348989d1a627eDaniel Dunbar    if (Result->getType() != ResultType)
300eac73e5b3eb3862945bcaa2770c71a727a3ee542Duncan Sands      Result = Builder.CreateIntCast(Result, ResultType, /*isSigned*/true,
301eac73e5b3eb3862945bcaa2770c71a727a3ee542Duncan Sands                                     "cast");
30204b290030eee33295600728450f348989d1a627eDaniel Dunbar    return RValue::get(Result);
30304b290030eee33295600728450f348989d1a627eDaniel Dunbar  }
30404b290030eee33295600728450f348989d1a627eDaniel Dunbar  case Builtin::BI__builtin_popcount:
30504b290030eee33295600728450f348989d1a627eDaniel Dunbar  case Builtin::BI__builtin_popcountl:
30604b290030eee33295600728450f348989d1a627eDaniel Dunbar  case Builtin::BI__builtin_popcountll: {
30704b290030eee33295600728450f348989d1a627eDaniel Dunbar    Value *ArgValue = EmitScalarExpr(E->getArg(0));
3081eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
3099cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *ArgType = ArgValue->getType();
3108dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::ctpop, ArgType);
3111eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
3122acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *ResultType = ConvertType(E->getType());
313578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    Value *Result = Builder.CreateCall(F, ArgValue);
31404b290030eee33295600728450f348989d1a627eDaniel Dunbar    if (Result->getType() != ResultType)
315eac73e5b3eb3862945bcaa2770c71a727a3ee542Duncan Sands      Result = Builder.CreateIntCast(Result, ResultType, /*isSigned*/true,
316eac73e5b3eb3862945bcaa2770c71a727a3ee542Duncan Sands                                     "cast");
31704b290030eee33295600728450f348989d1a627eDaniel Dunbar    return RValue::get(Result);
31804b290030eee33295600728450f348989d1a627eDaniel Dunbar  }
319e42b8a596886fc98e367c73e54d761446700029eFariborz Jahanian  case Builtin::BI__builtin_expect: {
320dd697bc8629f0fa6777245610d52ca7ceb3b67f4Fariborz Jahanian    Value *ArgValue = EmitScalarExpr(E->getArg(0));
3219cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *ArgType = ArgValue->getType();
322558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak
3238dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *FnExpect = CGM.getIntrinsic(Intrinsic::expect, ArgType);
324558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak    Value *ExpectedValue = EmitScalarExpr(E->getArg(1));
325558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak
326558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak    Value *Result = Builder.CreateCall2(FnExpect, ArgValue, ExpectedValue,
327558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak                                        "expval");
328558229f267d2cdee69639df04382082e7c7ad54cJakub Staszak    return RValue::get(Result);
329e42b8a596886fc98e367c73e54d761446700029eFariborz Jahanian  }
330df4852ac816e6050d53b808b86d7c1c9738eb99eAnders Carlsson  case Builtin::BI__builtin_bswap32:
331df4852ac816e6050d53b808b86d7c1c9738eb99eAnders Carlsson  case Builtin::BI__builtin_bswap64: {
3321feedd84221e8dbcc3faf3de27cc42b559db845dChris Lattner    Value *ArgValue = EmitScalarExpr(E->getArg(0));
3339cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *ArgType = ArgValue->getType();
3348dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::bswap, ArgType);
335578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    return RValue::get(Builder.CreateCall(F, ArgValue));
3361eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  }
337d5f8a4fd4d6dfb0415b93bb7ab721bba5cab1332Daniel Dunbar  case Builtin::BI__builtin_object_size: {
338b16d32f74ffc467a5604934a1f844906be20cf7dMike Stump    // We pass this builtin onto the optimizer so that it can
339b16d32f74ffc467a5604934a1f844906be20cf7dMike Stump    // figure out the object size in more complex cases.
3408dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    llvm::Type *ResType = ConvertType(E->getType());
341fee667f35e64751baa7fefe70b4e7bab06c8cd86Eric Christopher
342fee667f35e64751baa7fefe70b4e7bab06c8cd86Eric Christopher    // LLVM only supports 0 and 2, make sure that we pass along that
343fee667f35e64751baa7fefe70b4e7bab06c8cd86Eric Christopher    // as a boolean.
344fee667f35e64751baa7fefe70b4e7bab06c8cd86Eric Christopher    Value *Ty = EmitScalarExpr(E->getArg(1));
345fee667f35e64751baa7fefe70b4e7bab06c8cd86Eric Christopher    ConstantInt *CI = dyn_cast<ConstantInt>(Ty);
346fee667f35e64751baa7fefe70b4e7bab06c8cd86Eric Christopher    assert(CI);
347fee667f35e64751baa7fefe70b4e7bab06c8cd86Eric Christopher    uint64_t val = CI->getZExtValue();
348d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    CI = ConstantInt::get(Builder.getInt1Ty(), (val & 0x2) >> 1);
349fee667f35e64751baa7fefe70b4e7bab06c8cd86Eric Christopher
3508dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::objectsize, ResType);
351c4c9045dabfc0f0d37dea1b3eb2992654d5b2db1Mike Stump    return RValue::get(Builder.CreateCall2(F,
352c4c9045dabfc0f0d37dea1b3eb2992654d5b2db1Mike Stump                                           EmitScalarExpr(E->getArg(0)),
353fee667f35e64751baa7fefe70b4e7bab06c8cd86Eric Christopher                                           CI));
354d5f8a4fd4d6dfb0415b93bb7ab721bba5cab1332Daniel Dunbar  }
3554493f79fce48cd9cbd9f55fa9d452cde736747a0Daniel Dunbar  case Builtin::BI__builtin_prefetch: {
3564493f79fce48cd9cbd9f55fa9d452cde736747a0Daniel Dunbar    Value *Locality, *RW, *Address = EmitScalarExpr(E->getArg(0));
3574493f79fce48cd9cbd9f55fa9d452cde736747a0Daniel Dunbar    // FIXME: Technically these constants should of type 'int', yes?
3581eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    RW = (E->getNumArgs() > 1) ? EmitScalarExpr(E->getArg(1)) :
35977b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner      llvm::ConstantInt::get(Int32Ty, 0);
3601eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    Locality = (E->getNumArgs() > 2) ? EmitScalarExpr(E->getArg(2)) :
36177b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner      llvm::ConstantInt::get(Int32Ty, 3);
3622eccb672799d19fb535ce349566fea6729cbb891Bruno Cardoso Lopes    Value *Data = llvm::ConstantInt::get(Int32Ty, 1);
3638dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::prefetch);
3642eccb672799d19fb535ce349566fea6729cbb891Bruno Cardoso Lopes    return RValue::get(Builder.CreateCall4(F, Address, RW, Locality, Data));
3654493f79fce48cd9cbd9f55fa9d452cde736747a0Daniel Dunbar  }
3664493f79fce48cd9cbd9f55fa9d452cde736747a0Daniel Dunbar  case Builtin::BI__builtin_trap: {
3678dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::trap);
3684493f79fce48cd9cbd9f55fa9d452cde736747a0Daniel Dunbar    return RValue::get(Builder.CreateCall(F));
369df4852ac816e6050d53b808b86d7c1c9738eb99eAnders Carlsson  }
37021190d54634d6e244e85d28ad915ce2fe86ecbffChris Lattner  case Builtin::BI__builtin_unreachable: {
371cd5b22e12b6513163dd131589746c194090f14e6John McCall    if (CatchUndefined)
372fba565d044a8979cfd916ce52655a6847bfaa601Mike Stump      EmitBranch(getTrapBB());
373cd5b22e12b6513163dd131589746c194090f14e6John McCall    else
374cd5b22e12b6513163dd131589746c194090f14e6John McCall      Builder.CreateUnreachable();
375cd5b22e12b6513163dd131589746c194090f14e6John McCall
376cd5b22e12b6513163dd131589746c194090f14e6John McCall    // We do need to preserve an insertion point.
377d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    EmitBlock(createBasicBlock("unreachable.cont"));
378cd5b22e12b6513163dd131589746c194090f14e6John McCall
379cd5b22e12b6513163dd131589746c194090f14e6John McCall    return RValue::get(0);
38021190d54634d6e244e85d28ad915ce2fe86ecbffChris Lattner  }
38121190d54634d6e244e85d28ad915ce2fe86ecbffChris Lattner
382a933c3c052bbd87b01cc6fc7a7745e1c4b1757fbDaniel Dunbar  case Builtin::BI__builtin_powi:
383a933c3c052bbd87b01cc6fc7a7745e1c4b1757fbDaniel Dunbar  case Builtin::BI__builtin_powif:
384a933c3c052bbd87b01cc6fc7a7745e1c4b1757fbDaniel Dunbar  case Builtin::BI__builtin_powil: {
385a933c3c052bbd87b01cc6fc7a7745e1c4b1757fbDaniel Dunbar    Value *Base = EmitScalarExpr(E->getArg(0));
386a933c3c052bbd87b01cc6fc7a7745e1c4b1757fbDaniel Dunbar    Value *Exponent = EmitScalarExpr(E->getArg(1));
3879cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *ArgType = Base->getType();
3888dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::powi, ArgType);
389578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    return RValue::get(Builder.CreateCall2(F, Base, Exponent));
390a933c3c052bbd87b01cc6fc7a7745e1c4b1757fbDaniel Dunbar  }
391a933c3c052bbd87b01cc6fc7a7745e1c4b1757fbDaniel Dunbar
392fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner  case Builtin::BI__builtin_isgreater:
393fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner  case Builtin::BI__builtin_isgreaterequal:
394fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner  case Builtin::BI__builtin_isless:
395fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner  case Builtin::BI__builtin_islessequal:
396fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner  case Builtin::BI__builtin_islessgreater:
397fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner  case Builtin::BI__builtin_isunordered: {
398fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner    // Ordered comparisons: we know the arguments to these are matching scalar
399fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner    // floating point values.
4001eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    Value *LHS = EmitScalarExpr(E->getArg(0));
401fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner    Value *RHS = EmitScalarExpr(E->getArg(1));
4021eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
403fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner    switch (BuiltinID) {
404b219cfc4d75f0a03630b7c4509ef791b7e97b2c8David Blaikie    default: llvm_unreachable("Unknown ordered comparison");
405fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner    case Builtin::BI__builtin_isgreater:
406fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner      LHS = Builder.CreateFCmpOGT(LHS, RHS, "cmp");
407fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner      break;
408fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner    case Builtin::BI__builtin_isgreaterequal:
409fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner      LHS = Builder.CreateFCmpOGE(LHS, RHS, "cmp");
410fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner      break;
411fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner    case Builtin::BI__builtin_isless:
412fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner      LHS = Builder.CreateFCmpOLT(LHS, RHS, "cmp");
413fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner      break;
414fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner    case Builtin::BI__builtin_islessequal:
415fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner      LHS = Builder.CreateFCmpOLE(LHS, RHS, "cmp");
416fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner      break;
417fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner    case Builtin::BI__builtin_islessgreater:
418fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner      LHS = Builder.CreateFCmpONE(LHS, RHS, "cmp");
419fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner      break;
4201eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    case Builtin::BI__builtin_isunordered:
421fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner      LHS = Builder.CreateFCmpUNO(LHS, RHS, "cmp");
422fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner      break;
423fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner    }
424fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner    // ZExt bool to int type.
425578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    return RValue::get(Builder.CreateZExt(LHS, ConvertType(E->getType())));
426fe23e217774aaec350086fab839210d7d9e1e3f4Chris Lattner  }
427d6139895f43d161a972d134ffda4229d2f548eb6Eli Friedman  case Builtin::BI__builtin_isnan: {
428d6139895f43d161a972d134ffda4229d2f548eb6Eli Friedman    Value *V = EmitScalarExpr(E->getArg(0));
429d6139895f43d161a972d134ffda4229d2f548eb6Eli Friedman    V = Builder.CreateFCmpUNO(V, V, "cmp");
430578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    return RValue::get(Builder.CreateZExt(V, ConvertType(E->getType())));
431d6139895f43d161a972d134ffda4229d2f548eb6Eli Friedman  }
432420b11850d3f4557421f43f519b59d528329c668Chris Lattner
433420b11850d3f4557421f43f519b59d528329c668Chris Lattner  case Builtin::BI__builtin_isinf: {
434420b11850d3f4557421f43f519b59d528329c668Chris Lattner    // isinf(x) --> fabs(x) == infinity
435420b11850d3f4557421f43f519b59d528329c668Chris Lattner    Value *V = EmitScalarExpr(E->getArg(0));
436420b11850d3f4557421f43f519b59d528329c668Chris Lattner    V = EmitFAbs(*this, V, E->getArg(0)->getType());
437420b11850d3f4557421f43f519b59d528329c668Chris Lattner
438420b11850d3f4557421f43f519b59d528329c668Chris Lattner    V = Builder.CreateFCmpOEQ(V, ConstantFP::getInfinity(V->getType()),"isinf");
439578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    return RValue::get(Builder.CreateZExt(V, ConvertType(E->getType())));
440420b11850d3f4557421f43f519b59d528329c668Chris Lattner  }
44158ae5b4b1e2fc02b95d6650af5755a59639aa153Chris Lattner
44258ae5b4b1e2fc02b95d6650af5755a59639aa153Chris Lattner  // TODO: BI__builtin_isinf_sign
44358ae5b4b1e2fc02b95d6650af5755a59639aa153Chris Lattner  //   isinf_sign(x) -> isinf(x) ? (signbit(x) ? -1 : 1) : 0
4446349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer
4456349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer  case Builtin::BI__builtin_isnormal: {
4466349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer    // isnormal(x) --> x == x && fabsf(x) < infinity && fabsf(x) >= float_min
4476349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer    Value *V = EmitScalarExpr(E->getArg(0));
4486349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer    Value *Eq = Builder.CreateFCmpOEQ(V, V, "iseq");
4496349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer
4506349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer    Value *Abs = EmitFAbs(*this, V, E->getArg(0)->getType());
4516349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer    Value *IsLessThanInf =
4526349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer      Builder.CreateFCmpULT(Abs, ConstantFP::getInfinity(V->getType()),"isinf");
4536349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer    APFloat Smallest = APFloat::getSmallestNormalized(
4546349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer                   getContext().getFloatTypeSemantics(E->getArg(0)->getType()));
4556349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer    Value *IsNormal =
4566349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer      Builder.CreateFCmpUGE(Abs, ConstantFP::get(V->getContext(), Smallest),
4576349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer                            "isnormal");
4586349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer    V = Builder.CreateAnd(Eq, IsLessThanInf, "and");
4596349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer    V = Builder.CreateAnd(V, IsNormal, "and");
4606349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer    return RValue::get(Builder.CreateZExt(V, ConvertType(E->getType())));
4616349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer  }
4626349ce94d1b4fa560bf060c5ca5ad5728ce4fad9Benjamin Kramer
463ed074150c9a775c5e2e1c4ececeba18ba880ce7dChris Lattner  case Builtin::BI__builtin_isfinite: {
464ef004ec5adb0e11815cef3435fa5ac7366d783a9Julien Lerouge    // isfinite(x) --> x == x && fabs(x) != infinity;
465ed074150c9a775c5e2e1c4ececeba18ba880ce7dChris Lattner    Value *V = EmitScalarExpr(E->getArg(0));
466ed074150c9a775c5e2e1c4ececeba18ba880ce7dChris Lattner    Value *Eq = Builder.CreateFCmpOEQ(V, V, "iseq");
467ed074150c9a775c5e2e1c4ececeba18ba880ce7dChris Lattner
468ed074150c9a775c5e2e1c4ececeba18ba880ce7dChris Lattner    Value *Abs = EmitFAbs(*this, V, E->getArg(0)->getType());
469ed074150c9a775c5e2e1c4ececeba18ba880ce7dChris Lattner    Value *IsNotInf =
470ed074150c9a775c5e2e1c4ececeba18ba880ce7dChris Lattner      Builder.CreateFCmpUNE(Abs, ConstantFP::getInfinity(V->getType()),"isinf");
471ed074150c9a775c5e2e1c4ececeba18ba880ce7dChris Lattner
472ed074150c9a775c5e2e1c4ececeba18ba880ce7dChris Lattner    V = Builder.CreateAnd(Eq, IsNotInf, "and");
473ed074150c9a775c5e2e1c4ececeba18ba880ce7dChris Lattner    return RValue::get(Builder.CreateZExt(V, ConvertType(E->getType())));
474ed074150c9a775c5e2e1c4ececeba18ba880ce7dChris Lattner  }
4757867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer
4767867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer  case Builtin::BI__builtin_fpclassify: {
4777867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Value *V = EmitScalarExpr(E->getArg(5));
4782acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *Ty = ConvertType(E->getArg(5)->getType());
4797867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer
4807867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    // Create Result
4817867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    BasicBlock *Begin = Builder.GetInsertBlock();
4827867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    BasicBlock *End = createBasicBlock("fpclassify_end", this->CurFn);
4837867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Builder.SetInsertPoint(End);
4847867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    PHINode *Result =
485bbf3bacb3e0c1ebb3e8a4a8b1330404a7e379315Jay Foad      Builder.CreatePHI(ConvertType(E->getArg(0)->getType()), 4,
4867867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer                        "fpclassify_result");
4877867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer
4887867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    // if (V==0) return FP_ZERO
4897867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Builder.SetInsertPoint(Begin);
4907867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Value *IsZero = Builder.CreateFCmpOEQ(V, Constant::getNullValue(Ty),
4917867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer                                          "iszero");
4927867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Value *ZeroLiteral = EmitScalarExpr(E->getArg(4));
4937867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    BasicBlock *NotZero = createBasicBlock("fpclassify_not_zero", this->CurFn);
4947867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Builder.CreateCondBr(IsZero, End, NotZero);
4957867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Result->addIncoming(ZeroLiteral, Begin);
4967867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer
4977867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    // if (V != V) return FP_NAN
4987867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Builder.SetInsertPoint(NotZero);
4997867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Value *IsNan = Builder.CreateFCmpUNO(V, V, "cmp");
5007867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Value *NanLiteral = EmitScalarExpr(E->getArg(0));
5017867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    BasicBlock *NotNan = createBasicBlock("fpclassify_not_nan", this->CurFn);
5027867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Builder.CreateCondBr(IsNan, End, NotNan);
5037867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Result->addIncoming(NanLiteral, NotZero);
5047867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer
5057867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    // if (fabs(V) == infinity) return FP_INFINITY
5067867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Builder.SetInsertPoint(NotNan);
5077867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Value *VAbs = EmitFAbs(*this, V, E->getArg(5)->getType());
5087867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Value *IsInf =
5097867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer      Builder.CreateFCmpOEQ(VAbs, ConstantFP::getInfinity(V->getType()),
5107867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer                            "isinf");
5117867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Value *InfLiteral = EmitScalarExpr(E->getArg(1));
5127867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    BasicBlock *NotInf = createBasicBlock("fpclassify_not_inf", this->CurFn);
5137867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Builder.CreateCondBr(IsInf, End, NotInf);
5147867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Result->addIncoming(InfLiteral, NotNan);
5157867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer
5167867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    // if (fabs(V) >= MIN_NORMAL) return FP_NORMAL else FP_SUBNORMAL
5177867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Builder.SetInsertPoint(NotInf);
5187867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    APFloat Smallest = APFloat::getSmallestNormalized(
5197867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer        getContext().getFloatTypeSemantics(E->getArg(5)->getType()));
5207867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Value *IsNormal =
5217867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer      Builder.CreateFCmpUGE(VAbs, ConstantFP::get(V->getContext(), Smallest),
5227867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer                            "isnormal");
5237867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Value *NormalResult =
5247867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer      Builder.CreateSelect(IsNormal, EmitScalarExpr(E->getArg(2)),
5257867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer                           EmitScalarExpr(E->getArg(3)));
5267867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Builder.CreateBr(End);
5277867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Result->addIncoming(NormalResult, NotInf);
5287867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer
5297867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    // return Result
5307867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    Builder.SetInsertPoint(End);
5317867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer    return RValue::get(Result);
5327867f1a62b8b42cc2a55cc571608a75db2d516e0Benjamin Kramer  }
533ed074150c9a775c5e2e1c4ececeba18ba880ce7dChris Lattner
534b52fe9ce99970955a5f581f5c66fcd89be9a268bEli Friedman  case Builtin::BIalloca:
5359e800e3dd80d77f6c47054738177bf824089f55aChris Lattner  case Builtin::BI__builtin_alloca: {
5369e800e3dd80d77f6c47054738177bf824089f55aChris Lattner    Value *Size = EmitScalarExpr(E->getArg(0));
537578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    return RValue::get(Builder.CreateAlloca(Builder.getInt8Ty(), Size));
5381caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar  }
539e6dddfd907f6ea58daed5e26eeaacd893d98db9bEli Friedman  case Builtin::BIbzero:
5401caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar  case Builtin::BI__builtin_bzero: {
5411caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar    Value *Address = EmitScalarExpr(E->getArg(0));
5423ecd785aff34381f3704d9cb28fe3ef85af759deMon P Wang    Value *SizeVal = EmitScalarExpr(E->getArg(1));
543f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    unsigned Align = GetPointeeAlignment(E->getArg(0));
544f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Builder.CreateMemSet(Address, Builder.getInt8(0), SizeVal, Align, false);
5451caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar    return RValue::get(Address);
5469e800e3dd80d77f6c47054738177bf824089f55aChris Lattner  }
547e6ec205d6d0f4aec27bf49ca1e8fbb139acc2f2bEli Friedman  case Builtin::BImemcpy:
548d4b32e46517358f34e8cfbea35010adfcc3786e0Eli Friedman  case Builtin::BI__builtin_memcpy: {
5491caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar    Value *Address = EmitScalarExpr(E->getArg(0));
5503ecd785aff34381f3704d9cb28fe3ef85af759deMon P Wang    Value *SrcAddr = EmitScalarExpr(E->getArg(1));
5513ecd785aff34381f3704d9cb28fe3ef85af759deMon P Wang    Value *SizeVal = EmitScalarExpr(E->getArg(2));
552f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    unsigned Align = std::min(GetPointeeAlignment(E->getArg(0)),
553f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad                              GetPointeeAlignment(E->getArg(1)));
554f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Builder.CreateMemCpy(Address, SrcAddr, SizeVal, Align, false);
5551caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar    return RValue::get(Address);
5561caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar  }
55755bcace250e1ff366e4482714b344b8cbc8be5f3Fariborz Jahanian
558a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner  case Builtin::BI__builtin___memcpy_chk: {
559a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    // fold __builtin_memcpy_chk(x, y, cst1, cst2) to memset iff cst1<=cst2.
560a6b8b2c09610b8bc4330e948ece8b940c2386406Richard Smith    llvm::APSInt Size, DstSize;
561a6b8b2c09610b8bc4330e948ece8b940c2386406Richard Smith    if (!E->getArg(2)->EvaluateAsInt(Size, CGM.getContext()) ||
562a6b8b2c09610b8bc4330e948ece8b940c2386406Richard Smith        !E->getArg(3)->EvaluateAsInt(DstSize, CGM.getContext()))
563a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner      break;
564a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    if (Size.ugt(DstSize))
565a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner      break;
566a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    Value *Dest = EmitScalarExpr(E->getArg(0));
567a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    Value *Src = EmitScalarExpr(E->getArg(1));
568a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    Value *SizeVal = llvm::ConstantInt::get(Builder.getContext(), Size);
569f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    unsigned Align = std::min(GetPointeeAlignment(E->getArg(0)),
570f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad                              GetPointeeAlignment(E->getArg(1)));
571f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Builder.CreateMemCpy(Dest, Src, SizeVal, Align, false);
57242f681b83378de1541919c7f72e7555e35158867Chris Lattner    return RValue::get(Dest);
573a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner  }
574a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner
5758e2eab27056a78bf1db50ee09929438ed5ea9d93Fariborz Jahanian  case Builtin::BI__builtin_objc_memmove_collectable: {
57655bcace250e1ff366e4482714b344b8cbc8be5f3Fariborz Jahanian    Value *Address = EmitScalarExpr(E->getArg(0));
57755bcace250e1ff366e4482714b344b8cbc8be5f3Fariborz Jahanian    Value *SrcAddr = EmitScalarExpr(E->getArg(1));
57855bcace250e1ff366e4482714b344b8cbc8be5f3Fariborz Jahanian    Value *SizeVal = EmitScalarExpr(E->getArg(2));
57955bcace250e1ff366e4482714b344b8cbc8be5f3Fariborz Jahanian    CGM.getObjCRuntime().EmitGCMemmoveCollectable(*this,
58055bcace250e1ff366e4482714b344b8cbc8be5f3Fariborz Jahanian                                                  Address, SrcAddr, SizeVal);
58155bcace250e1ff366e4482714b344b8cbc8be5f3Fariborz Jahanian    return RValue::get(Address);
58255bcace250e1ff366e4482714b344b8cbc8be5f3Fariborz Jahanian  }
583a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner
584a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner  case Builtin::BI__builtin___memmove_chk: {
585a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    // fold __builtin_memmove_chk(x, y, cst1, cst2) to memset iff cst1<=cst2.
586a6b8b2c09610b8bc4330e948ece8b940c2386406Richard Smith    llvm::APSInt Size, DstSize;
587a6b8b2c09610b8bc4330e948ece8b940c2386406Richard Smith    if (!E->getArg(2)->EvaluateAsInt(Size, CGM.getContext()) ||
588a6b8b2c09610b8bc4330e948ece8b940c2386406Richard Smith        !E->getArg(3)->EvaluateAsInt(DstSize, CGM.getContext()))
589a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner      break;
590a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    if (Size.ugt(DstSize))
591a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner      break;
592a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    Value *Dest = EmitScalarExpr(E->getArg(0));
593a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    Value *Src = EmitScalarExpr(E->getArg(1));
594a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    Value *SizeVal = llvm::ConstantInt::get(Builder.getContext(), Size);
595f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    unsigned Align = std::min(GetPointeeAlignment(E->getArg(0)),
596f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad                              GetPointeeAlignment(E->getArg(1)));
597f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Builder.CreateMemMove(Dest, Src, SizeVal, Align, false);
59842f681b83378de1541919c7f72e7555e35158867Chris Lattner    return RValue::get(Dest);
599a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner  }
600a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner
601e6ec205d6d0f4aec27bf49ca1e8fbb139acc2f2bEli Friedman  case Builtin::BImemmove:
6021caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar  case Builtin::BI__builtin_memmove: {
6031caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar    Value *Address = EmitScalarExpr(E->getArg(0));
6043ecd785aff34381f3704d9cb28fe3ef85af759deMon P Wang    Value *SrcAddr = EmitScalarExpr(E->getArg(1));
6053ecd785aff34381f3704d9cb28fe3ef85af759deMon P Wang    Value *SizeVal = EmitScalarExpr(E->getArg(2));
606f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    unsigned Align = std::min(GetPointeeAlignment(E->getArg(0)),
607f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad                              GetPointeeAlignment(E->getArg(1)));
608f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Builder.CreateMemMove(Address, SrcAddr, SizeVal, Align, false);
6091caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar    return RValue::get(Address);
6101caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar  }
611e6ec205d6d0f4aec27bf49ca1e8fbb139acc2f2bEli Friedman  case Builtin::BImemset:
6121caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar  case Builtin::BI__builtin_memset: {
6131caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar    Value *Address = EmitScalarExpr(E->getArg(0));
6149f0c7cc36d29cf591c33962931f5862847145f3eBenjamin Kramer    Value *ByteVal = Builder.CreateTrunc(EmitScalarExpr(E->getArg(1)),
6159f0c7cc36d29cf591c33962931f5862847145f3eBenjamin Kramer                                         Builder.getInt8Ty());
6163ecd785aff34381f3704d9cb28fe3ef85af759deMon P Wang    Value *SizeVal = EmitScalarExpr(E->getArg(2));
617f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    unsigned Align = GetPointeeAlignment(E->getArg(0));
618f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Builder.CreateMemSet(Address, ByteVal, SizeVal, Align, false);
6191caae959017b355e9bb61250d5a0d04edbf468b0Daniel Dunbar    return RValue::get(Address);
620d4b32e46517358f34e8cfbea35010adfcc3786e0Eli Friedman  }
621a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner  case Builtin::BI__builtin___memset_chk: {
622a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    // fold __builtin_memset_chk(x, y, cst1, cst2) to memset iff cst1<=cst2.
623a6b8b2c09610b8bc4330e948ece8b940c2386406Richard Smith    llvm::APSInt Size, DstSize;
624a6b8b2c09610b8bc4330e948ece8b940c2386406Richard Smith    if (!E->getArg(2)->EvaluateAsInt(Size, CGM.getContext()) ||
625a6b8b2c09610b8bc4330e948ece8b940c2386406Richard Smith        !E->getArg(3)->EvaluateAsInt(DstSize, CGM.getContext()))
626a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner      break;
627a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    if (Size.ugt(DstSize))
628a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner      break;
629a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    Value *Address = EmitScalarExpr(E->getArg(0));
630a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    Value *ByteVal = Builder.CreateTrunc(EmitScalarExpr(E->getArg(1)),
631a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner                                         Builder.getInt8Ty());
632a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner    Value *SizeVal = llvm::ConstantInt::get(Builder.getContext(), Size);
633f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    unsigned Align = GetPointeeAlignment(E->getArg(0));
634f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Builder.CreateMemSet(Address, ByteVal, SizeVal, Align, false);
635a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner
63642f681b83378de1541919c7f72e7555e35158867Chris Lattner    return RValue::get(Address);
637a5e5e0f41e1dcee4603244ccea3d3956c55c23acChris Lattner  }
638fb17a562135dd7597121da9245d0c1bdcda4146fJohn McCall  case Builtin::BI__builtin_dwarf_cfa: {
639fb17a562135dd7597121da9245d0c1bdcda4146fJohn McCall    // The offset in bytes from the first argument to the CFA.
640fb17a562135dd7597121da9245d0c1bdcda4146fJohn McCall    //
641fb17a562135dd7597121da9245d0c1bdcda4146fJohn McCall    // Why on earth is this in the frontend?  Is there any reason at
642fb17a562135dd7597121da9245d0c1bdcda4146fJohn McCall    // all that the backend can't reasonably determine this while
643fb17a562135dd7597121da9245d0c1bdcda4146fJohn McCall    // lowering llvm.eh.dwarf.cfa()?
644fb17a562135dd7597121da9245d0c1bdcda4146fJohn McCall    //
645fb17a562135dd7597121da9245d0c1bdcda4146fJohn McCall    // TODO: If there's a satisfactory reason, add a target hook for
646fb17a562135dd7597121da9245d0c1bdcda4146fJohn McCall    // this instead of hard-coding 0, which is correct for most targets.
647fb17a562135dd7597121da9245d0c1bdcda4146fJohn McCall    int32_t Offset = 0;
648fb17a562135dd7597121da9245d0c1bdcda4146fJohn McCall
6498dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::eh_dwarf_cfa);
65077b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner    return RValue::get(Builder.CreateCall(F,
65177b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner                                      llvm::ConstantInt::get(Int32Ty, Offset)));
652fb17a562135dd7597121da9245d0c1bdcda4146fJohn McCall  }
653256f77e431bc6b920ec94cf0bb4ad339ca21b8c9Eli Friedman  case Builtin::BI__builtin_return_address: {
65483c2a98012a65b51be66fd76c3a1b13ed782c558Anton Korobeynikov    Value *Depth = EmitScalarExpr(E->getArg(0));
655578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    Depth = Builder.CreateIntCast(Depth, Int32Ty, false);
6568dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::returnaddress);
65783c2a98012a65b51be66fd76c3a1b13ed782c558Anton Korobeynikov    return RValue::get(Builder.CreateCall(F, Depth));
658256f77e431bc6b920ec94cf0bb4ad339ca21b8c9Eli Friedman  }
659256f77e431bc6b920ec94cf0bb4ad339ca21b8c9Eli Friedman  case Builtin::BI__builtin_frame_address: {
66083c2a98012a65b51be66fd76c3a1b13ed782c558Anton Korobeynikov    Value *Depth = EmitScalarExpr(E->getArg(0));
661578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    Depth = Builder.CreateIntCast(Depth, Int32Ty, false);
6628dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::frameaddress);
66383c2a98012a65b51be66fd76c3a1b13ed782c558Anton Korobeynikov    return RValue::get(Builder.CreateCall(F, Depth));
664256f77e431bc6b920ec94cf0bb4ad339ca21b8c9Eli Friedman  }
6653b660efb9f9fa3e87096f4a96a2093cd17c43c2eEli Friedman  case Builtin::BI__builtin_extract_return_addr: {
666492c4f998d848673d3d6c9e6416115df4036a71dJohn McCall    Value *Address = EmitScalarExpr(E->getArg(0));
667492c4f998d848673d3d6c9e6416115df4036a71dJohn McCall    Value *Result = getTargetHooks().decodeReturnAddress(*this, Address);
668492c4f998d848673d3d6c9e6416115df4036a71dJohn McCall    return RValue::get(Result);
669492c4f998d848673d3d6c9e6416115df4036a71dJohn McCall  }
670492c4f998d848673d3d6c9e6416115df4036a71dJohn McCall  case Builtin::BI__builtin_frob_return_addr: {
671492c4f998d848673d3d6c9e6416115df4036a71dJohn McCall    Value *Address = EmitScalarExpr(E->getArg(0));
672492c4f998d848673d3d6c9e6416115df4036a71dJohn McCall    Value *Result = getTargetHooks().encodeReturnAddress(*this, Address);
673492c4f998d848673d3d6c9e6416115df4036a71dJohn McCall    return RValue::get(Result);
6743b660efb9f9fa3e87096f4a96a2093cd17c43c2eEli Friedman  }
6756374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall  case Builtin::BI__builtin_dwarf_sp_column: {
6762acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::IntegerType *Ty
6776374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall      = cast<llvm::IntegerType>(ConvertType(E->getType()));
6786374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall    int Column = getTargetHooks().getDwarfEHStackPointer(CGM);
6796374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall    if (Column == -1) {
6806374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall      CGM.ErrorUnsupported(E, "__builtin_dwarf_sp_column");
6816374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall      return RValue::get(llvm::UndefValue::get(Ty));
6826374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall    }
6836374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall    return RValue::get(llvm::ConstantInt::get(Ty, Column, true));
6846374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall  }
6856374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall  case Builtin::BI__builtin_init_dwarf_reg_size_table: {
6866374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall    Value *Address = EmitScalarExpr(E->getArg(0));
6876374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall    if (getTargetHooks().initDwarfEHRegSizeTable(*this, Address))
6886374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall      CGM.ErrorUnsupported(E, "__builtin_init_dwarf_reg_size_table");
6896374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall    return RValue::get(llvm::UndefValue::get(ConvertType(E->getType())));
6906374c3307e2d73348f7b8cc73eeeb0998ad0ac94John McCall  }
6917ada111fd5e81aff355e67bad0e4083f552b34bdJohn McCall  case Builtin::BI__builtin_eh_return: {
6927ada111fd5e81aff355e67bad0e4083f552b34bdJohn McCall    Value *Int = EmitScalarExpr(E->getArg(0));
6937ada111fd5e81aff355e67bad0e4083f552b34bdJohn McCall    Value *Ptr = EmitScalarExpr(E->getArg(1));
6947ada111fd5e81aff355e67bad0e4083f552b34bdJohn McCall
6952acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::IntegerType *IntTy = cast<llvm::IntegerType>(Int->getType());
6967ada111fd5e81aff355e67bad0e4083f552b34bdJohn McCall    assert((IntTy->getBitWidth() == 32 || IntTy->getBitWidth() == 64) &&
6977ada111fd5e81aff355e67bad0e4083f552b34bdJohn McCall           "LLVM's __builtin_eh_return only supports 32- and 64-bit variants");
6987ada111fd5e81aff355e67bad0e4083f552b34bdJohn McCall    Value *F = CGM.getIntrinsic(IntTy->getBitWidth() == 32
6997ada111fd5e81aff355e67bad0e4083f552b34bdJohn McCall                                  ? Intrinsic::eh_return_i32
7008dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer                                  : Intrinsic::eh_return_i64);
7017ada111fd5e81aff355e67bad0e4083f552b34bdJohn McCall    Builder.CreateCall2(F, Int, Ptr);
702cd5b22e12b6513163dd131589746c194090f14e6John McCall    Builder.CreateUnreachable();
703cd5b22e12b6513163dd131589746c194090f14e6John McCall
704cd5b22e12b6513163dd131589746c194090f14e6John McCall    // We do need to preserve an insertion point.
705d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    EmitBlock(createBasicBlock("builtin_eh_return.cont"));
706cd5b22e12b6513163dd131589746c194090f14e6John McCall
707cd5b22e12b6513163dd131589746c194090f14e6John McCall    return RValue::get(0);
7087ada111fd5e81aff355e67bad0e4083f552b34bdJohn McCall  }
709a6d75c0324ac690107bbaa7193b526ef21466212Eli Friedman  case Builtin::BI__builtin_unwind_init: {
7108dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::eh_unwind_init);
711a6d75c0324ac690107bbaa7193b526ef21466212Eli Friedman    return RValue::get(Builder.CreateCall(F));
712a6d75c0324ac690107bbaa7193b526ef21466212Eli Friedman  }
7135e11085830d4d4c53ff75575ab75889ee5126854John McCall  case Builtin::BI__builtin_extend_pointer: {
7145e11085830d4d4c53ff75575ab75889ee5126854John McCall    // Extends a pointer to the size of an _Unwind_Word, which is
715d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall    // uint64_t on all platforms.  Generally this gets poked into a
716d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall    // register and eventually used as an address, so if the
717d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall    // addressing registers are wider than pointers and the platform
718d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall    // doesn't implicitly ignore high-order bits when doing
719d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall    // addressing, we need to make sure we zext / sext based on
720d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall    // the platform's expectations.
7215e11085830d4d4c53ff75575ab75889ee5126854John McCall    //
7225e11085830d4d4c53ff75575ab75889ee5126854John McCall    // See: http://gcc.gnu.org/ml/gcc-bugs/2002-02/msg00237.html
723d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall
724d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall    // Cast the pointer to intptr_t.
7255e11085830d4d4c53ff75575ab75889ee5126854John McCall    Value *Ptr = EmitScalarExpr(E->getArg(0));
726d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall    Value *Result = Builder.CreatePtrToInt(Ptr, IntPtrTy, "extend.cast");
727d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall
728d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall    // If that's 64 bits, we're done.
729d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall    if (IntPtrTy->getBitWidth() == 64)
730d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall      return RValue::get(Result);
731d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall
732d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall    // Otherwise, ask the codegen data what to do.
733492c4f998d848673d3d6c9e6416115df4036a71dJohn McCall    if (getTargetHooks().extendPointerWithSExt())
734d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall      return RValue::get(Builder.CreateSExt(Result, Int64Ty, "extend.sext"));
735d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall    else
736d0b76ca10feefcfda5cb16698e50197e87a7d876John McCall      return RValue::get(Builder.CreateZExt(Result, Int64Ty, "extend.zext"));
7375e11085830d4d4c53ff75575ab75889ee5126854John McCall  }
738a6d75c0324ac690107bbaa7193b526ef21466212Eli Friedman  case Builtin::BI__builtin_setjmp: {
73978673d9f910e8dfe13248c2426c51d8f9fb28572John McCall    // Buffer is a void**.
740a6d75c0324ac690107bbaa7193b526ef21466212Eli Friedman    Value *Buf = EmitScalarExpr(E->getArg(0));
74178673d9f910e8dfe13248c2426c51d8f9fb28572John McCall
74278673d9f910e8dfe13248c2426c51d8f9fb28572John McCall    // Store the frame pointer to the setjmp buffer.
743a6d75c0324ac690107bbaa7193b526ef21466212Eli Friedman    Value *FrameAddr =
74478673d9f910e8dfe13248c2426c51d8f9fb28572John McCall      Builder.CreateCall(CGM.getIntrinsic(Intrinsic::frameaddress),
74577b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner                         ConstantInt::get(Int32Ty, 0));
746a6d75c0324ac690107bbaa7193b526ef21466212Eli Friedman    Builder.CreateStore(FrameAddr, Buf);
74778673d9f910e8dfe13248c2426c51d8f9fb28572John McCall
7486d172e2985346e55095c75f456901ea5d40fddaaJim Grosbach    // Store the stack pointer to the setjmp buffer.
7496d172e2985346e55095c75f456901ea5d40fddaaJim Grosbach    Value *StackAddr =
7506d172e2985346e55095c75f456901ea5d40fddaaJim Grosbach      Builder.CreateCall(CGM.getIntrinsic(Intrinsic::stacksave));
7516d172e2985346e55095c75f456901ea5d40fddaaJim Grosbach    Value *StackSaveSlot =
75277b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner      Builder.CreateGEP(Buf, ConstantInt::get(Int32Ty, 2));
7536d172e2985346e55095c75f456901ea5d40fddaaJim Grosbach    Builder.CreateStore(StackAddr, StackSaveSlot);
7546d172e2985346e55095c75f456901ea5d40fddaaJim Grosbach
75578673d9f910e8dfe13248c2426c51d8f9fb28572John McCall    // Call LLVM's EH setjmp, which is lightweight.
75678673d9f910e8dfe13248c2426c51d8f9fb28572John McCall    Value *F = CGM.getIntrinsic(Intrinsic::eh_sjlj_setjmp);
757d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    Buf = Builder.CreateBitCast(Buf, Int8PtrTy);
758a6d75c0324ac690107bbaa7193b526ef21466212Eli Friedman    return RValue::get(Builder.CreateCall(F, Buf));
759a6d75c0324ac690107bbaa7193b526ef21466212Eli Friedman  }
760a6d75c0324ac690107bbaa7193b526ef21466212Eli Friedman  case Builtin::BI__builtin_longjmp: {
761a6d75c0324ac690107bbaa7193b526ef21466212Eli Friedman    Value *Buf = EmitScalarExpr(E->getArg(0));
762d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    Buf = Builder.CreateBitCast(Buf, Int8PtrTy);
76378673d9f910e8dfe13248c2426c51d8f9fb28572John McCall
76478673d9f910e8dfe13248c2426c51d8f9fb28572John McCall    // Call LLVM's EH longjmp, which is lightweight.
76578673d9f910e8dfe13248c2426c51d8f9fb28572John McCall    Builder.CreateCall(CGM.getIntrinsic(Intrinsic::eh_sjlj_longjmp), Buf);
76678673d9f910e8dfe13248c2426c51d8f9fb28572John McCall
767cd5b22e12b6513163dd131589746c194090f14e6John McCall    // longjmp doesn't return; mark this as unreachable.
768cd5b22e12b6513163dd131589746c194090f14e6John McCall    Builder.CreateUnreachable();
769cd5b22e12b6513163dd131589746c194090f14e6John McCall
770cd5b22e12b6513163dd131589746c194090f14e6John McCall    // We do need to preserve an insertion point.
771d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    EmitBlock(createBasicBlock("longjmp.cont"));
772cd5b22e12b6513163dd131589746c194090f14e6John McCall
773cd5b22e12b6513163dd131589746c194090f14e6John McCall    return RValue::get(0);
774a6d75c0324ac690107bbaa7193b526ef21466212Eli Friedman  }
7751ffe281890f3cd7728316b45a1f3dd4d3120af7bMon P Wang  case Builtin::BI__sync_fetch_and_add:
7761ffe281890f3cd7728316b45a1f3dd4d3120af7bMon P Wang  case Builtin::BI__sync_fetch_and_sub:
7775caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_or:
7785caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_and:
7795caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_xor:
7805caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_add_and_fetch:
7815caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_sub_and_fetch:
7825caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_and_and_fetch:
7835caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_or_and_fetch:
7845caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_xor_and_fetch:
7855caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_val_compare_and_swap:
7865caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_bool_compare_and_swap:
7875caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_lock_test_and_set:
7885caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_lock_release:
78923aa9c8ca0bc441aab2a38a4c9fc7a1c9e9ac16aChris Lattner  case Builtin::BI__sync_swap:
790b219cfc4d75f0a03630b7c4509ef791b7e97b2c8David Blaikie    llvm_unreachable("Shouldn't make it through sema");
7915caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_add_1:
7925caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_add_2:
7935caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_add_4:
7945caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_add_8:
7955caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_add_16:
796c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomic(*this, llvm::AtomicRMWInst::Add, E);
7975caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_sub_1:
7985caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_sub_2:
7995caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_sub_4:
8005caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_sub_8:
8015caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_sub_16:
802c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomic(*this, llvm::AtomicRMWInst::Sub, E);
8035caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_or_1:
8045caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_or_2:
8055caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_or_4:
8065caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_or_8:
8075caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_or_16:
808c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomic(*this, llvm::AtomicRMWInst::Or, E);
8095caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_and_1:
8105caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_and_2:
8115caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_and_4:
8125caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_and_8:
8135caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_and_16:
814c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomic(*this, llvm::AtomicRMWInst::And, E);
8155caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_xor_1:
8165caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_xor_2:
8175caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_xor_4:
8185caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_xor_8:
8195caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_fetch_and_xor_16:
820c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomic(*this, llvm::AtomicRMWInst::Xor, E);
8211eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
8225caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  // Clang extensions: not overloaded yet.
8231ffe281890f3cd7728316b45a1f3dd4d3120af7bMon P Wang  case Builtin::BI__sync_fetch_and_min:
824c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomic(*this, llvm::AtomicRMWInst::Min, E);
8251ffe281890f3cd7728316b45a1f3dd4d3120af7bMon P Wang  case Builtin::BI__sync_fetch_and_max:
826c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomic(*this, llvm::AtomicRMWInst::Max, E);
8271ffe281890f3cd7728316b45a1f3dd4d3120af7bMon P Wang  case Builtin::BI__sync_fetch_and_umin:
828c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomic(*this, llvm::AtomicRMWInst::UMin, E);
8291ffe281890f3cd7728316b45a1f3dd4d3120af7bMon P Wang  case Builtin::BI__sync_fetch_and_umax:
830c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomic(*this, llvm::AtomicRMWInst::UMax, E);
8310002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar
8325caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_add_and_fetch_1:
8335caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_add_and_fetch_2:
8345caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_add_and_fetch_4:
8355caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_add_and_fetch_8:
8365caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_add_and_fetch_16:
837c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomicPost(*this, llvm::AtomicRMWInst::Add, E,
8380002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar                                llvm::Instruction::Add);
8395caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_sub_and_fetch_1:
8405caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_sub_and_fetch_2:
8415caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_sub_and_fetch_4:
8425caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_sub_and_fetch_8:
8435caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_sub_and_fetch_16:
844c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomicPost(*this, llvm::AtomicRMWInst::Sub, E,
8450002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar                                llvm::Instruction::Sub);
8465caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_and_and_fetch_1:
8475caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_and_and_fetch_2:
8485caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_and_and_fetch_4:
8495caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_and_and_fetch_8:
8505caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_and_and_fetch_16:
851c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomicPost(*this, llvm::AtomicRMWInst::And, E,
8520002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar                                llvm::Instruction::And);
8535caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_or_and_fetch_1:
8545caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_or_and_fetch_2:
8555caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_or_and_fetch_4:
8565caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_or_and_fetch_8:
8575caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_or_and_fetch_16:
858c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomicPost(*this, llvm::AtomicRMWInst::Or, E,
8590002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar                                llvm::Instruction::Or);
8605caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_xor_and_fetch_1:
8615caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_xor_and_fetch_2:
8625caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_xor_and_fetch_4:
8635caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_xor_and_fetch_8:
8645caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_xor_and_fetch_16:
865c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomicPost(*this, llvm::AtomicRMWInst::Xor, E,
8660002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar                                llvm::Instruction::Xor);
8671eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
8685caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_val_compare_and_swap_1:
8695caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_val_compare_and_swap_2:
8705caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_val_compare_and_swap_4:
8715caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_val_compare_and_swap_8:
872cb61a7bbe635cfa941b1aeaaa1fbda1bf900ee51Daniel Dunbar  case Builtin::BI__sync_val_compare_and_swap_16: {
87326815d97c5743481e317f17a8d53a6819d061862John McCall    QualType T = E->getType();
874d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    llvm::Value *DestPtr = EmitScalarExpr(E->getArg(0));
875780a2eb227c3f395a390a143f61bba1724913817Chris Lattner    unsigned AddrSpace =
8764f209445c06a43283c6f72dda7c925538b1578e9Chris Lattner      cast<llvm::PointerType>(DestPtr->getType())->getAddressSpace();
87726815d97c5743481e317f17a8d53a6819d061862John McCall
8789cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::IntegerType *IntType =
879d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall      llvm::IntegerType::get(getLLVMContext(),
880d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall                             getContext().getTypeSize(T));
8819cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *IntPtrType = IntType->getPointerTo(AddrSpace);
882db4325b098eff5e9e660db19f0148423fb21f27fChandler Carruth
88326815d97c5743481e317f17a8d53a6819d061862John McCall    Value *Args[3];
88426815d97c5743481e317f17a8d53a6819d061862John McCall    Args[0] = Builder.CreateBitCast(DestPtr, IntPtrType);
885d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    Args[1] = EmitScalarExpr(E->getArg(1));
8862acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *ValueType = Args[1]->getType();
887d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    Args[1] = EmitToInt(*this, Args[1], T, IntType);
888d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    Args[2] = EmitToInt(*this, EmitScalarExpr(E->getArg(2)), T, IntType);
88926815d97c5743481e317f17a8d53a6819d061862John McCall
890c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    Value *Result = Builder.CreateAtomicCmpXchg(Args[0], Args[1], Args[2],
891c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman                                                llvm::SequentiallyConsistent);
892d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    Result = EmitFromInt(*this, Result, T, ValueType);
89326815d97c5743481e317f17a8d53a6819d061862John McCall    return RValue::get(Result);
894022012e6e5626c3372e1a5493c0929dfc1fa9e47Anders Carlsson  }
8950002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar
8965caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_bool_compare_and_swap_1:
8975caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_bool_compare_and_swap_2:
8985caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_bool_compare_and_swap_4:
8995caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_bool_compare_and_swap_8:
900cb61a7bbe635cfa941b1aeaaa1fbda1bf900ee51Daniel Dunbar  case Builtin::BI__sync_bool_compare_and_swap_16: {
90126815d97c5743481e317f17a8d53a6819d061862John McCall    QualType T = E->getArg(1)->getType();
902d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    llvm::Value *DestPtr = EmitScalarExpr(E->getArg(0));
903f2b95277be59f7d2a82cef8ea9f4cf6a36074593Chris Lattner    unsigned AddrSpace =
9044f209445c06a43283c6f72dda7c925538b1578e9Chris Lattner      cast<llvm::PointerType>(DestPtr->getType())->getAddressSpace();
90526815d97c5743481e317f17a8d53a6819d061862John McCall
9069cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::IntegerType *IntType =
907d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall      llvm::IntegerType::get(getLLVMContext(),
908d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall                             getContext().getTypeSize(T));
9099cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *IntPtrType = IntType->getPointerTo(AddrSpace);
910db4325b098eff5e9e660db19f0148423fb21f27fChandler Carruth
91126815d97c5743481e317f17a8d53a6819d061862John McCall    Value *Args[3];
91226815d97c5743481e317f17a8d53a6819d061862John McCall    Args[0] = Builder.CreateBitCast(DestPtr, IntPtrType);
913d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    Args[1] = EmitToInt(*this, EmitScalarExpr(E->getArg(1)), T, IntType);
914d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    Args[2] = EmitToInt(*this, EmitScalarExpr(E->getArg(2)), T, IntType);
91526815d97c5743481e317f17a8d53a6819d061862John McCall
916db4325b098eff5e9e660db19f0148423fb21f27fChandler Carruth    Value *OldVal = Args[1];
917c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    Value *PrevVal = Builder.CreateAtomicCmpXchg(Args[0], Args[1], Args[2],
918c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman                                                 llvm::SequentiallyConsistent);
9190002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar    Value *Result = Builder.CreateICmpEQ(PrevVal, OldVal);
9200002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar    // zext bool to int.
92126815d97c5743481e317f17a8d53a6819d061862John McCall    Result = Builder.CreateZExt(Result, ConvertType(E->getType()));
92226815d97c5743481e317f17a8d53a6819d061862John McCall    return RValue::get(Result);
9230002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar  }
9240002d23aaf10f307273dab5facda01c137283d22Daniel Dunbar
92523aa9c8ca0bc441aab2a38a4c9fc7a1c9e9ac16aChris Lattner  case Builtin::BI__sync_swap_1:
92623aa9c8ca0bc441aab2a38a4c9fc7a1c9e9ac16aChris Lattner  case Builtin::BI__sync_swap_2:
92723aa9c8ca0bc441aab2a38a4c9fc7a1c9e9ac16aChris Lattner  case Builtin::BI__sync_swap_4:
92823aa9c8ca0bc441aab2a38a4c9fc7a1c9e9ac16aChris Lattner  case Builtin::BI__sync_swap_8:
92923aa9c8ca0bc441aab2a38a4c9fc7a1c9e9ac16aChris Lattner  case Builtin::BI__sync_swap_16:
930c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomic(*this, llvm::AtomicRMWInst::Xchg, E);
93123aa9c8ca0bc441aab2a38a4c9fc7a1c9e9ac16aChris Lattner
9325caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_lock_test_and_set_1:
9335caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_lock_test_and_set_2:
9345caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_lock_test_and_set_4:
9355caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_lock_test_and_set_8:
9365caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_lock_test_and_set_16:
937c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    return EmitBinaryAtomic(*this, llvm::AtomicRMWInst::Xchg, E);
938cb61a7bbe635cfa941b1aeaaa1fbda1bf900ee51Daniel Dunbar
9395caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_lock_release_1:
9405caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_lock_release_2:
9415caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_lock_release_4:
9425caa370ea6f70bd3e7e4a9cc3b69ac1a849c8534Chris Lattner  case Builtin::BI__sync_lock_release_8:
943f58cd9bca9c2e7373300fc8bb7c57cff7e4eda4fChris Lattner  case Builtin::BI__sync_lock_release_16: {
944f58cd9bca9c2e7373300fc8bb7c57cff7e4eda4fChris Lattner    Value *Ptr = EmitScalarExpr(E->getArg(0));
945eb43f4a8f133c2bc510ae136a556e92b68a6ff44Eli Friedman    QualType ElTy = E->getArg(0)->getType()->getPointeeType();
946eb43f4a8f133c2bc510ae136a556e92b68a6ff44Eli Friedman    CharUnits StoreSize = getContext().getTypeSizeInChars(ElTy);
947ff993202abf6f5dc41c584c7103f5d39f248b3ddEli Friedman    llvm::Type *ITy = llvm::IntegerType::get(getLLVMContext(),
948ff993202abf6f5dc41c584c7103f5d39f248b3ddEli Friedman                                             StoreSize.getQuantity() * 8);
949ff993202abf6f5dc41c584c7103f5d39f248b3ddEli Friedman    Ptr = Builder.CreateBitCast(Ptr, ITy->getPointerTo());
950ff993202abf6f5dc41c584c7103f5d39f248b3ddEli Friedman    llvm::StoreInst *Store =
951ff993202abf6f5dc41c584c7103f5d39f248b3ddEli Friedman      Builder.CreateStore(llvm::Constant::getNullValue(ITy), Ptr);
952eb43f4a8f133c2bc510ae136a556e92b68a6ff44Eli Friedman    Store->setAlignment(StoreSize.getQuantity());
953eb43f4a8f133c2bc510ae136a556e92b68a6ff44Eli Friedman    Store->setAtomic(llvm::Release);
954eb4f81e174b11633f7b85f555ea5d2834d6dae8aDaniel Dunbar    return RValue::get(0);
955f58cd9bca9c2e7373300fc8bb7c57cff7e4eda4fChris Lattner  }
956ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar
957f58cd9bca9c2e7373300fc8bb7c57cff7e4eda4fChris Lattner  case Builtin::BI__sync_synchronize: {
958c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    // We assume this is supposed to correspond to a C++0x-style
959c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    // sequentially-consistent fence (i.e. this is only usable for
960c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    // synchonization, not device I/O or anything like that). This intrinsic
961c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    // is really badly designed in the sense that in theory, there isn't
962c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    // any way to safely use it... but in practice, it mostly works
963c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    // to use it with non-atomic loads and stores to get acquire/release
964c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    // semantics.
965c83b975f1fb9d11e10b5aa25029ae9bb5fa80e07Eli Friedman    Builder.CreateFence(llvm::SequentiallyConsistent);
966eb4f81e174b11633f7b85f555ea5d2834d6dae8aDaniel Dunbar    return RValue::get(0);
967f58cd9bca9c2e7373300fc8bb7c57cff7e4eda4fChris Lattner  }
9681eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
9692c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith  case Builtin::BI__c11_atomic_is_lock_free:
9702c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith  case Builtin::BI__atomic_is_lock_free: {
9712c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    // Call "bool __atomic_is_lock_free(size_t size, void *ptr)". For the
9722c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    // __c11 builtin, ptr is 0 (indicating a properly-aligned object), since
9732c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    // _Atomic(T) is always properly-aligned.
9742c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    const char *LibCallName = "__atomic_is_lock_free";
9752c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    CallArgList Args;
9762c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    Args.add(RValue::get(EmitScalarExpr(E->getArg(0))),
9772c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith             getContext().getSizeType());
9782c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    if (BuiltinID == Builtin::BI__atomic_is_lock_free)
9792c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      Args.add(RValue::get(EmitScalarExpr(E->getArg(1))),
9802c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith               getContext().VoidPtrTy);
9812c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    else
9822c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      Args.add(RValue::get(llvm::Constant::getNullValue(VoidPtrTy)),
9832c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith               getContext().VoidPtrTy);
9842c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    const CGFunctionInfo &FuncInfo =
9852c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith        CGM.getTypes().arrangeFunctionCall(E->getType(), Args,
9862c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith                                           FunctionType::ExtInfo(),
9872c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith                                           RequiredArgs::All);
9882c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    llvm::FunctionType *FTy = CGM.getTypes().GetFunctionType(FuncInfo);
9892c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    llvm::Constant *Func = CGM.CreateRuntimeFunction(FTy, LibCallName);
9902c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    return EmitCall(FuncInfo, Func, ReturnValueSlot(), Args);
9912c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith  }
9922c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith
9932c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith  case Builtin::BI__atomic_test_and_set: {
9942c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    // Look at the argument type to determine whether this is a volatile
9952c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    // operation. The parameter type is always volatile.
9962c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    QualType PtrTy = E->getArg(0)->IgnoreImpCasts()->getType();
9972c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    bool Volatile =
9982c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith        PtrTy->castAs<PointerType>()->getPointeeType().isVolatileQualified();
9992c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith
10002c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    Value *Ptr = EmitScalarExpr(E->getArg(0));
10012c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    unsigned AddrSpace =
10022c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith        cast<llvm::PointerType>(Ptr->getType())->getAddressSpace();
10032c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    Ptr = Builder.CreateBitCast(Ptr, Int8Ty->getPointerTo(AddrSpace));
10042c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    Value *NewVal = Builder.getInt8(1);
10052c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    Value *Order = EmitScalarExpr(E->getArg(1));
10062c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    if (isa<llvm::ConstantInt>(Order)) {
10072c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      int ord = cast<llvm::ConstantInt>(Order)->getZExtValue();
10082c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      AtomicRMWInst *Result = 0;
10092c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      switch (ord) {
10102c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      case 0:  // memory_order_relaxed
10112c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      default: // invalid order
10122c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith        Result = Builder.CreateAtomicRMW(llvm::AtomicRMWInst::Xchg,
10132c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith                                         Ptr, NewVal,
10142c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith                                         llvm::Monotonic);
10152c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith        break;
10162c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      case 1:  // memory_order_consume
10172c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      case 2:  // memory_order_acquire
10182c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith        Result = Builder.CreateAtomicRMW(llvm::AtomicRMWInst::Xchg,
10192c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith                                         Ptr, NewVal,
10202c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith                                         llvm::Acquire);
10212c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith        break;
10222c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      case 3:  // memory_order_release
10232c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith        Result = Builder.CreateAtomicRMW(llvm::AtomicRMWInst::Xchg,
10242c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith                                         Ptr, NewVal,
10252c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith                                         llvm::Release);
10262c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith        break;
10272c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      case 4:  // memory_order_acq_rel
10282c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith        Result = Builder.CreateAtomicRMW(llvm::AtomicRMWInst::Xchg,
10292c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith                                         Ptr, NewVal,
10302c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith                                         llvm::AcquireRelease);
10312c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith        break;
10322c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      case 5:  // memory_order_seq_cst
10332c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith        Result = Builder.CreateAtomicRMW(llvm::AtomicRMWInst::Xchg,
10342c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith                                         Ptr, NewVal,
10352c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith                                         llvm::SequentiallyConsistent);
10362c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith        break;
10372c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      }
10382c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      Result->setVolatile(Volatile);
10392c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      return RValue::get(Builder.CreateIsNotNull(Result, "tobool"));
10402c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    }
10412c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith
10422c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    llvm::BasicBlock *ContBB = createBasicBlock("atomic.continue", CurFn);
10432c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith
10442c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    llvm::BasicBlock *BBs[5] = {
10452c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      createBasicBlock("monotonic", CurFn),
10462c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      createBasicBlock("acquire", CurFn),
10472c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      createBasicBlock("release", CurFn),
10482c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      createBasicBlock("acqrel", CurFn),
10492c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      createBasicBlock("seqcst", CurFn)
10502c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    };
10512c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    llvm::AtomicOrdering Orders[5] = {
10522c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      llvm::Monotonic, llvm::Acquire, llvm::Release,
10532c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      llvm::AcquireRelease, llvm::SequentiallyConsistent
10542c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    };
10552c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith
10562c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    Order = Builder.CreateIntCast(Order, Builder.getInt32Ty(), false);
10572c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    llvm::SwitchInst *SI = Builder.CreateSwitch(Order, BBs[0]);
10582c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith
10592c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    Builder.SetInsertPoint(ContBB);
10602c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    PHINode *Result = Builder.CreatePHI(Int8Ty, 5, "was_set");
10612c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith
10622c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    for (unsigned i = 0; i < 5; ++i) {
10632c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      Builder.SetInsertPoint(BBs[i]);
10642c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      AtomicRMWInst *RMW = Builder.CreateAtomicRMW(llvm::AtomicRMWInst::Xchg,
10652c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith                                                   Ptr, NewVal, Orders[i]);
10662c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      RMW->setVolatile(Volatile);
10672c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      Result->addIncoming(RMW, BBs[i]);
10682c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      Builder.CreateBr(ContBB);
10692c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    }
10702c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith
10712c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    SI->addCase(Builder.getInt32(0), BBs[0]);
10722c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    SI->addCase(Builder.getInt32(1), BBs[1]);
10732c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    SI->addCase(Builder.getInt32(2), BBs[1]);
10742c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    SI->addCase(Builder.getInt32(3), BBs[2]);
10752c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    SI->addCase(Builder.getInt32(4), BBs[3]);
10762c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    SI->addCase(Builder.getInt32(5), BBs[4]);
10772c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith
10782c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    Builder.SetInsertPoint(ContBB);
10792c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    return RValue::get(Builder.CreateIsNotNull(Result, "tobool"));
10802c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith  }
10812c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith
10822c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith  case Builtin::BI__atomic_clear: {
10832c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    QualType PtrTy = E->getArg(0)->IgnoreImpCasts()->getType();
10842c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    bool Volatile =
10852c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith        PtrTy->castAs<PointerType>()->getPointeeType().isVolatileQualified();
10862c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith
10872c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    Value *Ptr = EmitScalarExpr(E->getArg(0));
10882c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    unsigned AddrSpace =
10892c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith        cast<llvm::PointerType>(Ptr->getType())->getAddressSpace();
10902c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    Ptr = Builder.CreateBitCast(Ptr, Int8Ty->getPointerTo(AddrSpace));
10912c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    Value *NewVal = Builder.getInt8(0);
10922c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    Value *Order = EmitScalarExpr(E->getArg(1));
10932c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    if (isa<llvm::ConstantInt>(Order)) {
10942c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      int ord = cast<llvm::ConstantInt>(Order)->getZExtValue();
10952c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      StoreInst *Store = Builder.CreateStore(NewVal, Ptr, Volatile);
10962c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      Store->setAlignment(1);
10972c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      switch (ord) {
10982c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      case 0:  // memory_order_relaxed
10992c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      default: // invalid order
11002c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith        Store->setOrdering(llvm::Monotonic);
11012c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith        break;
11022c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      case 3:  // memory_order_release
11032c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith        Store->setOrdering(llvm::Release);
11042c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith        break;
11052c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      case 5:  // memory_order_seq_cst
11062c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith        Store->setOrdering(llvm::SequentiallyConsistent);
11072c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith        break;
11082c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      }
11092c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      return RValue::get(0);
11102c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    }
11112c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith
11122c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    llvm::BasicBlock *ContBB = createBasicBlock("atomic.continue", CurFn);
11132c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith
11142c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    llvm::BasicBlock *BBs[3] = {
11152c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      createBasicBlock("monotonic", CurFn),
11162c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      createBasicBlock("release", CurFn),
11172c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      createBasicBlock("seqcst", CurFn)
11182c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    };
11192c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    llvm::AtomicOrdering Orders[3] = {
11202c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      llvm::Monotonic, llvm::Release, llvm::SequentiallyConsistent
11212c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    };
11222c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith
11232c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    Order = Builder.CreateIntCast(Order, Builder.getInt32Ty(), false);
11242c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    llvm::SwitchInst *SI = Builder.CreateSwitch(Order, BBs[0]);
11252c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith
11262c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    for (unsigned i = 0; i < 3; ++i) {
11272c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      Builder.SetInsertPoint(BBs[i]);
11282c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      StoreInst *Store = Builder.CreateStore(NewVal, Ptr, Volatile);
11292c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      Store->setAlignment(1);
11302c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      Store->setOrdering(Orders[i]);
11312c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith      Builder.CreateBr(ContBB);
11322c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    }
11332c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith
11342c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    SI->addCase(Builder.getInt32(0), BBs[0]);
11352c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    SI->addCase(Builder.getInt32(3), BBs[1]);
11362c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    SI->addCase(Builder.getInt32(5), BBs[2]);
11372c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith
11382c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    Builder.SetInsertPoint(ContBB);
11392c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith    return RValue::get(0);
11402c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith  }
11412c39d71bb7cefdfe6116fa52454f3b3dc5abd517Richard Smith
1142276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman  case Builtin::BI__atomic_thread_fence:
1143fafbf06732746f3ceca21d452d77b144ba8652aeRichard Smith  case Builtin::BI__atomic_signal_fence:
1144fafbf06732746f3ceca21d452d77b144ba8652aeRichard Smith  case Builtin::BI__c11_atomic_thread_fence:
1145fafbf06732746f3ceca21d452d77b144ba8652aeRichard Smith  case Builtin::BI__c11_atomic_signal_fence: {
1146276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    llvm::SynchronizationScope Scope;
1147fafbf06732746f3ceca21d452d77b144ba8652aeRichard Smith    if (BuiltinID == Builtin::BI__atomic_signal_fence ||
1148fafbf06732746f3ceca21d452d77b144ba8652aeRichard Smith        BuiltinID == Builtin::BI__c11_atomic_signal_fence)
1149276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      Scope = llvm::SingleThread;
1150276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    else
1151276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      Scope = llvm::CrossThread;
1152276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Value *Order = EmitScalarExpr(E->getArg(0));
1153276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    if (isa<llvm::ConstantInt>(Order)) {
1154276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      int ord = cast<llvm::ConstantInt>(Order)->getZExtValue();
1155276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      switch (ord) {
1156276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      case 0:  // memory_order_relaxed
1157276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      default: // invalid order
1158276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman        break;
1159276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      case 1:  // memory_order_consume
1160276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      case 2:  // memory_order_acquire
1161276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman        Builder.CreateFence(llvm::Acquire, Scope);
1162276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman        break;
1163276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      case 3:  // memory_order_release
1164276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman        Builder.CreateFence(llvm::Release, Scope);
1165276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman        break;
1166276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      case 4:  // memory_order_acq_rel
1167276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman        Builder.CreateFence(llvm::AcquireRelease, Scope);
1168276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman        break;
1169276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      case 5:  // memory_order_seq_cst
1170276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman        Builder.CreateFence(llvm::SequentiallyConsistent, Scope);
1171276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman        break;
1172276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      }
1173276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman      return RValue::get(0);
1174276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    }
1175276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman
1176276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    llvm::BasicBlock *AcquireBB, *ReleaseBB, *AcqRelBB, *SeqCstBB;
1177276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    AcquireBB = createBasicBlock("acquire", CurFn);
1178276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    ReleaseBB = createBasicBlock("release", CurFn);
1179276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    AcqRelBB = createBasicBlock("acqrel", CurFn);
1180276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    SeqCstBB = createBasicBlock("seqcst", CurFn);
1181276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    llvm::BasicBlock *ContBB = createBasicBlock("atomic.continue", CurFn);
1182276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman
1183276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Order = Builder.CreateIntCast(Order, Builder.getInt32Ty(), false);
1184276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    llvm::SwitchInst *SI = Builder.CreateSwitch(Order, ContBB);
1185276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman
1186276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.SetInsertPoint(AcquireBB);
1187276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.CreateFence(llvm::Acquire, Scope);
1188276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.CreateBr(ContBB);
1189276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    SI->addCase(Builder.getInt32(1), AcquireBB);
1190276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    SI->addCase(Builder.getInt32(2), AcquireBB);
1191276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman
1192276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.SetInsertPoint(ReleaseBB);
1193276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.CreateFence(llvm::Release, Scope);
1194276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.CreateBr(ContBB);
1195276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    SI->addCase(Builder.getInt32(3), ReleaseBB);
1196276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman
1197276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.SetInsertPoint(AcqRelBB);
1198276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.CreateFence(llvm::AcquireRelease, Scope);
1199276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.CreateBr(ContBB);
1200276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    SI->addCase(Builder.getInt32(4), AcqRelBB);
1201276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman
1202276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.SetInsertPoint(SeqCstBB);
1203276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.CreateFence(llvm::SequentiallyConsistent, Scope);
1204276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.CreateBr(ContBB);
1205276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    SI->addCase(Builder.getInt32(5), SeqCstBB);
1206276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman
1207276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    Builder.SetInsertPoint(ContBB);
1208276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman    return RValue::get(0);
1209276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman  }
1210276b061970939293f1abaf694bd3ef05b2cbda79Eli Friedman
1211ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar    // Library functions with special handling.
1212ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar  case Builtin::BIsqrt:
1213ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar  case Builtin::BIsqrtf:
1214ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar  case Builtin::BIsqrtl: {
1215beb41281f8355caa05700d0a77539defbdf428f8John McCall    // TODO: there is currently no set of optimizer flags
1216beb41281f8355caa05700d0a77539defbdf428f8John McCall    // sufficient for us to rewrite sqrt to @llvm.sqrt.
1217beb41281f8355caa05700d0a77539defbdf428f8John McCall    // -fmath-errno=0 is not good enough; we need finiteness.
1218beb41281f8355caa05700d0a77539defbdf428f8John McCall    // We could probably precondition the call with an ult
1219beb41281f8355caa05700d0a77539defbdf428f8John McCall    // against 0, but is that worth the complexity?
1220beb41281f8355caa05700d0a77539defbdf428f8John McCall    break;
1221ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar  }
1222ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar
1223ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar  case Builtin::BIpow:
1224ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar  case Builtin::BIpowf:
1225ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar  case Builtin::BIpowl: {
1226ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar    // Rewrite sqrt to intrinsic if allowed.
122740b598eea1310ec9ed554d56ce3e25b34c585458Argyrios Kyrtzidis    if (!FD->hasAttr<ConstAttr>())
1228ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar      break;
1229ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar    Value *Base = EmitScalarExpr(E->getArg(0));
1230ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar    Value *Exponent = EmitScalarExpr(E->getArg(1));
12319cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *ArgType = Base->getType();
12328dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::pow, ArgType);
1233578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    return RValue::get(Builder.CreateCall2(F, Base, Exponent));
1234ef2abfee3ea16ec74942dc09e9e425f46aeb2582Daniel Dunbar  }
1235ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman
1236094240ab184c3ca4b94e9d7eac80fcd34d8dd30cCameron Zwarich  case Builtin::BIfma:
1237094240ab184c3ca4b94e9d7eac80fcd34d8dd30cCameron Zwarich  case Builtin::BIfmaf:
1238094240ab184c3ca4b94e9d7eac80fcd34d8dd30cCameron Zwarich  case Builtin::BIfmal:
1239094240ab184c3ca4b94e9d7eac80fcd34d8dd30cCameron Zwarich  case Builtin::BI__builtin_fma:
1240094240ab184c3ca4b94e9d7eac80fcd34d8dd30cCameron Zwarich  case Builtin::BI__builtin_fmaf:
1241094240ab184c3ca4b94e9d7eac80fcd34d8dd30cCameron Zwarich  case Builtin::BI__builtin_fmal: {
1242094240ab184c3ca4b94e9d7eac80fcd34d8dd30cCameron Zwarich    // Rewrite fma to intrinsic.
1243094240ab184c3ca4b94e9d7eac80fcd34d8dd30cCameron Zwarich    Value *FirstArg = EmitScalarExpr(E->getArg(0));
12449cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *ArgType = FirstArg->getType();
12458dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Value *F = CGM.getIntrinsic(Intrinsic::fma, ArgType);
1246094240ab184c3ca4b94e9d7eac80fcd34d8dd30cCameron Zwarich    return RValue::get(Builder.CreateCall3(F, FirstArg,
1247094240ab184c3ca4b94e9d7eac80fcd34d8dd30cCameron Zwarich                                              EmitScalarExpr(E->getArg(1)),
1248578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer                                              EmitScalarExpr(E->getArg(2))));
1249094240ab184c3ca4b94e9d7eac80fcd34d8dd30cCameron Zwarich  }
1250094240ab184c3ca4b94e9d7eac80fcd34d8dd30cCameron Zwarich
1251ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman  case Builtin::BI__builtin_signbit:
1252ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman  case Builtin::BI__builtin_signbitf:
1253ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman  case Builtin::BI__builtin_signbitl: {
1254ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman    LLVMContext &C = CGM.getLLVMContext();
1255ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman
1256ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman    Value *Arg = EmitScalarExpr(E->getArg(0));
12572acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *ArgTy = Arg->getType();
1258ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman    if (ArgTy->isPPC_FP128Ty())
1259ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman      break; // FIXME: I'm not sure what the right implementation is here.
1260ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman    int ArgWidth = ArgTy->getPrimitiveSizeInBits();
12612acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *ArgIntTy = llvm::IntegerType::get(C, ArgWidth);
1262ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman    Value *BCArg = Builder.CreateBitCast(Arg, ArgIntTy);
1263ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman    Value *ZeroCmp = llvm::Constant::getNullValue(ArgIntTy);
1264ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman    Value *Result = Builder.CreateICmpSLT(BCArg, ZeroCmp);
1265ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman    return RValue::get(Builder.CreateZExt(Result, ConvertType(E->getType())));
1266ba68b08a05587490ed4c2e3d26f3a742c995c660Eli Friedman  }
126777f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge  case Builtin::BI__builtin_annotation: {
126877f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge    llvm::Value *AnnVal = EmitScalarExpr(E->getArg(0));
126977f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge    llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::annotation,
127077f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge                                      AnnVal->getType());
127177f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge
127277f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge    // Get the annotation string, go through casts. Sema requires this to be a
127377f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge    // non-wide string literal, potentially casted, so the cast<> is safe.
127477f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge    const Expr *AnnotationStrExpr = E->getArg(1)->IgnoreParenCasts();
127577f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge    llvm::StringRef Str = cast<StringLiteral>(AnnotationStrExpr)->getString();
127677f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge    return RValue::get(EmitAnnotationCall(F, AnnVal, Str, E->getExprLoc()));
127777f68bb90af93b95045fb994e7cd68137adcc132Julien Lerouge  }
12787ea2e3f6aae9b7511686d3d26dee690fee81c3aaNate Begeman  }
12791eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1280a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  // If this is an alias for a lib function (e.g. __builtin_sin), emit
1281a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  // the call using the normal call path, but using the unmangled
1282a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  // version of the function name.
1283a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  if (getContext().BuiltinInfo.isLibFunction(BuiltinID))
1284a45680b7e7c49ea9893c6cff585984f3e4120366John McCall    return emitLibraryCall(*this, FD, E,
1285a45680b7e7c49ea9893c6cff585984f3e4120366John McCall                           CGM.getBuiltinLibFunction(FD, BuiltinID));
1286a45680b7e7c49ea9893c6cff585984f3e4120366John McCall
1287a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  // If this is a predefined lib function (e.g. malloc), emit the call
1288a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  // using exactly the normal call path.
1289a45680b7e7c49ea9893c6cff585984f3e4120366John McCall  if (getContext().BuiltinInfo.isPredefinedLibFunction(BuiltinID))
1290a45680b7e7c49ea9893c6cff585984f3e4120366John McCall    return emitLibraryCall(*this, FD, E, EmitScalarExpr(E->getCallee()));
12911eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1292b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner  // See if we have a target specific intrinsic.
1293a6f80ef997f0363386749087b325607eaa5adcfcDale Johannesen  const char *Name = getContext().BuiltinInfo.GetName(BuiltinID);
129455cc2ed722e041228670d26d548e5590e355acedDaniel Dunbar  Intrinsic::ID IntrinsicID = Intrinsic::not_intrinsic;
129555cc2ed722e041228670d26d548e5590e355acedDaniel Dunbar  if (const char *Prefix =
12961eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      llvm::Triple::getArchTypePrefix(Target.getTriple().getArch()))
129755cc2ed722e041228670d26d548e5590e355acedDaniel Dunbar    IntrinsicID = Intrinsic::getIntrinsicForGCCBuiltin(Prefix, Name);
12981eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1299b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner  if (IntrinsicID != Intrinsic::not_intrinsic) {
1300b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    SmallVector<Value*, 16> Args;
13011eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
130246c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    // Find out if any arguments are required to be integer constant
130346c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    // expressions.
130446c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    unsigned ICEArguments = 0;
130546c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    ASTContext::GetBuiltinTypeError Error;
130646c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    getContext().GetBuiltinType(BuiltinID, Error, &ICEArguments);
130746c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    assert(Error == ASTContext::GE_None && "Should not codegen an error");
130846c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner
1309b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    Function *F = CGM.getIntrinsic(IntrinsicID);
13102acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::FunctionType *FTy = F->getFunctionType();
13111eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1312b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    for (unsigned i = 0, e = E->getNumArgs(); i != e; ++i) {
131346c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner      Value *ArgValue;
131446c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner      // If this is a normal argument, just emit it as a scalar.
131546c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner      if ((ICEArguments & (1 << i)) == 0) {
131646c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner        ArgValue = EmitScalarExpr(E->getArg(i));
131746c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner      } else {
131846c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner        // If this is required to be a constant, constant fold it so that we
131946c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner        // know that the generated intrinsic gets a ConstantInt.
132046c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner        llvm::APSInt Result;
132146c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner        bool IsConst = E->getArg(i)->isIntegerConstantExpr(Result,getContext());
132246c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner        assert(IsConst && "Constant arg isn't actually constant?");
132346c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner        (void)IsConst;
1324d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall        ArgValue = llvm::ConstantInt::get(getLLVMContext(), Result);
132546c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner      }
13261eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1327b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner      // If the intrinsic arg type is different from the builtin arg type
1328b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner      // we need to do a bit cast.
13292acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner      llvm::Type *PTy = FTy->getParamType(i);
1330b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner      if (PTy != ArgValue->getType()) {
1331b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner        assert(PTy->canLosslesslyBitCastTo(FTy->getParamType(i)) &&
1332b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner               "Must be able to losslessly bit cast to param");
1333b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner        ArgValue = Builder.CreateBitCast(ArgValue, PTy);
1334b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner      }
13351eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1336b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner      Args.push_back(ArgValue);
1337b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    }
13381eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
13394c7d9f1507d0f102bd4133bba63348636facd469Jay Foad    Value *V = Builder.CreateCall(F, Args);
1340b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    QualType BuiltinRetType = E->getType();
13411eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
13428b418685e9e4f02f4eb2a76e1ec063e07552b68dChris Lattner    llvm::Type *RetTy = VoidTy;
13438b418685e9e4f02f4eb2a76e1ec063e07552b68dChris Lattner    if (!BuiltinRetType->isVoidType())
13448b418685e9e4f02f4eb2a76e1ec063e07552b68dChris Lattner      RetTy = ConvertType(BuiltinRetType);
13451eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1346b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    if (RetTy != V->getType()) {
1347b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner      assert(V->getType()->canLosslesslyBitCastTo(RetTy) &&
1348b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner             "Must be able to losslessly bit cast result type");
1349b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner      V = Builder.CreateBitCast(V, RetTy);
1350b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    }
13511eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1352b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    return RValue::get(V);
1353b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner  }
13541eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1355b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner  // See if we have a target specific builtin that needs to be lowered.
1356f02e9ddf5efc75917af712b3c7f909581205f0a5Daniel Dunbar  if (Value *V = EmitTargetBuiltinExpr(BuiltinID, E))
1357b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner    return RValue::get(V);
13581eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1359488e993a135ce700b982bf099c3d6b856301d642Daniel Dunbar  ErrorUnsupported(E, "builtin function");
13601eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
1361b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner  // Unknown builtin, for now just dump it out and return undef.
1362b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner  if (hasAggregateLLVMType(E->getType()))
1363195337d2e5d4625ae9dc1328c7cdbc7115b0261bDaniel Dunbar    return RValue::getAggregate(CreateMemTemp(E->getType()));
136403e205031b08669f05c41eed5b896fc94c4a12bbOwen Anderson  return RValue::get(llvm::UndefValue::get(ConvertType(E->getType())));
13651eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump}
1366564f1de67d7ba43646b8740db86d6269e3dfbe0bAnders Carlsson
1367f02e9ddf5efc75917af712b3c7f909581205f0a5Daniel DunbarValue *CodeGenFunction::EmitTargetBuiltinExpr(unsigned BuiltinID,
1368f02e9ddf5efc75917af712b3c7f909581205f0a5Daniel Dunbar                                              const CallExpr *E) {
136955cc2ed722e041228670d26d548e5590e355acedDaniel Dunbar  switch (Target.getTriple().getArch()) {
13702752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner  case llvm::Triple::arm:
13712752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner  case llvm::Triple::thumb:
13722752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner    return EmitARMBuiltinExpr(BuiltinID, E);
137355cc2ed722e041228670d26d548e5590e355acedDaniel Dunbar  case llvm::Triple::x86:
137455cc2ed722e041228670d26d548e5590e355acedDaniel Dunbar  case llvm::Triple::x86_64:
1375f02e9ddf5efc75917af712b3c7f909581205f0a5Daniel Dunbar    return EmitX86BuiltinExpr(BuiltinID, E);
137655cc2ed722e041228670d26d548e5590e355acedDaniel Dunbar  case llvm::Triple::ppc:
137755cc2ed722e041228670d26d548e5590e355acedDaniel Dunbar  case llvm::Triple::ppc64:
1378f02e9ddf5efc75917af712b3c7f909581205f0a5Daniel Dunbar    return EmitPPCBuiltinExpr(BuiltinID, E);
13799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case llvm::Triple::hexagon:
13809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    return EmitHexagonBuiltinExpr(BuiltinID, E);
138155cc2ed722e041228670d26d548e5590e355acedDaniel Dunbar  default:
138255cc2ed722e041228670d26d548e5590e355acedDaniel Dunbar    return 0;
138355cc2ed722e041228670d26d548e5590e355acedDaniel Dunbar  }
1384f02e9ddf5efc75917af712b3c7f909581205f0a5Daniel Dunbar}
1385f02e9ddf5efc75917af712b3c7f909581205f0a5Daniel Dunbar
13868b418685e9e4f02f4eb2a76e1ec063e07552b68dChris Lattnerstatic llvm::VectorType *GetNeonType(CodeGenFunction *CGF,
13878b418685e9e4f02f4eb2a76e1ec063e07552b68dChris Lattner                                     NeonTypeFlags TypeFlags) {
138883084c863572b48579767a4dd5dc686e1a8d669dNAKAMURA Takumi  int IsQuad = TypeFlags.isQuad();
138983084c863572b48579767a4dd5dc686e1a8d669dNAKAMURA Takumi  switch (TypeFlags.getEltType()) {
1390da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  case NeonTypeFlags::Int8:
1391da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  case NeonTypeFlags::Poly8:
13928b418685e9e4f02f4eb2a76e1ec063e07552b68dChris Lattner    return llvm::VectorType::get(CGF->Int8Ty, 8 << IsQuad);
1393da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  case NeonTypeFlags::Int16:
1394da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  case NeonTypeFlags::Poly16:
1395da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  case NeonTypeFlags::Float16:
13968b418685e9e4f02f4eb2a76e1ec063e07552b68dChris Lattner    return llvm::VectorType::get(CGF->Int16Ty, 4 << IsQuad);
1397da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  case NeonTypeFlags::Int32:
13988b418685e9e4f02f4eb2a76e1ec063e07552b68dChris Lattner    return llvm::VectorType::get(CGF->Int32Ty, 2 << IsQuad);
1399da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  case NeonTypeFlags::Int64:
14008b418685e9e4f02f4eb2a76e1ec063e07552b68dChris Lattner    return llvm::VectorType::get(CGF->Int64Ty, 1 << IsQuad);
1401da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  case NeonTypeFlags::Float32:
14028b418685e9e4f02f4eb2a76e1ec063e07552b68dChris Lattner    return llvm::VectorType::get(CGF->FloatTy, 2 << IsQuad);
1403561d3abc881033776ece385a01a510e1cbc1fa92David Blaikie  }
1404561d3abc881033776ece385a01a510e1cbc1fa92David Blaikie  llvm_unreachable("Invalid NeonTypeFlags element type!");
1405998622c10198a25ba06c93d7e908f88ba0acc920Nate Begeman}
1406998622c10198a25ba06c93d7e908f88ba0acc920Nate Begeman
1407cf55652cf668c1402eee0b12edd2e5a1bc34d7a1Bob WilsonValue *CodeGenFunction::EmitNeonSplat(Value *V, Constant *C) {
1408d075c01c359b9cc120c3accc7166990f9f4ac423Nate Begeman  unsigned nElts = cast<llvm::VectorType>(V->getType())->getNumElements();
14092ce8842641cc312628c4be836d34eb250e7c3f78Chris Lattner  Value* SV = llvm::ConstantVector::getSplat(nElts, C);
1410d075c01c359b9cc120c3accc7166990f9f4ac423Nate Begeman  return Builder.CreateShuffleVector(V, V, SV, "lane");
1411d075c01c359b9cc120c3accc7166990f9f4ac423Nate Begeman}
1412d075c01c359b9cc120c3accc7166990f9f4ac423Nate Begeman
141330d91718a676177f0d0d0210ce4fdb4f616df6e5Nate BegemanValue *CodeGenFunction::EmitNeonCall(Function *F, SmallVectorImpl<Value*> &Ops,
1414db3d4d036037f379f12643e067b229862d61e932Bob Wilson                                     const char *name,
141561eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman                                     unsigned shift, bool rightshift) {
141630d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman  unsigned j = 0;
141730d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman  for (Function::const_arg_iterator ai = F->arg_begin(), ae = F->arg_end();
141830d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman       ai != ae; ++ai, ++j)
141961eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman    if (shift > 0 && shift == j)
142061eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman      Ops[j] = EmitNeonShiftVector(Ops[j], ai->getType(), rightshift);
142161eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman    else
142261eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman      Ops[j] = Builder.CreateBitCast(Ops[j], ai->getType(), name);
142330d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman
14244c7d9f1507d0f102bd4133bba63348636facd469Jay Foad  return Builder.CreateCall(F, Ops, name);
142530d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman}
142630d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman
14272acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris LattnerValue *CodeGenFunction::EmitNeonShiftVector(Value *V, llvm::Type *Ty,
1428464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                                            bool neg) {
14292ce8842641cc312628c4be836d34eb250e7c3f78Chris Lattner  int SV = cast<ConstantInt>(V)->getSExtValue();
1430464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman
14312acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner  llvm::VectorType *VTy = cast<llvm::VectorType>(Ty);
1432464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman  llvm::Constant *C = ConstantInt::get(VTy->getElementType(), neg ? -SV : SV);
14332ce8842641cc312628c4be836d34eb250e7c3f78Chris Lattner  return llvm::ConstantVector::getSplat(VTy->getNumElements(), C);
1434464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman}
1435464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman
143606b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson/// GetPointeeAlignment - Given an expression with a pointer type, find the
143706b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson/// alignment of the type referenced by the pointer.  Skip over implicit
143806b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson/// casts.
1439f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foadunsigned CodeGenFunction::GetPointeeAlignment(const Expr *Addr) {
144006b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson  unsigned Align = 1;
144106b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson  // Check if the type is a pointer.  The implicit cast operand might not be.
144206b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson  while (Addr->getType()->isPointerType()) {
144306b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    QualType PtTy = Addr->getType()->getPointeeType();
1444d6e73569ccf09369f9bd2021d53c88e7bded06e3Chris Lattner
1445d6e73569ccf09369f9bd2021d53c88e7bded06e3Chris Lattner    // Can't get alignment of incomplete types.
1446d6e73569ccf09369f9bd2021d53c88e7bded06e3Chris Lattner    if (!PtTy->isIncompleteType()) {
1447d6e73569ccf09369f9bd2021d53c88e7bded06e3Chris Lattner      unsigned NewA = getContext().getTypeAlignInChars(PtTy).getQuantity();
1448d6e73569ccf09369f9bd2021d53c88e7bded06e3Chris Lattner      if (NewA > Align)
1449d6e73569ccf09369f9bd2021d53c88e7bded06e3Chris Lattner        Align = NewA;
1450d6e73569ccf09369f9bd2021d53c88e7bded06e3Chris Lattner    }
145106b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson
145206b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    // If the address is an implicit cast, repeat with the cast operand.
145306b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    if (const ImplicitCastExpr *CastAddr = dyn_cast<ImplicitCastExpr>(Addr)) {
145406b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson      Addr = CastAddr->getSubExpr();
145506b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson      continue;
145606b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    }
145706b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    break;
145806b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson  }
1459f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad  return Align;
1460f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad}
1461f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad
1462f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad/// GetPointeeAlignmentValue - Given an expression with a pointer type, find
1463f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad/// the alignment of the type referenced by the pointer.  Skip over implicit
1464f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad/// casts.  Return the alignment as an llvm::Value.
1465f4c3db175101cbf94dad59419c3ed7aed51bf606Jay FoadValue *CodeGenFunction::GetPointeeAlignmentValue(const Expr *Addr) {
1466f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad  return llvm::ConstantInt::get(Int32Ty, GetPointeeAlignment(Addr));
146706b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson}
146806b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson
14692752c0137d95aa2f4ee1cdff4b564bac842e041bChris LattnerValue *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID,
14702752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner                                           const CallExpr *E) {
1471e140af3e27016f902146023fba7680b43043ec07Rafael Espindola  if (BuiltinID == ARM::BI__clear_cache) {
147279ba509b0106fd0a1ff832baeb1fdb5430527efeRafael Espindola    const FunctionDecl *FD = E->getDirectCallee();
14738a37c79f03e62aecfa2c58b9179f90dd1fcdb253Eric Christopher    // Oddly people write this call without args on occasion and gcc accepts
14748a37c79f03e62aecfa2c58b9179f90dd1fcdb253Eric Christopher    // it - it's also marked as varargs in the description file.
14755f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner    SmallVector<Value*, 2> Ops;
14768a37c79f03e62aecfa2c58b9179f90dd1fcdb253Eric Christopher    for (unsigned i = 0; i < E->getNumArgs(); i++)
14778a37c79f03e62aecfa2c58b9179f90dd1fcdb253Eric Christopher      Ops.push_back(EmitScalarExpr(E->getArg(i)));
14782acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *Ty = CGM.getTypes().ConvertType(FD->getType());
14792acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::FunctionType *FTy = cast<llvm::FunctionType>(Ty);
14805f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner    StringRef Name = FD->getName();
14814c7d9f1507d0f102bd4133bba63348636facd469Jay Foad    return Builder.CreateCall(CGM.CreateRuntimeFunction(FTy, Name), Ops);
14822752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner  }
1483e140af3e27016f902146023fba7680b43043ec07Rafael Espindola
148426c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes  if (BuiltinID == ARM::BI__builtin_arm_ldrexd) {
148526c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Function *F = CGM.getIntrinsic(Intrinsic::arm_ldrexd);
148626c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes
148726c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Value *LdPtr = EmitScalarExpr(E->getArg(0));
148826c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Value *Val = Builder.CreateCall(F, LdPtr, "ldrexd");
148926c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes
149026c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Value *Val0 = Builder.CreateExtractValue(Val, 1);
149126c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Value *Val1 = Builder.CreateExtractValue(Val, 0);
149226c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Val0 = Builder.CreateZExt(Val0, Int64Ty);
149326c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Val1 = Builder.CreateZExt(Val1, Int64Ty);
149426c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes
149526c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Value *ShiftCst = llvm::ConstantInt::get(Int64Ty, 32);
149626c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Val = Builder.CreateShl(Val0, ShiftCst, "shl", true /* nuw */);
149726c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    return Builder.CreateOr(Val, Val1);
149826c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes  }
149926c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes
150026c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes  if (BuiltinID == ARM::BI__builtin_arm_strexd) {
150126c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Function *F = CGM.getIntrinsic(Intrinsic::arm_strexd);
15027650d95a1a616ea300f37126a8dfc93dc19a662aChris Lattner    llvm::Type *STy = llvm::StructType::get(Int32Ty, Int32Ty, NULL);
150326c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes
150426c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Value *One = llvm::ConstantInt::get(Int32Ty, 1);
1505578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    Value *Tmp = Builder.CreateAlloca(Int64Ty, One);
150626c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Value *Val = EmitScalarExpr(E->getArg(0));
150726c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Builder.CreateStore(Val, Tmp);
150826c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes
150926c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Value *LdPtr = Builder.CreateBitCast(Tmp,llvm::PointerType::getUnqual(STy));
151026c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Val = Builder.CreateLoad(LdPtr);
151126c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes
151226c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Value *Arg0 = Builder.CreateExtractValue(Val, 0);
151326c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Value *Arg1 = Builder.CreateExtractValue(Val, 1);
151426c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    Value *StPtr = EmitScalarExpr(E->getArg(1));
151526c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes    return Builder.CreateCall3(F, Arg0, Arg1, StPtr, "strexd");
151626c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes  }
151726c1b8df8d1af0d8ef7f6c726fe1a8a9ddc60267Bruno Cardoso Lopes
15185f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner  SmallVector<Value*, 4> Ops;
1519e140af3e27016f902146023fba7680b43043ec07Rafael Espindola  for (unsigned i = 0, e = E->getNumArgs() - 1; i != e; i++)
1520e140af3e27016f902146023fba7680b43043ec07Rafael Espindola    Ops.push_back(EmitScalarExpr(E->getArg(i)));
1521e140af3e27016f902146023fba7680b43043ec07Rafael Espindola
152283bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  // vget_lane and vset_lane are not overloaded and do not have an extra
152383bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  // argument that specifies the vector type.
152483bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  switch (BuiltinID) {
152583bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  default: break;
152683bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vget_lane_i8:
152783bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vget_lane_i16:
152883bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vget_lane_i32:
152983bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vget_lane_i64:
153083bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vget_lane_f32:
153183bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vgetq_lane_i8:
153283bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vgetq_lane_i16:
153383bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vgetq_lane_i32:
153483bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vgetq_lane_i64:
153583bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vgetq_lane_f32:
153683bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson    return Builder.CreateExtractElement(Ops[0], EmitScalarExpr(E->getArg(1)),
153783bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson                                        "vget_lane");
153883bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vset_lane_i8:
153983bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vset_lane_i16:
154083bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vset_lane_i32:
154183bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vset_lane_i64:
154283bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vset_lane_f32:
154383bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vsetq_lane_i8:
154483bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vsetq_lane_i16:
154583bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vsetq_lane_i32:
154683bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vsetq_lane_i64:
154783bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  case ARM::BI__builtin_neon_vsetq_lane_f32:
154883bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson    Ops.push_back(EmitScalarExpr(E->getArg(2)));
154983bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson    return Builder.CreateInsertElement(Ops[1], Ops[0], Ops[2], "vset_lane");
155083bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  }
155183bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson
155283bbba1fc98dd3b2a351013a40808e995e648f40Bob Wilson  // Get the last argument, which specifies the vector type.
1553e140af3e27016f902146023fba7680b43043ec07Rafael Espindola  llvm::APSInt Result;
1554e140af3e27016f902146023fba7680b43043ec07Rafael Espindola  const Expr *Arg = E->getArg(E->getNumArgs()-1);
1555e140af3e27016f902146023fba7680b43043ec07Rafael Espindola  if (!Arg->isIntegerConstantExpr(Result, getContext()))
1556e140af3e27016f902146023fba7680b43043ec07Rafael Espindola    return 0;
1557e140af3e27016f902146023fba7680b43043ec07Rafael Espindola
155899c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman  if (BuiltinID == ARM::BI__builtin_arm_vcvtr_f ||
155999c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman      BuiltinID == ARM::BI__builtin_arm_vcvtr_d) {
156099c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman    // Determine the overloaded type of this builtin.
15619cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *Ty;
156299c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman    if (BuiltinID == ARM::BI__builtin_arm_vcvtr_f)
15638b418685e9e4f02f4eb2a76e1ec063e07552b68dChris Lattner      Ty = FloatTy;
156499c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman    else
15658b418685e9e4f02f4eb2a76e1ec063e07552b68dChris Lattner      Ty = DoubleTy;
156699c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman
156799c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman    // Determine whether this is an unsigned conversion or not.
156899c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman    bool usgn = Result.getZExtValue() == 1;
156999c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman    unsigned Int = usgn ? Intrinsic::arm_vcvtru : Intrinsic::arm_vcvtr;
157099c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman
157199c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman    // Call the appropriate intrinsic.
15728dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Int, Ty);
15734c7d9f1507d0f102bd4133bba63348636facd469Jay Foad    return Builder.CreateCall(F, Ops, "vcvtr");
157499c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman  }
157599c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman
157699c40bb13b523d58d7aeb6446e4f486d6918ca58Nate Begeman  // Determine the type of this overloaded NEON intrinsic.
1577da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  NeonTypeFlags Type(Result.getZExtValue());
1578da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  bool usgn = Type.isUnsigned();
1579da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  bool quad = Type.isQuad();
15807965396d8d6ac23ec4c4f9d01d216f2e73d7fc72Bob Wilson  bool rightShift = false;
1581e140af3e27016f902146023fba7680b43043ec07Rafael Espindola
15828b418685e9e4f02f4eb2a76e1ec063e07552b68dChris Lattner  llvm::VectorType *VTy = GetNeonType(this, Type);
15839cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner  llvm::Type *Ty = VTy;
1584e140af3e27016f902146023fba7680b43043ec07Rafael Espindola  if (!Ty)
1585e140af3e27016f902146023fba7680b43043ec07Rafael Espindola    return 0;
1586e140af3e27016f902146023fba7680b43043ec07Rafael Espindola
1587e140af3e27016f902146023fba7680b43043ec07Rafael Espindola  unsigned Int;
1588e140af3e27016f902146023fba7680b43043ec07Rafael Espindola  switch (BuiltinID) {
1589e140af3e27016f902146023fba7680b43043ec07Rafael Espindola  default: return 0;
1590537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vabd_v:
1591537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vabdq_v:
1592998622c10198a25ba06c93d7e908f88ba0acc920Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vabdu : Intrinsic::arm_neon_vabds;
15938dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vabd");
1594537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vabs_v:
1595537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vabsq_v:
15968dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vabs, Ty),
1597548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman                        Ops, "vabs");
1598537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vaddhn_v:
15998dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vaddhn, Ty),
1600548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman                        Ops, "vaddhn");
1601537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcale_v:
16029eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman    std::swap(Ops[0], Ops[1]);
1603537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcage_v: {
1604d185035263b98cdde75a869b26b5e5e2e6b13fdfBob Wilson    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vacged);
160530d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman    return EmitNeonCall(F, Ops, "vcage");
160630d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman  }
1607537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcaleq_v:
16089eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman    std::swap(Ops[0], Ops[1]);
1609537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcageq_v: {
1610d185035263b98cdde75a869b26b5e5e2e6b13fdfBob Wilson    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vacgeq);
161130d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman    return EmitNeonCall(F, Ops, "vcage");
161230d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman  }
1613537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcalt_v:
16149eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman    std::swap(Ops[0], Ops[1]);
1615537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcagt_v: {
1616d185035263b98cdde75a869b26b5e5e2e6b13fdfBob Wilson    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vacgtd);
161730d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman    return EmitNeonCall(F, Ops, "vcagt");
161830d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman  }
1619537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcaltq_v:
16209eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman    std::swap(Ops[0], Ops[1]);
1621537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcagtq_v: {
1622d185035263b98cdde75a869b26b5e5e2e6b13fdfBob Wilson    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vacgtq);
162330d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman    return EmitNeonCall(F, Ops, "vcagt");
162430d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman  }
1625537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcls_v:
1626537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vclsq_v: {
16278dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vcls, Ty);
162830d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman    return EmitNeonCall(F, Ops, "vcls");
16299eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman  }
1630537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vclz_v:
1631537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vclzq_v: {
16328dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vclz, Ty);
163330d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman    return EmitNeonCall(F, Ops, "vclz");
16349eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman  }
1635537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcnt_v:
1636537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcntq_v: {
16378dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vcnt, Ty);
163830d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman    return EmitNeonCall(F, Ops, "vcnt");
16399eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman  }
1640537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvt_f16_v: {
1641da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    assert(Type.getEltType() == NeonTypeFlags::Float16 && !quad &&
1642da95f73b59f9af964e33725c515139d34c90c863Bob Wilson           "unexpected vcvt_f16_v builtin");
164346e392ae6d09979b087d7b1aca3b816ba4199b89Bob Wilson    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vcvtfp2hf);
164446e392ae6d09979b087d7b1aca3b816ba4199b89Bob Wilson    return EmitNeonCall(F, Ops, "vcvt");
164546e392ae6d09979b087d7b1aca3b816ba4199b89Bob Wilson  }
1646537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvt_f32_f16: {
1647da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    assert(Type.getEltType() == NeonTypeFlags::Float16 && !quad &&
1648da95f73b59f9af964e33725c515139d34c90c863Bob Wilson           "unexpected vcvt_f32_f16 builtin");
164946e392ae6d09979b087d7b1aca3b816ba4199b89Bob Wilson    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vcvthf2fp);
165046e392ae6d09979b087d7b1aca3b816ba4199b89Bob Wilson    return EmitNeonCall(F, Ops, "vcvt");
165146e392ae6d09979b087d7b1aca3b816ba4199b89Bob Wilson  }
1652537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvt_f32_v:
1653da95f73b59f9af964e33725c515139d34c90c863Bob Wilson  case ARM::BI__builtin_neon_vcvtq_f32_v:
165430d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
16558b418685e9e4f02f4eb2a76e1ec063e07552b68dChris Lattner    Ty = GetNeonType(this, NeonTypeFlags(NeonTypeFlags::Float32, false, quad));
16569eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman    return usgn ? Builder.CreateUIToFP(Ops[0], Ty, "vcvt")
16579eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman                : Builder.CreateSIToFP(Ops[0], Ty, "vcvt");
1658537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvt_s32_v:
1659537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvt_u32_v:
1660537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvtq_s32_v:
1661537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvtq_u32_v: {
1662da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    llvm::Type *FloatTy =
16638b418685e9e4f02f4eb2a76e1ec063e07552b68dChris Lattner      GetNeonType(this, NeonTypeFlags(NeonTypeFlags::Float32, false, quad));
1664da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    Ops[0] = Builder.CreateBitCast(Ops[0], FloatTy);
16659eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman    return usgn ? Builder.CreateFPToUI(Ops[0], Ty, "vcvt")
16669eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman                : Builder.CreateFPToSI(Ops[0], Ty, "vcvt");
16679eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman  }
1668537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvt_n_f32_v:
1669537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvtq_n_f32_v: {
1670da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    llvm::Type *FloatTy =
16718b418685e9e4f02f4eb2a76e1ec063e07552b68dChris Lattner      GetNeonType(this, NeonTypeFlags(NeonTypeFlags::Float32, false, quad));
1672da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    llvm::Type *Tys[2] = { FloatTy, Ty };
1673da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    Int = usgn ? Intrinsic::arm_neon_vcvtfxu2fp
1674da95f73b59f9af964e33725c515139d34c90c863Bob Wilson               : Intrinsic::arm_neon_vcvtfxs2fp;
16758dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Int, Tys);
167630d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman    return EmitNeonCall(F, Ops, "vcvt_n");
16779eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman  }
1678537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvt_n_s32_v:
1679537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvt_n_u32_v:
1680537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvtq_n_s32_v:
1681537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vcvtq_n_u32_v: {
1682da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    llvm::Type *FloatTy =
16838b418685e9e4f02f4eb2a76e1ec063e07552b68dChris Lattner      GetNeonType(this, NeonTypeFlags(NeonTypeFlags::Float32, false, quad));
1684da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    llvm::Type *Tys[2] = { Ty, FloatTy };
1685da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    Int = usgn ? Intrinsic::arm_neon_vcvtfp2fxu
1686da95f73b59f9af964e33725c515139d34c90c863Bob Wilson               : Intrinsic::arm_neon_vcvtfp2fxs;
16878dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Int, Tys);
168830d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman    return EmitNeonCall(F, Ops, "vcvt_n");
168930d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman  }
1690537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vext_v:
1691537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vextq_v: {
1692fb018d153cbf12fd2a4a278cbf7614b9a2e2835eChris Lattner    int CV = cast<ConstantInt>(Ops[2])->getSExtValue();
16931c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    SmallVector<Constant*, 16> Indices;
16944be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i)
169577b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner      Indices.push_back(ConstantInt::get(Int32Ty, i+CV));
169630d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman
169730d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
169830d91718a676177f0d0d0210ce4fdb4f616df6e5Nate Begeman    Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
1699fb018d153cbf12fd2a4a278cbf7614b9a2e2835eChris Lattner    Value *SV = llvm::ConstantVector::get(Indices);
17001c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    return Builder.CreateShuffleVector(Ops[0], Ops[1], SV, "vext");
17011c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman  }
1702537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vhadd_v:
1703537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vhaddq_v:
1704df98e1d1da5ab1ca7c325378fc1c2eaa90a6476dNate Begeman    Int = usgn ? Intrinsic::arm_neon_vhaddu : Intrinsic::arm_neon_vhadds;
17058dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vhadd");
1706537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vhsub_v:
1707537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vhsubq_v:
1708df98e1d1da5ab1ca7c325378fc1c2eaa90a6476dNate Begeman    Int = usgn ? Intrinsic::arm_neon_vhsubu : Intrinsic::arm_neon_vhsubs;
17098dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vhsub");
1710537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld1_v:
1711537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld1q_v:
1712f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Ops.push_back(GetPointeeAlignmentValue(E->getArg(0)));
17138dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vld1, Ty),
17144be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman                        Ops, "vld1");
1715537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld1_lane_v:
1716eac1f6746a2915fea3ed42284b07e274c0095a95Bob Wilson  case ARM::BI__builtin_neon_vld1q_lane_v: {
17174be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
17184be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ty = llvm::PointerType::getUnqual(VTy->getElementType());
17194be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
1720eac1f6746a2915fea3ed42284b07e274c0095a95Bob Wilson    LoadInst *Ld = Builder.CreateLoad(Ops[0]);
1721f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Value *Align = GetPointeeAlignmentValue(E->getArg(0));
1722eac1f6746a2915fea3ed42284b07e274c0095a95Bob Wilson    Ld->setAlignment(cast<ConstantInt>(Align)->getZExtValue());
1723eac1f6746a2915fea3ed42284b07e274c0095a95Bob Wilson    return Builder.CreateInsertElement(Ops[1], Ld, Ops[2], "vld1_lane");
1724eac1f6746a2915fea3ed42284b07e274c0095a95Bob Wilson  }
1725537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld1_dup_v:
1726537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld1q_dup_v: {
17274be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Value *V = UndefValue::get(Ty);
17284be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ty = llvm::PointerType::getUnqual(VTy->getElementType());
17294be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
1730eac1f6746a2915fea3ed42284b07e274c0095a95Bob Wilson    LoadInst *Ld = Builder.CreateLoad(Ops[0]);
1731f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Value *Align = GetPointeeAlignmentValue(E->getArg(0));
1732eac1f6746a2915fea3ed42284b07e274c0095a95Bob Wilson    Ld->setAlignment(cast<ConstantInt>(Align)->getZExtValue());
173377b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner    llvm::Constant *CI = ConstantInt::get(Int32Ty, 0);
1734eac1f6746a2915fea3ed42284b07e274c0095a95Bob Wilson    Ops[0] = Builder.CreateInsertElement(V, Ld, CI);
17354be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    return EmitNeonSplat(Ops[0], CI);
17364be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman  }
1737537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld2_v:
1738537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld2q_v: {
17398dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vld2, Ty);
1740f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Value *Align = GetPointeeAlignmentValue(E->getArg(1));
174106b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    Ops[1] = Builder.CreateCall2(F, Ops[1], Align, "vld2");
17424be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ty = llvm::PointerType::getUnqual(Ops[1]->getType());
17434be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
17444be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    return Builder.CreateStore(Ops[1], Ops[0]);
17454be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman  }
1746537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld3_v:
1747537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld3q_v: {
17488dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vld3, Ty);
1749f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Value *Align = GetPointeeAlignmentValue(E->getArg(1));
175006b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    Ops[1] = Builder.CreateCall2(F, Ops[1], Align, "vld3");
17514be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ty = llvm::PointerType::getUnqual(Ops[1]->getType());
17524be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
17534be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    return Builder.CreateStore(Ops[1], Ops[0]);
17544be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman  }
1755537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld4_v:
1756537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld4q_v: {
17578dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vld4, Ty);
1758f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Value *Align = GetPointeeAlignmentValue(E->getArg(1));
175906b6c589a5fff8e5476fe2b4cd6a660af71bfdddBob Wilson    Ops[1] = Builder.CreateCall2(F, Ops[1], Align, "vld4");
17604be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ty = llvm::PointerType::getUnqual(Ops[1]->getType());
17614be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
17624be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    return Builder.CreateStore(Ops[1], Ops[0]);
17634be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman  }
1764537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld2_lane_v:
1765537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld2q_lane_v: {
17668dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vld2lane, Ty);
17674be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
17684be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[3] = Builder.CreateBitCast(Ops[3], Ty);
1769f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Ops.push_back(GetPointeeAlignmentValue(E->getArg(1)));
17701cbac8ac446cf513dbc7486dd50abd55bcfc62c6Frits van Bommel    Ops[1] = Builder.CreateCall(F, makeArrayRef(Ops).slice(1), "vld2_lane");
17714be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ty = llvm::PointerType::getUnqual(Ops[1]->getType());
17724be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
17734be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    return Builder.CreateStore(Ops[1], Ops[0]);
17744be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman  }
1775537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld3_lane_v:
1776537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld3q_lane_v: {
17778dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vld3lane, Ty);
17784be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
17794be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[3] = Builder.CreateBitCast(Ops[3], Ty);
17804be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[4] = Builder.CreateBitCast(Ops[4], Ty);
1781f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Ops.push_back(GetPointeeAlignmentValue(E->getArg(1)));
17821cbac8ac446cf513dbc7486dd50abd55bcfc62c6Frits van Bommel    Ops[1] = Builder.CreateCall(F, makeArrayRef(Ops).slice(1), "vld3_lane");
17834be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ty = llvm::PointerType::getUnqual(Ops[1]->getType());
17844be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
17854be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    return Builder.CreateStore(Ops[1], Ops[0]);
17864be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman  }
1787537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld4_lane_v:
1788537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld4q_lane_v: {
17898dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Intrinsic::arm_neon_vld4lane, Ty);
17904be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
17914be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[3] = Builder.CreateBitCast(Ops[3], Ty);
17924be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[4] = Builder.CreateBitCast(Ops[4], Ty);
17934be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[5] = Builder.CreateBitCast(Ops[5], Ty);
1794f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Ops.push_back(GetPointeeAlignmentValue(E->getArg(1)));
17951cbac8ac446cf513dbc7486dd50abd55bcfc62c6Frits van Bommel    Ops[1] = Builder.CreateCall(F, makeArrayRef(Ops).slice(1), "vld3_lane");
17964be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ty = llvm::PointerType::getUnqual(Ops[1]->getType());
17974be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
17984be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    return Builder.CreateStore(Ops[1], Ops[0]);
17994be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman  }
1800537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld2_dup_v:
1801537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld3_dup_v:
1802537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vld4_dup_v: {
1803a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson    // Handle 64-bit elements as a special-case.  There is no "dup" needed.
1804a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson    if (VTy->getElementType()->getPrimitiveSizeInBits() == 64) {
1805a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson      switch (BuiltinID) {
1806537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson      case ARM::BI__builtin_neon_vld2_dup_v:
1807a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson        Int = Intrinsic::arm_neon_vld2;
1808a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson        break;
1809537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson      case ARM::BI__builtin_neon_vld3_dup_v:
1810bd86ad5c1a4ce7cd05f0370921b31a2eabf19f8fJames Molloy        Int = Intrinsic::arm_neon_vld3;
1811a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson        break;
1812537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson      case ARM::BI__builtin_neon_vld4_dup_v:
1813bd86ad5c1a4ce7cd05f0370921b31a2eabf19f8fJames Molloy        Int = Intrinsic::arm_neon_vld4;
1814a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson        break;
1815b219cfc4d75f0a03630b7c4509ef791b7e97b2c8David Blaikie      default: llvm_unreachable("unknown vld_dup intrinsic?");
1816a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson      }
18178dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer      Function *F = CGM.getIntrinsic(Int, Ty);
1818f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad      Value *Align = GetPointeeAlignmentValue(E->getArg(1));
1819a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson      Ops[1] = Builder.CreateCall2(F, Ops[1], Align, "vld_dup");
1820a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson      Ty = llvm::PointerType::getUnqual(Ops[1]->getType());
1821a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson      Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
1822a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson      return Builder.CreateStore(Ops[1], Ops[0]);
1823a0eb23b79aba48a8141daa4eb1aba66266b41abeBob Wilson    }
18244be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    switch (BuiltinID) {
1825537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson    case ARM::BI__builtin_neon_vld2_dup_v:
18264be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      Int = Intrinsic::arm_neon_vld2lane;
18274be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      break;
1828537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson    case ARM::BI__builtin_neon_vld3_dup_v:
1829bd86ad5c1a4ce7cd05f0370921b31a2eabf19f8fJames Molloy      Int = Intrinsic::arm_neon_vld3lane;
18304be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      break;
1831537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson    case ARM::BI__builtin_neon_vld4_dup_v:
1832bd86ad5c1a4ce7cd05f0370921b31a2eabf19f8fJames Molloy      Int = Intrinsic::arm_neon_vld4lane;
18334be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      break;
1834b219cfc4d75f0a03630b7c4509ef791b7e97b2c8David Blaikie    default: llvm_unreachable("unknown vld_dup intrinsic?");
18354be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    }
18368dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Function *F = CGM.getIntrinsic(Int, Ty);
18372acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::StructType *STy = cast<llvm::StructType>(F->getReturnType());
18384be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman
18394be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    SmallVector<Value*, 6> Args;
18404be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Args.push_back(Ops[1]);
18414be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Args.append(STy->getNumElements(), UndefValue::get(Ty));
18424be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman
184377b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner    llvm::Constant *CI = ConstantInt::get(Int32Ty, 0);
18444be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Args.push_back(CI);
1845f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Args.push_back(GetPointeeAlignmentValue(E->getArg(1)));
18464be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman
18474c7d9f1507d0f102bd4133bba63348636facd469Jay Foad    Ops[1] = Builder.CreateCall(F, Args, "vld_dup");
18484be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    // splat lane 0 to all elts in each vector of the result.
18494be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) {
18504be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      Value *Val = Builder.CreateExtractValue(Ops[1], i);
18514be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      Value *Elt = Builder.CreateBitCast(Val, Ty);
18524be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      Elt = EmitNeonSplat(Elt, CI);
18534be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      Elt = Builder.CreateBitCast(Elt, Val->getType());
18544be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      Ops[1] = Builder.CreateInsertValue(Ops[1], Elt, i);
18554be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    }
18564be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ty = llvm::PointerType::getUnqual(Ops[1]->getType());
18574be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
18584be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    return Builder.CreateStore(Ops[1], Ops[0]);
18594be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman  }
1860537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vmax_v:
1861537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vmaxq_v:
1862df98e1d1da5ab1ca7c325378fc1c2eaa90a6476dNate Begeman    Int = usgn ? Intrinsic::arm_neon_vmaxu : Intrinsic::arm_neon_vmaxs;
18638dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vmax");
1864537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vmin_v:
1865537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vminq_v:
1866df98e1d1da5ab1ca7c325378fc1c2eaa90a6476dNate Begeman    Int = usgn ? Intrinsic::arm_neon_vminu : Intrinsic::arm_neon_vmins;
18678dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vmin");
1868537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vmovl_v: {
18692acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *DTy =llvm::VectorType::getTruncatedElementVectorType(VTy);
18702235941293353325835d182da4470f61828fe789Bob Wilson    Ops[0] = Builder.CreateBitCast(Ops[0], DTy);
18717cea322bf019b0d38867a27e20e3771d84dbb1afBob Wilson    if (usgn)
18727cea322bf019b0d38867a27e20e3771d84dbb1afBob Wilson      return Builder.CreateZExt(Ops[0], Ty, "vmovl");
18737cea322bf019b0d38867a27e20e3771d84dbb1afBob Wilson    return Builder.CreateSExt(Ops[0], Ty, "vmovl");
18742235941293353325835d182da4470f61828fe789Bob Wilson  }
1875537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vmovn_v: {
18762acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *QTy = llvm::VectorType::getExtendedElementVectorType(VTy);
18772235941293353325835d182da4470f61828fe789Bob Wilson    Ops[0] = Builder.CreateBitCast(Ops[0], QTy);
18783b6081bf49b7506cb96131247f209d1e03610df8Bob Wilson    return Builder.CreateTrunc(Ops[0], Ty, "vmovn");
18792235941293353325835d182da4470f61828fe789Bob Wilson  }
1880537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vmul_v:
1881537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vmulq_v:
1882da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    assert(Type.isPoly() && "vmul builtin only supported for polynomial types");
18838dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vmulp, Ty),
1884953d513c7ee79b3d9e37597e64317e75c0fbf7f6Bob Wilson                        Ops, "vmul");
1885537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vmull_v:
18862d33e423d5091b7d2cb8618952752abd55bba965Bob Wilson    Int = usgn ? Intrinsic::arm_neon_vmullu : Intrinsic::arm_neon_vmulls;
1887da95f73b59f9af964e33725c515139d34c90c863Bob Wilson    Int = Type.isPoly() ? (unsigned)Intrinsic::arm_neon_vmullp : Int;
18888dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vmull");
1889537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vpadal_v:
1890537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vpadalq_v: {
1891df98e1d1da5ab1ca7c325378fc1c2eaa90a6476dNate Begeman    Int = usgn ? Intrinsic::arm_neon_vpadalu : Intrinsic::arm_neon_vpadals;
1892c1fa01b69d9377a69087a6006a65a8fcc526d565Bob Wilson    // The source operand type has twice as many elements of half the size.
1893c1fa01b69d9377a69087a6006a65a8fcc526d565Bob Wilson    unsigned EltBits = VTy->getElementType()->getPrimitiveSizeInBits();
18942acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *EltTy =
1895d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall      llvm::IntegerType::get(getLLVMContext(), EltBits / 2);
18969cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *NarrowTy =
1897c1fa01b69d9377a69087a6006a65a8fcc526d565Bob Wilson      llvm::VectorType::get(EltTy, VTy->getNumElements() * 2);
18989cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *Tys[2] = { Ty, NarrowTy };
18998dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vpadal");
1900c1fa01b69d9377a69087a6006a65a8fcc526d565Bob Wilson  }
1901537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vpadd_v:
19028dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vpadd, Ty),
1903548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman                        Ops, "vpadd");
1904537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vpaddl_v:
1905537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vpaddlq_v: {
1906548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vpaddlu : Intrinsic::arm_neon_vpaddls;
1907c1fa01b69d9377a69087a6006a65a8fcc526d565Bob Wilson    // The source operand type has twice as many elements of half the size.
1908c1fa01b69d9377a69087a6006a65a8fcc526d565Bob Wilson    unsigned EltBits = VTy->getElementType()->getPrimitiveSizeInBits();
19092acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *EltTy = llvm::IntegerType::get(getLLVMContext(), EltBits / 2);
19109cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *NarrowTy =
1911c1fa01b69d9377a69087a6006a65a8fcc526d565Bob Wilson      llvm::VectorType::get(EltTy, VTy->getNumElements() * 2);
19129cbe4f0ba01ec304e1e3d071c071f7bca33631c0Chris Lattner    llvm::Type *Tys[2] = { Ty, NarrowTy };
19138dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vpaddl");
1914c1fa01b69d9377a69087a6006a65a8fcc526d565Bob Wilson  }
1915537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vpmax_v:
1916548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vpmaxu : Intrinsic::arm_neon_vpmaxs;
19178dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vpmax");
1918537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vpmin_v:
1919548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vpminu : Intrinsic::arm_neon_vpmins;
19208dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vpmin");
1921537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqabs_v:
1922537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqabsq_v:
19238dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vqabs, Ty),
1924548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman                        Ops, "vqabs");
1925537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqadd_v:
1926537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqaddq_v:
1927548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vqaddu : Intrinsic::arm_neon_vqadds;
19288dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqadd");
1929537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqdmlal_v:
19308dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vqdmlal, Ty),
1931db3d4d036037f379f12643e067b229862d61e932Bob Wilson                        Ops, "vqdmlal");
1932537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqdmlsl_v:
19338dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vqdmlsl, Ty),
1934db3d4d036037f379f12643e067b229862d61e932Bob Wilson                        Ops, "vqdmlsl");
1935537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqdmulh_v:
1936537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqdmulhq_v:
19378dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vqdmulh, Ty),
1938db3d4d036037f379f12643e067b229862d61e932Bob Wilson                        Ops, "vqdmulh");
1939537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqdmull_v:
19408dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vqdmull, Ty),
1941db3d4d036037f379f12643e067b229862d61e932Bob Wilson                        Ops, "vqdmull");
1942537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqmovn_v:
1943548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vqmovnu : Intrinsic::arm_neon_vqmovns;
19448dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqmovn");
1945537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqmovun_v:
19468dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vqmovnsu, Ty),
1947548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman                        Ops, "vqdmull");
1948537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqneg_v:
1949537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqnegq_v:
19508dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vqneg, Ty),
195161eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman                        Ops, "vqneg");
1952537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqrdmulh_v:
1953537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqrdmulhq_v:
19548dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vqrdmulh, Ty),
1955db3d4d036037f379f12643e067b229862d61e932Bob Wilson                        Ops, "vqrdmulh");
1956537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqrshl_v:
1957537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqrshlq_v:
1958548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vqrshiftu : Intrinsic::arm_neon_vqrshifts;
19598dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqrshl");
1960537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqrshrn_n_v:
1961548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vqrshiftnu : Intrinsic::arm_neon_vqrshiftns;
19628dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqrshrn_n",
196361eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman                        1, true);
1964537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqrshrun_n_v:
19658dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vqrshiftnsu, Ty),
1966db3d4d036037f379f12643e067b229862d61e932Bob Wilson                        Ops, "vqrshrun_n", 1, true);
1967537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqshl_v:
1968537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqshlq_v:
196961eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman    Int = usgn ? Intrinsic::arm_neon_vqshiftu : Intrinsic::arm_neon_vqshifts;
19708dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqshl");
1971537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqshl_n_v:
1972537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqshlq_n_v:
197361eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman    Int = usgn ? Intrinsic::arm_neon_vqshiftu : Intrinsic::arm_neon_vqshifts;
19748dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqshl_n",
197561eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman                        1, false);
1976537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqshlu_n_v:
1977537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqshluq_n_v:
19788dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vqshiftsu, Ty),
1979db3d4d036037f379f12643e067b229862d61e932Bob Wilson                        Ops, "vqshlu", 1, false);
1980537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqshrn_n_v:
198161eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman    Int = usgn ? Intrinsic::arm_neon_vqshiftnu : Intrinsic::arm_neon_vqshiftns;
19828dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqshrn_n",
198361eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman                        1, true);
1984537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqshrun_n_v:
19858dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vqshiftnsu, Ty),
1986db3d4d036037f379f12643e067b229862d61e932Bob Wilson                        Ops, "vqshrun_n", 1, true);
1987537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqsub_v:
1988537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vqsubq_v:
1989464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vqsubu : Intrinsic::arm_neon_vqsubs;
19908dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vqsub");
1991537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vraddhn_v:
19928dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vraddhn, Ty),
1993464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                        Ops, "vraddhn");
1994537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrecpe_v:
1995537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrecpeq_v:
19968dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vrecpe, Ty),
1997464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                        Ops, "vrecpe");
1998537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrecps_v:
1999537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrecpsq_v:
20008dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vrecps, Ty),
2001464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                        Ops, "vrecps");
2002537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrhadd_v:
2003537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrhaddq_v:
2004464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vrhaddu : Intrinsic::arm_neon_vrhadds;
20058dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrhadd");
2006537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrshl_v:
2007537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrshlq_v:
20085af93efc01f4acd247aa6d3124db6c92c3679198Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vrshiftu : Intrinsic::arm_neon_vrshifts;
20098dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrshl");
2010537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrshrn_n_v:
20118dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vrshiftn, Ty),
2012db3d4d036037f379f12643e067b229862d61e932Bob Wilson                        Ops, "vrshrn_n", 1, true);
2013537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrshr_n_v:
2014537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrshrq_n_v:
20155af93efc01f4acd247aa6d3124db6c92c3679198Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vrshiftu : Intrinsic::arm_neon_vrshifts;
20168dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vrshr_n", 1, true);
2017537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrsqrte_v:
2018537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrsqrteq_v:
20198dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vrsqrte, Ty),
20205af93efc01f4acd247aa6d3124db6c92c3679198Nate Begeman                        Ops, "vrsqrte");
2021537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrsqrts_v:
2022537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrsqrtsq_v:
20238dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vrsqrts, Ty),
20245af93efc01f4acd247aa6d3124db6c92c3679198Nate Begeman                        Ops, "vrsqrts");
2025537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrsra_n_v:
2026537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrsraq_n_v:
20275af93efc01f4acd247aa6d3124db6c92c3679198Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
20285af93efc01f4acd247aa6d3124db6c92c3679198Nate Begeman    Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
20295af93efc01f4acd247aa6d3124db6c92c3679198Nate Begeman    Ops[2] = EmitNeonShiftVector(Ops[2], Ty, true);
20305af93efc01f4acd247aa6d3124db6c92c3679198Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vrshiftu : Intrinsic::arm_neon_vrshifts;
20318dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    Ops[1] = Builder.CreateCall2(CGM.getIntrinsic(Int, Ty), Ops[1], Ops[2]);
20325af93efc01f4acd247aa6d3124db6c92c3679198Nate Begeman    return Builder.CreateAdd(Ops[0], Ops[1], "vrsra_n");
2033537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vrsubhn_v:
20348dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vrsubhn, Ty),
2035464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                        Ops, "vrsubhn");
2036537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vshl_v:
2037537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vshlq_v:
2038464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vshiftu : Intrinsic::arm_neon_vshifts;
20398dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vshl");
2040537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vshll_n_v:
2041464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    Int = usgn ? Intrinsic::arm_neon_vshiftlu : Intrinsic::arm_neon_vshiftls;
20428dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Int, Ty), Ops, "vshll", 1);
2043537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vshl_n_v:
2044537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vshlq_n_v:
204561eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman    Ops[1] = EmitNeonShiftVector(Ops[1], Ty, false);
204661eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman    return Builder.CreateShl(Builder.CreateBitCast(Ops[0],Ty), Ops[1], "vshl_n");
2047537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vshrn_n_v:
20488dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vshiftn, Ty),
2049db3d4d036037f379f12643e067b229862d61e932Bob Wilson                        Ops, "vshrn_n", 1, true);
2050537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vshr_n_v:
2051537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vshrq_n_v:
2052464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
205361eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman    Ops[1] = EmitNeonShiftVector(Ops[1], Ty, false);
2054464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    if (usgn)
2055464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman      return Builder.CreateLShr(Ops[0], Ops[1], "vshr_n");
2056464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    else
2057464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman      return Builder.CreateAShr(Ops[0], Ops[1], "vshr_n");
2058537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vsri_n_v:
2059537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vsriq_n_v:
20607965396d8d6ac23ec4c4f9d01d216f2e73d7fc72Bob Wilson    rightShift = true;
2061537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vsli_n_v:
2062537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vsliq_n_v:
20637965396d8d6ac23ec4c4f9d01d216f2e73d7fc72Bob Wilson    Ops[2] = EmitNeonShiftVector(Ops[2], Ty, rightShift);
20648dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vshiftins, Ty),
2065464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                        Ops, "vsli_n");
2066537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vsra_n_v:
2067537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vsraq_n_v:
2068464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
2069464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
207061eecf5aea018ea65c9ab0bccacd2996b15c632dNate Begeman    Ops[2] = EmitNeonShiftVector(Ops[2], Ty, false);
2071464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    if (usgn)
2072464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman      Ops[1] = Builder.CreateLShr(Ops[1], Ops[2], "vsra_n");
2073464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    else
2074464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman      Ops[1] = Builder.CreateAShr(Ops[1], Ops[2], "vsra_n");
2075464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    return Builder.CreateAdd(Ops[0], Ops[1]);
2076537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst1_v:
2077537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst1q_v:
2078f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Ops.push_back(GetPointeeAlignmentValue(E->getArg(0)));
20798dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vst1, Ty),
2080464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                        Ops, "");
2081537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst1_lane_v:
2082eac1f6746a2915fea3ed42284b07e274c0095a95Bob Wilson  case ARM::BI__builtin_neon_vst1q_lane_v: {
2083464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
2084464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    Ops[1] = Builder.CreateExtractElement(Ops[1], Ops[2]);
2085464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman    Ty = llvm::PointerType::getUnqual(Ops[1]->getType());
2086eac1f6746a2915fea3ed42284b07e274c0095a95Bob Wilson    StoreInst *St = Builder.CreateStore(Ops[1],
2087eac1f6746a2915fea3ed42284b07e274c0095a95Bob Wilson                                        Builder.CreateBitCast(Ops[0], Ty));
2088f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Value *Align = GetPointeeAlignmentValue(E->getArg(0));
2089eac1f6746a2915fea3ed42284b07e274c0095a95Bob Wilson    St->setAlignment(cast<ConstantInt>(Align)->getZExtValue());
2090eac1f6746a2915fea3ed42284b07e274c0095a95Bob Wilson    return St;
2091eac1f6746a2915fea3ed42284b07e274c0095a95Bob Wilson  }
2092537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst2_v:
2093537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst2q_v:
2094f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Ops.push_back(GetPointeeAlignmentValue(E->getArg(0)));
20958dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vst2, Ty),
2096464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                        Ops, "");
2097537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst2_lane_v:
2098537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst2q_lane_v:
2099f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Ops.push_back(GetPointeeAlignmentValue(E->getArg(0)));
21008dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vst2lane, Ty),
2101464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                        Ops, "");
2102537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst3_v:
2103537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst3q_v:
2104f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Ops.push_back(GetPointeeAlignmentValue(E->getArg(0)));
21058dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vst3, Ty),
2106464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                        Ops, "");
2107537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst3_lane_v:
2108537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst3q_lane_v:
2109f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Ops.push_back(GetPointeeAlignmentValue(E->getArg(0)));
21108dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vst3lane, Ty),
2111464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                        Ops, "");
2112537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst4_v:
2113537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst4q_v:
2114f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Ops.push_back(GetPointeeAlignmentValue(E->getArg(0)));
21158dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vst4, Ty),
2116464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                        Ops, "");
2117537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst4_lane_v:
2118537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vst4q_lane_v:
2119f4c3db175101cbf94dad59419c3ed7aed51bf606Jay Foad    Ops.push_back(GetPointeeAlignmentValue(E->getArg(0)));
21208dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vst4lane, Ty),
2121464ccb68f22a7e1c0a2844551c16f721540c91c3Nate Begeman                        Ops, "");
2122537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vsubhn_v:
21238dd55a3c3b28d195717c87bbc60e765951d408feBenjamin Kramer    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vsubhn, Ty),
2124548f7daa59012df2e20420e86c2722d19367ef17Nate Begeman                        Ops, "vsubhn");
2125537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vtbl1_v:
21261c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vtbl1),
21271c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman                        Ops, "vtbl1");
2128537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vtbl2_v:
21291c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vtbl2),
21301c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman                        Ops, "vtbl2");
2131537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vtbl3_v:
21321c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vtbl3),
21331c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman                        Ops, "vtbl3");
2134537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vtbl4_v:
21351c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vtbl4),
21361c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman                        Ops, "vtbl4");
2137537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vtbx1_v:
21381c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vtbx1),
21391c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman                        Ops, "vtbx1");
2140537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vtbx2_v:
21411c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vtbx2),
21421c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman                        Ops, "vtbx2");
2143537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vtbx3_v:
21441c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vtbx3),
21451c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman                        Ops, "vtbx3");
2146537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vtbx4_v:
21471c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    return EmitNeonCall(CGM.getIntrinsic(Intrinsic::arm_neon_vtbx4),
21481c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman                        Ops, "vtbx4");
2149537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vtst_v:
2150537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vtstq_v: {
21511c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], Ty);
21521c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
21531c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    Ops[0] = Builder.CreateAnd(Ops[0], Ops[1]);
21541c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    Ops[0] = Builder.CreateICmp(ICmpInst::ICMP_NE, Ops[0],
21551c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman                                ConstantAggregateZero::get(Ty));
21561c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    return Builder.CreateSExt(Ops[0], Ty, "vtst");
21571c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman  }
2158537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vtrn_v:
2159537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vtrnq_v: {
21604be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], llvm::PointerType::getUnqual(Ty));
21614be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
21624be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
21639577abc63f2c7afe5adf6e4e101ae91d29c3b8a6Ted Kremenek    Value *SV = 0;
21644be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman
21651c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    for (unsigned vi = 0; vi != 2; ++vi) {
21664be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      SmallVector<Constant*, 16> Indices;
21674be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      for (unsigned i = 0, e = VTy->getNumElements(); i != e; i += 2) {
21682ce8842641cc312628c4be836d34eb250e7c3f78Chris Lattner        Indices.push_back(Builder.getInt32(i+vi));
21692ce8842641cc312628c4be836d34eb250e7c3f78Chris Lattner        Indices.push_back(Builder.getInt32(i+e+vi));
21701c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman      }
21714be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      Value *Addr = Builder.CreateConstInBoundsGEP1_32(Ops[0], vi);
2172fb018d153cbf12fd2a4a278cbf7614b9a2e2835eChris Lattner      SV = llvm::ConstantVector::get(Indices);
21734be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      SV = Builder.CreateShuffleVector(Ops[1], Ops[2], SV, "vtrn");
21744be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      SV = Builder.CreateStore(SV, Addr);
21751c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    }
21764be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    return SV;
21771c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman  }
2178537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vuzp_v:
2179537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vuzpq_v: {
21804be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], llvm::PointerType::getUnqual(Ty));
21811c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
21824be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
21839577abc63f2c7afe5adf6e4e101ae91d29c3b8a6Ted Kremenek    Value *SV = 0;
21844be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman
21854be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    for (unsigned vi = 0; vi != 2; ++vi) {
21864be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      SmallVector<Constant*, 16> Indices;
21874be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i)
218877b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner        Indices.push_back(ConstantInt::get(Int32Ty, 2*i+vi));
21894be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman
21904be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      Value *Addr = Builder.CreateConstInBoundsGEP1_32(Ops[0], vi);
2191fb018d153cbf12fd2a4a278cbf7614b9a2e2835eChris Lattner      SV = llvm::ConstantVector::get(Indices);
21924be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      SV = Builder.CreateShuffleVector(Ops[1], Ops[2], SV, "vuzp");
21934be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      SV = Builder.CreateStore(SV, Addr);
21944be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    }
21954be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    return SV;
21961c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman  }
2197537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vzip_v:
2198537c3461166ce074d05fb7c96ffa98ed54c9aaa0Bob Wilson  case ARM::BI__builtin_neon_vzipq_v: {
21994be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], llvm::PointerType::getUnqual(Ty));
22001c2a88cfaeb11227d3a6bf7204207e0c8cf6de6fNate Begeman    Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
22014be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    Ops[2] = Builder.CreateBitCast(Ops[2], Ty);
22029577abc63f2c7afe5adf6e4e101ae91d29c3b8a6Ted Kremenek    Value *SV = 0;
22034be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman
22044be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    for (unsigned vi = 0; vi != 2; ++vi) {
22054be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      SmallVector<Constant*, 16> Indices;
22064be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      for (unsigned i = 0, e = VTy->getNumElements(); i != e; i += 2) {
2207e361cc3daa6c22e4413d48bd8b8934ea9fd5a55fDaniel Dunbar        Indices.push_back(ConstantInt::get(Int32Ty, (i + vi*e) >> 1));
2208e361cc3daa6c22e4413d48bd8b8934ea9fd5a55fDaniel Dunbar        Indices.push_back(ConstantInt::get(Int32Ty, ((i + vi*e) >> 1)+e));
22094be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      }
22104be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      Value *Addr = Builder.CreateConstInBoundsGEP1_32(Ops[0], vi);
2211fb018d153cbf12fd2a4a278cbf7614b9a2e2835eChris Lattner      SV = llvm::ConstantVector::get(Indices);
22124be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      SV = Builder.CreateShuffleVector(Ops[1], Ops[2], SV, "vzip");
22134be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman      SV = Builder.CreateStore(SV, Addr);
22144be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    }
22154be54302da40d3e7cba3d93115f312d2fcca1879Nate Begeman    return SV;
22169eb65a56e18bee1e5392bf2dff01cbd7b895f685Nate Begeman  }
22172752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner  }
22182752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner}
22192752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner
2220aa51e513850688b7963efc62abf1eface7037602Bill Wendlingllvm::Value *CodeGenFunction::
2221795b10062c2eaffae9e04241fb1a73cdbcb24a37Bill WendlingBuildVector(ArrayRef<llvm::Value*> Ops) {
2222aa51e513850688b7963efc62abf1eface7037602Bill Wendling  assert((Ops.size() & (Ops.size() - 1)) == 0 &&
2223aa51e513850688b7963efc62abf1eface7037602Bill Wendling         "Not a power-of-two sized vector!");
2224aa51e513850688b7963efc62abf1eface7037602Bill Wendling  bool AllConstants = true;
2225aa51e513850688b7963efc62abf1eface7037602Bill Wendling  for (unsigned i = 0, e = Ops.size(); i != e && AllConstants; ++i)
2226aa51e513850688b7963efc62abf1eface7037602Bill Wendling    AllConstants &= isa<Constant>(Ops[i]);
2227aa51e513850688b7963efc62abf1eface7037602Bill Wendling
2228aa51e513850688b7963efc62abf1eface7037602Bill Wendling  // If this is a constant vector, create a ConstantVector.
2229aa51e513850688b7963efc62abf1eface7037602Bill Wendling  if (AllConstants) {
22302ce8842641cc312628c4be836d34eb250e7c3f78Chris Lattner    SmallVector<llvm::Constant*, 16> CstOps;
2231aa51e513850688b7963efc62abf1eface7037602Bill Wendling    for (unsigned i = 0, e = Ops.size(); i != e; ++i)
2232aa51e513850688b7963efc62abf1eface7037602Bill Wendling      CstOps.push_back(cast<Constant>(Ops[i]));
2233aa51e513850688b7963efc62abf1eface7037602Bill Wendling    return llvm::ConstantVector::get(CstOps);
2234aa51e513850688b7963efc62abf1eface7037602Bill Wendling  }
2235aa51e513850688b7963efc62abf1eface7037602Bill Wendling
2236aa51e513850688b7963efc62abf1eface7037602Bill Wendling  // Otherwise, insertelement the values to build the vector.
2237aa51e513850688b7963efc62abf1eface7037602Bill Wendling  Value *Result =
2238aa51e513850688b7963efc62abf1eface7037602Bill Wendling    llvm::UndefValue::get(llvm::VectorType::get(Ops[0]->getType(), Ops.size()));
2239aa51e513850688b7963efc62abf1eface7037602Bill Wendling
2240aa51e513850688b7963efc62abf1eface7037602Bill Wendling  for (unsigned i = 0, e = Ops.size(); i != e; ++i)
22412ce8842641cc312628c4be836d34eb250e7c3f78Chris Lattner    Result = Builder.CreateInsertElement(Result, Ops[i], Builder.getInt32(i));
2242aa51e513850688b7963efc62abf1eface7037602Bill Wendling
2243aa51e513850688b7963efc62abf1eface7037602Bill Wendling  return Result;
2244aa51e513850688b7963efc62abf1eface7037602Bill Wendling}
2245aa51e513850688b7963efc62abf1eface7037602Bill Wendling
22461eb4433ac451dc16f4133a88af2d002ac26c58efMike StumpValue *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID,
22471feedd84221e8dbcc3faf3de27cc42b559db845dChris Lattner                                           const CallExpr *E) {
22485f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner  SmallVector<Value*, 4> Ops;
22492929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson
225046c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner  // Find out if any arguments are required to be integer constant expressions.
225146c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner  unsigned ICEArguments = 0;
225246c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner  ASTContext::GetBuiltinTypeError Error;
225346c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner  getContext().GetBuiltinType(BuiltinID, Error, &ICEArguments);
225446c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner  assert(Error == ASTContext::GE_None && "Should not codegen an error");
225546c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner
225646c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner  for (unsigned i = 0, e = E->getNumArgs(); i != e; i++) {
225746c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    // If this is a normal argument, just emit it as a scalar.
225846c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    if ((ICEArguments & (1 << i)) == 0) {
225946c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner      Ops.push_back(EmitScalarExpr(E->getArg(i)));
226046c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner      continue;
226146c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    }
226246c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner
226346c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    // If this is required to be a constant, constant fold it so that we know
226446c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    // that the generated intrinsic gets a ConstantInt.
226546c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    llvm::APSInt Result;
226646c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    bool IsConst = E->getArg(i)->isIntegerConstantExpr(Result, getContext());
226746c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner    assert(IsConst && "Constant arg isn't actually constant?"); (void)IsConst;
2268d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    Ops.push_back(llvm::ConstantInt::get(getLLVMContext(), Result));
226946c5591f0fa2e35367e44234e59bb041d15b778eChris Lattner  }
22702929cfa9b7df1d5b0571b54161783e4d791a0b77Anders Carlsson
2271564f1de67d7ba43646b8740db86d6269e3dfbe0bAnders Carlsson  switch (BuiltinID) {
227246a26b0b0e2ec1557bad9b70e8e20836524ebdfcAnders Carlsson  default: return 0;
2273aa51e513850688b7963efc62abf1eface7037602Bill Wendling  case X86::BI__builtin_ia32_vec_init_v8qi:
2274aa51e513850688b7963efc62abf1eface7037602Bill Wendling  case X86::BI__builtin_ia32_vec_init_v4hi:
2275aa51e513850688b7963efc62abf1eface7037602Bill Wendling  case X86::BI__builtin_ia32_vec_init_v2si:
2276aa51e513850688b7963efc62abf1eface7037602Bill Wendling    return Builder.CreateBitCast(BuildVector(Ops),
2277d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall                                 llvm::Type::getX86_MMXTy(getLLVMContext()));
22781944ec188408aff1931c62c79a069e30f2549ec2Argyrios Kyrtzidis  case X86::BI__builtin_ia32_vec_ext_v2si:
22791944ec188408aff1931c62c79a069e30f2549ec2Argyrios Kyrtzidis    return Builder.CreateExtractElement(Ops[0],
22801944ec188408aff1931c62c79a069e30f2549ec2Argyrios Kyrtzidis                                  llvm::ConstantInt::get(Ops[1]->getType(), 0));
2281e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman  case X86::BI__builtin_ia32_ldmxcsr: {
22822acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *PtrTy = Int8PtrTy;
228377b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner    Value *One = llvm::ConstantInt::get(Int32Ty, 1);
2284578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    Value *Tmp = Builder.CreateAlloca(Int32Ty, One);
2285e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    Builder.CreateStore(Ops[0], Tmp);
2286e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_sse_ldmxcsr),
22873eae03e7d165f20a863a9a4d7122ba2a691ab16dChris Lattner                              Builder.CreateBitCast(Tmp, PtrTy));
2288e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman  }
2289e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman  case X86::BI__builtin_ia32_stmxcsr: {
22902acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner    llvm::Type *PtrTy = Int8PtrTy;
229177b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner    Value *One = llvm::ConstantInt::get(Int32Ty, 1);
2292578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    Value *Tmp = Builder.CreateAlloca(Int32Ty, One);
2293012614ecf78442368ec82ee30efb3bc047b413e6Ted Kremenek    Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_sse_stmxcsr),
2294012614ecf78442368ec82ee30efb3bc047b413e6Ted Kremenek                       Builder.CreateBitCast(Tmp, PtrTy));
2295e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    return Builder.CreateLoad(Tmp, "stmxcsr");
2296e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman  }
2297e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman  case X86::BI__builtin_ia32_storehps:
2298e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman  case X86::BI__builtin_ia32_storelps: {
229977b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner    llvm::Type *PtrTy = llvm::PointerType::getUnqual(Int64Ty);
230077b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner    llvm::Type *VecTy = llvm::VectorType::get(Int64Ty, 2);
23011eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2302e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    // cast val v2i64
2303e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    Ops[1] = Builder.CreateBitCast(Ops[1], VecTy, "cast");
23041eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2305e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    // extract (0, 1)
2306e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    unsigned Index = BuiltinID == X86::BI__builtin_ia32_storelps ? 0 : 1;
230777b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner    llvm::Value *Idx = llvm::ConstantInt::get(Int32Ty, Index);
2308e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    Ops[1] = Builder.CreateExtractElement(Ops[1], Idx, "extract");
2309e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman
2310e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    // cast pointer to i64 & store
2311e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    Ops[0] = Builder.CreateBitCast(Ops[0], PtrTy);
2312e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman    return Builder.CreateStore(Ops[1], Ops[0]);
2313e7722103abc4583366c914374d6aa8560e145fa1Nate Begeman  }
231428cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling  case X86::BI__builtin_ia32_palignr: {
231528cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling    unsigned shiftVal = cast<llvm::ConstantInt>(Ops[2])->getZExtValue();
231628cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling
231728cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling    // If palignr is shifting the pair of input vectors less than 9 bytes,
231828cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling    // emit a shuffle instruction.
231928cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling    if (shiftVal <= 8) {
23205f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner      SmallVector<llvm::Constant*, 8> Indices;
232128cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling      for (unsigned i = 0; i != 8; ++i)
232228cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling        Indices.push_back(llvm::ConstantInt::get(Int32Ty, shiftVal + i));
232328cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling
2324fb018d153cbf12fd2a4a278cbf7614b9a2e2835eChris Lattner      Value* SV = llvm::ConstantVector::get(Indices);
232528cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling      return Builder.CreateShuffleVector(Ops[1], Ops[0], SV, "palignr");
232628cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling    }
232728cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling
232828cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling    // If palignr is shifting the pair of input vectors more than 8 but less
232928cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling    // than 16 bytes, emit a logical right shift of the destination.
233028cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling    if (shiftVal < 16) {
233128cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling      // MMX has these as 1 x i64 vectors for some odd optimization reasons.
23322acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner      llvm::Type *VecTy = llvm::VectorType::get(Int64Ty, 1);
233328cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling
233428cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling      Ops[0] = Builder.CreateBitCast(Ops[0], VecTy, "cast");
233528cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling      Ops[1] = llvm::ConstantInt::get(VecTy, (shiftVal-8) * 8);
233628cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling
233728cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling      // create i32 constant
233828cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling      llvm::Function *F = CGM.getIntrinsic(Intrinsic::x86_mmx_psrl_q);
2339e9c0265d6e6b5bf865f4a0c2c00d00ac251e6437Frits van Bommel      return Builder.CreateCall(F, makeArrayRef(&Ops[0], 2), "palignr");
234028cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling    }
234128cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling
23425c22ad2ef6bf39da22d5190025e0ddfd4b568b2aEli Friedman    // If palignr is shifting the pair of vectors more than 16 bytes, emit zero.
234328cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling    return llvm::Constant::getNullValue(ConvertType(E->getType()));
234428cab383fd9e7647d2186340eca769303cc4fbdbBill Wendling  }
2345c3420ffb282c6ffc0192013bf8045b6c21eddeceNate Begeman  case X86::BI__builtin_ia32_palignr128: {
2346ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman    unsigned shiftVal = cast<llvm::ConstantInt>(Ops[2])->getZExtValue();
2347ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman
2348ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman    // If palignr is shifting the pair of input vectors less than 17 bytes,
2349ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman    // emit a shuffle instruction.
2350ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman    if (shiftVal <= 16) {
23515f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner      SmallVector<llvm::Constant*, 16> Indices;
2352ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman      for (unsigned i = 0; i != 16; ++i)
235377b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner        Indices.push_back(llvm::ConstantInt::get(Int32Ty, shiftVal + i));
2354ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman
2355fb018d153cbf12fd2a4a278cbf7614b9a2e2835eChris Lattner      Value* SV = llvm::ConstantVector::get(Indices);
2356ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman      return Builder.CreateShuffleVector(Ops[1], Ops[0], SV, "palignr");
2357ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman    }
2358ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman
2359ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman    // If palignr is shifting the pair of input vectors more than 16 but less
2360ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman    // than 32 bytes, emit a logical right shift of the destination.
2361ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman    if (shiftVal < 32) {
23622acc6e3feda5e4f7d9009bdcf8b1cd777fecfe2dChris Lattner      llvm::Type *VecTy = llvm::VectorType::get(Int64Ty, 2);
2363ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman
2364ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman      Ops[0] = Builder.CreateBitCast(Ops[0], VecTy, "cast");
236577b89b87c3b9220fea1bc80f6d6598d2003cc8a8Chris Lattner      Ops[1] = llvm::ConstantInt::get(Int32Ty, (shiftVal-16) * 8);
2366ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman
2367ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman      // create i32 constant
2368ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman      llvm::Function *F = CGM.getIntrinsic(Intrinsic::x86_sse2_psrl_dq);
2369e9c0265d6e6b5bf865f4a0c2c00d00ac251e6437Frits van Bommel      return Builder.CreateCall(F, makeArrayRef(&Ops[0], 2), "palignr");
2370ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman    }
2371ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman
2372ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman    // If palignr is shifting the pair of vectors more than 32 bytes, emit zero.
2373ce5818a19a8f77d1540d0352649d6687eca4af6bNate Begeman    return llvm::Constant::getNullValue(ConvertType(E->getType()));
237491b59274439f776cdd545bd7bf5849fdb1842160Eric Christopher  }
23759c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  case X86::BI__builtin_ia32_palignr256: {
23769c2ffd803af03f1728423d0d73ff87d988642633Craig Topper    unsigned shiftVal = cast<llvm::ConstantInt>(Ops[2])->getZExtValue();
23779c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
23789c2ffd803af03f1728423d0d73ff87d988642633Craig Topper    // If palignr is shifting the pair of input vectors less than 17 bytes,
23799c2ffd803af03f1728423d0d73ff87d988642633Craig Topper    // emit a shuffle instruction.
23809c2ffd803af03f1728423d0d73ff87d988642633Craig Topper    if (shiftVal <= 16) {
23819c2ffd803af03f1728423d0d73ff87d988642633Craig Topper      SmallVector<llvm::Constant*, 32> Indices;
23829c2ffd803af03f1728423d0d73ff87d988642633Craig Topper      // 256-bit palignr operates on 128-bit lanes so we need to handle that
23839c2ffd803af03f1728423d0d73ff87d988642633Craig Topper      for (unsigned l = 0; l != 2; ++l) {
23849c2ffd803af03f1728423d0d73ff87d988642633Craig Topper        unsigned LaneStart = l * 16;
23859c2ffd803af03f1728423d0d73ff87d988642633Craig Topper        unsigned LaneEnd = (l+1) * 16;
23869c2ffd803af03f1728423d0d73ff87d988642633Craig Topper        for (unsigned i = 0; i != 16; ++i) {
23879c2ffd803af03f1728423d0d73ff87d988642633Craig Topper          unsigned Idx = shiftVal + i + LaneStart;
23889c2ffd803af03f1728423d0d73ff87d988642633Craig Topper          if (Idx >= LaneEnd) Idx += 16; // end of lane, switch operand
23899c2ffd803af03f1728423d0d73ff87d988642633Craig Topper          Indices.push_back(llvm::ConstantInt::get(Int32Ty, Idx));
23909c2ffd803af03f1728423d0d73ff87d988642633Craig Topper        }
23919c2ffd803af03f1728423d0d73ff87d988642633Craig Topper      }
23929c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
23939c2ffd803af03f1728423d0d73ff87d988642633Craig Topper      Value* SV = llvm::ConstantVector::get(Indices);
23949c2ffd803af03f1728423d0d73ff87d988642633Craig Topper      return Builder.CreateShuffleVector(Ops[1], Ops[0], SV, "palignr");
23959c2ffd803af03f1728423d0d73ff87d988642633Craig Topper    }
23969c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
23979c2ffd803af03f1728423d0d73ff87d988642633Craig Topper    // If palignr is shifting the pair of input vectors more than 16 but less
23989c2ffd803af03f1728423d0d73ff87d988642633Craig Topper    // than 32 bytes, emit a logical right shift of the destination.
23999c2ffd803af03f1728423d0d73ff87d988642633Craig Topper    if (shiftVal < 32) {
24009c2ffd803af03f1728423d0d73ff87d988642633Craig Topper      llvm::Type *VecTy = llvm::VectorType::get(Int64Ty, 4);
24019c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
24029c2ffd803af03f1728423d0d73ff87d988642633Craig Topper      Ops[0] = Builder.CreateBitCast(Ops[0], VecTy, "cast");
24039c2ffd803af03f1728423d0d73ff87d988642633Craig Topper      Ops[1] = llvm::ConstantInt::get(Int32Ty, (shiftVal-16) * 8);
24049c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
24059c2ffd803af03f1728423d0d73ff87d988642633Craig Topper      // create i32 constant
24069c2ffd803af03f1728423d0d73ff87d988642633Craig Topper      llvm::Function *F = CGM.getIntrinsic(Intrinsic::x86_avx2_psrl_dq);
24079c2ffd803af03f1728423d0d73ff87d988642633Craig Topper      return Builder.CreateCall(F, makeArrayRef(&Ops[0], 2), "palignr");
24089c2ffd803af03f1728423d0d73ff87d988642633Craig Topper    }
24099c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
24109c2ffd803af03f1728423d0d73ff87d988642633Craig Topper    // If palignr is shifting the pair of vectors more than 32 bytes, emit zero.
24119c2ffd803af03f1728423d0d73ff87d988642633Craig Topper    return llvm::Constant::getNullValue(ConvertType(E->getType()));
24129c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  }
2413b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling  case X86::BI__builtin_ia32_movntps:
2414b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling  case X86::BI__builtin_ia32_movntpd:
2415b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling  case X86::BI__builtin_ia32_movntdq:
2416b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling  case X86::BI__builtin_ia32_movnti: {
2417b107dd02f5e365f60b036b8a27c784f2d0d0a855Bill Wendling    llvm::MDNode *Node = llvm::MDNode::get(getLLVMContext(),
2418b107dd02f5e365f60b036b8a27c784f2d0d0a855Bill Wendling                                           Builder.getInt32(1));
2419b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling
2420b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling    // Convert the type of the pointer to a pointer to the stored type.
2421b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling    Value *BC = Builder.CreateBitCast(Ops[0],
2422b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling                                llvm::PointerType::getUnqual(Ops[1]->getType()),
2423b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling                                      "cast");
2424b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling    StoreInst *SI = Builder.CreateStore(Ops[1], BC);
2425b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling    SI->setMetadata(CGM.getModule().getMDKindID("nontemporal"), Node);
2426b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling    SI->setAlignment(16);
2427b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling    return SI;
2428b51bddab211ba7daa8832c017d82281e0d8348d1Bill Wendling  }
24298b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  // 3DNow!
24308b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pswapdsf:
24318b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  case X86::BI__builtin_ia32_pswapdsi: {
24328b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    const char *name = 0;
24338b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    Intrinsic::ID ID = Intrinsic::not_intrinsic;
24348b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    switch(BuiltinID) {
2435f8495d67ca4dd2ea15a4dc59e9a2fa32a9bfa475Craig Topper    default: llvm_unreachable("Unsupported intrinsic!");
24368b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pswapdsf:
24378b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    case X86::BI__builtin_ia32_pswapdsi:
24388b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      name = "pswapd";
24398b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      ID = Intrinsic::x86_3dnowa_pswapd;
24408b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer      break;
24418b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    }
2442345032a7211a6f983d59c30c0b3fa2b96819532aChandler Carruth    llvm::Type *MMXTy = llvm::Type::getX86_MMXTy(getLLVMContext());
2443345032a7211a6f983d59c30c0b3fa2b96819532aChandler Carruth    Ops[0] = Builder.CreateBitCast(Ops[0], MMXTy, "cast");
24448b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer    llvm::Function *F = CGM.getIntrinsic(ID);
24454c7d9f1507d0f102bd4133bba63348636facd469Jay Foad    return Builder.CreateCall(F, Ops, name);
24468b36a9ee7fe7204b30a85b95b11850aeb4b63ee3Michael J. Spencer  }
2447564f1de67d7ba43646b8740db86d6269e3dfbe0bAnders Carlsson  }
2448564f1de67d7ba43646b8740db86d6269e3dfbe0bAnders Carlsson}
2449564f1de67d7ba43646b8740db86d6269e3dfbe0bAnders Carlsson
24509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony LinthicumValue *CodeGenFunction::EmitHexagonBuiltinExpr(unsigned BuiltinID,
24529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum                                             const CallExpr *E) {
24539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  llvm::SmallVector<Value*, 4> Ops;
24549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  for (unsigned i = 0, e = E->getNumArgs(); i != e; i++)
24569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    Ops.push_back(EmitScalarExpr(E->getArg(i)));
24579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  Intrinsic::ID ID = Intrinsic::not_intrinsic;
24599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  switch (BuiltinID) {
24619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  default: return 0;
24629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmpeq:
24649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmpeq; break;
24659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmpgt:
24679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmpgt; break;
24689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmpgtu:
24709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmpgtu; break;
24719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmpeqp:
24739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmpeqp; break;
24749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmpgtp:
24769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmpgtp; break;
24779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmpgtup:
24799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmpgtup; break;
24809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_bitsset:
24829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_bitsset; break;
24839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_bitsclr:
24859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_bitsclr; break;
24869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmpeqi:
24889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmpeqi; break;
24899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmpgti:
24919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmpgti; break;
24929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmpgtui:
24949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmpgtui; break;
24959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmpgei:
24979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmpgei; break;
24989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
24999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmpgeui:
25009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmpgeui; break;
25019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmplt:
25039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmplt; break;
25049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_cmpltu:
25069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_cmpltu; break;
25079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_bitsclri:
25099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_bitsclri; break;
25109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_and:
25129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_and; break;
25139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_or:
25159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_or; break;
25169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_xor:
25189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_xor; break;
25199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_andn:
25219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_andn; break;
25229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_not:
25249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_not; break;
25259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_orn:
25279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_orn; break;
25289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_pxfer_map:
25309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_pxfer_map; break;
25319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_any8:
25339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_any8; break;
25349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_all8:
25369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_all8; break;
25379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_vitpack:
25399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_vitpack; break;
25409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_mux:
25429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_mux; break;
25439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_muxii:
25459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_muxii; break;
25469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_muxir:
25489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_muxir; break;
25499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_muxri:
25519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_muxri; break;
25529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_vmux:
25549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_vmux; break;
25559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_mask:
25579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_mask; break;
25589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vcmpbeq:
25609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vcmpbeq; break;
25619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vcmpbgtu:
25639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vcmpbgtu; break;
25649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vcmpheq:
25669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vcmpheq; break;
25679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vcmphgt:
25699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vcmphgt; break;
25709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vcmphgtu:
25729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vcmphgtu; break;
25739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vcmpweq:
25759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vcmpweq; break;
25769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vcmpwgt:
25789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vcmpwgt; break;
25799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vcmpwgtu:
25819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vcmpwgtu; break;
25829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_tfrpr:
25849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_tfrpr; break;
25859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C2_tfrrp:
25879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C2_tfrrp; break;
25889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_hh_s0:
25909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_hh_s0; break;
25919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_hh_s1:
25939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_hh_s1; break;
25949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_hl_s0:
25969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_hl_s0; break;
25979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
25989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_hl_s1:
25999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_hl_s1; break;
26009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_lh_s0:
26029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_lh_s0; break;
26039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_lh_s1:
26059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_lh_s1; break;
26069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_ll_s0:
26089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_ll_s0; break;
26099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_ll_s1:
26119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_ll_s1; break;
26129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_hh_s0:
26149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_hh_s0; break;
26159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_hh_s1:
26179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_hh_s1; break;
26189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_hl_s0:
26209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_hl_s0; break;
26219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_hl_s1:
26239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_hl_s1; break;
26249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_lh_s0:
26269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_lh_s0; break;
26279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_lh_s1:
26299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_lh_s1; break;
26309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_ll_s0:
26329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_ll_s0; break;
26339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_ll_s1:
26359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_ll_s1; break;
26369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_sat_hh_s0:
26389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_sat_hh_s0; break;
26399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_sat_hh_s1:
26419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_sat_hh_s1; break;
26429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_sat_hl_s0:
26449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_sat_hl_s0; break;
26459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_sat_hl_s1:
26479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_sat_hl_s1; break;
26489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_sat_lh_s0:
26509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_sat_lh_s0; break;
26519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_sat_lh_s1:
26539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_sat_lh_s1; break;
26549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_sat_ll_s0:
26569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_sat_ll_s0; break;
26579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_acc_sat_ll_s1:
26599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_acc_sat_ll_s1; break;
26609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_sat_hh_s0:
26629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_sat_hh_s0; break;
26639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_sat_hh_s1:
26659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_sat_hh_s1; break;
26669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_sat_hl_s0:
26689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_sat_hl_s0; break;
26699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_sat_hl_s1:
26719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_sat_hl_s1; break;
26729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_sat_lh_s0:
26749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_sat_lh_s0; break;
26759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_sat_lh_s1:
26779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_sat_lh_s1; break;
26789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_sat_ll_s0:
26809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_sat_ll_s0; break;
26819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_nac_sat_ll_s1:
26839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_nac_sat_ll_s1; break;
26849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_hh_s0:
26869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_hh_s0; break;
26879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_hh_s1:
26899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_hh_s1; break;
26909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_hl_s0:
26929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_hl_s0; break;
26939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_hl_s1:
26959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_hl_s1; break;
26969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
26979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_lh_s0:
26989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_lh_s0; break;
26999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_lh_s1:
27019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_lh_s1; break;
27029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_ll_s0:
27049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_ll_s0; break;
27059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_ll_s1:
27079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_ll_s1; break;
27089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_hh_s0:
27109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_hh_s0; break;
27119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_hh_s1:
27139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_hh_s1; break;
27149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_hl_s0:
27169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_hl_s0; break;
27179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_hl_s1:
27199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_hl_s1; break;
27209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_lh_s0:
27229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_lh_s0; break;
27239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_lh_s1:
27259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_lh_s1; break;
27269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_ll_s0:
27289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_ll_s0; break;
27299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_ll_s1:
27319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_ll_s1; break;
27329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_rnd_hh_s0:
27349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_rnd_hh_s0; break;
27359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_rnd_hh_s1:
27379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_rnd_hh_s1; break;
27389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_rnd_hl_s0:
27409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_rnd_hl_s0; break;
27419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_rnd_hl_s1:
27439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_rnd_hl_s1; break;
27449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_rnd_lh_s0:
27469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_rnd_lh_s0; break;
27479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_rnd_lh_s1:
27499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_rnd_lh_s1; break;
27509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_rnd_ll_s0:
27529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_rnd_ll_s0; break;
27539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_rnd_ll_s1:
27559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_rnd_ll_s1; break;
27569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_rnd_hh_s0:
27589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_rnd_hh_s0; break;
27599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_rnd_hh_s1:
27619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_rnd_hh_s1; break;
27629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_rnd_hl_s0:
27649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_rnd_hl_s0; break;
27659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_rnd_hl_s1:
27679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_rnd_hl_s1; break;
27689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_rnd_lh_s0:
27709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_rnd_lh_s0; break;
27719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_rnd_lh_s1:
27739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_rnd_lh_s1; break;
27749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_rnd_ll_s0:
27769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_rnd_ll_s0; break;
27779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_sat_rnd_ll_s1:
27799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_sat_rnd_ll_s1; break;
27809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_acc_hh_s0:
27829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_acc_hh_s0; break;
27839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_acc_hh_s1:
27859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_acc_hh_s1; break;
27869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_acc_hl_s0:
27889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_acc_hl_s0; break;
27899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_acc_hl_s1:
27919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_acc_hl_s1; break;
27929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_acc_lh_s0:
27949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_acc_lh_s0; break;
27959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_acc_lh_s1:
27979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_acc_lh_s1; break;
27989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
27999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_acc_ll_s0:
28009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_acc_ll_s0; break;
28019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_acc_ll_s1:
28039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_acc_ll_s1; break;
28049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_nac_hh_s0:
28069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_nac_hh_s0; break;
28079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_nac_hh_s1:
28099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_nac_hh_s1; break;
28109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_nac_hl_s0:
28129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_nac_hl_s0; break;
28139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_nac_hl_s1:
28159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_nac_hl_s1; break;
28169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_nac_lh_s0:
28189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_nac_lh_s0; break;
28199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_nac_lh_s1:
28219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_nac_lh_s1; break;
28229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_nac_ll_s0:
28249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_nac_ll_s0; break;
28259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_nac_ll_s1:
28279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_nac_ll_s1; break;
28289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_hh_s0:
28309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_hh_s0; break;
28319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_hh_s1:
28339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_hh_s1; break;
28349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_hl_s0:
28369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_hl_s0; break;
28379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_hl_s1:
28399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_hl_s1; break;
28409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_lh_s0:
28429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_lh_s0; break;
28439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_lh_s1:
28459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_lh_s1; break;
28469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_ll_s0:
28489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_ll_s0; break;
28499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_ll_s1:
28519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_ll_s1; break;
28529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_rnd_hh_s0:
28549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_rnd_hh_s0; break;
28559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_rnd_hh_s1:
28579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_rnd_hh_s1; break;
28589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_rnd_hl_s0:
28609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_rnd_hl_s0; break;
28619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_rnd_hl_s1:
28639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_rnd_hl_s1; break;
28649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_rnd_lh_s0:
28669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_rnd_lh_s0; break;
28679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_rnd_lh_s1:
28699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_rnd_lh_s1; break;
28709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_rnd_ll_s0:
28729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_rnd_ll_s0; break;
28739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyd_rnd_ll_s1:
28759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyd_rnd_ll_s1; break;
28769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_acc_hh_s0:
28789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_acc_hh_s0; break;
28799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_acc_hh_s1:
28819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_acc_hh_s1; break;
28829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_acc_hl_s0:
28849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_acc_hl_s0; break;
28859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_acc_hl_s1:
28879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_acc_hl_s1; break;
28889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_acc_lh_s0:
28909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_acc_lh_s0; break;
28919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_acc_lh_s1:
28939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_acc_lh_s1; break;
28949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_acc_ll_s0:
28969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_acc_ll_s0; break;
28979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
28989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_acc_ll_s1:
28999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_acc_ll_s1; break;
29009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_nac_hh_s0:
29029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_nac_hh_s0; break;
29039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_nac_hh_s1:
29059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_nac_hh_s1; break;
29069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_nac_hl_s0:
29089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_nac_hl_s0; break;
29099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_nac_hl_s1:
29119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_nac_hl_s1; break;
29129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_nac_lh_s0:
29149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_nac_lh_s0; break;
29159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_nac_lh_s1:
29179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_nac_lh_s1; break;
29189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_nac_ll_s0:
29209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_nac_ll_s0; break;
29219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_nac_ll_s1:
29239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_nac_ll_s1; break;
29249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_hh_s0:
29269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_hh_s0; break;
29279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_hh_s1:
29299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_hh_s1; break;
29309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_hl_s0:
29329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_hl_s0; break;
29339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_hl_s1:
29359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_hl_s1; break;
29369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_lh_s0:
29389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_lh_s0; break;
29399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_lh_s1:
29419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_lh_s1; break;
29429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_ll_s0:
29449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_ll_s0; break;
29459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_ll_s1:
29479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_ll_s1; break;
29489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_acc_hh_s0:
29509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_acc_hh_s0; break;
29519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_acc_hh_s1:
29539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_acc_hh_s1; break;
29549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_acc_hl_s0:
29569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_acc_hl_s0; break;
29579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_acc_hl_s1:
29599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_acc_hl_s1; break;
29609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_acc_lh_s0:
29629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_acc_lh_s0; break;
29639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_acc_lh_s1:
29659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_acc_lh_s1; break;
29669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_acc_ll_s0:
29689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_acc_ll_s0; break;
29699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_acc_ll_s1:
29719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_acc_ll_s1; break;
29729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_nac_hh_s0:
29749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_nac_hh_s0; break;
29759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_nac_hh_s1:
29779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_nac_hh_s1; break;
29789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_nac_hl_s0:
29809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_nac_hl_s0; break;
29819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_nac_hl_s1:
29839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_nac_hl_s1; break;
29849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_nac_lh_s0:
29869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_nac_lh_s0; break;
29879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_nac_lh_s1:
29899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_nac_lh_s1; break;
29909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_nac_ll_s0:
29929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_nac_ll_s0; break;
29939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_nac_ll_s1:
29959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_nac_ll_s1; break;
29969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
29979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_hh_s0:
29989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_hh_s0; break;
29999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_hh_s1:
30019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_hh_s1; break;
30029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_hl_s0:
30049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_hl_s0; break;
30059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_hl_s1:
30079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_hl_s1; break;
30089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_lh_s0:
30109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_lh_s0; break;
30119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_lh_s1:
30139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_lh_s1; break;
30149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_ll_s0:
30169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_ll_s0; break;
30179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyud_ll_s1:
30199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyud_ll_s1; break;
30209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpysmi:
30229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpysmi; break;
30239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_macsip:
30259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_macsip; break;
30269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_macsin:
30289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_macsin; break;
30299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_dpmpyss_s0:
30319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_dpmpyss_s0; break;
30329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_dpmpyss_acc_s0:
30349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_dpmpyss_acc_s0; break;
30359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_dpmpyss_nac_s0:
30379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_dpmpyss_nac_s0; break;
30389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_dpmpyuu_s0:
30409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_dpmpyuu_s0; break;
30419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_dpmpyuu_acc_s0:
30439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_dpmpyuu_acc_s0; break;
30449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_dpmpyuu_nac_s0:
30469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_dpmpyuu_nac_s0; break;
30479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpy_up:
30499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpy_up; break;
30509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyu_up:
30529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyu_up; break;
30539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_dpmpyss_rnd_s0:
30559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_dpmpyss_rnd_s0; break;
30569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyi:
30589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyi; break;
30599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mpyui:
30619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mpyui; break;
30629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_maci:
30649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_maci; break;
30659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_acci:
30679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_acci; break;
30689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_accii:
30709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_accii; break;
30719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_nacci:
30739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_nacci; break;
30749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_naccii:
30769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_naccii; break;
30779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_subacc:
30799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_subacc; break;
30809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vmpy2s_s0:
30829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vmpy2s_s0; break;
30839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vmpy2s_s1:
30859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vmpy2s_s1; break;
30869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vmac2s_s0:
30889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vmac2s_s0; break;
30899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vmac2s_s1:
30919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vmac2s_s1; break;
30929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vmpy2s_s0pack:
30949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vmpy2s_s0pack; break;
30959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vmpy2s_s1pack:
30979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vmpy2s_s1pack; break;
30989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
30999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vmac2:
31009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vmac2; break;
31019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vmpy2es_s0:
31039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vmpy2es_s0; break;
31049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vmpy2es_s1:
31069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vmpy2es_s1; break;
31079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vmac2es_s0:
31099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vmac2es_s0; break;
31109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vmac2es_s1:
31129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vmac2es_s1; break;
31139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vmac2es:
31159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vmac2es; break;
31169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrmac_s0:
31189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrmac_s0; break;
31199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrmpy_s0:
31219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrmpy_s0; break;
31229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vdmpyrs_s0:
31249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vdmpyrs_s0; break;
31259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vdmpyrs_s1:
31279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vdmpyrs_s1; break;
31289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vdmacs_s0:
31309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vdmacs_s0; break;
31319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vdmacs_s1:
31339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vdmacs_s1; break;
31349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vdmpys_s0:
31369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vdmpys_s0; break;
31379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vdmpys_s1:
31399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vdmpys_s1; break;
31409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmpyrs_s0:
31429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmpyrs_s0; break;
31439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmpyrs_s1:
31459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmpyrs_s1; break;
31469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmpyrsc_s0:
31489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmpyrsc_s0; break;
31499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmpyrsc_s1:
31519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmpyrsc_s1; break;
31529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmacs_s0:
31549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmacs_s0; break;
31559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmacs_s1:
31579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmacs_s1; break;
31589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmacsc_s0:
31609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmacsc_s0; break;
31619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmacsc_s1:
31639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmacsc_s1; break;
31649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmpys_s0:
31669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmpys_s0; break;
31679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmpys_s1:
31699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmpys_s1; break;
31709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmpysc_s0:
31729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmpysc_s0; break;
31739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmpysc_s1:
31759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmpysc_s1; break;
31769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cnacs_s0:
31789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cnacs_s0; break;
31799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cnacs_s1:
31819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cnacs_s1; break;
31829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cnacsc_s0:
31849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cnacsc_s0; break;
31859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cnacsc_s1:
31879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cnacsc_s1; break;
31889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrcmpys_s1:
31909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrcmpys_s1; break;
31919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrcmpys_acc_s1:
31939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrcmpys_acc_s1; break;
31949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrcmpys_s1rp:
31969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrcmpys_s1rp; break;
31979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
31989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmacls_s0:
31999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmacls_s0; break;
32009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmacls_s1:
32029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmacls_s1; break;
32039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmachs_s0:
32059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmachs_s0; break;
32069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmachs_s1:
32089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmachs_s1; break;
32099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyl_s0:
32119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyl_s0; break;
32129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyl_s1:
32149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyl_s1; break;
32159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyh_s0:
32179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyh_s0; break;
32189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyh_s1:
32209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyh_s1; break;
32219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmacls_rs0:
32239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmacls_rs0; break;
32249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmacls_rs1:
32269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmacls_rs1; break;
32279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmachs_rs0:
32299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmachs_rs0; break;
32309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmachs_rs1:
32329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmachs_rs1; break;
32339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyl_rs0:
32359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyl_rs0; break;
32369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyl_rs1:
32389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyl_rs1; break;
32399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyh_rs0:
32419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyh_rs0; break;
32429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyh_rs1:
32449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyh_rs1; break;
32459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_hmmpyl_rs1:
32479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_hmmpyl_rs1; break;
32489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_hmmpyh_rs1:
32509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_hmmpyh_rs1; break;
32519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmaculs_s0:
32539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmaculs_s0; break;
32549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmaculs_s1:
32569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmaculs_s1; break;
32579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmacuhs_s0:
32599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmacuhs_s0; break;
32609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmacuhs_s1:
32629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmacuhs_s1; break;
32639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyul_s0:
32659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyul_s0; break;
32669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyul_s1:
32689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyul_s1; break;
32699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyuh_s0:
32719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyuh_s0; break;
32729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyuh_s1:
32749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyuh_s1; break;
32759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmaculs_rs0:
32779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmaculs_rs0; break;
32789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmaculs_rs1:
32809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmaculs_rs1; break;
32819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmacuhs_rs0:
32839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmacuhs_rs0; break;
32849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmacuhs_rs1:
32869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmacuhs_rs1; break;
32879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyul_rs0:
32899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyul_rs0; break;
32909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyul_rs1:
32929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyul_rs1; break;
32939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyuh_rs0:
32959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyuh_rs0; break;
32969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
32979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_mmpyuh_rs1:
32989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_mmpyuh_rs1; break;
32999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrcmaci_s0:
33019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrcmaci_s0; break;
33029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrcmacr_s0:
33049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrcmacr_s0; break;
33059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrcmaci_s0c:
33079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrcmaci_s0c; break;
33089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrcmacr_s0c:
33109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrcmacr_s0c; break;
33119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmaci_s0:
33139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmaci_s0; break;
33149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmacr_s0:
33169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmacr_s0; break;
33179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrcmpyi_s0:
33199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrcmpyi_s0; break;
33209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrcmpyr_s0:
33229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrcmpyr_s0; break;
33239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrcmpyi_s0c:
33259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrcmpyi_s0c; break;
33269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vrcmpyr_s0c:
33289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vrcmpyr_s0c; break;
33299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmpyi_s0:
33319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmpyi_s0; break;
33329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_cmpyr_s0:
33349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_cmpyr_s0; break;
33359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vcmpy_s0_sat_i:
33379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vcmpy_s0_sat_i; break;
33389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vcmpy_s0_sat_r:
33409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vcmpy_s0_sat_r; break;
33419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vcmpy_s1_sat_i:
33439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vcmpy_s1_sat_i; break;
33449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vcmpy_s1_sat_r:
33469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vcmpy_s1_sat_r; break;
33479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vcmac_s0_sat_i:
33499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vcmac_s0_sat_i; break;
33509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vcmac_s0_sat_r:
33529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vcmac_s0_sat_r; break;
33539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vcrotate:
33559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vcrotate; break;
33569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_add:
33589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_add; break;
33599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_sub:
33619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_sub; break;
33629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addsat:
33649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addsat; break;
33659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subsat:
33679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subsat; break;
33689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addi:
33709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addi; break;
33719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addh_l16_ll:
33739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addh_l16_ll; break;
33749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addh_l16_hl:
33769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addh_l16_hl; break;
33779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addh_l16_sat_ll:
33799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addh_l16_sat_ll; break;
33809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addh_l16_sat_hl:
33829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addh_l16_sat_hl; break;
33839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subh_l16_ll:
33859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subh_l16_ll; break;
33869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subh_l16_hl:
33889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subh_l16_hl; break;
33899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subh_l16_sat_ll:
33919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subh_l16_sat_ll; break;
33929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subh_l16_sat_hl:
33949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subh_l16_sat_hl; break;
33959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addh_h16_ll:
33979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addh_h16_ll; break;
33989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
33999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addh_h16_lh:
34009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addh_h16_lh; break;
34019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addh_h16_hl:
34039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addh_h16_hl; break;
34049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addh_h16_hh:
34069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addh_h16_hh; break;
34079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addh_h16_sat_ll:
34099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addh_h16_sat_ll; break;
34109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addh_h16_sat_lh:
34129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addh_h16_sat_lh; break;
34139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addh_h16_sat_hl:
34159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addh_h16_sat_hl; break;
34169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addh_h16_sat_hh:
34189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addh_h16_sat_hh; break;
34199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subh_h16_ll:
34219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subh_h16_ll; break;
34229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subh_h16_lh:
34249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subh_h16_lh; break;
34259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subh_h16_hl:
34279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subh_h16_hl; break;
34289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subh_h16_hh:
34309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subh_h16_hh; break;
34319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subh_h16_sat_ll:
34339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subh_h16_sat_ll; break;
34349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subh_h16_sat_lh:
34369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subh_h16_sat_lh; break;
34379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subh_h16_sat_hl:
34399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subh_h16_sat_hl; break;
34409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subh_h16_sat_hh:
34429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subh_h16_sat_hh; break;
34439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_aslh:
34459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_aslh; break;
34469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_asrh:
34489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_asrh; break;
34499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addp:
34519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addp; break;
34529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addpsat:
34549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addpsat; break;
34559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_addsp:
34579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_addsp; break;
34589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subp:
34609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subp; break;
34619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_neg:
34639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_neg; break;
34649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_negsat:
34669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_negsat; break;
34679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_abs:
34699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_abs; break;
34709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_abssat:
34729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_abssat; break;
34739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vconj:
34759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vconj; break;
34769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_negp:
34789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_negp; break;
34799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_absp:
34819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_absp; break;
34829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_max:
34849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_max; break;
34859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_maxu:
34879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_maxu; break;
34889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_min:
34909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_min; break;
34919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_minu:
34939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_minu; break;
34949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_maxp:
34969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_maxp; break;
34979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
34989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_maxup:
34999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_maxup; break;
35009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_minp:
35029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_minp; break;
35039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_minup:
35059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_minup; break;
35069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_tfr:
35089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_tfr; break;
35099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_tfrsi:
35119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_tfrsi; break;
35129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_tfrp:
35149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_tfrp; break;
35159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_tfrpi:
35179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_tfrpi; break;
35189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_zxtb:
35209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_zxtb; break;
35219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_sxtb:
35239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_sxtb; break;
35249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_zxth:
35269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_zxth; break;
35279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_sxth:
35299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_sxth; break;
35309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_combinew:
35329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_combinew; break;
35339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_combineii:
35359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_combineii; break;
35369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_combine_hh:
35389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_combine_hh; break;
35399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_combine_hl:
35419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_combine_hl; break;
35429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_combine_lh:
35449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_combine_lh; break;
35459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_combine_ll:
35479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_combine_ll; break;
35489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_tfril:
35509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_tfril; break;
35519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_tfrih:
35539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_tfrih; break;
35549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_and:
35569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_and; break;
35579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_or:
35599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_or; break;
35609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_xor:
35629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_xor; break;
35639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_not:
35659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_not; break;
35669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_xor_xacc:
35689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_xor_xacc; break;
35699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_subri:
35719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_subri; break;
35729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_andir:
35749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_andir; break;
35759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_orir:
35779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_orir; break;
35789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_andp:
35809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_andp; break;
35819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_orp:
35839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_orp; break;
35849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_xorp:
35869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_xorp; break;
35879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_notp:
35899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_notp; break;
35909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_sxtw:
35929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_sxtw; break;
35939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_sat:
35959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_sat; break;
35969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
35979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_sath:
35989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_sath; break;
35999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_satuh:
36019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_satuh; break;
36029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_satub:
36049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_satub; break;
36059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_satb:
36079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_satb; break;
36089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vaddub:
36109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vaddub; break;
36119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vaddubs:
36139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vaddubs; break;
36149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vaddh:
36169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vaddh; break;
36179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vaddhs:
36199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vaddhs; break;
36209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vadduhs:
36229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vadduhs; break;
36239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vaddw:
36259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vaddw; break;
36269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vaddws:
36289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vaddws; break;
36299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_svavgh:
36319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_svavgh; break;
36329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_svavghs:
36349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_svavghs; break;
36359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_svnavgh:
36379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_svnavgh; break;
36389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_svaddh:
36409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_svaddh; break;
36419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_svaddhs:
36439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_svaddhs; break;
36449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_svadduhs:
36469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_svadduhs; break;
36479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_svsubh:
36499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_svsubh; break;
36509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_svsubhs:
36529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_svsubhs; break;
36539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_svsubuhs:
36559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_svsubuhs; break;
36569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vraddub:
36589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vraddub; break;
36599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vraddub_acc:
36619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vraddub_acc; break;
36629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vradduh:
36649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vradduh; break;
36659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vsubub:
36679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vsubub; break;
36689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vsububs:
36709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vsububs; break;
36719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vsubh:
36739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vsubh; break;
36749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vsubhs:
36769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vsubhs; break;
36779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vsubuhs:
36799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vsubuhs; break;
36809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vsubw:
36829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vsubw; break;
36839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vsubws:
36859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vsubws; break;
36869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vabsh:
36889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vabsh; break;
36899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vabshsat:
36919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vabshsat; break;
36929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vabsw:
36949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vabsw; break;
36959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vabswsat:
36979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vabswsat; break;
36989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
36999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vabsdiffw:
37009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vabsdiffw; break;
37019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M2_vabsdiffh:
37039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M2_vabsdiffh; break;
37049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vrsadub:
37069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vrsadub; break;
37079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vrsadub_acc:
37099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vrsadub_acc; break;
37109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vavgub:
37129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vavgub; break;
37139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vavguh:
37159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vavguh; break;
37169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vavgh:
37189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vavgh; break;
37199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vnavgh:
37219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vnavgh; break;
37229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vavgw:
37249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vavgw; break;
37259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vnavgw:
37279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vnavgw; break;
37289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vavgwr:
37309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vavgwr; break;
37319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vnavgwr:
37339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vnavgwr; break;
37349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vavgwcr:
37369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vavgwcr; break;
37379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vnavgwcr:
37399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vnavgwcr; break;
37409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vavghcr:
37429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vavghcr; break;
37439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vnavghcr:
37459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vnavghcr; break;
37469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vavguw:
37489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vavguw; break;
37499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vavguwr:
37519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vavguwr; break;
37529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vavgubr:
37549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vavgubr; break;
37559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vavguhr:
37579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vavguhr; break;
37589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vavghr:
37609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vavghr; break;
37619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vnavghr:
37639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vnavghr; break;
37649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vminh:
37669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vminh; break;
37679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vmaxh:
37699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vmaxh; break;
37709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vminub:
37729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vminub; break;
37739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vmaxub:
37759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vmaxub; break;
37769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vminuh:
37789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vminuh; break;
37799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vmaxuh:
37819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vmaxuh; break;
37829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vminw:
37849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vminw; break;
37859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vmaxw:
37879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vmaxw; break;
37889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vminuw:
37909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vminuw; break;
37919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_vmaxuw:
37939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_vmaxuw; break;
37949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_r:
37969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_r; break;
37979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
37989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_r:
37999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_r; break;
38009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_r_r:
38029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_r_r; break;
38039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsl_r_r:
38059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsl_r_r; break;
38069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_p:
38089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_p; break;
38099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_p:
38119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_p; break;
38129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_r_p:
38149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_r_p; break;
38159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsl_r_p:
38179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsl_r_p; break;
38189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_r_acc:
38209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_r_acc; break;
38219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_r_acc:
38239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_r_acc; break;
38249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_r_r_acc:
38269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_r_r_acc; break;
38279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsl_r_r_acc:
38299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsl_r_r_acc; break;
38309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_p_acc:
38329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_p_acc; break;
38339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_p_acc:
38359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_p_acc; break;
38369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_r_p_acc:
38389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_r_p_acc; break;
38399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsl_r_p_acc:
38419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsl_r_p_acc; break;
38429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_r_nac:
38449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_r_nac; break;
38459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_r_nac:
38479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_r_nac; break;
38489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_r_r_nac:
38509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_r_r_nac; break;
38519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsl_r_r_nac:
38539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsl_r_r_nac; break;
38549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_p_nac:
38569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_p_nac; break;
38579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_p_nac:
38599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_p_nac; break;
38609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_r_p_nac:
38629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_r_p_nac; break;
38639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsl_r_p_nac:
38659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsl_r_p_nac; break;
38669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_r_and:
38689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_r_and; break;
38699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_r_and:
38719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_r_and; break;
38729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_r_r_and:
38749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_r_r_and; break;
38759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsl_r_r_and:
38779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsl_r_r_and; break;
38789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_r_or:
38809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_r_or; break;
38819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_r_or:
38839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_r_or; break;
38849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_r_r_or:
38869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_r_r_or; break;
38879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsl_r_r_or:
38899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsl_r_r_or; break;
38909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_p_and:
38929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_p_and; break;
38939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_p_and:
38959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_p_and; break;
38969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
38979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_r_p_and:
38989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_r_p_and; break;
38999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsl_r_p_and:
39019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsl_r_p_and; break;
39029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_p_or:
39049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_p_or; break;
39059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_p_or:
39079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_p_or; break;
39089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_r_p_or:
39109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_r_p_or; break;
39119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsl_r_p_or:
39139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsl_r_p_or; break;
39149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_r_sat:
39169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_r_sat; break;
39179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_r_sat:
39199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_r_sat; break;
39209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_r:
39229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_r; break;
39239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_r:
39259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_r; break;
39269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_r:
39289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_r; break;
39299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_p:
39319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_p; break;
39329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_p:
39349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_p; break;
39359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_p:
39379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_p; break;
39389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_r_acc:
39409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_r_acc; break;
39419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_r_acc:
39439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_r_acc; break;
39449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_r_acc:
39469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_r_acc; break;
39479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_p_acc:
39499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_p_acc; break;
39509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_p_acc:
39529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_p_acc; break;
39539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_p_acc:
39559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_p_acc; break;
39569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_r_nac:
39589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_r_nac; break;
39599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_r_nac:
39619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_r_nac; break;
39629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_r_nac:
39649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_r_nac; break;
39659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_p_nac:
39679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_p_nac; break;
39689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_p_nac:
39709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_p_nac; break;
39719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_p_nac:
39739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_p_nac; break;
39749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_r_xacc:
39769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_r_xacc; break;
39779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_r_xacc:
39799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_r_xacc; break;
39809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_p_xacc:
39829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_p_xacc; break;
39839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_p_xacc:
39859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_p_xacc; break;
39869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_r_and:
39889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_r_and; break;
39899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_r_and:
39919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_r_and; break;
39929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_r_and:
39949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_r_and; break;
39959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_r_or:
39979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_r_or; break;
39989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
39999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_r_or:
40009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_r_or; break;
40019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_r_or:
40039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_r_or; break;
40049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_p_and:
40069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_p_and; break;
40079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_p_and:
40099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_p_and; break;
40109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_p_and:
40129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_p_and; break;
40139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_p_or:
40159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_p_or; break;
40169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_p_or:
40189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_p_or; break;
40199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_p_or:
40219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_p_or; break;
40229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_r_sat:
40249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_r_sat; break;
40259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_r_rnd:
40279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_r_rnd; break;
40289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_r_rnd_goodsyntax:
40309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_r_rnd_goodsyntax; break;
40319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_addasl_rrri:
40339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_addasl_rrri; break;
40349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_valignib:
40369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_valignib; break;
40379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_valignrb:
40399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_valignrb; break;
40409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vspliceib:
40429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vspliceib; break;
40439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsplicerb:
40459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsplicerb; break;
40469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsplatrh:
40489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsplatrh; break;
40499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsplatrb:
40519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsplatrb; break;
40529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_insert:
40549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_insert; break;
40559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_tableidxb_goodsyntax:
40579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_tableidxb_goodsyntax; break;
40589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_tableidxh_goodsyntax:
40609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_tableidxh_goodsyntax; break;
40619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_tableidxw_goodsyntax:
40639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_tableidxw_goodsyntax; break;
40649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_tableidxd_goodsyntax:
40669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_tableidxd_goodsyntax; break;
40679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_extractu:
40699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_extractu; break;
40709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_insertp:
40729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_insertp; break;
40739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_extractup:
40759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_extractup; break;
40769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_insert_rp:
40789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_insert_rp; break;
40799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_extractu_rp:
40819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_extractu_rp; break;
40829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_insertp_rp:
40849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_insertp_rp; break;
40859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_extractup_rp:
40879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_extractup_rp; break;
40889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_tstbit_i:
40909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_tstbit_i; break;
40919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_setbit_i:
40939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_setbit_i; break;
40949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_togglebit_i:
40969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_togglebit_i; break;
40979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
40989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_clrbit_i:
40999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_clrbit_i; break;
41009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_tstbit_r:
41029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_tstbit_r; break;
41039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_setbit_r:
41059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_setbit_r; break;
41069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_togglebit_r:
41089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_togglebit_r; break;
41099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_clrbit_r:
41119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_clrbit_r; break;
41129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_vh:
41149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_vh; break;
41159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_vh:
41179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_vh; break;
41189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_vh:
41209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_vh; break;
41219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_vh:
41239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_vh; break;
41249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_vh:
41269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_vh; break;
41279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_r_vh:
41299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_r_vh; break;
41309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsl_r_vh:
41329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsl_r_vh; break;
41339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_vw:
41359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_vw; break;
41369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_i_svw_trun:
41389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_i_svw_trun; break;
41399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_svw_trun:
41419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_svw_trun; break;
41429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_i_vw:
41449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_i_vw; break;
41459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_i_vw:
41479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_i_vw; break;
41489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asr_r_vw:
41509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asr_r_vw; break;
41519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_asl_r_vw:
41539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_asl_r_vw; break;
41549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsr_r_vw:
41569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsr_r_vw; break;
41579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lsl_r_vw:
41599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lsl_r_vw; break;
41609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vrndpackwh:
41629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vrndpackwh; break;
41639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vrndpackwhs:
41659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vrndpackwhs; break;
41669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsxtbh:
41689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsxtbh; break;
41699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vzxtbh:
41719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vzxtbh; break;
41729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsathub:
41749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsathub; break;
41759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_svsathub:
41779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_svsathub; break;
41789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_svsathb:
41809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_svsathb; break;
41819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsathb:
41839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsathb; break;
41849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vtrunohb:
41869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vtrunohb; break;
41879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vtrunewh:
41899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vtrunewh; break;
41909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vtrunowh:
41929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vtrunowh; break;
41939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vtrunehb:
41959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vtrunehb; break;
41969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
41979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsxthw:
41989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsxthw; break;
41999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vzxthw:
42019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vzxthw; break;
42029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsatwh:
42049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsatwh; break;
42059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsatwuh:
42079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsatwuh; break;
42089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_packhl:
42109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_packhl; break;
42119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A2_swiz:
42139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A2_swiz; break;
42149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsathub_nopack:
42169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsathub_nopack; break;
42179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsathb_nopack:
42199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsathb_nopack; break;
42209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsatwh_nopack:
42229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsatwh_nopack; break;
42239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_vsatwuh_nopack:
42259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_vsatwuh_nopack; break;
42269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_shuffob:
42289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_shuffob; break;
42299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_shuffeb:
42319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_shuffeb; break;
42329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_shuffoh:
42349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_shuffoh; break;
42359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_shuffeh:
42379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_shuffeh; break;
42389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_parityp:
42409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_parityp; break;
42419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_lfsp:
42439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_lfsp; break;
42449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_clbnorm:
42469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_clbnorm; break;
42479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_clb:
42499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_clb; break;
42509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_cl0:
42529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_cl0; break;
42539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_cl1:
42559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_cl1; break;
42569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_clbp:
42589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_clbp; break;
42599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_cl0p:
42619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_cl0p; break;
42629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_cl1p:
42649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_cl1p; break;
42659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_brev:
42679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_brev; break;
42689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_ct0:
42709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_ct0; break;
42719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_ct1:
42739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_ct1; break;
42749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_interleave:
42769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_interleave; break;
42779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S2_deinterleave:
42799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S2_deinterleave; break;
42809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_SI_to_SXTHI_asrh:
42829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_SI_to_SXTHI_asrh; break;
42839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_orn:
42859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_orn; break;
42869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_andn:
42889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_andn; break;
42899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_ornp:
42919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_ornp; break;
42929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_andnp:
42949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_andnp; break;
42959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_combineir:
42979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_combineir; break;
42989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
42999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_combineri:
43009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_combineri; break;
43019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_cmpneqi:
43039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_cmpneqi; break;
43049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_cmpneq:
43069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_cmpneq; break;
43079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_cmpltei:
43099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_cmpltei; break;
43109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_cmplte:
43129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_cmplte; break;
43139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_cmplteui:
43159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_cmplteui; break;
43169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_cmplteu:
43189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_cmplteu; break;
43199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_rcmpneq:
43219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_rcmpneq; break;
43229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_rcmpneqi:
43249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_rcmpneqi; break;
43259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_rcmpeq:
43279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_rcmpeq; break;
43289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_rcmpeqi:
43309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_rcmpeqi; break;
43319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_fastcorner9:
43339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_fastcorner9; break;
43349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_fastcorner9_not:
43369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_fastcorner9_not; break;
43379631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43389631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_and_andn:
43399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_and_andn; break;
43409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_and_and:
43429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_and_and; break;
43439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_and_orn:
43459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_and_orn; break;
43469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43479631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_and_or:
43489631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_and_or; break;
43499631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43509631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_or_andn:
43519631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_or_andn; break;
43529631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43539631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_or_and:
43549631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_or_and; break;
43559631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43569631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_or_orn:
43579631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_or_orn; break;
43589631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43599631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_C4_or_or:
43609631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_C4_or_or; break;
43619631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43629631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S4_addaddi:
43639631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S4_addaddi; break;
43649631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43659631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S4_subaddi:
43669631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S4_subaddi; break;
43679631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43689631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M4_xor_xacc:
43699631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M4_xor_xacc; break;
43709631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43719631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M4_and_and:
43729631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M4_and_and; break;
43739631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43749631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M4_and_or:
43759631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M4_and_or; break;
43769631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43779631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M4_and_xor:
43789631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M4_and_xor; break;
43799631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43809631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M4_and_andn:
43819631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M4_and_andn; break;
43829631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43839631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M4_xor_and:
43849631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M4_xor_and; break;
43859631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43869631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M4_xor_or:
43879631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M4_xor_or; break;
43889631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43899631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M4_xor_andn:
43909631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M4_xor_andn; break;
43919631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43929631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M4_or_and:
43939631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M4_or_and; break;
43949631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43959631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M4_or_or:
43969631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M4_or_or; break;
43979631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
43989631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M4_or_xor:
43999631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M4_or_xor; break;
44009631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
44019631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_M4_or_andn:
44029631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_M4_or_andn; break;
44039631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
44049631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S4_or_andix:
44059631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S4_or_andix; break;
44069631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
44079631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S4_or_andi:
44089631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S4_or_andi; break;
44099631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
44109631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_S4_or_ori:
44119631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_S4_or_ori; break;
44129631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
44139631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_modwrapu:
44149631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_modwrapu; break;
44159631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
44169631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_cround_rr:
44179631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_cround_rr; break;
44189631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
44199631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_round_ri:
44209631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_round_ri; break;
44219631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
44229631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_round_rr:
44239631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_round_rr; break;
44249631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
44259631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_round_ri_sat:
44269631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_round_ri_sat; break;
44279631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
44289631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  case Hexagon::BI__builtin_HEXAGON_A4_round_rr_sat:
44299631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum    ID = Intrinsic::hexagon_A4_round_rr_sat; break;
44309631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
44319631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  }
44329631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
44339631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  llvm::Function *F = CGM.getIntrinsic(ID);
44349631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum  return Builder.CreateCall(F, Ops, "");
44359631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum}
44369631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum
44371eb4433ac451dc16f4133a88af2d002ac26c58efMike StumpValue *CodeGenFunction::EmitPPCBuiltinExpr(unsigned BuiltinID,
44381feedd84221e8dbcc3faf3de27cc42b559db845dChris Lattner                                           const CallExpr *E) {
44395f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner  SmallVector<Value*, 4> Ops;
4440dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner
4441dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  for (unsigned i = 0, e = E->getNumArgs(); i != e; i++)
4442dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner    Ops.push_back(EmitScalarExpr(E->getArg(i)));
4443dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner
4444dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  Intrinsic::ID ID = Intrinsic::not_intrinsic;
4445dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner
4446dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  switch (BuiltinID) {
4447dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  default: return 0;
4448dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner
44494d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov  // vec_ld, vec_lvsl, vec_lvsr
44504d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov  case PPC::BI__builtin_altivec_lvx:
44514d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov  case PPC::BI__builtin_altivec_lvxl:
44524d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov  case PPC::BI__builtin_altivec_lvebx:
44534d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov  case PPC::BI__builtin_altivec_lvehx:
44544d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov  case PPC::BI__builtin_altivec_lvewx:
44554d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov  case PPC::BI__builtin_altivec_lvsl:
44564d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov  case PPC::BI__builtin_altivec_lvsr:
44574d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov  {
4458d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    Ops[1] = Builder.CreateBitCast(Ops[1], Int8PtrTy);
44594d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov
4460578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    Ops[0] = Builder.CreateGEP(Ops[1], Ops[0]);
44614d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov    Ops.pop_back();
44624d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov
44634d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov    switch (BuiltinID) {
4464b219cfc4d75f0a03630b7c4509ef791b7e97b2c8David Blaikie    default: llvm_unreachable("Unsupported ld/lvsl/lvsr intrinsic!");
44654d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov    case PPC::BI__builtin_altivec_lvx:
44664d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      ID = Intrinsic::ppc_altivec_lvx;
44674d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      break;
44684d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov    case PPC::BI__builtin_altivec_lvxl:
44694d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      ID = Intrinsic::ppc_altivec_lvxl;
44704d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      break;
44714d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov    case PPC::BI__builtin_altivec_lvebx:
44724d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      ID = Intrinsic::ppc_altivec_lvebx;
44734d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      break;
44744d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov    case PPC::BI__builtin_altivec_lvehx:
44754d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      ID = Intrinsic::ppc_altivec_lvehx;
44764d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      break;
44774d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov    case PPC::BI__builtin_altivec_lvewx:
44784d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      ID = Intrinsic::ppc_altivec_lvewx;
44794d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      break;
44804d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov    case PPC::BI__builtin_altivec_lvsl:
44814d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      ID = Intrinsic::ppc_altivec_lvsl;
44824d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      break;
44834d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov    case PPC::BI__builtin_altivec_lvsr:
44844d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      ID = Intrinsic::ppc_altivec_lvsr;
44854d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov      break;
44864d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov    }
44874d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov    llvm::Function *F = CGM.getIntrinsic(ID);
44884c7d9f1507d0f102bd4133bba63348636facd469Jay Foad    return Builder.CreateCall(F, Ops, "");
44894d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov  }
44904d3a7b0a0608febe3cdac68f6121546672ca875eAnton Korobeynikov
4491dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  // vec_st
4492dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  case PPC::BI__builtin_altivec_stvx:
4493dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  case PPC::BI__builtin_altivec_stvxl:
4494dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  case PPC::BI__builtin_altivec_stvebx:
4495dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  case PPC::BI__builtin_altivec_stvehx:
4496dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  case PPC::BI__builtin_altivec_stvewx:
4497dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  {
4498d16c2cf1cafa413709aa487cbbd5dc392f1ba1ffJohn McCall    Ops[2] = Builder.CreateBitCast(Ops[2], Int8PtrTy);
4499578faa837b552403e2002b97fdfbfde14f2448e5Benjamin Kramer    Ops[1] = Builder.CreateGEP(Ops[2], Ops[1]);
4500dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner    Ops.pop_back();
4501dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner
4502dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner    switch (BuiltinID) {
4503b219cfc4d75f0a03630b7c4509ef791b7e97b2c8David Blaikie    default: llvm_unreachable("Unsupported st intrinsic!");
4504dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner    case PPC::BI__builtin_altivec_stvx:
4505dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner      ID = Intrinsic::ppc_altivec_stvx;
4506dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner      break;
4507dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner    case PPC::BI__builtin_altivec_stvxl:
4508dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner      ID = Intrinsic::ppc_altivec_stvxl;
4509dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner      break;
4510dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner    case PPC::BI__builtin_altivec_stvebx:
4511dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner      ID = Intrinsic::ppc_altivec_stvebx;
4512dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner      break;
4513dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner    case PPC::BI__builtin_altivec_stvehx:
4514dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner      ID = Intrinsic::ppc_altivec_stvehx;
4515dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner      break;
4516dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner    case PPC::BI__builtin_altivec_stvewx:
4517dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner      ID = Intrinsic::ppc_altivec_stvewx;
4518dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner      break;
4519dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner    }
4520dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner    llvm::Function *F = CGM.getIntrinsic(ID);
45214c7d9f1507d0f102bd4133bba63348636facd469Jay Foad    return Builder.CreateCall(F, Ops, "");
4522dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  }
4523dd17394d225b06376e9ae1d23f36cec463fdef01Chris Lattner  }
45241eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump}
4525