[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