diff options
author | Bill Wendling <isanbard@gmail.com> | 2011-04-13 00:36:37 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2011-04-13 00:36:37 +0000 |
commit | 3137d3cb499af07c021f5a12dad1cd5418dd024f (patch) | |
tree | 309ce0770217a132273e685fcc6f3dbcacbbf63e /clang/lib | |
parent | b902f1dd88a3c9ffaac88b74ff0794df90798365 (diff) | |
download | bcm5719-llvm-3137d3cb499af07c021f5a12dad1cd5418dd024f.tar.gz bcm5719-llvm-3137d3cb499af07c021f5a12dad1cd5418dd024f.zip |
Convert the unaligned load builtins to the first-class versions.
llvm-svn: 129420
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/CodeGen/CGBuiltin.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index af8d37a2210..fce2bf40ee1 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -2092,6 +2092,19 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID, // If palignr is shifting the pair of vectors more than 32 bytes, emit zero. return llvm::Constant::getNullValue(ConvertType(E->getType())); } + case X86::BI__builtin_ia32_loadups: + case X86::BI__builtin_ia32_loadupd: + case X86::BI__builtin_ia32_loaddqu: { + const llvm::Type *VecTy = ConvertType(E->getType()); + const llvm::Type *IntTy = llvm::IntegerType::get(getLLVMContext(), 128); + + Value *BC = Builder.CreateBitCast(Ops[0], + llvm::PointerType::getUnqual(IntTy), + "cast"); + LoadInst *LI = Builder.CreateLoad(BC); + LI->setAlignment(1); // Unaligned load. + return Builder.CreateBitCast(LI, VecTy, "loadu.cast"); + } } } |