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