Skip to content

Commit a2fae1e

Browse files
author
Jessica Paquette
committed
[GlobalISel][AArch64] Save a copy on G_SELECT by fixing condition to GPR
The condition can never be fed by FPRs, so it should always be on a GPR. Differential Revision: https://reviews.llvm.org/D65157 llvm-svn: 366854
1 parent b362c97 commit a2fae1e

File tree

3 files changed

+10
-17
lines changed

3 files changed

+10
-17
lines changed

llvm/lib/Target/AArch64/AArch64RegisterBankInfo.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -702,11 +702,10 @@ AArch64RegisterBankInfo::getInstrMapping(const MachineInstr &MI) const {
702702
break;
703703

704704
// If we're taking in vectors, we have no choice but to put everything on
705-
// FPRs.
705+
// FPRs, except for the condition. The condition must always be on a GPR.
706706
LLT SrcTy = MRI.getType(MI.getOperand(2).getReg());
707707
if (SrcTy.isVector()) {
708-
for (unsigned Idx = 0; Idx < 4; ++Idx)
709-
OpRegBankIdx[Idx] = PMI_FirstFPR;
708+
OpRegBankIdx = {PMI_FirstFPR, PMI_FirstGPR, PMI_FirstFPR, PMI_FirstFPR};
710709
break;
711710
}
712711

@@ -750,8 +749,7 @@ AArch64RegisterBankInfo::getInstrMapping(const MachineInstr &MI) const {
750749
// If we have more FP constraints than not, then move everything over to
751750
// FPR.
752751
if (NumFP >= 2)
753-
for (unsigned Idx = 0; Idx < 4; ++Idx)
754-
OpRegBankIdx[Idx] = PMI_FirstFPR;
752+
OpRegBankIdx = {PMI_FirstFPR, PMI_FirstGPR, PMI_FirstFPR, PMI_FirstFPR};
755753

756754
break;
757755
}

llvm/test/CodeGen/AArch64/GlobalISel/regbank-fp-use-def.mir

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,8 @@ body: |
9191
; CHECK: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $w1
9292
; CHECK: [[COPY2:%[0-9]+]]:gpr(s32) = COPY $w2
9393
; CHECK: [[SITOFP:%[0-9]+]]:fpr(s32) = G_SITOFP [[COPY1]](s32)
94-
; CHECK: [[COPY3:%[0-9]+]]:fpr(s1) = COPY [[TRUNC]](s1)
95-
; CHECK: [[COPY4:%[0-9]+]]:fpr(s32) = COPY [[COPY2]](s32)
96-
; CHECK: [[SELECT:%[0-9]+]]:fpr(s32) = G_SELECT [[COPY3]](s1), [[COPY4]], [[SITOFP]]
94+
; CHECK: [[COPY3:%[0-9]+]]:fpr(s32) = COPY [[COPY2]](s32)
95+
; CHECK: [[SELECT:%[0-9]+]]:fpr(s32) = G_SELECT [[TRUNC]](s1), [[COPY3]], [[SITOFP]]
9796
; CHECK: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[SELECT]](s32)
9897
%0:_(s32) = COPY $w0
9998
%1:_(s1) = G_TRUNC %3(s32)

llvm/test/CodeGen/AArch64/GlobalISel/regbank-select.mir

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ body: |
1818
; CHECK: [[TRUNC:%[0-9]+]]:gpr(s1) = G_TRUNC [[COPY]](s32)
1919
; CHECK: [[COPY1:%[0-9]+]]:fpr(s32) = COPY $s0
2020
; CHECK: [[COPY2:%[0-9]+]]:fpr(s32) = COPY $s1
21-
; CHECK: [[COPY3:%[0-9]+]]:fpr(s1) = COPY [[TRUNC]](s1)
22-
; CHECK: [[SELECT:%[0-9]+]]:fpr(s32) = G_SELECT [[COPY3]](s1), [[COPY1]], [[COPY2]]
21+
; CHECK: [[SELECT:%[0-9]+]]:fpr(s32) = G_SELECT [[TRUNC]](s1), [[COPY1]], [[COPY2]]
2322
; CHECK: $s0 = COPY [[SELECT]](s32)
2423
; CHECK: RET_ReallyLR implicit $s0
2524
%3:_(s32) = COPY $w0
@@ -47,8 +46,7 @@ body: |
4746
; CHECK: [[TRUNC:%[0-9]+]]:gpr(s1) = G_TRUNC [[COPY]](s32)
4847
; CHECK: [[COPY1:%[0-9]+]]:fpr(s64) = COPY $d0
4948
; CHECK: [[COPY2:%[0-9]+]]:fpr(s64) = COPY $d1
50-
; CHECK: [[COPY3:%[0-9]+]]:fpr(s1) = COPY [[TRUNC]](s1)
51-
; CHECK: [[SELECT:%[0-9]+]]:fpr(s64) = G_SELECT [[COPY3]](s1), [[COPY1]], [[COPY2]]
49+
; CHECK: [[SELECT:%[0-9]+]]:fpr(s64) = G_SELECT [[TRUNC]](s1), [[COPY1]], [[COPY2]]
5250
; CHECK: $d0 = COPY [[SELECT]](s64)
5351
; CHECK: RET_ReallyLR implicit $d0
5452
%3:_(s32) = COPY $w0
@@ -75,8 +73,7 @@ body: |
7573
; CHECK: [[TRUNC:%[0-9]+]]:gpr(s1) = G_TRUNC [[COPY]](s32)
7674
; CHECK: [[COPY1:%[0-9]+]]:fpr(s64) = COPY $d0
7775
; CHECK: [[COPY2:%[0-9]+]]:fpr(s64) = COPY $d1
78-
; CHECK: [[COPY3:%[0-9]+]]:fpr(s1) = COPY [[TRUNC]](s1)
79-
; CHECK: [[SELECT:%[0-9]+]]:fpr(s64) = G_SELECT [[COPY3]](s1), [[COPY1]], [[COPY2]]
76+
; CHECK: [[SELECT:%[0-9]+]]:fpr(s64) = G_SELECT [[TRUNC]](s1), [[COPY1]], [[COPY2]]
8077
; CHECK: $x0 = COPY [[SELECT]](s64)
8178
; CHECK: RET_ReallyLR implicit $x0
8279
@@ -110,9 +107,8 @@ body: |
110107
; CHECK: [[TRUNC:%[0-9]+]]:gpr(s1) = G_TRUNC [[COPY]](s32)
111108
; CHECK: [[COPY1:%[0-9]+]]:fpr(s64) = COPY $d0
112109
; CHECK: [[COPY2:%[0-9]+]]:gpr(s64) = COPY $x1
113-
; CHECK: [[COPY3:%[0-9]+]]:fpr(s1) = COPY [[TRUNC]](s1)
114-
; CHECK: [[COPY4:%[0-9]+]]:fpr(s64) = COPY [[COPY2]](s64)
115-
; CHECK: [[SELECT:%[0-9]+]]:fpr(s64) = G_SELECT [[COPY3]](s1), [[COPY1]], [[COPY4]]
110+
; CHECK: [[COPY3:%[0-9]+]]:fpr(s64) = COPY [[COPY2]](s64)
111+
; CHECK: [[SELECT:%[0-9]+]]:fpr(s64) = G_SELECT [[TRUNC]](s1), [[COPY1]], [[COPY3]]
116112
; CHECK: $d0 = COPY [[SELECT]](s64)
117113
; CHECK: RET_ReallyLR implicit $d0
118114

0 commit comments

Comments
 (0)