diff options
| author | Eli Bendersky <eliben@google.com> | 2015-07-10 15:40:33 +0000 |
|---|---|---|
| committer | Eli Bendersky <eliben@google.com> | 2015-07-10 15:40:33 +0000 |
| commit | 5c0039a0142d4f99c5f8cf4162018eb2d5414572 (patch) | |
| tree | a8e61c7f63e0b13d08e183a4d6c65be8a760ebeb /llvm/lib | |
| parent | d9e4b4ff36abdd513c0fd246f98abef8094fe114 (diff) | |
| download | bcm5719-llvm-5c0039a0142d4f99c5f8cf4162018eb2d5414572.tar.gz bcm5719-llvm-5c0039a0142d4f99c5f8cf4162018eb2d5414572.zip | |
Actually support volatile memcpys in NVPTX lowering
Differential Revision: http://reviews.llvm.org/D11091
llvm-svn: 241914
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/NVPTX/NVPTXLowerAggrCopies.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/llvm/lib/Target/NVPTX/NVPTXLowerAggrCopies.cpp b/llvm/lib/Target/NVPTX/NVPTXLowerAggrCopies.cpp index e561293b94e..0bf72febc4a 100644 --- a/llvm/lib/Target/NVPTX/NVPTXLowerAggrCopies.cpp +++ b/llvm/lib/Target/NVPTX/NVPTXLowerAggrCopies.cpp @@ -57,7 +57,6 @@ char NVPTXLowerAggrCopies::ID = 0; // Lower MemTransferInst or load-store pair to loop static void convertTransferToLoop( Instruction *splitAt, Value *srcAddr, Value *dstAddr, Value *len, - //unsigned numLoads, bool srcVolatile, bool dstVolatile, LLVMContext &Context, Function &F) { Type *indType = len->getType(); @@ -84,6 +83,8 @@ static void convertTransferToLoop( ind->addIncoming(ConstantInt::get(indType, 0), origBB); // load from srcAddr+ind + // TODO: we can leverage the align parameter of llvm.memcpy for more efficient + // word-sized loads and stores. Value *val = loop.CreateLoad(loop.CreateGEP(loop.getInt8Ty(), srcAddr, ind), srcVolatile); // store at dstAddr+ind @@ -200,13 +201,14 @@ bool NVPTXLowerAggrCopies::runOnFunction(Function &F) { } for (MemTransferInst *cpy : aggrMemcpys) { - Value *len = cpy->getLength(); - // llvm 2.7 version of memcpy does not have volatile - // operand yet. So always making it non-volatile - // optimistically, so that we don't see unnecessary - // st.volatile in ptx - convertTransferToLoop(cpy, cpy->getSource(), cpy->getDest(), len, false, - false, Context, F); + convertTransferToLoop(/* splitAt */ cpy, + /* srcAddr */ cpy->getSource(), + /* dstAddr */ cpy->getDest(), + /* len */ cpy->getLength(), + /* srcVolatile */ cpy->isVolatile(), + /* dstVolatile */ cpy->isVolatile(), + /* Context */ Context, + /* Function F */ F); cpy->eraseFromParent(); } |

