Skip to content

Commit 5ff70d1

Browse files
committed
[AMDGPU][GlobalIsel] Use isRegisterClassType to check for legal types for G_FREEZE
& G_IMPLICIT_DEF Change-Id: Ia22467410a92424c0bc8d307f1fcaea79d10d4c9
1 parent c66d25d commit 5ff70d1

8 files changed

+199
-157
lines changed

llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp

+5-3
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@ static const LLT S160 = LLT::scalar(160);
292292
static const LLT S224 = LLT::scalar(224);
293293
static const LLT S256 = LLT::scalar(256);
294294
static const LLT S512 = LLT::scalar(512);
295+
static const LLT S1024 = LLT::scalar(1024);
295296
static const LLT MaxScalar = LLT::scalar(MaxRegisterSize);
296297

297298
static const LLT V2S8 = LLT::fixed_vector(2, 8);
@@ -332,8 +333,8 @@ static const LLT V16S64 = LLT::fixed_vector(16, 64);
332333
static const LLT V2S128 = LLT::fixed_vector(2, 128);
333334
static const LLT V4S128 = LLT::fixed_vector(4, 128);
334335

335-
static std::initializer_list<LLT> AllScalarTypes = {S32, S64, S96, S128,
336-
S160, S224, S256, S512};
336+
static std::initializer_list<LLT> AllScalarTypes = {
337+
S32, S64, S96, S128, S160, S224, S256, S512, S1024};
337338

