[DeadArgElim] Set unused arguments for internal functions
authorQuentin Colombet <qcolombet@apple.com>
Fri, 29 Apr 2022 20:53:36 +0000 (13:53 -0700)
committerQuentin Colombet <qcolombet@apple.com>
Mon, 2 May 2022 18:16:32 +0000 (11:16 -0700)
commite547a333a43348a8a7ec9460f37696ecc5453e56
tree1957ac7adc00f2271abd56ad1b8d11e656d5640b
parent45c07db31cc76802a1a2e41bed1ce9c1b8198181
[DeadArgElim] Set unused arguments for internal functions

Prior to this patch we would only set to undef the unused arguments of the
external functions. The rationale was that unused arguments of internal
functions wouldn't need to be turned into undef arguments because they
should have been simply eliminated by the time we reach that code.

This is actually not true because there are plenty of cases where we can't
remove unused arguments. For instance, if the internal function is used in
an indirect call, it may not be possible to change the function signature.
Yet, for statically known call-sites we would still like to mark the unused
arguments as undef.

This patch enables the "set undef arguments" optimization on internal
functions when we encounter cases where internal functions cannot be
optimized. I.e., whenever an internal function is marked "live".

Differential Revision: https://reviews.llvm.org/D124699
llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp
llvm/test/Transforms/DeadArgElim/fct_ptr.ll [new file with mode: 0644]