Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[AArch64][GlobalISel] Avoid copies to target register bank for subreg…
…ister copies Previously for any copy from a register bigger than the destination: Copied to a same-sized register in the destination register bank. Subregister copy of that to the destination. This fails for copies from 128-bit FPRs to GPRs because the GPR register bank can't accomodate 128-bit values. Instead of special-casing such copies to perform the truncation beforehand in the source register bank, generalize this: a) Perform a subregister copy straight from source register whenever possible. This results in shorter MIR and fixes the above problem. b) Perform a full copy to target bank and then do a subregister copy only if source bank can't support target's size. E.g. GPR to 8-bit FPR copy. Patch by Raul Tambre (tambre)! Differential Revision: https://reviews.llvm.org/D75421
- Loading branch information
Jessica Paquette
committed
Mar 5, 2020
1 parent
3e851f4
commit ef4282e
Showing
6 changed files
with
96 additions
and
54 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py | ||
# RUN: llc -mtriple=aarch64-unknown-unknown -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s | ||
--- | ||
name: test_128_fpr_truncation | ||
alignment: 4 | ||
legalized: true | ||
regBankSelected: true | ||
tracksRegLiveness: true | ||
body: | | ||
; CHECK-LABEL: name: test_128_fpr_truncation | ||
; CHECK: bb.0: | ||
; CHECK: successors: %bb.1(0x80000000) | ||
; CHECK: liveins: $x0 | ||
; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0 | ||
; CHECK: [[LDRQui:%[0-9]+]]:fpr128 = LDRQui [[COPY]], 0 :: (load 16) | ||
; CHECK: [[COPY1:%[0-9]+]]:gpr32all = COPY [[LDRQui]].ssub | ||
; CHECK: [[COPY2:%[0-9]+]]:gpr32 = COPY [[COPY1]] | ||
; CHECK: TBNZW [[COPY2]], 0, %bb.1 | ||
; CHECK: bb.1: | ||
; CHECK: RET_ReallyLR | ||
bb.0: | ||
liveins: $x0 | ||
%1:gpr(p0) = COPY $x0 | ||
%3:gpr(s64) = G_CONSTANT i64 1 | ||
%5:gpr(s64) = G_CONSTANT i64 0 | ||
%0:fpr(s128) = G_LOAD %1:gpr(p0) :: (load 16) | ||
%2:fpr(s64) = G_TRUNC %0:fpr(s128) | ||
%8:gpr(s64) = COPY %2:fpr(s64) | ||
%4:gpr(s64) = G_AND %8:gpr, %3:gpr | ||
%7:gpr(s32) = G_ICMP intpred(ne), %4:gpr(s64), %5:gpr | ||
%6:gpr(s1) = G_TRUNC %7:gpr(s32) | ||
G_BRCOND %6:gpr(s1), %bb.1 | ||
bb.1: | ||
RET_ReallyLR | ||
... |