This is an attempt to avoid regressions seen when D54640 is extended to include add ops, so it's another patch towards solving PR32023:
https://bugs.llvm.org/show_bug.cgi?id=32023
LEA formation is scattered between combines, DAG-to-DAG, and machine passes like "Two-Address instruction pass", so I'm not sure if this is the best solution.
The idea here is to rely on the existing DAG-to-DAG logic for 32-bit LEA formation; no edits needed in there. If this is the right approach, then I'd extend this to handle more constants; 3/5/9 are just the most obvious winners for size/speed regardless of uarch. GCC forms LEA for 8-bit mul much more aggressively.
Why ZERO_EXTEND and not ANY_EXTEND?