[llvm-branch-commits] [llvm] SROA: Recognize llvm.protected.field.ptr intrinsics. (PR #151650)

Peter Collingbourne via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Fri Dec 5 15:07:23 PST 2025


================
@@ -5875,6 +5895,32 @@ SROA::runOnAlloca(AllocaInst &AI) {
     return {Changed, CFGChanged};
   }
 
+  for (auto &P : AS.partitions()) {
+    std::optional<Value *> ProtectedFieldDisc;
+    // For now, we can't split if a field is accessed both via protected
+    // field and not.
+    for (Slice &S : P) {
+      if (auto *II = dyn_cast<IntrinsicInst>(S.getUse()->getUser()))
+        if (II->getIntrinsicID() == Intrinsic::lifetime_start ||
+            II->getIntrinsicID() == Intrinsic::lifetime_end)
+          continue;
+      if (!ProtectedFieldDisc)
+        ProtectedFieldDisc = S.ProtectedFieldDisc;
+      if (*ProtectedFieldDisc != S.ProtectedFieldDisc)
----------------
pcc wrote:

Yes, the `mixed` function in `llvm/test/Transforms/SROA/protected-field-pointer.ll` has a case where `ProtectedFieldDisc` is `nullptr` and `%protptrptr1.2`.

https://github.com/llvm/llvm-project/pull/151650


More information about the llvm-branch-commits mailing list