diff options
author | Craig Topper <craig.topper@gmail.com> | 2016-05-30 23:15:56 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@gmail.com> | 2016-05-30 23:15:56 +0000 |
commit | 8287fd8abde6228ebab32953e85c78e75ce0fd30 (patch) | |
tree | 4794e9ba319afa3c9da01ea5f248b5b57f4ddb86 /llvm/lib/IR/AutoUpgrade.cpp | |
parent | 424b5ee8f7d8139b3893fd8577062c0d4482b52a (diff) | |
download | llvm-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.cpp | 17 |
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")) |