[llvm] fd21361 - [NFC][SROA] `rewriteMemOpOfSelect()`: play nice with typed pointers for now

Roman Lebedev via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 12 10:16:36 PST 2022


Author: Roman Lebedev
Date: 2022-12-12T21:16:14+03:00
New Revision: fd21361a794207e01b26e1db57217b0ddad47be5

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

LOG: [NFC][SROA] `rewriteMemOpOfSelect()`: play nice with typed pointers for now

https://github.com/llvm/llvm-project/commit/89a6106ce50689c733be13aaef4be5f3f73708a2#commitcomment-92824429

Added: 
    

Modified: 
    llvm/lib/Transforms/Scalar/SROA.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/Scalar/SROA.cpp b/llvm/lib/Transforms/Scalar/SROA.cpp
index edf999ec36a40..538f39f24cc98 100644
--- a/llvm/lib/Transforms/Scalar/SROA.cpp
+++ b/llvm/lib/Transforms/Scalar/SROA.cpp
@@ -1596,8 +1596,13 @@ static void rewriteMemOpOfSelect(SelectInst &SI, T &I,
       ++NumLoadsSpeculated;
     auto &CondMemOp = cast<T>(*I.clone());
     CondMemOp.insertBefore(NewMemOpBB->getTerminator());
-    CondMemOp.setOperand(I.getPointerOperandIndex(),
-                         SI.getOperand(1 + SuccIdx));
+    Value *Ptr = SI.getOperand(1 + SuccIdx);
+    if (auto *PtrTy = Ptr->getType();
+        !PtrTy->isOpaquePointerTy() &&
+        PtrTy != CondMemOp.getPointerOperandType())
+      Ptr = BitCastInst::CreatePointerBitCastOrAddrSpaceCast(
+          Ptr, CondMemOp.getPointerOperandType(), "", &CondMemOp);
+    CondMemOp.setOperand(I.getPointerOperandIndex(), Ptr);
     if (isa<LoadInst>(I)) {
       CondMemOp.setName(I.getName() + (IsThen ? ".then" : ".else") + ".val");
       PN->addIncoming(&CondMemOp, NewMemOpBB);


        


More information about the llvm-commits mailing list