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