diff options
author | Daniel Sanders <daniel_l_sanders@apple.com> | 2017-04-04 13:25:23 +0000 |
---|---|---|
committer | Daniel Sanders <daniel_l_sanders@apple.com> | 2017-04-04 13:25:23 +0000 |
commit | bee5739a7c76b4a9f993e83f95edc61614fab446 (patch) | |
tree | 69adf5b907d2b136cdce797f257346177cc9e0ff /clang/lib/Frontend/CompilerInvocation.cpp | |
parent | bcbfdade4115f47511f60c029b9010d5959f6781 (diff) | |
download | bcm5719-llvm-bee5739a7c76b4a9f993e83f95edc61614fab446.tar.gz bcm5719-llvm-bee5739a7c76b4a9f993e83f95edc61614fab446.zip |
[tablegen][globalisel] Add support for nested instruction matching.
Summary:
Lift the restrictions that prevented the tree walking introduced in the
previous change and add support for patterns like:
(G_ADD (G_MUL (G_SEXT $src1), (G_SEXT $src2)), $src3) -> SMADDWrrr $dst, $src1, $src2, $src3
Also adds support for G_SEXT and G_ZEXT to support these cases.
One particular aspect of this that I should draw attention to is that I've
tried to be overly conservative in determining the safety of matches that
involve non-adjacent instructions and multiple basic blocks. This is intended
to be used as a cheap initial check and we may add a more expensive check in
the future. The current rules are:
* Reject if any instruction may load/store (we'd need to check for intervening
memory operations.
* Reject if any instruction has implicit operands.
* Reject if any instruction has unmodelled side-effects.
See isObviouslySafeToFold().
Reviewers: t.p.northover, javed.absar, qcolombet, aditya_nandakumar, ab, rovka
Reviewed By: ab
Subscribers: igorb, dberris, llvm-commits, kristof.beyls
Differential Revision: https://reviews.llvm.org/D30539
llvm-svn: 299430
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
0 files changed, 0 insertions, 0 deletions