[llvm] 4c60c0c - [LowerMemIntrinsics] Remove no-op ptr-to-ptr bitcasts (NFC)

Youngsuk Kim via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 25 14:25:50 PDT 2023


Author: Youngsuk Kim
Date: 2023-10-25T16:23:58-05:00
New Revision: 4c60c0cb4e3e7ac45f588499da8d674619d3845a

URL: https://github.com/llvm/llvm-project/commit/4c60c0cb4e3e7ac45f588499da8d674619d3845a
DIFF: https://github.com/llvm/llvm-project/commit/4c60c0cb4e3e7ac45f588499da8d674619d3845a.diff

LOG: [LowerMemIntrinsics] Remove no-op ptr-to-ptr bitcasts (NFC)

Remove ptr-to-ptr bitcasts, which are unnecessary with opaque pointers
enabled.

Opaque pointer clean-up effort. NFC.

Added: 
    

Modified: 
    llvm/lib/Transforms/Utils/LowerMemIntrinsics.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/Utils/LowerMemIntrinsics.cpp b/llvm/lib/Transforms/Utils/LowerMemIntrinsics.cpp
index 906eb71fc2d9863..134727944e4255e 100644
--- a/llvm/lib/Transforms/Utils/LowerMemIntrinsics.cpp
+++ b/llvm/lib/Transforms/Utils/LowerMemIntrinsics.cpp
@@ -64,17 +64,6 @@ void llvm::createMemCpyLoopKnownSize(
 
     IRBuilder<> PLBuilder(PreLoopBB->getTerminator());
 
-    // Cast the Src and Dst pointers to pointers to the loop operand type (if
-    // needed).
-    PointerType *SrcOpType = PointerType::get(LoopOpType, SrcAS);
-    PointerType *DstOpType = PointerType::get(LoopOpType, DstAS);
-    if (SrcAddr->getType() != SrcOpType) {
-      SrcAddr = PLBuilder.CreateBitCast(SrcAddr, SrcOpType);
-    }
-    if (DstAddr->getType() != DstOpType) {
-      DstAddr = PLBuilder.CreateBitCast(DstAddr, DstOpType);
-    }
-
     Align PartDstAlign(commonAlignment(DstAlign, LoopOpSize));
     Align PartSrcAlign(commonAlignment(SrcAlign, LoopOpSize));
 
@@ -137,13 +126,9 @@ void llvm::createMemCpyLoopKnownSize(
       uint64_t GepIndex = BytesCopied / OperandSize;
       assert(GepIndex * OperandSize == BytesCopied &&
              "Division should have no Remainder!");
-      // Cast source to operand type and load
-      PointerType *SrcPtrType = PointerType::get(OpTy, SrcAS);
-      Value *CastedSrc = SrcAddr->getType() == SrcPtrType
-                             ? SrcAddr
-                             : RBuilder.CreateBitCast(SrcAddr, SrcPtrType);
+
       Value *SrcGEP = RBuilder.CreateInBoundsGEP(
-          OpTy, CastedSrc, ConstantInt::get(TypeOfCopyLen, GepIndex));
+          OpTy, SrcAddr, ConstantInt::get(TypeOfCopyLen, GepIndex));
       LoadInst *Load =
           RBuilder.CreateAlignedLoad(OpTy, SrcGEP, PartSrcAlign, SrcIsVolatile);
       if (!CanOverlap) {
@@ -151,13 +136,8 @@ void llvm::createMemCpyLoopKnownSize(
         Load->setMetadata(LLVMContext::MD_alias_scope,
                           MDNode::get(Ctx, NewScope));
       }
-      // Cast destination to operand type and store.
-      PointerType *DstPtrType = PointerType::get(OpTy, DstAS);
-      Value *CastedDst = DstAddr->getType() == DstPtrType
-                             ? DstAddr
-                             : RBuilder.CreateBitCast(DstAddr, DstPtrType);
       Value *DstGEP = RBuilder.CreateInBoundsGEP(
-          OpTy, CastedDst, ConstantInt::get(TypeOfCopyLen, GepIndex));
+          OpTy, DstAddr, ConstantInt::get(TypeOfCopyLen, GepIndex));
       StoreInst *Store = RBuilder.CreateAlignedStore(Load, DstGEP, PartDstAlign,
                                                      DstIsVolatile);
       if (!CanOverlap) {
@@ -206,15 +186,6 @@ void llvm::createMemCpyLoopUnknownSize(
 
   IRBuilder<> PLBuilder(PreLoopBB->getTerminator());
 
-  PointerType *SrcOpType = PointerType::get(LoopOpType, SrcAS);
-  PointerType *DstOpType = PointerType::get(LoopOpType, DstAS);
-  if (SrcAddr->getType() != SrcOpType) {
-    SrcAddr = PLBuilder.CreateBitCast(SrcAddr, SrcOpType);
-  }
-  if (DstAddr->getType() != DstOpType) {
-    DstAddr = PLBuilder.CreateBitCast(DstAddr, DstOpType);
-  }
-
   // Calculate the loop trip count, and remaining bytes to copy after the loop.
   Type *CopyLenType = CopyLen->getType();
   IntegerType *ILengthType = dyn_cast<IntegerType>(CopyLenType);
@@ -305,13 +276,9 @@ void llvm::createMemCpyLoopUnknownSize(
         ResBuilder.CreatePHI(CopyLenType, 2, "residual-loop-index");
     ResidualIndex->addIncoming(Zero, ResHeaderBB);
 
-    Value *SrcAsResLoopOpType = ResBuilder.CreateBitCast(
-        SrcAddr, PointerType::get(ResLoopOpType, SrcAS));
-    Value *DstAsResLoopOpType = ResBuilder.CreateBitCast(
-        DstAddr, PointerType::get(ResLoopOpType, DstAS));
     Value *FullOffset = ResBuilder.CreateAdd(RuntimeBytesCopied, ResidualIndex);
-    Value *SrcGEP = ResBuilder.CreateInBoundsGEP(
-        ResLoopOpType, SrcAsResLoopOpType, FullOffset);
+    Value *SrcGEP =
+        ResBuilder.CreateInBoundsGEP(ResLoopOpType, SrcAddr, FullOffset);
     LoadInst *Load = ResBuilder.CreateAlignedLoad(ResLoopOpType, SrcGEP,
                                                   PartSrcAlign, SrcIsVolatile);
     if (!CanOverlap) {
@@ -319,8 +286,8 @@ void llvm::createMemCpyLoopUnknownSize(
       Load->setMetadata(LLVMContext::MD_alias_scope,
                         MDNode::get(Ctx, NewScope));
     }
-    Value *DstGEP = ResBuilder.CreateInBoundsGEP(
-        ResLoopOpType, DstAsResLoopOpType, FullOffset);
+    Value *DstGEP =
+        ResBuilder.CreateInBoundsGEP(ResLoopOpType, DstAddr, FullOffset);
     StoreInst *Store = ResBuilder.CreateAlignedStore(Load, DstGEP, PartDstAlign,
                                                      DstIsVolatile);
     if (!CanOverlap) {


        


More information about the llvm-commits mailing list