[llvm] r242542 - Use inbounds GEPs for memcpy and memset lowering

Eli Bendersky eliben at google.com
Fri Jul 17 09:42:34 PDT 2015


Author: eliben
Date: Fri Jul 17 11:42:33 2015
New Revision: 242542

URL: http://llvm.org/viewvc/llvm-project?rev=242542&view=rev
Log:
Use inbounds GEPs for memcpy and memset lowering

Follow-up on discussion in http://reviews.llvm.org/D11220

Modified:
    llvm/trunk/lib/Target/NVPTX/NVPTXLowerAggrCopies.cpp
    llvm/trunk/test/CodeGen/NVPTX/lower-aggr-copies.ll

Modified: llvm/trunk/lib/Target/NVPTX/NVPTXLowerAggrCopies.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXLowerAggrCopies.cpp?rev=242542&r1=242541&r2=242542&view=diff
==============================================================================
--- llvm/trunk/lib/Target/NVPTX/NVPTXLowerAggrCopies.cpp (original)
+++ llvm/trunk/lib/Target/NVPTX/NVPTXLowerAggrCopies.cpp Fri Jul 17 11:42:33 2015
@@ -87,14 +87,15 @@ void convertMemCpyToLoop(Instruction *Co
   // load from SrcAddr+LoopIndex
   // TODO: we can leverage the align parameter of llvm.memcpy for more efficient
   // word-sized loads and stores.
-  Value *Element = LoopBuilder.CreateLoad(
-      LoopBuilder.CreateGEP(LoopBuilder.getInt8Ty(), SrcAddr, LoopIndex),
-      SrcIsVolatile);
+  Value *Element =
+      LoopBuilder.CreateLoad(LoopBuilder.CreateInBoundsGEP(
+                                 LoopBuilder.getInt8Ty(), SrcAddr, LoopIndex),
+                             SrcIsVolatile);
   // store at DstAddr+LoopIndex
-  LoopBuilder.CreateStore(
-      Element,
-      LoopBuilder.CreateGEP(LoopBuilder.getInt8Ty(), DstAddr, LoopIndex),
-      DstIsVolatile);
+  LoopBuilder.CreateStore(Element,
+                          LoopBuilder.CreateInBoundsGEP(LoopBuilder.getInt8Ty(),
+                                                        DstAddr, LoopIndex),
+                          DstIsVolatile);
 
   // The value for LoopIndex coming from backedge is (LoopIndex + 1)
   Value *NewIndex =
@@ -225,7 +226,8 @@ void convertMemSetToLoop(Instruction *Co
   LoopIndex->addIncoming(ConstantInt::get(CopyLen->getType(), 0), OrigBB);
 
   LoopBuilder.CreateStore(
-      SetValue, LoopBuilder.CreateGEP(SetValue->getType(), DstAddr, LoopIndex),
+      SetValue,
+      LoopBuilder.CreateInBoundsGEP(SetValue->getType(), DstAddr, LoopIndex),
       false);
 
   Value *NewIndex =

Modified: llvm/trunk/test/CodeGen/NVPTX/lower-aggr-copies.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/NVPTX/lower-aggr-copies.ll?rev=242542&r1=242541&r2=242542&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/NVPTX/lower-aggr-copies.ll (original)
+++ llvm/trunk/test/CodeGen/NVPTX/lower-aggr-copies.ll Fri Jul 17 11:42:33 2015
@@ -18,9 +18,9 @@ entry:
 
 ; IR-LABEL:   @memcpy_caller
 ; IR:         loadstoreloop:
-; IR:         [[LOADPTR:%[0-9]+]] = getelementptr i8, i8* %src, i64
+; IR:         [[LOADPTR:%[0-9]+]] = getelementptr inbounds i8, i8* %src, i64
 ; IR-NEXT:    [[VAL:%[0-9]+]] = load i8, i8* [[LOADPTR]]
-; IR-NEXT:    [[STOREPTR:%[0-9]+]] = getelementptr i8, i8* %dst, i64
+; IR-NEXT:    [[STOREPTR:%[0-9]+]] = getelementptr inbounds i8, i8* %dst, i64
 ; IR-NEXT:    store i8 [[VAL]], i8* [[STOREPTR]]
 
 ; PTX-LABEL:  .visible .func (.param .b64 func_retval0) memcpy_caller
@@ -61,8 +61,8 @@ entry:
 ; IR-LABEL:   @memcpy_casting_caller
 ; IR:         [[DSTCAST:%[0-9]+]] = bitcast i32* %dst to i8*
 ; IR:         [[SRCCAST:%[0-9]+]] = bitcast i32* %src to i8*
-; IR:         getelementptr i8, i8* [[SRCCAST]]
-; IR:         getelementptr i8, i8* [[DSTCAST]]
+; IR:         getelementptr inbounds i8, i8* [[SRCCAST]]
+; IR:         getelementptr inbounds i8, i8* [[DSTCAST]]
 }
 
 define i8* @memset_caller(i8* %dst, i32 %c, i64 %n) #0 {
@@ -74,7 +74,7 @@ entry:
 ; IR-LABEL:   @memset_caller
 ; IR:         [[VAL:%[0-9]+]] = trunc i32 %c to i8
 ; IR:         loadstoreloop:
-; IR:         [[STOREPTR:%[0-9]+]] = getelementptr i8, i8* %dst, i64
+; IR:         [[STOREPTR:%[0-9]+]] = getelementptr inbounds i8, i8* %dst, i64
 ; IR-NEXT:    store i8 [[VAL]], i8* [[STOREPTR]]
 
 ; PTX-LABEL:  .visible .func (.param .b64 func_retval0) memset_caller(





More information about the llvm-commits mailing list