ARM & AArch64: use table for EmitCommonNeonBuiltinExpr

This extends the intrinsic lookup table format slightly, and adds
entries for use the shared ARM/AArch64 definitions. The benefit is
currently smaller than for the SISD intrinsics (there's more custom
code implementing this set), but a few lines are saved and there's
scope for future expansion.

llvm-svn: 201848
This commit is contained in:
Tim Northover 2014-02-21 11:57:24 +00:00
parent 2d83796860
commit 8fe03d6111
2 changed files with 1063 additions and 1085 deletions

File diff suppressed because it is too large Load Diff

View File

@ -2179,11 +2179,18 @@ public:
llvm::Value *EmitAArch64CompareBuiltinExpr(llvm::Value *Op, llvm::Type *Ty); llvm::Value *EmitAArch64CompareBuiltinExpr(llvm::Value *Op, llvm::Type *Ty);
llvm::Value *EmitAArch64BuiltinExpr(unsigned BuiltinID, const CallExpr *E); llvm::Value *EmitAArch64BuiltinExpr(unsigned BuiltinID, const CallExpr *E);
llvm::Value *EmitARMBuiltinExpr(unsigned BuiltinID, const CallExpr *E); llvm::Value *EmitARMBuiltinExpr(unsigned BuiltinID, const CallExpr *E);
llvm::Value *EmitCommonNeonBuiltinExpr(unsigned BuiltinID, const CallExpr *E,
llvm::Value *EmitCommonNeonBuiltinExpr(unsigned BuiltinID,
unsigned LLVMIntrinsic,
unsigned AltLLVMIntrinsic,
const char *NameHint,
unsigned Modifier,
const CallExpr *E,
SmallVectorImpl<llvm::Value *> &Ops, SmallVectorImpl<llvm::Value *> &Ops,
llvm::Value *Align = 0); llvm::Value *Align = 0);
llvm::Function *LookupNeonIntrinsic(unsigned IntrinsicID, unsigned Modifier, llvm::Function *LookupNeonLLVMIntrinsic(unsigned IntrinsicID,
llvm::Type *ArgTy, const CallExpr *E); unsigned Modifier, llvm::Type *ArgTy,
const CallExpr *E);
llvm::Value *EmitNeonCall(llvm::Function *F, llvm::Value *EmitNeonCall(llvm::Function *F,
SmallVectorImpl<llvm::Value*> &O, SmallVectorImpl<llvm::Value*> &O,
const char *name, const char *name,