aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/IR/AutoUpgrade.cpp
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@gmail.com>2016-05-30 23:15:56 +0000
committerCraig Topper <craig.topper@gmail.com>2016-05-30 23:15:56 +0000
commit8287fd8abde6228ebab32953e85c78e75ce0fd30 (patch)
tree4794e9ba319afa3c9da01ea5f248b5b57f4ddb86 /llvm/lib/IR/AutoUpgrade.cpp
parent424b5ee8f7d8139b3893fd8577062c0d4482b52a (diff)
downloadllvm-8287fd8abde6228ebab32953e85c78e75ce0fd30.zip
llvm-8287fd8abde6228ebab32953e85c78e75ce0fd30.tar.gz
llvm-8287fd8abde6228ebab32953e85c78e75ce0fd30.tar.bz2
[X86] Remove SSE/AVX unaligned store intrinsics as clang no longer uses them. Auto upgrade to native unaligned store instructions.
llvm-svn: 271236
Diffstat (limited to 'llvm/lib/IR/AutoUpgrade.cpp')
-rw-r--r--llvm/lib/IR/AutoUpgrade.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/llvm/lib/IR/AutoUpgrade.cpp b/llvm/lib/IR/AutoUpgrade.cpp
index b679bd6..ce0b10d 100644
--- a/llvm/lib/IR/AutoUpgrade.cpp
+++ b/llvm/lib/IR/AutoUpgrade.cpp
@@ -191,6 +191,9 @@ static bool UpgradeIntrinsicFunction1(Function *F, Function *&NewFn) {
Name == "x86.avx2.vextracti128" ||
Name.startswith("x86.avx.movnt.") ||
Name == "x86.sse2.storel.dq" ||
+ Name.startswith("x86.sse.storeu.") ||
+ Name.startswith("x86.sse2.storeu.") ||
+ Name.startswith("x86.avx.storeu.") ||
Name == "x86.sse42.crc32.64.8" ||
Name.startswith("x86.avx.vbroadcast.s") ||
Name.startswith("x86.sse2.psll.dq") ||
@@ -442,6 +445,20 @@ void llvm::UpgradeIntrinsicCall(CallInst *CI, Function *NewFn) {
// Remove intrinsic.
CI->eraseFromParent();
return;
+ } else if (Name.startswith("llvm.x86.sse.storeu.") ||
+ Name.startswith("llvm.x86.sse2.storeu.") ||
+ Name.startswith("llvm.x86.avx.storeu.")) {
+ Value *Arg0 = CI->getArgOperand(0);
+ Value *Arg1 = CI->getArgOperand(1);
+
+ Arg0 = Builder.CreateBitCast(Arg0,
+ PointerType::getUnqual(Arg1->getType()),
+ "cast");
+ Builder.CreateAlignedStore(Arg1, Arg0, 1);
+
+ // Remove intrinsic.
+ CI->eraseFromParent();
+ return;
} else if (Name.startswith("llvm.x86.xop.vpcom")) {
Intrinsic::ID intID;
if (Name.endswith("ub"))