Skip to content

Commit 50a9fc4

Browse files
committed
added mir test
1 parent 41d8a99 commit 50a9fc4

File tree

2 files changed

+60
-1
lines changed

2 files changed

+60
-1
lines changed

llvm/lib/Target/AMDGPU/SIFoldOperands.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,6 @@ bool SIFoldOperandsImpl::updateOperand(FoldCandidate &Fold) const {
579579
}
580580

581581
MachineOperand *New = Fold.OpToFold;
582-
// TODO: Temporarily allow folding from SGPRs to 16-bit VGPRs.
583582
// Rework once the VS_16 register class is updated to include proper
584583
// 16-bit SGPRs instead of 32-bit ones.
585584
if (Old.getSubReg() == AMDGPU::lo16 && TRI->isSGPRReg(*MRI, New->getReg()))
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2+
# RUN: llc -march=amdgcn -mcpu=gfx1100 -run-pass si-fold-operands -mattr=+real-true16 -o - %s | FileCheck %s
3+
4+
---
5+
name: fold_16bit_subreg_1
6+
tracksRegLiveness: true
7+
registers:
8+
body: |
9+
bb.0.entry:
10+
; CHECK-LABEL: name: fold_16bit_subreg_1
11+
; CHECK: [[DEF:%[0-9]+]]:sreg_64_xexec = IMPLICIT_DEF
12+
; CHECK-NEXT: [[DEF1:%[0-9]+]]:vgpr_16 = IMPLICIT_DEF
13+
; CHECK-NEXT: [[V_CMP_EQ_F16_t16_e64_:%[0-9]+]]:sreg_32 = nofpexcept V_CMP_EQ_F16_t16_e64 0, killed [[DEF1]], 2, [[DEF]].sub1, 0, 0, implicit $mode, implicit $exec
14+
; CHECK-NEXT: S_ENDPGM 0, implicit [[V_CMP_EQ_F16_t16_e64_]]
15+
%0:sreg_64_xexec = IMPLICIT_DEF
16+
%1:sgpr_lo16 = COPY %0.sub1_lo16:sreg_64_xexec
17+
%2:vgpr_16 = COPY %1:sgpr_lo16
18+
%3:vgpr_16 = IMPLICIT_DEF
19+
%4:sreg_32 = nofpexcept V_CMP_EQ_F16_t16_e64 0, killed %3:vgpr_16, 2, killed %2:vgpr_16, 0, 0, implicit $mode, implicit $exec
20+
S_ENDPGM 0, implicit %4
21+
...
22+
23+
---
24+
name: fold_16bit_subreg_0
25+
tracksRegLiveness: true
26+
registers:
27+
body: |
28+
bb.0.entry:
29+
; CHECK-LABEL: name: fold_16bit_subreg_0
30+
; CHECK: [[DEF:%[0-9]+]]:sreg_64_xexec = IMPLICIT_DEF
31+
; CHECK-NEXT: [[DEF1:%[0-9]+]]:vgpr_16 = IMPLICIT_DEF
32+
; CHECK-NEXT: [[V_CMP_EQ_F16_t16_e64_:%[0-9]+]]:sreg_32 = nofpexcept V_CMP_EQ_F16_t16_e64 0, killed [[DEF1]], 2, [[DEF]].sub0, 0, 0, implicit $mode, implicit $exec
33+
; CHECK-NEXT: S_ENDPGM 0, implicit [[V_CMP_EQ_F16_t16_e64_]]
34+
%0:sreg_64_xexec = IMPLICIT_DEF
35+
%1:sgpr_lo16 = COPY %0.lo16:sreg_64_xexec
36+
%2:vgpr_16 = COPY %1:sgpr_lo16
37+
%3:vgpr_16 = IMPLICIT_DEF
38+
%4:sreg_32 = nofpexcept V_CMP_EQ_F16_t16_e64 0, killed %3:vgpr_16, 2, killed %2:vgpr_16, 0, 0, implicit $mode, implicit $exec
39+
S_ENDPGM 0, implicit %4
40+
...
41+
42+
---
43+
name: sgpr_lo16
44+
tracksRegLiveness: true
45+
registers:
46+
body: |
47+
bb.0.entry:
48+
; CHECK-LABEL: name: sgpr_lo16
49+
; CHECK: [[DEF:%[0-9]+]]:sreg_32 = IMPLICIT_DEF
50+
; CHECK-NEXT: [[DEF1:%[0-9]+]]:sreg_32 = IMPLICIT_DEF
51+
; CHECK-NEXT: [[V_ALIGNBIT_B32_t16_e64_:%[0-9]+]]:vgpr_32 = V_ALIGNBIT_B32_t16_e64 0, [[DEF]], 0, killed [[DEF1]], 0, 30, 0, 0, implicit $exec
52+
; CHECK-NEXT: S_ENDPGM 0, implicit [[V_ALIGNBIT_B32_t16_e64_]]
53+
%0:sreg_32 = IMPLICIT_DEF
54+
%1:sreg_32 = IMPLICIT_DEF
55+
%2:sreg_32 = S_MOV_B32 30
56+
%3:sgpr_lo16 = COPY %2.lo16:sreg_32
57+
%4:vgpr_16 = COPY %3:sgpr_lo16
58+
%5:vgpr_32 = V_ALIGNBIT_B32_t16_e64 0, %0:sreg_32, 0, killed %1:sreg_32, 0, killed %4:vgpr_16, 0, 0, implicit $exec
59+
S_ENDPGM 0, implicit %5
60+
...

0 commit comments

Comments
 (0)