[llvm][CodeGen] DAG Combiner folds for vscale.
authorFrancesco Petrogalli <francesco.petrogalli@arm.com>
Tue, 18 Feb 2020 19:13:39 +0000 (19:13 +0000)
committerFrancesco Petrogalli <francesco.petrogalli@arm.com>
Fri, 21 Feb 2020 18:03:12 +0000 (18:03 +0000)
commit31ec721516b5ed36f7dbed180a903e269f29716d
treeef66192ffcf2b907eb57983bf916d96333f6296b
parentb178555318cdccecc9d3fb4af89b4a765cb0e48c
[llvm][CodeGen] DAG Combiner folds for vscale.

Summary:
This patch simplifies the DAGs generated when using the intrinsic `@llvm.vscale.*` as follows:

* Fold (add (vscale * C0), (vscale * C1)) to (vscale * (C0 + C1)).
* Canonicalize (sub X, (vscale * C)) to (add X,  (vscale * -C)).
* Fold (mul (vscale * C0), C1) to (vscale * (C0 * C1)).
* Fold (shl (vscale * C0), C1) to (vscale * (C0 << C1)).

The test `sve-gep-ll` have been updated to reflect the folding introduced by this patch.

Reviewers: efriedma, sdesmalen, andwar, rengolin

Reviewed By: sdesmalen

Subscribers: hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D74782
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
llvm/test/CodeGen/AArch64/sve-gep.ll
llvm/test/CodeGen/AArch64/sve-vscale-combine.ll [new file with mode: 0644]