https://github.com/nimit25 updated 
https://github.com/llvm/llvm-project/pull/164882

>From a05e8f9ca277e3ca6bcb6869a6adcf3bceeb4b7b Mon Sep 17 00:00:00 2001
From: Nimit Sachdeva <[email protected]>
Date: Thu, 23 Oct 2025 15:58:35 -0400
Subject: [PATCH 1/3] #150120 Introduce MoveEntryAllocaInit pass

---
 .../llvm/Transforms/Utils/MoveAutoInit.h      |  6 +++
 llvm/lib/Passes/PassBuilderPipelines.cpp      |  2 +
 llvm/lib/Passes/PassRegistry.def              |  1 +
 llvm/lib/Transforms/Utils/MoveAutoInit.cpp    | 27 ++++++++--
 llvm/test/Other/new-pm-defaults.ll            |  1 +
 llvm/test/Other/new-pm-lto-defaults.ll        |  1 +
 .../Other/new-pm-thinlto-postlink-defaults.ll |  1 +
 .../new-pm-thinlto-postlink-pgo-defaults.ll   |  1 +
 ...-pm-thinlto-postlink-samplepgo-defaults.ll |  1 +
 .../Other/new-pm-thinlto-prelink-defaults.ll  |  1 +
 .../new-pm-thinlto-prelink-pgo-defaults.ll    |  1 +
 ...w-pm-thinlto-prelink-samplepgo-defaults.ll |  1 +
 .../Transforms/MoveAutoInit/entry-alloca.ll   | 50 +++++++++++++++++++
 13 files changed, 91 insertions(+), 3 deletions(-)
 create mode 100644 llvm/test/Transforms/MoveAutoInit/entry-alloca.ll

diff --git a/llvm/include/llvm/Transforms/Utils/MoveAutoInit.h 
b/llvm/include/llvm/Transforms/Utils/MoveAutoInit.h
index 980b55f46f114..e8565e6942bc2 100644
--- a/llvm/include/llvm/Transforms/Utils/MoveAutoInit.h
+++ b/llvm/include/llvm/Transforms/Utils/MoveAutoInit.h
@@ -24,6 +24,12 @@ class MoveAutoInitPass : public 
PassInfoMixin<MoveAutoInitPass> {
 public:
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
+
+/// Move entry block initializations of allocas closer to their guarded users.
+class MoveEntryAllocaInitPass : public PassInfoMixin<MoveEntryAllocaInitPass> {
+public:
+  PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
+};
 } // end namespace llvm
 
 #endif // LLVM_TRANSFORMS_UTILS_MOVEAUTOINIT_H
