[llvm] 098e807 - Revert "[DeadArgElim] Set unused arguments for internal functions"

Vitaly Buka via llvm-commits llvm-commits at lists.llvm.org
Mon May 2 15:31:59 PDT 2022


Author: Vitaly Buka
Date: 2022-05-02T15:10:26-07:00
New Revision: 098e80707413bebfe804ed5a1a500e623d6236b8

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

LOG: Revert "[DeadArgElim] Set unused arguments for internal functions"

Breaks bots, see https://reviews.llvm.org/D124699

This reverts commit e547a333a43348a8a7ec9460f37696ecc5453e56.

Added: 
    

Modified: 
    llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp

Removed: 
    llvm/test/Transforms/DeadArgElim/fct_ptr.ll


################################################################################
diff  --git a/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp b/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp
index a879a0fb30b36..95f6a4f4fb572 100644
--- a/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp
+++ b/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp
@@ -268,12 +268,9 @@ bool DeadArgumentEliminationPass::RemoveDeadArgumentsFromCallers(Function &Fn) {
   if (!Fn.hasExactDefinition())
     return false;
 
-  // Functions with local linkage should already have been handled, except if
-  // they are fully alive (e.g., called indirectly) and except for the fragile
-  // (variadic) ones. In these cases, we may still be able to improve their
-  // statically known call sites.
-  if ((Fn.hasLocalLinkage() && !LiveFunctions.count(&Fn)) &&
-      !Fn.getFunctionType()->isVarArg())
+  // Functions with local linkage should already have been handled, except the
+  // fragile (variadic) ones which we can improve here.
+  if (Fn.hasLocalLinkage() && !Fn.getFunctionType()->isVarArg())
     return false;
 
   // Don't touch naked functions. The assembly might be using an argument, or

diff  --git a/llvm/test/Transforms/DeadArgElim/fct_ptr.ll b/llvm/test/Transforms/DeadArgElim/fct_ptr.ll
deleted file mode 100644
index 2e352666c1f6c..0000000000000
--- a/llvm/test/Transforms/DeadArgElim/fct_ptr.ll
+++ /dev/null
@@ -1,67 +0,0 @@
-; RUN: opt -S %s -deadargelim -o - | FileCheck %s
-; In that test @internal_fct is used by an instruction
-; we don't know how to rewrite (the comparison that produces
-; %cmp1).
-; Because of that use, we used to bail out on removing the
-; unused arguments for this function.
-; Yet, we should still be able to rewrite the direct calls that are
-; statically known, by replacing the related arguments with undef.
-; This is what we check on the call that produces %res2.
-
-define i32 @call_indirect(i32 (i32, i32, i32)* readnone %fct_ptr, i32 %arg1, i32 %arg2, i32 %arg3) {
-; CHECK-LABEL: @call_indirect(
-; CHECK-NEXT:    [[CMP0:%.*]] = icmp eq i32 (i32, i32, i32)* [[FCT_PTR:%.*]], @external_fct
-; CHECK-NEXT:    br i1 [[CMP0]], label [[CALL_EXT:%.*]], label [[CHK2:%.*]]
-; CHECK:       call_ext:
-; CHECK-NEXT:    [[RES1:%.*]] = tail call i32 @external_fct(i32 undef, i32 [[ARG2:%.*]], i32 undef)
-; CHECK-NEXT:    br label [[END:%.*]]
-; CHECK:       chk2:
-; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i32 (i32, i32, i32)* [[FCT_PTR]], @internal_fct
-; CHECK-NEXT:    br i1 [[CMP1]], label [[CALL_INT:%.*]], label [[CALL_OTHER:%.*]]
-; CHECK:       call_int:
-; CHECK-NEXT:    [[RES2:%.*]] = tail call i32 @internal_fct(i32 undef, i32 [[ARG2]], i32 undef)
-; CHECK-NEXT:    br label [[END]]
-; CHECK:       call_other:
-; CHECK-NEXT:    [[RES3:%.*]] = tail call i32 @other_fct(i32 [[ARG2]])
-; CHECK-NEXT:    br label [[END]]
-; CHECK:       end:
-; CHECK-NEXT:    [[FINAL_RES:%.*]] = phi i32 [ [[RES1]], [[CALL_EXT]] ], [ [[RES2]], [[CALL_INT]] ], [ [[RES3]], [[CALL_OTHER]] ]
-; CHECK-NEXT:    ret i32 [[FINAL_RES]]
-;
-  %cmp0 = icmp eq i32 (i32, i32, i32)* %fct_ptr, @external_fct
-  br i1 %cmp0, label %call_ext, label %chk2
-
-call_ext:
-  %res1 = tail call i32 @external_fct(i32 %arg1, i32 %arg2, i32 %arg3)
-  br label %end
-
-chk2:
-  %cmp1 = icmp eq i32 (i32, i32, i32)* %fct_ptr, @internal_fct
-  br i1 %cmp1, label %call_int, label %call_other
-
-call_int:
-  %res2 = tail call i32 @internal_fct(i32 %arg1, i32 %arg2, i32 %arg3)
-  br label %end
-
-call_other:
-  %res3 = tail call i32 @other_fct(i32 %arg1, i32 %arg2, i32 %arg3)
-  br label %end
-
-end:
-  %final_res = phi i32 [%res1, %call_ext], [%res2, %call_int], [%res3, %call_other]
-  ret i32 %final_res
-}
-
-
-define i32 @external_fct(i32 %unused_arg1, i32 %arg2, i32 %unused_arg3) {
-  ret i32 %arg2
-}
-
-define internal i32 @internal_fct(i32 %unused_arg1, i32 %arg2, i32 %unused_arg3) {
-  ret i32 %arg2
-}
-
-define internal i32 @other_fct(i32 %unused_arg1, i32 %arg2, i32 %unused_arg3) {
-  ret i32 %arg2
-}
-


        


More information about the llvm-commits mailing list