[llvm] [FuncSpec] Update function specialization to handle phi-chains (PR #71442)

Alexandros Lamprineas via llvm-commits llvm-commits at lists.llvm.org
Thu Nov 9 06:05:57 PST 2023


labrinea wrote:

> What would be the result of an input like:
> 
> ```
> C       I
>   \    /
>     P
> ```
> 
> i.e. we visit the PHI node `P` , which has two operands, one constant `C` and one instruction `I` that is not a PHI.
> 
> As far as I can tell, the first time around we will see `I` and return false from `CanConstantFoldPhi` so we exit immediately.
> 
> Next time we again return with false from `CanConstantFoldPhi` with `Const` set to `C` and `UnknownIncomingValues` empty. We will not perform any iterations of the loop that calls `discoverStronglyConnectedComponent` (line 376). We will not perform any iterations of the loop the calls `CanConstantFoldPhi` (line 380). `CannotConstantFoldPhi` is initialised to `false`, so at the return at line 387 we will return `Const` which has a non-null value, set by the first call of `CanConstantFoldPhi` at line 364.

I agree, the patch does not handle this case correctly as is.

https://github.com/llvm/llvm-project/pull/71442


More information about the llvm-commits mailing list