[llvm] 5e5bda7 - [IR] Simplify Use::swap. NFCI.

Jay Foad via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 21 04:15:28 PDT 2020


Author: Jay Foad
Date: 2020-07-21T12:15:12+01:00
New Revision: 5e5bda74b61b3e8a4434abe2b5fe5d7ac5880ccd

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

LOG: [IR] Simplify Use::swap. NFCI.

The new implementation makes it clear that there are exactly two
conditional stores (after the initial no-op optimization). By contrast
the old implementation had seven conditionals, some hidden inside other
functions.

This commit can change the order of operands in operand lists, hence the
tweak to one test case.

Differential Revision: https://reviews.llvm.org/D80116

Added: 
    

Modified: 
    llvm/lib/IR/Use.cpp
    llvm/test/Transforms/LoopReroll/nonconst_lb.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/IR/Use.cpp b/llvm/lib/IR/Use.cpp
index dc0716b85372..99049c0232aa 100644
--- a/llvm/lib/IR/Use.cpp
+++ b/llvm/lib/IR/Use.cpp
@@ -17,24 +17,17 @@ void Use::swap(Use &RHS) {
   if (Val == RHS.Val)
     return;
 
-  if (Val)
-    removeFromList();
-
-  Value *OldVal = Val;
-  if (RHS.Val) {
-    RHS.removeFromList();
-    Val = RHS.Val;
-    Val->addUse(*this);
-  } else {
-    Val = nullptr;
-  }
-
-  if (OldVal) {
-    RHS.Val = OldVal;
-    RHS.Val->addUse(RHS);
-  } else {
-    RHS.Val = nullptr;
-  }
+  std::swap(Val, RHS.Val);
+  std::swap(Next, RHS.Next);
+  std::swap(Prev, RHS.Prev);
+
+  *Prev = this;
+  if (Next)
+    Next->Prev = &Next;
+
+  *RHS.Prev = &RHS;
+  if (RHS.Next)
+    RHS.Next->Prev = &RHS.Next;
 }
 
 unsigned Use::getOperandNo() const {

diff  --git a/llvm/test/Transforms/LoopReroll/nonconst_lb.ll b/llvm/test/Transforms/LoopReroll/nonconst_lb.ll
index 46a5805d6370..92d893fabbd2 100644
--- a/llvm/test/Transforms/LoopReroll/nonconst_lb.ll
+++ b/llvm/test/Transforms/LoopReroll/nonconst_lb.ll
@@ -48,7 +48,7 @@ for.end:                                          ; preds = %for.body, %entry
   ret void
 }
 ; CHECK-LABEL: @foo
-; CHECK: for.body.preheader:                               ; preds = %entry
+; CHECK: for.body.preheader:
 ; CHECK:   %0 = add i32 %n, -1
 ; CHECK:   %1 = sub i32 %0, %m
 ; CHECK:   %2 = lshr i32 %1, 2
@@ -56,7 +56,7 @@ for.end:                                          ; preds = %for.body, %entry
 ; CHECK:   %4 = add i32 %3, 3
 ; CHECK:   br label %for.body
 
-; CHECK: for.body:                                         ; preds = %for.body, %for.body.preheader
+; CHECK: for.body:
 ; CHECK:   %indvar = phi i32 [ 0, %for.body.preheader ], [ %indvar.next, %for.body ]
 ; CHECK:   %5 = add i32 %m, %indvar
 ; CHECK:   %arrayidx = getelementptr inbounds i32, i32* %B, i32 %5


        


More information about the llvm-commits mailing list