Add the intrinsic __builtin_convertvector
LLVM supports applying conversion instructions to vectors of the same number of elements (fptrunc, fptosi, etc.) but there had been no way for a Clang user to cause such instructions to be generated when using builtin vector types. C-style casting on vectors is already defined in terms of bitcasts, and so cannot be used for these conversions as well (without leading to a very confusing set of semantics). As a result, this adds a __builtin_convertvector intrinsic (patterned after the OpenCL __builtin_astype intrinsic). This is intended to aid the creation of vector intrinsic headers that create generic IR instead of target-dependent intrinsics (in other words, this is a generic _mm_cvtepi32_ps). As noted in the documentation, the action of __builtin_convertvector is defined in terms of the action of a C-style cast on each vector element. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@190915 91177308-0d34-0410-b5e6-96231b3b80d8
Showing
- docs/LanguageExtensions.rst 44 additions, 0 deletionsdocs/LanguageExtensions.rst
- include/clang/AST/Expr.h 54 additions, 0 deletionsinclude/clang/AST/Expr.h
- include/clang/AST/RecursiveASTVisitor.h 1 addition, 0 deletionsinclude/clang/AST/RecursiveASTVisitor.h
- include/clang/Basic/Builtins.def 1 addition, 0 deletionsinclude/clang/Basic/Builtins.def
- include/clang/Basic/DiagnosticSemaKinds.td 7 additions, 0 deletionsinclude/clang/Basic/DiagnosticSemaKinds.td
- include/clang/Basic/StmtNodes.td 1 addition, 0 deletionsinclude/clang/Basic/StmtNodes.td
- include/clang/Basic/TokenKinds.def 1 addition, 0 deletionsinclude/clang/Basic/TokenKinds.def
- include/clang/Sema/Sema.h 10 additions, 0 deletionsinclude/clang/Sema/Sema.h
- include/clang/Serialization/ASTBitCodes.h 2 additions, 0 deletionsinclude/clang/Serialization/ASTBitCodes.h
- lib/AST/Expr.cpp 1 addition, 0 deletionslib/AST/Expr.cpp
- lib/AST/ExprClassification.cpp 1 addition, 0 deletionslib/AST/ExprClassification.cpp
- lib/AST/ExprConstant.cpp 1 addition, 0 deletionslib/AST/ExprConstant.cpp
- lib/AST/ItaniumMangle.cpp 1 addition, 0 deletionslib/AST/ItaniumMangle.cpp
- lib/AST/StmtPrinter.cpp 8 additions, 0 deletionslib/AST/StmtPrinter.cpp
- lib/AST/StmtProfile.cpp 4 additions, 0 deletionslib/AST/StmtProfile.cpp
- lib/CodeGen/CGExprScalar.cpp 76 additions, 0 deletionslib/CodeGen/CGExprScalar.cpp
- lib/Parse/ParseExpr.cpp 29 additions, 0 deletionslib/Parse/ParseExpr.cpp
- lib/Sema/SemaChecking.cpp 31 additions, 0 deletionslib/Sema/SemaChecking.cpp
- lib/Sema/SemaExceptionSpec.cpp 1 addition, 0 deletionslib/Sema/SemaExceptionSpec.cpp
- lib/Sema/SemaExpr.cpp 13 additions, 0 deletionslib/Sema/SemaExpr.cpp
Loading
Please register or sign in to comment