[llvm] fbf42f1 - Revert "[CodeGenPrepare] Estimate liveness of loop invariants when checking for address folding profitability"

Jordan Rupprecht via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 27 19:16:40 PDT 2023


Author: Jordan Rupprecht
Date: 2023-04-27T19:16:32-07:00
New Revision: fbf42f1fe2b541ea039ea576f57040eec2ff9480

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

LOG: Revert "[CodeGenPrepare] Estimate liveness of loop invariants when checking for address folding profitability"

This reverts commit 5344d8e10bb7d8672d4bfae8adb010465470d51b.

It causes non-determinism when building clang. See the review thread on D143897.

Added: 
    

Modified: 
    llvm/lib/CodeGen/CodeGenPrepare.cpp

Removed: 
    llvm/test/CodeGen/AArch64/gep-sink-loop-inv-live.ll


################################################################################
diff  --git a/llvm/lib/CodeGen/CodeGenPrepare.cpp b/llvm/lib/CodeGen/CodeGenPrepare.cpp
index 96fe94f8e02a1..c7831827d11e8 100644
--- a/llvm/lib/CodeGen/CodeGenPrepare.cpp
+++ b/llvm/lib/CodeGen/CodeGenPrepare.cpp
@@ -268,10 +268,6 @@ static cl::opt<unsigned>
     MaxAddressUsersToScan("cgp-max-address-users-to-scan", cl::init(100),
                           cl::Hidden,
                           cl::desc("Max number of address users to look at"));
-
-static cl::opt<unsigned> MaxLoopInvUsersToScan(
-    "cgp-max-loop-inv-users-to-scan", cl::init(20), cl::Hidden,
-    cl::desc("Max number of loop invariant users to look at"));
 namespace {
 
 enum ExtType {
@@ -5064,19 +5060,6 @@ static bool FindAllMemoryUses(
                            PSI, BFI, SeenInsts);
 }
 
-static bool isUsedInLoop(const Value *V, const Loop *L) {
-  unsigned N = 0;
-
-  for (const Use &U : V->uses()) {
-    if (++N > MaxLoopInvUsersToScan)
-      break;
-    const Instruction *UserI = cast<Instruction>(U.getUser());
-    if (L->contains(UserI->getParent()))
-      return true;
-  }
-
-  return false;
-}
 
 /// Return true if Val is already known to be live at the use site that we're
 /// folding it into. If so, there is no cost to include it in the addressing
@@ -5100,17 +5083,10 @@ bool AddressingModeMatcher::valueAlreadyLiveAtInst(Value *Val,
     if (AI->isStaticAlloca())
       return true;
 
-  // If the value is loop invariant and is used in the loop which contains the
-  // memory instruction, it's live.
-  BasicBlock *BB = MemoryInst->getParent();
-  if (Loop *L = LI.getLoopFor(BB);
-      L && L->isLoopInvariant(Val) && isUsedInLoop(Val, L))
-    return true;
-
   // Check to see if this value is already used in the memory instruction's
   // block.  If so, it's already live into the block at the very least, so we
   // can reasonably fold it.
-  return Val->isUsedInBasicBlock(BB);
+  return Val->isUsedInBasicBlock(MemoryInst->getParent());
 }
 
 /// It is possible for the addressing mode of the machine to fold the specified

diff  --git a/llvm/test/CodeGen/AArch64/gep-sink-loop-inv-live.ll b/llvm/test/CodeGen/AArch64/gep-sink-loop-inv-live.ll
deleted file mode 100644
index 8d7a38028985a..0000000000000
--- a/llvm/test/CodeGen/AArch64/gep-sink-loop-inv-live.ll
+++ /dev/null
@@ -1,62 +0,0 @@
-; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
-; RUN: opt -S -codegenprepare < %s | FileCheck %s
-target triple = "aarch64-linux"
-
-declare void @use(...)
-declare i64 @next(i64)
-
-define void @f(ptr %a, i64 %k, i64 %n, ptr %q) {
-; CHECK-LABEL: @f(
-; CHECK-NEXT:  entry:
-; CHECK-NEXT:    br label [[COND:%.*]]
-; CHECK:       cond:
-; CHECK-NEXT:    [[I:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[J:%.*]], [[IF_THEN:%.*]] ], [ [[I]], [[IF_ELSE:%.*]] ]
-; CHECK-NEXT:    [[P:%.*]] = getelementptr i32, ptr [[A:%.*]], i64 [[I]]
-; CHECK-NEXT:    [[C0:%.*]] = icmp ult i64 [[I]], [[N:%.*]]
-; CHECK-NEXT:    br i1 [[C0]], label [[LOOP:%.*]], label [[EXIT:%.*]]
-; CHECK:       loop:
-; CHECK-NEXT:    [[J]] = call i64 @next(i64 [[I]])
-; CHECK-NEXT:    [[SUNKADDR:%.*]] = mul i64 [[I]], 4
-; CHECK-NEXT:    [[SUNKADDR1:%.*]] = getelementptr i8, ptr [[A]], i64 [[SUNKADDR]]
-; CHECK-NEXT:    [[V:%.*]] = load i32, ptr [[SUNKADDR1]], align 4
-; CHECK-NEXT:    [[C1:%.*]] = icmp slt i32 [[V]], 0
-; CHECK-NEXT:    br i1 [[C1]], label [[IF_THEN]], label [[IF_ELSE]]
-; CHECK:       if.then:
-; CHECK-NEXT:    store ptr [[P]], ptr [[Q:%.*]], align 8
-; CHECK-NEXT:    br label [[COND]]
-; CHECK:       if.else:
-; CHECK-NEXT:    call void @use(ptr [[A]])
-; CHECK-NEXT:    br label [[COND]]
-; CHECK:       exit:
-; CHECK-NEXT:    ret void
-;
-entry:
-  br label %cond
-
-cond:
-  %i = phi i64 [0, %entry], [%i.next, %next]
-  %p = getelementptr i32, ptr %a, i64 %i
-  %c0 = icmp ult i64 %i, %n
-  br i1 %c0, label %loop, label %exit
-
-loop:
-  %j = call i64 @next(i64 %i)
-  %v = load i32, ptr %p
-  %c1 = icmp slt i32 %v, 0
-  br i1 %c1, label %if.then, label %if.else
-
-if.then:
-  store ptr %p, ptr %q
-  br label %next
-
-if.else:
-  call void @use(ptr %a)
-  br label %next
-
-next:
-  %i.next = phi i64 [%j, %if.then], [%i, %if.else]
-  br label %cond
-
-exit:
-  ret void
-}


        


More information about the llvm-commits mailing list