summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2013-09-23 23:38:39 +0000
committerEli Friedman <eli.friedman@gmail.com>2013-09-23 23:38:39 +0000
commitf9d8c6cebbdec3ec97cd5b9403a2e1ed80d2f84f (patch)
tree88b401d0c6feb316c80402c71b2cbf9bb0e3fef9 /clang/lib/CodeGen
parent05ccc50ba421c2d59599353123c5f2b18b22067a (diff)
downloadbcm5719-llvm-f9d8c6cebbdec3ec97cd5b9403a2e1ed80d2f84f.tar.gz
bcm5719-llvm-f9d8c6cebbdec3ec97cd5b9403a2e1ed80d2f84f.zip
Add _mm_stream_si64 intrinsic.
While I'm here, also fix the alignment computation for the whole family of intrinsics. PR17298. llvm-svn: 191243
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r--clang/lib/CodeGen/CGBuiltin.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp
index 4b4c8f481cb..d1a41cfd012 100644
--- a/clang/lib/CodeGen/CGBuiltin.cpp
+++ b/clang/lib/CodeGen/CGBuiltin.cpp
@@ -3249,7 +3249,8 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID,
case X86::BI__builtin_ia32_movntpd256:
case X86::BI__builtin_ia32_movntdq:
case X86::BI__builtin_ia32_movntdq256:
- case X86::BI__builtin_ia32_movnti: {
+ case X86::BI__builtin_ia32_movnti:
+ case X86::BI__builtin_ia32_movnti64: {
llvm::MDNode *Node = llvm::MDNode::get(getLLVMContext(),
Builder.getInt32(1));
@@ -3259,7 +3260,16 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID,
"cast");
StoreInst *SI = Builder.CreateStore(Ops[1], BC);
SI->setMetadata(CGM.getModule().getMDKindID("nontemporal"), Node);
- SI->setAlignment(16);
+
+ // If the operand is an integer, we can't assume alignment. Otherwise,
+ // assume natural alignment.
+ QualType ArgTy = E->getArg(1)->getType();
+ unsigned Align;
+ if (ArgTy->isIntegerType())
+ Align = 1;
+ else
+ Align = getContext().getTypeSizeInChars(ArgTy).getQuantity();
+ SI->setAlignment(Align);
return SI;
}
// 3DNow!
OpenPOWER on IntegriCloud