xref: /llvm-project/llvm/test/CodeGen/AMDGPU/lo16-hi16-physreg-copy.mir (revision 9e9907f1cfa424366fba58d9520f9305b537cec9)
1# RUN: llc -mtriple=amdgcn -mcpu=gfx802 -start-before postrapseudos -asm-verbose=0 -verify-machineinstrs %s -o - | FileCheck -check-prefix=GCN %s
2# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -start-before postrapseudos -asm-verbose=0 -verify-machineinstrs %s -o - | FileCheck -check-prefix=GCN %s
3# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -start-before postrapseudos -asm-verbose=0 -verify-machineinstrs %s -o - | FileCheck -check-prefix=GCN %s
4
5# GCN-LABEL: {{^}}lo_to_lo:
6# GCN: v_mov_b32_sdwa v1, v0 dst_sel:WORD_0 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
7name: lo_to_lo
8tracksRegLiveness: true
9body:             |
10  bb.0:
11    $vgpr0 = IMPLICIT_DEF
12    $vgpr1_lo16 = COPY $vgpr0_lo16
13    S_ENDPGM 0
14...
15
16# GCN-LABEL: {{^}}lo_to_hi:
17# GCN: v_mov_b32_sdwa v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
18name: lo_to_hi
19tracksRegLiveness: true
20body:             |
21  bb.0:
22    $vgpr0 = IMPLICIT_DEF
23    $vgpr1_hi16 = COPY killed $vgpr0_lo16
24    S_ENDPGM 0
25...
26
27# GCN-LABEL: {{^}}hi_to_lo:
28# GCN: v_mov_b32_sdwa v1, v0 dst_sel:WORD_0 dst_unused:UNUSED_PRESERVE src0_sel:WORD_1
29name: hi_to_lo
30tracksRegLiveness: true
31body:             |
32  bb.0:
33    $vgpr0 = IMPLICIT_DEF
34    $vgpr1_lo16 = COPY $vgpr0_hi16
35    S_ENDPGM 0
36...
37
38# GCN-LABEL: {{^}}hi_to_hi:
39# GCN: v_mov_b32_sdwa v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_1
40name: hi_to_hi
41tracksRegLiveness: true
42body:             |
43  bb.0:
44    $vgpr0 = IMPLICIT_DEF
45    $vgpr1_hi16 = COPY $vgpr0_hi16
46    S_ENDPGM 0
47...
48
49# GCN-LABEL: {{^}}lo_to_lo_samereg:
50# GCN:        s_waitcnt
51# GCN-NEXT:   s_endpgm
52name: lo_to_lo_samereg
53tracksRegLiveness: true
54body:             |
55  bb.0:
56    $vgpr0 = IMPLICIT_DEF
57    $vgpr0_lo16 = COPY $vgpr0_lo16
58    S_ENDPGM 0
59...
60
61# GCN-LABEL: {{^}}lo_to_hi_samereg:
62# GCN: v_mov_b32_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
63name: lo_to_hi_samereg
64tracksRegLiveness: true
65body:             |
66  bb.0:
67    $vgpr0 = IMPLICIT_DEF
68    $vgpr0_hi16 = COPY $vgpr0_lo16
69    S_ENDPGM 0
70...
71
72# GCN-LABEL: {{^}}hi_to_lo_samereg:
73# GCN: v_mov_b32_sdwa v0, v0 dst_sel:WORD_0 dst_unused:UNUSED_PRESERVE src0_sel:WORD_1
74name: hi_to_lo_samereg
75tracksRegLiveness: true
76body:             |
77  bb.0:
78    $vgpr0 = IMPLICIT_DEF
79    $vgpr0_lo16 = COPY killed $vgpr0_hi16
80    S_ENDPGM 0
81...
82
83# GCN-LABEL: {{^}}hi_to_hi_samereg:
84# GCN:      s_waitcnt
85# GCN-NEXT: s_endpgm
86name: hi_to_hi_samereg
87tracksRegLiveness: true
88body:             |
89  bb.0:
90    $vgpr0 = IMPLICIT_DEF
91    $vgpr0_hi16 = COPY killed $vgpr0_hi16
92    S_ENDPGM 0
93...
94
95# GCN-LABEL: {{^}}lo_to_lo_def_livein:
96# GCN: v_mov_b32_sdwa v1, v0 dst_sel:WORD_0 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
97name: lo_to_lo_def_livein
98tracksRegLiveness: true
99body:             |
100  bb.0:
101    liveins: $vgpr0
102
103    $vgpr1 = IMPLICIT_DEF
104    $vgpr1_lo16 = COPY $vgpr0_lo16
105    S_ENDPGM 0
106...
107
108# GCN-LABEL: {{^}}lo_to_hi_def_livein:
109# GCN: v_mov_b32_sdwa v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
110name: lo_to_hi_def_livein
111tracksRegLiveness: true
112body:             |
113  bb.0:
114    liveins: $vgpr0
115
116    $vgpr1 = IMPLICIT_DEF
117    $vgpr1_hi16 = COPY $vgpr0_lo16
118    S_ENDPGM 0
119...
120
121# GCN-LABEL: {{^}}hi_to_lo_def_livein:
122# GCN: v_mov_b32_sdwa v1, v0 dst_sel:WORD_0 dst_unused:UNUSED_PRESERVE src0_sel:WORD_1
123name: hi_to_lo_def_livein
124tracksRegLiveness: true
125body:             |
126  bb.0:
127    liveins: $vgpr0
128
129    $vgpr1 = IMPLICIT_DEF
130    $vgpr1_lo16 = COPY killed $vgpr0_hi16
131    S_ENDPGM 0
132...
133
134# GCN-LABEL: {{^}}hi_to_hi_def_livein:
135# GCN: v_mov_b32_sdwa v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_1
136name: hi_to_hi_def_livein
137tracksRegLiveness: true
138body:             |
139  bb.0:
140    liveins: $vgpr0
141
142    $vgpr1 = IMPLICIT_DEF
143    $vgpr1_hi16 = COPY $vgpr0_hi16
144    S_ENDPGM 0
145...
146
147# TODO: This can be coalesced into a VGPR_32 copy
148# GCN-LABEL: {{^}}lo_to_lo_hi_to_hi:
149# GCN:      v_mov_b32_sdwa v1, v0 dst_sel:WORD_0 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
150# GCN-NEXT: v_mov_b32_sdwa v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_1
151# GCN-NEXT: v_mov_b32_e32 v2, v1
152# GCN-NEXT: s_endpgm
153name: lo_to_lo_hi_to_hi
154tracksRegLiveness: true
155body:             |
156  bb.0:
157    $vgpr0 = IMPLICIT_DEF
158    $vgpr1_lo16 = COPY $vgpr0_lo16
159    $vgpr1_hi16 = COPY $vgpr0_hi16
160    $vgpr2 = COPY killed $vgpr1
161    S_ENDPGM 0
162...
163
164# GCN-LABEL: {{^}}lo_to_hi_hi_to_lo:
165# GCN:      v_mov_b32_sdwa v1, v0 dst_sel:WORD_0 dst_unused:UNUSED_PRESERVE src0_sel:WORD_1
166# GCN-NEXT: v_mov_b32_sdwa v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
167# GCN-NEXT: v_mov_b32_e32 v2, v1
168# GCN-NEXT: s_endpgm
169name: lo_to_hi_hi_to_lo
170tracksRegLiveness: true
171body:             |
172  bb.0:
173    $vgpr0 = IMPLICIT_DEF
174    $vgpr1_lo16 = COPY $vgpr0_hi16
175    $vgpr1_hi16 = COPY $vgpr0_lo16
176    $vgpr2 = COPY killed $vgpr1
177    S_ENDPGM 0
178...
179
180# NB: copy of undef just killed instead of expansion
181# GCN-LABEL: {{^}}lo_to_lo_undef:
182# GCN:        s_waitcnt
183# GCN-NEXT:   v_mov_b32_e32 v2, v1
184# GCN-NEXT:   s_endpgm
185name: lo_to_lo_undef
186tracksRegLiveness: true
187body:             |
188  bb.0:
189    $vgpr1_lo16 = COPY undef $vgpr0_lo16
190    $vgpr2 = COPY killed $vgpr1
191    S_ENDPGM 0
192...
193
194# GCN-LABEL: {{^}}lo_to_lo_sgpr_to_sgpr:
195# GCN: s_mov_b32 s1, s0
196name: lo_to_lo_sgpr_to_sgpr
197tracksRegLiveness: true
198body:             |
199  bb.0:
200    $sgpr0 = IMPLICIT_DEF
201    $sgpr1_lo16 = COPY $sgpr0_lo16
202    S_ENDPGM 0
203...
204