[PATCH] D53262: [MergeFuncs] Call removeUsers() prior to unnamed_addr RAUW

whitequark via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 7 20:00:37 PST 2018


This revision was automatically updated to reflect the committed changes.
Closed by commit rL346385: [MergeFuncs] Call removeUsers() prior to unnamed_addr RAUW (authored by whitequark, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D53262?vs=169621&id=173113#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D53262

Files:
  llvm/trunk/lib/Transforms/IPO/MergeFunctions.cpp
  llvm/trunk/test/Transforms/MergeFunc/unnamed-addr-reprocessing.ll


Index: llvm/trunk/lib/Transforms/IPO/MergeFunctions.cpp
===================================================================
--- llvm/trunk/lib/Transforms/IPO/MergeFunctions.cpp
+++ llvm/trunk/lib/Transforms/IPO/MergeFunctions.cpp
@@ -770,6 +770,7 @@
         GlobalNumbers.erase(G);
         // If G's address is not significant, replace it entirely.
         Constant *BitcastF = ConstantExpr::getBitCast(F, G->getType());
+        removeUsers(G);
         G->replaceAllUsesWith(BitcastF);
       } else {
         // Redirect direct callers of G to F. (See note on MergeFunctionsPDI
Index: llvm/trunk/test/Transforms/MergeFunc/unnamed-addr-reprocessing.ll
===================================================================
--- llvm/trunk/test/Transforms/MergeFunc/unnamed-addr-reprocessing.ll
+++ llvm/trunk/test/Transforms/MergeFunc/unnamed-addr-reprocessing.ll
@@ -0,0 +1,35 @@
+; RUN: opt -S -mergefunc < %s | FileCheck %s
+
+; After test3 and test4 have been merged, we should detect that
+; test1 and test2 can also be merged.
+
+; CHECK: define void @test4() unnamed_addr
+; CHECK-NEXT: tail call void @test3()
+; CHECK: define void @test2() unnamed_addr
+; CHECK-NEXT: tail call void @test1()
+
+declare void @dummy()
+  
+define void @test1() unnamed_addr {
+    call void @test3()
+    call void @test3()
+    ret void
+}
+
+define void @test2() unnamed_addr {
+    call void @test4()
+    call void @test4()
+    ret void
+}
+
+define void @test3() unnamed_addr {
+    call void @dummy()
+    call void @dummy()
+    ret void
+}
+
+define void @test4() unnamed_addr {
+    call void @dummy()
+    call void @dummy()
+    ret void
+}


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D53262.173113.patch
Type: text/x-patch
Size: 1646 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181108/8e17a780/attachment.bin>


More information about the llvm-commits mailing list