[GlobalISel][AArch64] Make FP constraint checks consider possible use/def banks
authorJessica Paquette <jpaquette@apple.com>
Fri, 24 May 2019 23:08:45 +0000 (23:08 +0000)
committerJessica Paquette <jpaquette@apple.com>
Fri, 24 May 2019 23:08:45 +0000 (23:08 +0000)
commit97d668d70f526f6fc4406053193502b83eec688b
treedc9443c3659705d18e2562fe67123bf90f5d17d1
parent59f959ff333bf42962287957b51d0da285087e41
[GlobalISel][AArch64] Make FP constraint checks consider possible use/def banks

In a few places in getInstrMapping, we check if use/def instructions for the
instruction we're mapping have floating point constraints.

We can improve this check and reduce the number of copies in GISel-compiled code
if we make a couple observations:

- For a def instruction, it only matters if the def instruction must always
  output a value stored on a FPR

- For a use instruction, it only matters if the use instruction must always
  only take in values stored in FPRs

This adds two new functions:

- onlyUsesFP
- onlyDefinesFP

Then we can use those when we're checking the uses/defs instead.

Without this patch, the load, unmerge, store, and select in the added test
would have unnecessary copies.

Differential Revision: https://reviews.llvm.org/D62426

llvm-svn: 361679
llvm/lib/Target/AArch64/AArch64RegisterBankInfo.cpp
llvm/lib/Target/AArch64/AArch64RegisterBankInfo.h
llvm/test/CodeGen/AArch64/GlobalISel/regbank-fp-use-def.mir [new file with mode: 0644]