diff --git a/llvm/lib/Passes/PassBuilderPipelines.cpp 
b/llvm/lib/Passes/PassBuilderPipelines.cpp
index bd03ac090721c..470bc0afa22d7 100644
--- a/llvm/lib/Passes/PassBuilderPipelines.cpp
+++ b/llvm/lib/Passes/PassBuilderPipelines.cpp
@@ -765,6 +765,7 @@ 
PassBuilder::buildFunctionSimplificationPipeline(OptimizationLevel Level,
 
   FPM.addPass(DSEPass());
   FPM.addPass(MoveAutoInitPass());
+  FPM.addPass(MoveEntryAllocaInitPass());
 
   FPM.addPass(createFunctionToLoopPassAdaptor(
       LICMPass(PTO.LicmMssaOptCap, PTO.LicmMssaNoAccForPromotionCap,
@@ -2140,6 +2141,7 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel 
Level,
   // Nuke dead stores.
   MainFPM.addPass(DSEPass());
   MainFPM.addPass(MoveAutoInitPass());
+  MainFPM.addPass(MoveEntryAllocaInitPass());
   MainFPM.addPass(MergedLoadStoreMotionPass());
 
   invokeVectorizerStartEPCallbacks(MainFPM, Level);
diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def
index 1853cdd45d0ee..7950040cd3623 100644
--- a/llvm/lib/Passes/PassRegistry.def
+++ b/llvm/lib/Passes/PassRegistry.def
@@ -485,6 +485,7 @@ FUNCTION_PASS("memprof", MemProfilerPass())
 FUNCTION_PASS("mergeicmps", MergeICmpsPass())
 FUNCTION_PASS("mergereturn", UnifyFunctionExitNodesPass())
 FUNCTION_PASS("move-auto-init", MoveAutoInitPass())
+FUNCTION_PASS("move-entry-alloca-init", MoveEntryAllocaInitPass())
 FUNCTION_PASS("nary-reassociate", NaryReassociatePass())
 FUNCTION_PASS("newgvn", NewGVNPass())
 FUNCTION_PASS("no-op-function", NoOpFunctionPass())
diff --git a/llvm/lib/Transforms/Utils/MoveAutoInit.cpp 
b/llvm/lib/Transforms/Utils/MoveAutoInit.cpp
index ad105f5a57b49..b9993dfe56577 100644
--- a/llvm/lib/Transforms/Utils/MoveAutoInit.cpp
+++ b/llvm/lib/Transforms/Utils/MoveAutoInit.cpp
@@ -101,7 +101,9 @@ static BasicBlock *usersDominator(const MemoryLocation &ML, 
Instruction *I,
   return CurrentDominator;
 }
 
-static bool runMoveAutoInit(Function &F, DominatorTree &DT, MemorySSA &MSSA) {
+static bool runMoveAutoInit(
+    Function &F, DominatorTree &DT, MemorySSA &MSSA,
+    function_ref<bool(const Instruction &)> ShouldProcess) {
   BasicBlock &EntryBB = F.getEntryBlock();
   SmallVector<std::pair<Instruction *, BasicBlock *>> JobList;
 
@@ -109,7 +111,7 @@ static bool runMoveAutoInit(Function &F, DominatorTree &DT, 
MemorySSA &MSSA) {
   // Compute movable instructions.
   //
   for (Instruction &I : EntryBB) {
-    if (!hasAutoInitMetadata(I))
+    if (!ShouldProcess(I))
       continue;
 
     std::optional<MemoryLocation> ML = writeToAlloca(I);
@@ -221,7 +223,26 @@ PreservedAnalyses MoveAutoInitPass::run(Function &F,
 
   auto &DT = AM.getResult<DominatorTreeAnalysis>(F);
   auto &MSSA = AM.getResult<MemorySSAAnalysis>(F).getMSSA();
-  if (!runMoveAutoInit(F, DT, MSSA))
+  auto ShouldProcess = [](const Instruction &I) -> bool {
+    return hasAutoInitMetadata(I);
+  };
+  if (!runMoveAutoInit(F, DT, MSSA, ShouldProcess))
+    return PreservedAnalyses::all();
+
+  PreservedAnalyses PA;
+  PA.preserve<DominatorTreeAnalysis>();
+  PA.preserve<MemorySSAAnalysis>();
+  PA.preserveSet<CFGAnalyses>();
+  return PA;
+}
+
+PreservedAnalyses MoveEntryAllocaInitPass::run(Function &F,
+                                               FunctionAnalysisManager &AM) {
+
+  auto &DT = AM.getResult<DominatorTreeAnalysis>(F);
+  auto &MSSA = AM.getResult<MemorySSAAnalysis>(F).getMSSA();
+  auto ShouldProcess = [](const Instruction &) { return true; };
+  if (!runMoveAutoInit(F, DT, MSSA, ShouldProcess))
     return PreservedAnalyses::all();
 
   PreservedAnalyses PA;
diff --git a/llvm/test/Other/new-pm-defaults.ll 
b/llvm/test/Other/new-pm-defaults.ll
index 65b96c8b8ef5d..0bc59cbffa594 100644
--- a/llvm/test/Other/new-pm-defaults.ll
+++ b/llvm/test/Other/new-pm-defaults.ll
@@ -218,6 +218,7 @@
 ; CHECK-O23SZ-NEXT: Running pass: MemCpyOptPass
 ; CHECK-O23SZ-NEXT: Running pass: DSEPass
 ; CHECK-O23SZ-NEXT: Running pass: MoveAutoInitPass on foo
+; CHECK-O23SZ-NEXT: Running pass: MoveEntryAllocaInitPass on foo
 ; CHECK-O23SZ-NEXT: Running pass: LoopSimplifyPass
 ; CHECK-O23SZ-NEXT: Running pass: LCSSAPass
 ; CHECK-O23SZ-NEXT: Running pass: LICMPass
diff --git a/llvm/test/Other/new-pm-lto-defaults.ll 
b/llvm/test/Other/new-pm-lto-defaults.ll
index f595dfe1d6845..4ce7a968fe3b2 100644
--- a/llvm/test/Other/new-pm-lto-defaults.ll
+++ b/llvm/test/Other/new-pm-lto-defaults.ll
@@ -118,6 +118,7 @@
 ; CHECK-O23SZ-NEXT: Running analysis: PostDominatorTreeAnalysis on foo
 ; CHECK-O23SZ-NEXT: Running pass: DSEPass on foo
 ; CHECK-O23SZ-NEXT: Running pass: MoveAutoInitPass on foo
+; CHECK-O23SZ-NEXT: Running pass: MoveEntryAllocaInitPass on foo
 ; CHECK-O23SZ-NEXT: Running pass: MergedLoadStoreMotionPass on foo
 ; CHECK-EP-VECTORIZER-START-NEXT: Running pass: NoOpFunctionPass on foo
 ; CHECK-O23SZ-NEXT: Running pass: LoopSimplifyPass on foo
diff --git a/llvm/test/Other/new-pm-thinlto-postlink-defaults.ll 
b/llvm/test/Other/new-pm-thinlto-postlink-defaults.ll
index 3a0fffe426da1..6f94522401396 100644
--- a/llvm/test/Other/new-pm-thinlto-postlink-defaults.ll
+++ b/llvm/test/Other/new-pm-thinlto-postlink-defaults.ll
@@ -143,6 +143,7 @@
 ; CHECK-O23SZ-NEXT: Running pass: MemCpyOptPass
 ; CHECK-O23SZ-NEXT: Running pass: DSEPass
 ; CHECK-O23SZ-NEXT: Running pass: MoveAutoInitPass on foo
+; CHECK-O23SZ-NEXT: Running pass: MoveEntryAllocaInitPass on foo
 ; CHECK-O23SZ-NEXT: Running pass: LoopSimplifyPass
 ; CHECK-O23SZ-NEXT: Running pass: LCSSAPass
 ; CHECK-O23SZ-NEXT: Running pass: LICMPass on loop
diff --git a/llvm/test/Other/new-pm-thinlto-postlink-pgo-defaults.ll 
b/llvm/test/Other/new-pm-thinlto-postlink-pgo-defaults.ll
index 4623edcaf6656..05321565e2c2d 100644
--- a/llvm/test/Other/new-pm-thinlto-postlink-pgo-defaults.ll
+++ b/llvm/test/Other/new-pm-thinlto-postlink-pgo-defaults.ll
@@ -127,6 +127,7 @@
 ; CHECK-O23SZ-NEXT: Running pass: MemCpyOptPass
 ; CHECK-O23SZ-NEXT: Running pass: DSEPass
 ; CHECK-O23SZ-NEXT: Running pass: MoveAutoInitPass on foo
+; CHECK-O23SZ-NEXT: Running pass: MoveEntryAllocaInitPass on foo
 ; CHECK-O23SZ-NEXT: Running pass: LoopSimplifyPass
 ; CHECK-O23SZ-NEXT: Running pass: LCSSAPass
 ; CHECK-O23SZ-NEXT: Running pass: LICMPass
diff --git a/llvm/test/Other/new-pm-thinlto-postlink-samplepgo-defaults.ll 
b/llvm/test/Other/new-pm-thinlto-postlink-samplepgo-defaults.ll
index 590afd925e841..c0a6b3851b376 100644
--- a/llvm/test/Other/new-pm-thinlto-postlink-samplepgo-defaults.ll
+++ b/llvm/test/Other/new-pm-thinlto-postlink-samplepgo-defaults.ll
@@ -136,6 +136,7 @@
 ; CHECK-O23SZ-NEXT: Running pass: MemCpyOptPass
 ; CHECK-O23SZ-NEXT: Running pass: DSEPass
 ; CHECK-O23SZ-NEXT: Running pass: MoveAutoInitPass
+; CHECK-O23SZ-NEXT: Running pass: MoveEntryAllocaInitPass
 ; CHECK-O23SZ-NEXT: Running pass: LoopSimplifyPass
 ; CHECK-O23SZ-NEXT: Running pass: LCSSAPass
 ; CHECK-O23SZ-NEXT: Running pass: LICMPass
diff --git a/llvm/test/Other/new-pm-thinlto-prelink-defaults.ll 
b/llvm/test/Other/new-pm-thinlto-prelink-defaults.ll
index dd6acd2c51ee7..280f36749850c 100644
--- a/llvm/test/Other/new-pm-thinlto-prelink-defaults.ll
+++ b/llvm/test/Other/new-pm-thinlto-prelink-defaults.ll
@@ -175,6 +175,7 @@
 ; CHECK-O23SZ-NEXT: Running pass: MemCpyOptPass
 ; CHECK-O23SZ-NEXT: Running pass: DSEPass
 ; CHECK-O23SZ-NEXT: Running pass: MoveAutoInitPass
+; CHECK-O23SZ-NEXT: Running pass: MoveEntryAllocaInitPass
 ; CHECK-O23SZ-NEXT: Running pass: LoopSimplifyPass
 ; CHECK-O23SZ-NEXT: Running pass: LCSSAPass
 ; CHECK-O23SZ-NEXT: Running pass: LICMPass on loop
diff --git a/llvm/test/Other/new-pm-thinlto-prelink-pgo-defaults.ll 
b/llvm/test/Other/new-pm-thinlto-prelink-pgo-defaults.ll
index ee054527e20bd..b719045f890a4 100644
--- a/llvm/test/Other/new-pm-thinlto-prelink-pgo-defaults.ll
+++ b/llvm/test/Other/new-pm-thinlto-prelink-pgo-defaults.ll
@@ -176,6 +176,7 @@
 ; CHECK-O23SZ-NEXT: Running pass: MemCpyOptPass
 ; CHECK-O23SZ-NEXT: Running pass: DSEPass
 ; CHECK-O23SZ-NEXT: Running pass: MoveAutoInitPass on foo
+; CHECK-O23SZ-NEXT: Running pass: MoveEntryAllocaInitPass on foo
 ; CHECK-O23SZ-NEXT: Running pass: LoopSimplifyPass
 ; CHECK-O23SZ-NEXT: Running pass: LCSSAPass
 ; CHECK-O23SZ-NEXT: Running pass: LICMPass
diff --git a/llvm/test/Other/new-pm-thinlto-prelink-samplepgo-defaults.ll 
b/llvm/test/Other/new-pm-thinlto-prelink-samplepgo-defaults.ll
index fd95e94f3c8b9..3d73e3ca2c2b7 100644
--- a/llvm/test/Other/new-pm-thinlto-prelink-samplepgo-defaults.ll
+++ b/llvm/test/Other/new-pm-thinlto-prelink-samplepgo-defaults.ll
@@ -140,6 +140,7 @@
 ; CHECK-O23SZ-NEXT: Running pass: MemCpyOptPass
 ; CHECK-O23SZ-NEXT: Running pass: DSEPass
 ; CHECK-O23SZ-NEXT: Running pass: MoveAutoInitPass on foo
+; CHECK-O23SZ-NEXT: Running pass: MoveEntryAllocaInitPass on foo
 ; CHECK-O23SZ-NEXT: Running pass: LoopSimplifyPass
 ; CHECK-O23SZ-NEXT: Running pass: LCSSAPass
 ; CHECK-O23SZ-NEXT: Running pass: LICMPass
diff --git a/llvm/test/Transforms/MoveAutoInit/entry-alloca.ll 
b/llvm/test/Transforms/MoveAutoInit/entry-alloca.ll
new file mode 100644
index 0000000000000..31906551e60fc
--- /dev/null
+++ b/llvm/test/Transforms/MoveAutoInit/entry-alloca.ll
@@ -0,0 +1,50 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 
UTC_ARGS: --version 2
+; RUN: opt -passes='move-entry-alloca-init' -verify-memoryssa -S < %s | 
FileCheck %s
+
+declare void @bar(ptr)
+
+define void @src(i32 %a, i32 %b) {
+; CHECK-LABEL: define void @src(
+; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]]) {
+; CHECK-NEXT:    [[A_ADDR:%.*]] = alloca i32
+; CHECK-NEXT:    [[B_ADDR:%.*]] = alloca i32
+; CHECK-NEXT:    [[S_ADDR:%.*]] = alloca { ptr, ptr }
+; CHECK:         [[S_X:%.*]] = getelementptr inbounds { ptr, ptr }, ptr 
[[S_ADDR]], i32 0, i32 0
+; CHECK:         [[S_Y:%.*]] = getelementptr inbounds { ptr, ptr }, ptr 
[[S_ADDR]], i32 0, i32 1
+; CHECK:         [[CMP:%.*]] = icmp slt i32 [[A]], [[B]]
+; CHECK:         br i1 [[CMP]], label [[COLD:%.*]], label [[RET:%.*]]
+;
+; CHECK:       cold:
+; CHECK-NEXT:    store i32 [[A]], ptr [[A_ADDR]], align 4
+; CHECK-NEXT:    store i32 [[B]], ptr [[B_ADDR]], align 4
+; CHECK-NEXT:    store ptr [[A_ADDR]], ptr [[S_X]], align 8
+; CHECK-NEXT:    store ptr [[B_ADDR]], ptr [[S_Y]], align 8
+; CHECK-NEXT:    call void @bar(ptr [[S_ADDR]])
+; CHECK-NEXT:    br label [[RET]]
+;
+; CHECK:       ret:
+; CHECK-NEXT:    ret void
+;
+  %a.addr = alloca i32
+  %b.addr = alloca i32
+  %s.addr = alloca { ptr, ptr }
+
+  store i32 %a, ptr %a.addr
+  store i32 %b, ptr %b.addr
+
+  %s.x = getelementptr inbounds { ptr, ptr }, ptr %s.addr, i32 0, i32 0
+  store ptr %a.addr, ptr %s.x
+
+  %s.y = getelementptr inbounds { ptr, ptr }, ptr %s.addr, i32 0, i32 1
+  store ptr %b.addr, ptr %s.y
+
+  %cmp = icmp slt i32 %a, %b
+  br i1 %cmp, label %cold, label %ret
+
+cold:
+  call void @bar(ptr %s.addr)
+  br label %ret
+
+ret:
+  ret void
+}

>From 1a0c420dc0bcf7641fb566f3509cdd19dd160611 Mon Sep 17 00:00:00 2001
From: Nimit Sachdeva <[email protected]>
Date: Thu, 23 Oct 2025 16:07:12 -0400
Subject: [PATCH 2/3] format change

---
 llvm/lib/Transforms/Utils/MoveAutoInit.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/llvm/lib/Transforms/Utils/MoveAutoInit.cpp 
b/llvm/lib/Transforms/Utils/MoveAutoInit.cpp
index b9993dfe56577..0881ea12c2478 100644
--- a/llvm/lib/Transforms/Utils/MoveAutoInit.cpp
+++ b/llvm/lib/Transforms/Utils/MoveAutoInit.cpp
@@ -101,9 +101,9 @@ static BasicBlock *usersDominator(const MemoryLocation &ML, 
Instruction *I,
   return CurrentDominator;
 }
 
-static bool runMoveAutoInit(
-    Function &F, DominatorTree &DT, MemorySSA &MSSA,
-    function_ref<bool(const Instruction &)> ShouldProcess) {
+static bool
+runMoveAutoInit(Function &F, DominatorTree &DT, MemorySSA &MSSA,
+                function_ref<bool(const Instruction &)> ShouldProcess) {
   BasicBlock &EntryBB = F.getEntryBlock();
   SmallVector<std::pair<Instruction *, BasicBlock *>> JobList;
 

>From 13cec30bf1a1fdb9df19e9bcfdc31539f9a7f921 Mon Sep 17 00:00:00 2001
From: Nimit Sachdeva <[email protected]>
Date: Tue, 2 Dec 2025 23:45:55 -0500
Subject: [PATCH 3/3] refactor pass

---
 clang/test/CodeGen/attr-counted-by.c          | 15 ++++++++-------
 .../llvm/Transforms/Utils/MoveAutoInit.h      |  6 ------
 llvm/lib/Passes/PassBuilderPipelines.cpp      |  2 --
 llvm/lib/Passes/PassRegistry.def              |  1 -
 llvm/lib/Transforms/Utils/MoveAutoInit.cpp    | 19 ++-----------------
 llvm/test/Other/new-pm-defaults.ll            |  1 -
 llvm/test/Other/new-pm-lto-defaults.ll        |  1 -
 .../Other/new-pm-thinlto-postlink-defaults.ll |  1 -
 .../new-pm-thinlto-postlink-pgo-defaults.ll   |  1 -
 ...-pm-thinlto-postlink-samplepgo-defaults.ll |  1 -
 .../Other/new-pm-thinlto-prelink-defaults.ll  |  1 -
 .../new-pm-thinlto-prelink-pgo-defaults.ll    |  1 -
 ...w-pm-thinlto-prelink-samplepgo-defaults.ll |  1 -
 .../Transforms/MoveAutoInit/entry-alloca.ll   |  2 +-
 14 files changed, 11 insertions(+), 42 deletions(-)

diff --git a/clang/test/CodeGen/attr-counted-by.c 
b/clang/test/CodeGen/attr-counted-by.c
index 86c59fb2b14ea..8a7309803df87 100644
--- a/clang/test/CodeGen/attr-counted-by.c
+++ b/clang/test/CodeGen/attr-counted-by.c
@@ -1198,15 +1198,16 @@ int test12_a, test12_b;
 // SANITIZE-WITH-ATTR-NEXT:  [[ENTRY:.*:]]
 // SANITIZE-WITH-ATTR-NEXT:    [[BAZ:%.*]] = alloca [[STRUCT_HANG:%.*]], align 
4
 // SANITIZE-WITH-ATTR-NEXT:    call void @llvm.lifetime.start.p0(ptr nonnull 
[[BAZ]]) #[[ATTR9:[0-9]+]]
-// SANITIZE-WITH-ATTR-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr noundef 
nonnull align 4 dereferenceable(24) [[BAZ]], ptr noundef nonnull align 4 
dereferenceable(24) @test12_bar, i64 24, i1 false), !tbaa.struct 
[[TBAA_STRUCT10:![0-9]+]]
 // SANITIZE-WITH-ATTR-NEXT:    [[TMP0:%.*]] = icmp ult i32 [[INDEX]], 6
-// SANITIZE-WITH-ATTR-NEXT:    [[TMP1:%.*]] = zext i32 [[INDEX]] to i64
 // SANITIZE-WITH-ATTR-NEXT:    br i1 [[TMP0]], label %[[CONT:.*]], label 
%[[HANDLER_OUT_OF_BOUNDS:.*]], !prof [[PROF7]], !nosanitize [[META6]]
 // SANITIZE-WITH-ATTR:       [[HANDLER_OUT_OF_BOUNDS]]:
+// SANITIZE-WITH-ATTR-NEXT:    [[TMP1:%.*]] = zext i32 [[INDEX]] to i64
 // SANITIZE-WITH-ATTR-NEXT:    tail call void 
@__ubsan_handle_out_of_bounds_abort(ptr nonnull @[[GLOB22:[0-9]+]], i64 
[[TMP1]]) #[[ATTR8]], !nosanitize [[META6]]
 // SANITIZE-WITH-ATTR-NEXT:    unreachable, !nosanitize [[META6]]
 // SANITIZE-WITH-ATTR:       [[CONT]]:
-// SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw 
i32, ptr [[BAZ]], i64 [[TMP1]]
+// SANITIZE-WITH-ATTR-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr noundef 
nonnull align 4 dereferenceable(24) [[BAZ]], ptr noundef nonnull align 4 
dereferenceable(24) @test12_bar, i64 24, i1 false), !tbaa.struct 
[[TBAA_STRUCT10:![0-9]+]]
+// SANITIZE-WITH-ATTR-NEXT:    [[TMP2:%.*]] = zext nneg i32 [[INDEX]] to i64
+// SANITIZE-WITH-ATTR-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, 
ptr [[BAZ]], i64 [[TMP2:%.*]]
 // SANITIZE-WITH-ATTR-NEXT:    [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX]], 
align 4, !tbaa [[INT_TBAA2]]
 // SANITIZE-WITH-ATTR-NEXT:    store i32 [[TMP2]], ptr @test12_b, align 4, 
!tbaa [[INT_TBAA2]]
 // SANITIZE-WITH-ATTR-NEXT:    [[DOTCOUNTED_BY_LOAD:%.*]] = load i32, ptr 
@test12_foo, align 4
@@ -1240,15 +1241,16 @@ int test12_a, test12_b;
 // SANITIZE-WITHOUT-ATTR-NEXT:  [[ENTRY:.*:]]
 // SANITIZE-WITHOUT-ATTR-NEXT:    [[BAZ:%.*]] = alloca [[STRUCT_HANG:%.*]], 
align 4
 // SANITIZE-WITHOUT-ATTR-NEXT:    call void @llvm.lifetime.start.p0(ptr 
nonnull [[BAZ]]) #[[ATTR7:[0-9]+]]
-// SANITIZE-WITHOUT-ATTR-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr noundef 
nonnull align 4 dereferenceable(24) [[BAZ]], ptr noundef nonnull align 4 
dereferenceable(24) @test12_bar, i64 24, i1 false), !tbaa.struct 
[[TBAA_STRUCT7:![0-9]+]]
 // SANITIZE-WITHOUT-ATTR-NEXT:    [[TMP0:%.*]] = icmp ult i32 [[INDEX]], 6
-// SANITIZE-WITHOUT-ATTR-NEXT:    [[TMP1:%.*]] = zext i32 [[INDEX]] to i64
 // SANITIZE-WITHOUT-ATTR-NEXT:    br i1 [[TMP0]], label %[[CONT:.*]], label 
%[[HANDLER_OUT_OF_BOUNDS:.*]], !prof [[PROF8:![0-9]+]], !nosanitize 
[[META9:![0-9]+]]
 // SANITIZE-WITHOUT-ATTR:       [[HANDLER_OUT_OF_BOUNDS]]:
+// SANITIZE-WITHOUT-ATTR-NEXT:    [[TMP1:%.*]] = zext i32 [[INDEX]] to i64
 // SANITIZE-WITHOUT-ATTR-NEXT:    tail call void 
@__ubsan_handle_out_of_bounds_abort(ptr nonnull @[[GLOB2:[0-9]+]], i64 
[[TMP1]]) #[[ATTR8:[0-9]+]], !nosanitize [[META9]]
 // SANITIZE-WITHOUT-ATTR-NEXT:    unreachable, !nosanitize [[META9]]
 // SANITIZE-WITHOUT-ATTR:       [[CONT]]:
-// SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds 
nuw i32, ptr [[BAZ]], i64 [[TMP1]]
+// SANITIZE-WITHOUT-ATTR-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr noundef 
nonnull align 4 dereferenceable(24) [[BAZ]], ptr noundef nonnull align 4 
dereferenceable(24) @test12_bar, i64 24, i1 false), !tbaa.struct 
[[TBAA_STRUCT10:![0-9]+]]
+// SANITIZE-WITHOUT-ATTR-NEXT:    [[TMP2:%.*]] = zext nneg i32 [[INDEX]] to i64
+// SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds 
nuw i32, ptr [[BAZ]], i64 [[TMP2]]
 // SANITIZE-WITHOUT-ATTR-NEXT:    [[TMP2:%.*]] = load i32, ptr [[ARRAYIDX]], 
align 4, !tbaa [[INT_TBAA2]]
 // SANITIZE-WITHOUT-ATTR-NEXT:    store i32 [[TMP2]], ptr @test12_b, align 4, 
!tbaa [[INT_TBAA2]]
 // SANITIZE-WITHOUT-ATTR-NEXT:    [[DOTCOUNTED_BY_LOAD:%.*]] = load i32, ptr 
@test12_foo, align 4
@@ -2524,7 +2526,6 @@ size_t test37(struct annotated *ptr) {
 // SANITIZE-WITHOUT-ATTR: [[META4]] = !{!"omnipotent char", [[META5:![0-9]+]], 
i64 0}
 // SANITIZE-WITHOUT-ATTR: [[META5]] = !{!"Simple C/C++ TBAA"}
 // SANITIZE-WITHOUT-ATTR: [[CHAR_TBAA6]] = !{[[META4]], [[META4]], i64 0}
-// SANITIZE-WITHOUT-ATTR: [[TBAA_STRUCT7]] = !{i64 0, i64 24, [[CHAR_TBAA6]]}
 // SANITIZE-WITHOUT-ATTR: [[PROF8]] = !{!"branch_weights", i32 1048575, i32 1}
 // SANITIZE-WITHOUT-ATTR: [[META9]] = !{}
 // SANITIZE-WITHOUT-ATTR: [[PROF10]] = !{!"branch_weights", i32 1, i32 1048575}
diff --git a/llvm/include/llvm/Transforms/Utils/MoveAutoInit.h 
b/llvm/include/llvm/Transforms/Utils/MoveAutoInit.h
index e8565e6942bc2..980b55f46f114 100644
--- a/llvm/include/llvm/Transforms/Utils/MoveAutoInit.h
+++ b/llvm/include/llvm/Transforms/Utils/MoveAutoInit.h
@@ -24,12 +24,6 @@ class MoveAutoInitPass : public 
PassInfoMixin<MoveAutoInitPass> {
 public:
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
-
-/// Move entry block initializations of allocas closer to their guarded users.
-class MoveEntryAllocaInitPass : public PassInfoMixin<MoveEntryAllocaInitPass> {
-public:
-  PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
-};
 } // end namespace llvm
 
 #endif // LLVM_TRANSFORMS_UTILS_MOVEAUTOINIT_H
diff --git a/llvm/lib/Passes/PassBuilderPipelines.cpp 
b/llvm/lib/Passes/PassBuilderPipelines.cpp
index 470bc0afa22d7..bd03ac090721c 100644
--- a/llvm/lib/Passes/PassBuilderPipelines.cpp
+++ b/llvm/lib/Passes/PassBuilderPipelines.cpp
@@ -765,7 +765,6 @@ 
PassBuilder::buildFunctionSimplificationPipeline(OptimizationLevel Level,
 
   FPM.addPass(DSEPass());
   FPM.addPass(MoveAutoInitPass());
-  FPM.addPass(MoveEntryAllocaInitPass());
 
   FPM.addPass(createFunctionToLoopPassAdaptor(
       LICMPass(PTO.LicmMssaOptCap, PTO.LicmMssaNoAccForPromotionCap,
@@ -2141,7 +2140,6 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel 
Level,
   // Nuke dead stores.
   MainFPM.addPass(DSEPass());
   MainFPM.addPass(MoveAutoInitPass());
-  MainFPM.addPass(MoveEntryAllocaInitPass());
   MainFPM.addPass(MergedLoadStoreMotionPass());
 
   invokeVectorizerStartEPCallbacks(MainFPM, Level);
diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def
index 7950040cd3623..1853cdd45d0ee 100644
--- a/llvm/lib/Passes/PassRegistry.def
+++ b/llvm/lib/Passes/PassRegistry.def
@@ -485,7 +485,6 @@ FUNCTION_PASS("memprof", MemProfilerPass())
 FUNCTION_PASS("mergeicmps", MergeICmpsPass())
 FUNCTION_PASS("mergereturn", UnifyFunctionExitNodesPass())
 FUNCTION_PASS("move-auto-init", MoveAutoInitPass())
-FUNCTION_PASS("move-entry-alloca-init", MoveEntryAllocaInitPass())
 FUNCTION_PASS("nary-reassociate", NaryReassociatePass())
 FUNCTION_PASS("newgvn", NewGVNPass())
 FUNCTION_PASS("no-op-function", NoOpFunctionPass())
diff --git a/llvm/lib/Transforms/Utils/MoveAutoInit.cpp 
b/llvm/lib/Transforms/Utils/MoveAutoInit.cpp
index 0881ea12c2478..26ceb4dfddb1f 100644
--- a/llvm/lib/Transforms/Utils/MoveAutoInit.cpp
+++ b/llvm/lib/Transforms/Utils/MoveAutoInit.cpp
@@ -226,23 +226,8 @@ PreservedAnalyses MoveAutoInitPass::run(Function &F,
   auto ShouldProcess = [](const Instruction &I) -> bool {
     return hasAutoInitMetadata(I);
   };
-  if (!runMoveAutoInit(F, DT, MSSA, ShouldProcess))
-    return PreservedAnalyses::all();
-
-  PreservedAnalyses PA;
-  PA.preserve<DominatorTreeAnalysis>();
-  PA.preserve<MemorySSAAnalysis>();
-  PA.preserveSet<CFGAnalyses>();
-  return PA;
-}
-
-PreservedAnalyses MoveEntryAllocaInitPass::run(Function &F,
-                                               FunctionAnalysisManager &AM) {
-
-  auto &DT = AM.getResult<DominatorTreeAnalysis>(F);
-  auto &MSSA = AM.getResult<MemorySSAAnalysis>(F).getMSSA();
-  auto ShouldProcess = [](const Instruction &) { return true; };
-  if (!runMoveAutoInit(F, DT, MSSA, ShouldProcess))
+  if (!runMoveAutoInit(F, DT, MSSA, ShouldProcess) &&
+      !runMoveAutoInit(F, DT, MSSA, [](const Instruction &) { return true; }))
     return PreservedAnalyses::all();
 
   PreservedAnalyses PA;
diff --git a/llvm/test/Other/new-pm-defaults.ll 
b/llvm/test/Other/new-pm-defaults.ll
index 0bc59cbffa594..65b96c8b8ef5d 100644
--- a/llvm/test/Other/new-pm-defaults.ll
+++ b/llvm/test/Other/new-pm-defaults.ll
@@ -218,7 +218,6 @@
 ; CHECK-O23SZ-NEXT: Running pass: MemCpyOptPass
 ; CHECK-O23SZ-NEXT: Running pass: DSEPass
 ; CHECK-O23SZ-NEXT: Running pass: MoveAutoInitPass on foo
-; CHECK-O23SZ-NEXT: Running pass: MoveEntryAllocaInitPass on foo
 ; CHECK-O23SZ-NEXT: Running pass: LoopSimplifyPass
 ; CHECK-O23SZ-NEXT: Running pass: LCSSAPass
 ; CHECK-O23SZ-NEXT: Running pass: LICMPass
diff --git a/llvm/test/Other/new-pm-lto-defaults.ll 
b/llvm/test/Other/new-pm-lto-defaults.ll
index 4ce7a968fe3b2..f595dfe1d6845 100644
--- a/llvm/test/Other/new-pm-lto-defaults.ll
+++ b/llvm/test/Other/new-pm-lto-defaults.ll
@@ -118,7 +118,6 @@
 ; CHECK-O23SZ-NEXT: Running analysis: PostDominatorTreeAnalysis on foo
 ; CHECK-O23SZ-NEXT: Running pass: DSEPass on foo
 ; CHECK-O23SZ-NEXT: Running pass: MoveAutoInitPass on foo
-; CHECK-O23SZ-NEXT: Running pass: MoveEntryAllocaInitPass on foo
 ; CHECK-O23SZ-NEXT: Running pass: MergedLoadStoreMotionPass on foo
 ; CHECK-EP-VECTORIZER-START-NEXT: Running pass: NoOpFunctionPass on foo
 ; CHECK-O23SZ-NEXT: Running pass: LoopSimplifyPass on foo
diff --git a/llvm/test/Other/new-pm-thinlto-postlink-defaults.ll 
b/llvm/test/Other/new-pm-thinlto-postlink-defaults.ll
index 6f94522401396..3a0fffe426da1 100644
--- a/llvm/test/Other/new-pm-thinlto-postlink-defaults.ll
+++ b/llvm/test/Other/new-pm-thinlto-postlink-defaults.ll
@@ -143,7 +143,6 @@
 ; CHECK-O23SZ-NEXT: Running pass: MemCpyOptPass
 ; CHECK-O23SZ-NEXT: Running pass: DSEPass
 ; CHECK-O23SZ-NEXT: Running pass: MoveAutoInitPass on foo
-; CHECK-O23SZ-NEXT: Running pass: MoveEntryAllocaInitPass on foo
 ; CHECK-O23SZ-NEXT: Running pass: LoopSimplifyPass
 ; CHECK-O23SZ-NEXT: Running pass: LCSSAPass
 ; CHECK-O23SZ-NEXT: Running pass: LICMPass on loop
diff --git a/llvm/test/Other/new-pm-thinlto-postlink-pgo-defaults.ll 
b/llvm/test/Other/new-pm-thinlto-postlink-pgo-defaults.ll
index 05321565e2c2d..4623edcaf6656 100644
--- a/llvm/test/Other/new-pm-thinlto-postlink-pgo-defaults.ll
+++ b/llvm/test/Other/new-pm-thinlto-postlink-pgo-defaults.ll
@@ -127,7 +127,6 @@
 ; CHECK-O23SZ-NEXT: Running pass: MemCpyOptPass
 ; CHECK-O23SZ-NEXT: Running pass: DSEPass
 ; CHECK-O23SZ-NEXT: Running pass: MoveAutoInitPass on foo
-; CHECK-O23SZ-NEXT: Running pass: MoveEntryAllocaInitPass on foo
 ; CHECK-O23SZ-NEXT: Running pass: LoopSimplifyPass
 ; CHECK-O23SZ-NEXT: Running pass: LCSSAPass
 ; CHECK-O23SZ-NEXT: Running pass: LICMPass
diff --git a/llvm/test/Other/new-pm-thinlto-postlink-samplepgo-defaults.ll 
b/llvm/test/Other/new-pm-thinlto-postlink-samplepgo-defaults.ll
index c0a6b3851b376..590afd925e841 100644
--- a/llvm/test/Other/new-pm-thinlto-postlink-samplepgo-defaults.ll
+++ b/llvm/test/Other/new-pm-thinlto-postlink-samplepgo-defaults.ll
@@ -136,7 +136,6 @@
 ; CHECK-O23SZ-NEXT: Running pass: MemCpyOptPass
 ; CHECK-O23SZ-NEXT: Running pass: DSEPass
 ; CHECK-O23SZ-NEXT: Running pass: MoveAutoInitPass
-; CHECK-O23SZ-NEXT: Running pass: MoveEntryAllocaInitPass
 ; CHECK-O23SZ-NEXT: Running pass: LoopSimplifyPass
 ; CHECK-O23SZ-NEXT: Running pass: LCSSAPass
 ; CHECK-O23SZ-NEXT: Running pass: LICMPass
diff --git a/llvm/test/Other/new-pm-thinlto-prelink-defaults.ll 
b/llvm/test/Other/new-pm-thinlto-prelink-defaults.ll
index 280f36749850c..dd6acd2c51ee7 100644
--- a/llvm/test/Other/new-pm-thinlto-prelink-defaults.ll
+++ b/llvm/test/Other/new-pm-thinlto-prelink-defaults.ll
@@ -175,7 +175,6 @@
 ; CHECK-O23SZ-NEXT: Running pass: MemCpyOptPass
 ; CHECK-O23SZ-NEXT: Running pass: DSEPass
 ; CHECK-O23SZ-NEXT: Running pass: MoveAutoInitPass
-; CHECK-O23SZ-NEXT: Running pass: MoveEntryAllocaInitPass
 ; CHECK-O23SZ-NEXT: Running pass: LoopSimplifyPass
 ; CHECK-O23SZ-NEXT: Running pass: LCSSAPass
 ; CHECK-O23SZ-NEXT: Running pass: LICMPass on loop
diff --git a/llvm/test/Other/new-pm-thinlto-prelink-pgo-defaults.ll 
b/llvm/test/Other/new-pm-thinlto-prelink-pgo-defaults.ll
index b719045f890a4..ee054527e20bd 100644
--- a/llvm/test/Other/new-pm-thinlto-prelink-pgo-defaults.ll
+++ b/llvm/test/Other/new-pm-thinlto-prelink-pgo-defaults.ll
@@ -176,7 +176,6 @@
 ; CHECK-O23SZ-NEXT: Running pass: MemCpyOptPass
 ; CHECK-O23SZ-NEXT: Running pass: DSEPass
 ; CHECK-O23SZ-NEXT: Running pass: MoveAutoInitPass on foo
-; CHECK-O23SZ-NEXT: Running pass: MoveEntryAllocaInitPass on foo
 ; CHECK-O23SZ-NEXT: Running pass: LoopSimplifyPass
 ; CHECK-O23SZ-NEXT: Running pass: LCSSAPass
 ; CHECK-O23SZ-NEXT: Running pass: LICMPass
diff --git a/llvm/test/Other/new-pm-thinlto-prelink-samplepgo-defaults.ll 
b/llvm/test/Other/new-pm-thinlto-prelink-samplepgo-defaults.ll
index 3d73e3ca2c2b7..fd95e94f3c8b9 100644
--- a/llvm/test/Other/new-pm-thinlto-prelink-samplepgo-defaults.ll
+++ b/llvm/test/Other/new-pm-thinlto-prelink-samplepgo-defaults.ll
@@ -140,7 +140,6 @@
 ; CHECK-O23SZ-NEXT: Running pass: MemCpyOptPass
 ; CHECK-O23SZ-NEXT: Running pass: DSEPass
 ; CHECK-O23SZ-NEXT: Running pass: MoveAutoInitPass on foo
-; CHECK-O23SZ-NEXT: Running pass: MoveEntryAllocaInitPass on foo
 ; CHECK-O23SZ-NEXT: Running pass: LoopSimplifyPass
 ; CHECK-O23SZ-NEXT: Running pass: LCSSAPass
 ; CHECK-O23SZ-NEXT: Running pass: LICMPass
diff --git a/llvm/test/Transforms/MoveAutoInit/entry-alloca.ll 
b/llvm/test/Transforms/MoveAutoInit/entry-alloca.ll
index 31906551e60fc..1d30096d11273 100644
--- a/llvm/test/Transforms/MoveAutoInit/entry-alloca.ll
+++ b/llvm/test/Transforms/MoveAutoInit/entry-alloca.ll
@@ -1,5 +1,5 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 
UTC_ARGS: --version 2
-; RUN: opt -passes='move-entry-alloca-init' -verify-memoryssa -S < %s | 
FileCheck %s
+; RUN: opt -passes='move-auto-init' -verify-memoryssa -S < %s | FileCheck %s
 
 declare void @bar(ptr)
 

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to