338339
static std::initializer_list<LLT> AllS16Vectors{
339340
V2S16, V4S16, V6S16, V8S16, V10S16, V12S16, V16S16, V2S128, V4S128};
@@ -889,10 +890,11 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo(const GCNSubtarget &ST_,
889890
.clampScalar(0, S16, S64);
890891

891892
getActionDefinitionsBuilder({G_IMPLICIT_DEF, G_FREEZE})
892-
.legalIf(isRegisterType(0))
893+
.legalIf(isRegisterClassType(0))
893894
// s1 and s16 are special cases because they have legal operations on
894895
// them, but don't really occupy registers in the normal way.
895896
.legalFor({S1, S16})
897+
.clampNumElements(0, V16S32, V32S32)
896898
.moreElementsIf(isSmallOddVector(0), oneMoreElement(0))
897899
.clampScalarOrElt(0, S32, MaxScalar)
898900
.widenScalarToNextPow2(0, 32)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 < %s | FileCheck -check-prefixes=GFX10 %s
3+
; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -amdgpu-enable-delay-alu=0 < %s | FileCheck -check-prefixes=GFX11 %s
4+
5+
define void @freeze13(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
6+
; GFX10-LABEL: freeze13:
7+
; GFX10: ; %bb.0:
8+
; GFX10-NEXT: s_clause 0x3
9+
; GFX10-NEXT: global_load_dwordx4 v[4:7], v[0:1], off
10+
; GFX10-NEXT: global_load_dwordx4 v[8:11], v[0:1], off offset:16
11+
; GFX10-NEXT: global_load_dwordx4 v[12:15], v[0:1], off offset:32
12+
; GFX10-NEXT: global_load_dword v16, v[0:1], off offset:48
13+
; GFX10-NEXT: s_waitcnt vmcnt(3)
14+
; GFX10-NEXT: global_store_dwordx4 v[2:3], v[4:7], off
15+
; GFX10-NEXT: s_waitcnt vmcnt(2)
16+
; GFX10-NEXT: global_store_dwordx4 v[2:3], v[8:11], off offset:16
17+
; GFX10-NEXT: s_waitcnt vmcnt(1)
18+
; GFX10-NEXT: global_store_dwordx4 v[2:3], v[12:15], off offset:32
19+
; GFX10-NEXT: s_waitcnt vmcnt(0)
20+
; GFX10-NEXT: global_store_dword v[2:3], v16, off offset:48
21+
; GFX10-NEXT: s_endpgm
22+
;
23+
; GFX11-LABEL: freeze13:
24+
; GFX11: ; %bb.0:
25+
; GFX11-NEXT: s_clause 0x3
26+
; GFX11-NEXT: global_load_b128 v[4:7], v[0:1], off
27+
; GFX11-NEXT: global_load_b128 v[8:11], v[0:1], off offset:16
28+
; GFX11-NEXT: global_load_b128 v[12:15], v[0:1], off offset:32
29+
; GFX11-NEXT: global_load_b32 v0, v[0:1], off offset:48
30+
; GFX11-NEXT: s_waitcnt vmcnt(3)
31+
; GFX11-NEXT: global_store_b128 v[2:3], v[4:7], off
32+
; GFX11-NEXT: s_waitcnt vmcnt(2)
33+
; GFX11-NEXT: global_store_b128 v[2:3], v[8:11], off offset:16
34+
; GFX11-NEXT: s_waitcnt vmcnt(1)
35+
; GFX11-NEXT: global_store_b128 v[2:3], v[12:15], off offset:32
36+
; GFX11-NEXT: s_waitcnt vmcnt(0)
37+
; GFX11-NEXT: global_store_b32 v[2:3], v0, off offset:48
38+
; GFX11-NEXT: s_nop 0
39+
; GFX11-NEXT: s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
40+
; GFX11-NEXT: s_endpgm
41+
%a = load <13 x i32>, ptr addrspace(1) %ptra, align 4
42+
%freeze = freeze <13 x i32> %a
43+
store <13 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
44+
ret void
45+
}
46+
47+
define void @freeze14(ptr addrspace(1) %ptra, ptr addrspace(1) %ptrb) {
48+
; GFX10-LABEL: freeze14:
49+
; GFX10: ; %bb.0:
50+
; GFX10-NEXT: s_clause 0x3
51+
; GFX10-NEXT: global_load_dwordx4 v[4:7], v[0:1], off
52+
; GFX10-NEXT: global_load_dwordx4 v[8:11], v[0:1], off offset:16
53+
; GFX10-NEXT: global_load_dwordx4 v[12:15], v[0:1], off offset:32
54+
; GFX10-NEXT: global_load_dwordx2 v[16:17], v[0:1], off offset:48
55+
; GFX10-NEXT: s_waitcnt vmcnt(3)
56+
; GFX10-NEXT: global_store_dwordx4 v[2:3], v[4:7], off
57+
; GFX10-NEXT: s_waitcnt vmcnt(2)
58+
; GFX10-NEXT: global_store_dwordx4 v[2:3], v[8:11], off offset:16
59+
; GFX10-NEXT: s_waitcnt vmcnt(1)
60+
; GFX10-NEXT: global_store_dwordx4 v[2:3], v[12:15], off offset:32
61+
; GFX10-NEXT: s_waitcnt vmcnt(0)
62+
; GFX10-NEXT: global_store_dwordx2 v[2:3], v[16:17], off offset:48
63+
; GFX10-NEXT: s_endpgm
64+
;
65+
; GFX11-LABEL: freeze14:
66+
; GFX11: ; %bb.0:
67+
; GFX11-NEXT: s_clause 0x3
68+
; GFX11-NEXT: global_load_b128 v[4:7], v[0:1], off
69+
; GFX11-NEXT: global_load_b128 v[8:11], v[0:1], off offset:16
70+
; GFX11-NEXT: global_load_b128 v[12:15], v[0:1], off offset:32
71+
; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off offset:48
72+
; GFX11-NEXT: s_waitcnt vmcnt(3)
73+
; GFX11-NEXT: global_store_b128 v[2:3], v[4:7], off
74+
; GFX11-NEXT: s_waitcnt vmcnt(2)
75+
; GFX11-NEXT: global_store_b128 v[2:3], v[8:11], off offset:16
76+
; GFX11-NEXT: s_waitcnt vmcnt(1)
77+
; GFX11-NEXT: global_store_b128 v[2:3], v[12:15], off offset:32
78+
; GFX11-NEXT: s_waitcnt vmcnt(0)
79+
; GFX11-NEXT: global_store_b64 v[2:3], v[0:1], off offset:48
80+
; GFX11-NEXT: s_nop 0
81+
; GFX11-NEXT: s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
82+
; GFX11-NEXT: s_endpgm
83+
%a = load <14 x i32>, ptr addrspace(1) %ptra, align 4
84+
%freeze = freeze <14 x i32> %a
85+
store <14 x i32> %freeze, ptr addrspace(1) %ptrb, align 4
86+
ret void
87+
}

llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-unmerge-values.mir

+8-10
Original file line numberDiff line numberDiff line change
@@ -171,11 +171,9 @@ body: |
171171
; GCN-LABEL: name: test_unmerge_values_s_s64_s_s64_s64_s_s192
172172
; GCN: liveins: $sgpr0_sgpr1_sgpr2_sgpr3
173173
; GCN-NEXT: {{ $}}
174-
; GCN-NEXT: [[DEF:%[0-9]+]]:sgpr_192 = IMPLICIT_DEF
175-
; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY [[DEF]].sub0_sub1
176-
; GCN-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY [[DEF]].sub2_sub3
177-
; GCN-NEXT: [[COPY2:%[0-9]+]]:sreg_64 = COPY [[DEF]].sub4_sub5
178-
; GCN-NEXT: S_ENDPGM 0, implicit [[COPY]], implicit [[COPY1]], implicit [[COPY2]]
174+
; GCN-NEXT: [[DEF:%[0-9]+]]:sgpr(s192) = G_IMPLICIT_DEF
175+
; GCN-NEXT: [[UV:%[0-9]+]]:sgpr(s64), [[UV1:%[0-9]+]]:sgpr(s64), [[UV2:%[0-9]+]]:sgpr(s64) = G_UNMERGE_VALUES [[DEF]](s192)
176+
; GCN-NEXT: S_ENDPGM 0, implicit [[UV]](s64), implicit [[UV1]](s64), implicit [[UV2]](s64)
179177
%0:sgpr(s192) = G_IMPLICIT_DEF
180178
%1:sgpr(s64), %2:sgpr(s64), %3:sgpr(s64) = G_UNMERGE_VALUES %0
181179
S_ENDPGM 0, implicit %1, implicit %2, implicit %3
@@ -294,11 +292,11 @@ body: |
294292
; GCN-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:sgpr_384(<12 x s32>) = G_CONCAT_VECTORS [[COPY]](<3 x s32>), [[COPY1]](<3 x s32>), [[COPY2]](<3 x s32>), [[COPY3]](<3 x s32>)
295293
; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_96(<3 x s32>) = COPY [[CONCAT_VECTORS]].sub0_sub1_sub2(<12 x s32>)
296294
; GCN-NEXT: [[COPY5:%[0-9]+]]:sgpr_96(<3 x s32>) = COPY [[CONCAT_VECTORS]].sub3_sub4_sub5(<12 x s32>)
297-
; GCN-NEXT: [[UV:%[0-9]+]]:sgpr_96(<3 x s32>), [[UV1:%[0-9]+]]:sgpr_96(<3 x s32>), [[UV2:%[0-9]+]]:sgpr_96(<3 x s32>), [[UV3:%[0-9]+]]:sgpr_96(<3 x s32>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<12 x s32>)
298-
; GCN-NEXT: $sgpr0_sgpr1_sgpr2 = COPY [[UV]](<3 x s32>)
299-
; GCN-NEXT: $sgpr4_sgpr5_sgpr6 = COPY [[UV1]](<3 x s32>)
300-
; GCN-NEXT: $sgpr8_sgpr9_sgpr10 = COPY [[UV2]](<3 x s32>)
301-
; GCN-NEXT: $sgpr12_sgpr13_sgpr14 = COPY [[UV3]](<3 x s32>)
295+
; GCN-NEXT: [[COPY4:%[0-9]+]]:sgpr_96(<3 x s32>), [[COPY5:%[0-9]+]]:sgpr_96(<3 x s32>), [[UV:%[0-9]+]]:sgpr_96(<3 x s32>), [[UV1:%[0-9]+]]:sgpr_96(<3 x s32>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<12 x s32>)
296+
; GCN-NEXT: $sgpr0_sgpr1_sgpr2 = COPY [[COPY4]](<3 x s32>)
297+
; GCN-NEXT: $sgpr4_sgpr5_sgpr6 = COPY [[COPY5]](<3 x s32>)
298+
; GCN-NEXT: $sgpr8_sgpr9_sgpr10 = COPY [[UV]](<3 x s32>)
299+
; GCN-NEXT: $sgpr12_sgpr13_sgpr14 = COPY [[UV1]](<3 x s32>)
302300
%0:sgpr(<3 x s32>) = COPY $sgpr0_sgpr1_sgpr2
303301
%1:sgpr(<3 x s32>) = COPY $sgpr4_sgpr5_sgpr6
304302
%2:sgpr(<3 x s32>) = COPY $sgpr8_sgpr9_sgpr10

llvm/test/CodeGen/AMDGPU/GlobalISel/legalize-freeze.mir

+11-19
Original file line numberDiff line numberDiff line change
@@ -171,12 +171,8 @@ body: |
171171
172172
; CHECK-LABEL: name: test_freeze_s448
173173
; CHECK: [[COPY:%[0-9]+]]:_(s512) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
174-
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s448) = G_TRUNC [[COPY]](s512)
175-
; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s448) = G_FREEZE [[TRUNC]]
176-
; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64), [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64), [[UV4:%[0-9]+]]:_(s64), [[UV5:%[0-9]+]]:_(s64), [[UV6:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[FREEZE]](s448)
177-
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
178-
; CHECK-NEXT: [[MV:%[0-9]+]]:_(s512) = G_MERGE_VALUES [[UV]](s64), [[UV1]](s64), [[UV2]](s64), [[UV3]](s64), [[UV4]](s64), [[UV5]](s64), [[UV6]](s64), [[DEF]](s64)
179-
; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY [[MV]](s512)
174+
; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(s512) = G_FREEZE [[COPY]]
175+
; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY [[FREEZE]](s512)
180176
%0:_(s512) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
181177
%1:_(s448) = G_TRUNC %0
182178
%2:_(s448) = G_FREEZE %1
@@ -399,14 +395,12 @@ body: |
399395
bb.0:
400396
401397
; CHECK-LABEL: name: test_freeze_v33s32
402-
; CHECK: [[DEF:%[0-9]+]]:_(<16 x s32>) = G_IMPLICIT_DEF
398+
; CHECK: [[DEF:%[0-9]+]]:_(<32 x s32>) = G_IMPLICIT_DEF
403399
; CHECK-NEXT: [[DEF1:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
404-
; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<16 x s32>) = G_FREEZE [[DEF]]
405-
; CHECK-NEXT: [[FREEZE1:%[0-9]+]]:_(<16 x s32>) = G_FREEZE [[DEF]]
406-
; CHECK-NEXT: [[FREEZE2:%[0-9]+]]:_(s32) = G_FREEZE [[DEF1]]
407-
; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32), [[UV8:%[0-9]+]]:_(s32), [[UV9:%[0-9]+]]:_(s32), [[UV10:%[0-9]+]]:_(s32), [[UV11:%[0-9]+]]:_(s32), [[UV12:%[0-9]+]]:_(s32), [[UV13:%[0-9]+]]:_(s32), [[UV14:%[0-9]+]]:_(s32), [[UV15:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FREEZE]](<16 x s32>)
408-
; CHECK-NEXT: [[UV16:%[0-9]+]]:_(s32), [[UV17:%[0-9]+]]:_(s32), [[UV18:%[0-9]+]]:_(s32), [[UV19:%[0-9]+]]:_(s32), [[UV20:%[0-9]+]]:_(s32), [[UV21:%[0-9]+]]:_(s32), [[UV22:%[0-9]+]]:_(s32), [[UV23:%[0-9]+]]:_(s32), [[UV24:%[0-9]+]]:_(s32), [[UV25:%[0-9]+]]:_(s32), [[UV26:%[0-9]+]]:_(s32), [[UV27:%[0-9]+]]:_(s32), [[UV28:%[0-9]+]]:_(s32), [[UV29:%[0-9]+]]:_(s32), [[UV30:%[0-9]+]]:_(s32), [[UV31:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FREEZE1]](<16 x s32>)
409-
; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<33 x s32>) = G_BUILD_VECTOR [[UV]](s32), [[UV1]](s32), [[UV2]](s32), [[UV3]](s32), [[UV4]](s32), [[UV5]](s32), [[UV6]](s32), [[UV7]](s32), [[UV8]](s32), [[UV9]](s32), [[UV10]](s32), [[UV11]](s32), [[UV12]](s32), [[UV13]](s32), [[UV14]](s32), [[UV15]](s32), [[UV16]](s32), [[UV17]](s32), [[UV18]](s32), [[UV19]](s32), [[UV20]](s32), [[UV21]](s32), [[UV22]](s32), [[UV23]](s32), [[UV24]](s32), [[UV25]](s32), [[UV26]](s32), [[UV27]](s32), [[UV28]](s32), [[UV29]](s32), [[UV30]](s32), [[UV31]](s32), [[FREEZE2]](s32)
400+
; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<32 x s32>) = G_FREEZE [[DEF]]
401+
; CHECK-NEXT: [[FREEZE1:%[0-9]+]]:_(s32) = G_FREEZE [[DEF1]]
402+
; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32), [[UV8:%[0-9]+]]:_(s32), [[UV9:%[0-9]+]]:_(s32), [[UV10:%[0-9]+]]:_(s32), [[UV11:%[0-9]+]]:_(s32), [[UV12:%[0-9]+]]:_(s32), [[UV13:%[0-9]+]]:_(s32), [[UV14:%[0-9]+]]:_(s32), [[UV15:%[0-9]+]]:_(s32), [[UV16:%[0-9]+]]:_(s32), [[UV17:%[0-9]+]]:_(s32), [[UV18:%[0-9]+]]:_(s32), [[UV19:%[0-9]+]]:_(s32), [[UV20:%[0-9]+]]:_(s32), [[UV21:%[0-9]+]]:_(s32), [[UV22:%[0-9]+]]:_(s32), [[UV23:%[0-9]+]]:_(s32), [[UV24:%[0-9]+]]:_(s32), [[UV25:%[0-9]+]]:_(s32), [[UV26:%[0-9]+]]:_(s32), [[UV27:%[0-9]+]]:_(s32), [[UV28:%[0-9]+]]:_(s32), [[UV29:%[0-9]+]]:_(s32), [[UV30:%[0-9]+]]:_(s32), [[UV31:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FREEZE]](<32 x s32>)
403+
; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<33 x s32>) = G_BUILD_VECTOR [[UV]](s32), [[UV1]](s32), [[UV2]](s32), [[UV3]](s32), [[UV4]](s32), [[UV5]](s32), [[UV6]](s32), [[UV7]](s32), [[UV8]](s32), [[UV9]](s32), [[UV10]](s32), [[UV11]](s32), [[UV12]](s32), [[UV13]](s32), [[UV14]](s32), [[UV15]](s32), [[UV16]](s32), [[UV17]](s32), [[UV18]](s32), [[UV19]](s32), [[UV20]](s32), [[UV21]](s32), [[UV22]](s32), [[UV23]](s32), [[UV24]](s32), [[UV25]](s32), [[UV26]](s32), [[UV27]](s32), [[UV28]](s32), [[UV29]](s32), [[UV30]](s32), [[UV31]](s32), [[FREEZE1]](s32)
410404
; CHECK-NEXT: S_NOP 0, implicit [[BUILD_VECTOR]](<33 x s32>)
411405
%0:_(<33 x s32>) = G_IMPLICIT_DEF
412406
%1:_(<33 x s32>) = G_FREEZE %0
@@ -419,12 +413,10 @@ body: |
419413
bb.0:
420414
421415
; CHECK-LABEL: name: test_freeze_v64s32
422-
; CHECK: [[DEF:%[0-9]+]]:_(<16 x s32>) = G_IMPLICIT_DEF
423-
; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<16 x s32>) = G_FREEZE [[DEF]]
424-
; CHECK-NEXT: [[FREEZE1:%[0-9]+]]:_(<16 x s32>) = G_FREEZE [[DEF]]
425-
; CHECK-NEXT: [[FREEZE2:%[0-9]+]]:_(<16 x s32>) = G_FREEZE [[DEF]]
426-
; CHECK-NEXT: [[FREEZE3:%[0-9]+]]:_(<16 x s32>) = G_FREEZE [[DEF]]
427-
; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<64 x s32>) = G_CONCAT_VECTORS [[FREEZE]](<16 x s32>), [[FREEZE1]](<16 x s32>), [[FREEZE2]](<16 x s32>), [[FREEZE3]](<16 x s32>)
416+
; CHECK: [[DEF:%[0-9]+]]:_(<32 x s32>) = G_IMPLICIT_DEF
417+
; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<32 x s32>) = G_FREEZE [[DEF]]
418+
; CHECK-NEXT: [[FREEZE1:%[0-9]+]]:_(<32 x s32>) = G_FREEZE [[DEF]]
419+
; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<64 x s32>) = G_CONCAT_VECTORS [[FREEZE]](<32 x s32>), [[FREEZE1]](<32 x s32>)
428420
; CHECK-NEXT: S_NOP 0, implicit [[CONCAT_VECTORS]](<64 x s32>)
429421
%0:_(<64 x s32>) = G_IMPLICIT_DEF
430422
%1:_(<64 x s32>) = G_FREEZE %0

