diff options
-rw-r--r-- | CodeGen/CGBuiltin.cpp | 12 | ||||
-rw-r--r-- | include/clang/AST/Builtins.def | 2 |
2 files changed, 14 insertions, 0 deletions
diff --git a/CodeGen/CGBuiltin.cpp b/CodeGen/CGBuiltin.cpp index a1d5af19dd..27c82e8cd0 100644 --- a/CodeGen/CGBuiltin.cpp +++ b/CodeGen/CGBuiltin.cpp @@ -100,6 +100,18 @@ RValue CodeGenFunction::EmitBuiltinExpr(unsigned BuiltinID, const CallExpr *E) { llvm::Value *Condition = EmitScalarExpr(E->getArg(0)); return RValue::get(Condition); } + case Builtin::BI__builtin_bswap32: + case Builtin::BI__builtin_bswap64: { + llvm::Value *ArgValue = EmitScalarExpr(E->getArg(0)); + const llvm::Type *ArgType = ArgValue->getType(); + llvm::Value *F = + llvm::Intrinsic::getDeclaration(&CGM.getModule(), + llvm::Intrinsic::bswap, + &ArgType, 1); + llvm::Value *V = Builder.CreateCall(F, ArgValue, "tmp"); + + return RValue::get(V); + } } return RValue::get(0); diff --git a/include/clang/AST/Builtins.def b/include/clang/AST/Builtins.def index 29d0b06f89..501ab22f7a 100644 --- a/include/clang/AST/Builtins.def +++ b/include/clang/AST/Builtins.def @@ -74,6 +74,8 @@ BUILTIN(__builtin_ctzll, "iULLi", "nc") // Random GCC builtins +BUILTIN(__builtin_bswap32, "UiUi", "nc") +BUILTIN(__builtin_bswap64, "ULLiULLi", "nc") BUILTIN(__builtin_constant_p, "UsUs", "nc") BUILTIN(__builtin_classify_type, "i.", "nc") BUILTIN(__builtin___CFStringMakeConstantString, "FC*cC*", "nc") |