llvm/test/CodeGen/AMDGPU/GlobalISel/legalize-implicit-def.mir

+8-20
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,9 @@ body: |
135135
bb.0:
136136
137137
; CHECK-LABEL: name: test_implicit_def_s448
138-
; CHECK: [[DEF:%[0-9]+]]:_(s448) = G_IMPLICIT_DEF
139-
; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[DEF]](s448), 0
138+
; CHECK: [[DEF:%[0-9]+]]:_(s512) = G_IMPLICIT_DEF
139+
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s448) = G_TRUNC [[DEF]](s512)
140+
; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[TRUNC]](s448), 0
140141
; CHECK-NEXT: $vgpr0 = COPY [[EXTRACT]](s32)
141142
%0:_(s448) = G_IMPLICIT_DEF
142143
%1:_(s32) = G_EXTRACT %0, 0
@@ -295,18 +296,6 @@ body: |
295296
$vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY %0
296297
...
297298

298-
---
299-
name: test_implicit_def_v17s32
300-
body: |
301-
bb.0:
302-
303-
; CHECK-LABEL: name: test_implicit_def_v17s32
304-
; CHECK: [[DEF:%[0-9]+]]:_(<17 x s32>) = G_IMPLICIT_DEF
305-
; CHECK-NEXT: S_NOP 0, implicit [[DEF]](<17 x s32>)
306-
%0:_(<17 x s32>) = G_IMPLICIT_DEF
307-
S_NOP 0, implicit %0
308-
...
309-
310299
---
311300
name: test_implicit_def_v32s32
312301
body: |
@@ -328,9 +317,9 @@ body: |
328317
; CHECK-LABEL: name: test_implicit_def_v33s32
329318
; CHECK: liveins: $vgpr0_vgpr1
330319
; CHECK-NEXT: {{ $}}
331-
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<16 x s32>) = G_IMPLICIT_DEF
320+
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<32 x s32>) = G_IMPLICIT_DEF
332321
; CHECK-NEXT: [[DEF1:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
333-
; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32), [[UV8:%[0-9]+]]:_(s32), [[UV9:%[0-9]+]]:_(s32), [[UV10:%[0-9]+]]:_(s32), [[UV11:%[0-9]+]]:_(s32), [[UV12:%[0-9]+]]:_(s32), [[UV13:%[0-9]+]]:_(s32), [[UV14:%[0-9]+]]:_(s32), [[UV15:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[DEF]](<16 x s32>)
322+
; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32), [[UV8:%[0-9]+]]:_(s32), [[UV9:%[0-9]+]]:_(s32), [[UV10:%[0-9]+]]:_(s32), [[UV11:%[0-9]+]]:_(s32), [[UV12:%[0-9]+]]:_(s32), [[UV13:%[0-9]+]]:_(s32), [[UV14:%[0-9]+]]:_(s32), [[UV15:%[0-9]+]]:_(s32), [[UV16:%[0-9]+]]:_(s32), [[UV17:%[0-9]+]]:_(s32), [[UV18:%[0-9]+]]:_(s32), [[UV19:%[0-9]+]]:_(s32), [[UV20:%[0-9]+]]:_(s32), [[UV21:%[0-9]+]]:_(s32), [[UV22:%[0-9]+]]:_(s32), [[UV23:%[0-9]+]]:_(s32), [[UV24:%[0-9]+]]:_(s32), [[UV25:%[0-9]+]]:_(s32), [[UV26:%[0-9]+]]:_(s32), [[UV27:%[0-9]+]]:_(s32), [[UV28:%[0-9]+]]:_(s32), [[UV29:%[0-9]+]]:_(s32), [[UV30:%[0-9]+]]:_(s32), [[UV31:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[DEF]](<32 x s32>)
334323
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1
335324
; CHECK-NEXT: G_STORE [[UV]](s32), [[COPY]](p1) :: (volatile store (s32), addrspace 1)
336325
; CHECK-NEXT: G_STORE [[DEF1]](s32), [[COPY]](p1) :: (volatile store (s32), addrspace 1)
@@ -348,10 +337,9 @@ body: |
348337
bb.0:
349338
350339
; CHECK-LABEL: name: test_implicit_def_v64s32
351-
; CHECK: [[DEF:%[0-9]+]]:_(<16 x s32>) = G_IMPLICIT_DEF
352-
; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<64 x s32>) = G_CONCAT_VECTORS [[DEF]](<16 x s32>), [[DEF]](<16 x s32>), [[DEF]](<16 x s32>), [[DEF]](<16 x s32>)
353-
; CHECK-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<32 x s32>) = G_CONCAT_VECTORS [[DEF]](<16 x s32>), [[DEF]](<16 x s32>)
354-
; CHECK-NEXT: S_NOP 0, implicit [[CONCAT_VECTORS]](<64 x s32>), implicit [[CONCAT_VECTORS1]](<32 x s32>)
340+
; CHECK: [[DEF:%[0-9]+]]:_(<32 x s32>) = G_IMPLICIT_DEF
341+
; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<64 x s32>) = G_CONCAT_VECTORS [[DEF]](<32 x s32>), [[DEF]](<32 x s32>)
342+
; CHECK-NEXT: S_NOP 0, implicit [[CONCAT_VECTORS]](<64 x s32>), implicit [[DEF]](<32 x s32>)
355343
%0:_(<64 x s32>) = G_IMPLICIT_DEF
356344
%1:_(<32 x s32>), %2:_(<32 x s32>) = G_UNMERGE_VALUES %0
357345
S_NOP 0, implicit %0, implicit %1

0 commit comments

Comments
 (0)