blob: de29037674ce69409dde29ccdfa9852fee9ca284 [file] [log] [blame]
Matt Arsenault0a52e9d2019-07-01 16:34:48 +00001# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
Fangrui Song9e9907f2024-01-16 21:54:58 -08002# RUN: llc -mtriple=amdgcn -mcpu=tahiti -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX6 %s
3# RUN: llc -mtriple=amdgcn -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX8 %s
4# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX9 %s
5# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -mattr=-wavefrontsize32,+wavefrontsize64 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX10-WAVE64 %s
6# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -mattr=+wavefrontsize32,-wavefrontsize64 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX10-WAVE32 %s
7# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-wavefrontsize32,+wavefrontsize64 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX10-WAVE64 %s
8# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+wavefrontsize32,-wavefrontsize64 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX10-WAVE32 %s
Matt Arsenault0a52e9d2019-07-01 16:34:48 +00009
10---
11name: gep_p0_sgpr_sgpr
12legalized: true
13regBankSelected: true
14
15body: |
16 bb.0:
17 liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
18 ; GFX6-LABEL: name: gep_p0_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +010019 ; GFX6: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
20 ; GFX6-NEXT: {{ $}}
21 ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
22 ; GFX6-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3
23 ; GFX6-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
24 ; GFX6-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY1]].sub0
25 ; GFX6-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
26 ; GFX6-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY [[COPY1]].sub1
27 ; GFX6-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY2]], [[COPY3]], implicit-def $scc
Matt Arsenault3240ae72023-07-28 08:09:10 -040028 ; GFX6-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY4]], [[COPY5]], implicit-def dead $scc, implicit $scc
Jay Foad8871c3c2022-06-27 12:15:25 +010029 ; GFX6-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
30 ; GFX6-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenault3240ae72023-07-28 08:09:10 -040031 ;
Matt Arsenault0a52e9d2019-07-01 16:34:48 +000032 ; GFX8-LABEL: name: gep_p0_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +010033 ; GFX8: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
34 ; GFX8-NEXT: {{ $}}
35 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
36 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3
37 ; GFX8-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
38 ; GFX8-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY1]].sub0
39 ; GFX8-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
40 ; GFX8-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY [[COPY1]].sub1
41 ; GFX8-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY2]], [[COPY3]], implicit-def $scc
Matt Arsenault3240ae72023-07-28 08:09:10 -040042 ; GFX8-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY4]], [[COPY5]], implicit-def dead $scc, implicit $scc
Jay Foad8871c3c2022-06-27 12:15:25 +010043 ; GFX8-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
44 ; GFX8-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenault3240ae72023-07-28 08:09:10 -040045 ;
Matt Arsenault0a52e9d2019-07-01 16:34:48 +000046 ; GFX9-LABEL: name: gep_p0_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +010047 ; GFX9: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
48 ; GFX9-NEXT: {{ $}}
49 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
50 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3
51 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
52 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY1]].sub0
53 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
54 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY [[COPY1]].sub1
55 ; GFX9-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY2]], [[COPY3]], implicit-def $scc
Matt Arsenault3240ae72023-07-28 08:09:10 -040056 ; GFX9-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY4]], [[COPY5]], implicit-def dead $scc, implicit $scc
Jay Foad8871c3c2022-06-27 12:15:25 +010057 ; GFX9-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
58 ; GFX9-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenault3240ae72023-07-28 08:09:10 -040059 ;
Matt Arsenault0a52e9d2019-07-01 16:34:48 +000060 ; GFX10-WAVE64-LABEL: name: gep_p0_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +010061 ; GFX10-WAVE64: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
62 ; GFX10-WAVE64-NEXT: {{ $}}
63 ; GFX10-WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
64 ; GFX10-WAVE64-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3
65 ; GFX10-WAVE64-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
66 ; GFX10-WAVE64-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY1]].sub0
67 ; GFX10-WAVE64-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
68 ; GFX10-WAVE64-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY [[COPY1]].sub1
69 ; GFX10-WAVE64-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY2]], [[COPY3]], implicit-def $scc
Matt Arsenault3240ae72023-07-28 08:09:10 -040070 ; GFX10-WAVE64-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY4]], [[COPY5]], implicit-def dead $scc, implicit $scc
Jay Foad8871c3c2022-06-27 12:15:25 +010071 ; GFX10-WAVE64-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
72 ; GFX10-WAVE64-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenault3240ae72023-07-28 08:09:10 -040073 ;
Matt Arsenault0a52e9d2019-07-01 16:34:48 +000074 ; GFX10-WAVE32-LABEL: name: gep_p0_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +010075 ; GFX10-WAVE32: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
76 ; GFX10-WAVE32-NEXT: {{ $}}
77 ; GFX10-WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
78 ; GFX10-WAVE32-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3
79 ; GFX10-WAVE32-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
80 ; GFX10-WAVE32-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY1]].sub0
81 ; GFX10-WAVE32-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
82 ; GFX10-WAVE32-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY [[COPY1]].sub1
83 ; GFX10-WAVE32-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY2]], [[COPY3]], implicit-def $scc
Matt Arsenault3240ae72023-07-28 08:09:10 -040084 ; GFX10-WAVE32-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY4]], [[COPY5]], implicit-def dead $scc, implicit $scc
Jay Foad8871c3c2022-06-27 12:15:25 +010085 ; GFX10-WAVE32-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
86 ; GFX10-WAVE32-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenault0a52e9d2019-07-01 16:34:48 +000087 %0:sgpr(p0) = COPY $sgpr0_sgpr1
88 %1:sgpr(s64) = COPY $sgpr2_sgpr3
Daniel Sanderse74c5b92019-11-01 13:18:00 -070089 %2:sgpr(p0) = G_PTR_ADD %0, %1
Matt Arsenault0a52e9d2019-07-01 16:34:48 +000090 S_ENDPGM 0, implicit %2
91
92...
93
94---
95name: gep_p0_vgpr_vgpr
96legalized: true
97regBankSelected: true
98
99body: |
100 bb.0:
101 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
102 ; GFX6-LABEL: name: gep_p0_vgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100103 ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
104 ; GFX6-NEXT: {{ $}}
105 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
106 ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
107 ; GFX6-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
108 ; GFX6-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub0
109 ; GFX6-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
110 ; GFX6-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub1
111 ; GFX6-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY2]], [[COPY3]], 0, implicit $exec
Matt Arsenault3240ae72023-07-28 08:09:10 -0400112 ; GFX6-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec
113 ; GFX6-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, [[V_ADDC_U32_e64_]], %subreg.sub1
Jay Foad8871c3c2022-06-27 12:15:25 +0100114 ; GFX6-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400115 ;
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000116 ; GFX8-LABEL: name: gep_p0_vgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100117 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
118 ; GFX8-NEXT: {{ $}}
119 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
120 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
121 ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
122 ; GFX8-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub0
123 ; GFX8-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
124 ; GFX8-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub1
125 ; GFX8-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY2]], [[COPY3]], 0, implicit $exec
Matt Arsenault3240ae72023-07-28 08:09:10 -0400126 ; GFX8-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec
127 ; GFX8-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, [[V_ADDC_U32_e64_]], %subreg.sub1
Jay Foad8871c3c2022-06-27 12:15:25 +0100128 ; GFX8-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400129 ;
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000130 ; GFX9-LABEL: name: gep_p0_vgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100131 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
132 ; GFX9-NEXT: {{ $}}
133 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
134 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
135 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
136 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub0
137 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
138 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub1
139 ; GFX9-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY2]], [[COPY3]], 0, implicit $exec
Matt Arsenault3240ae72023-07-28 08:09:10 -0400140 ; GFX9-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec
141 ; GFX9-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, [[V_ADDC_U32_e64_]], %subreg.sub1
Jay Foad8871c3c2022-06-27 12:15:25 +0100142 ; GFX9-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400143 ;
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000144 ; GFX10-WAVE64-LABEL: name: gep_p0_vgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100145 ; GFX10-WAVE64: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
146 ; GFX10-WAVE64-NEXT: {{ $}}
147 ; GFX10-WAVE64-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
148 ; GFX10-WAVE64-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
149 ; GFX10-WAVE64-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
150 ; GFX10-WAVE64-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub0
151 ; GFX10-WAVE64-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
152 ; GFX10-WAVE64-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub1
153 ; GFX10-WAVE64-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY2]], [[COPY3]], 0, implicit $exec
Matt Arsenault3240ae72023-07-28 08:09:10 -0400154 ; GFX10-WAVE64-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec
155 ; GFX10-WAVE64-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, [[V_ADDC_U32_e64_]], %subreg.sub1
Jay Foad8871c3c2022-06-27 12:15:25 +0100156 ; GFX10-WAVE64-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400157 ;
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000158 ; GFX10-WAVE32-LABEL: name: gep_p0_vgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100159 ; GFX10-WAVE32: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
160 ; GFX10-WAVE32-NEXT: {{ $}}
161 ; GFX10-WAVE32-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
162 ; GFX10-WAVE32-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
163 ; GFX10-WAVE32-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
164 ; GFX10-WAVE32-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub0
165 ; GFX10-WAVE32-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
166 ; GFX10-WAVE32-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub1
167 ; GFX10-WAVE32-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 [[COPY2]], [[COPY3]], 0, implicit $exec
Matt Arsenault3240ae72023-07-28 08:09:10 -0400168 ; GFX10-WAVE32-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec
169 ; GFX10-WAVE32-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, [[V_ADDC_U32_e64_]], %subreg.sub1
Jay Foad8871c3c2022-06-27 12:15:25 +0100170 ; GFX10-WAVE32-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000171 %0:vgpr(p0) = COPY $vgpr0_vgpr1
172 %1:vgpr(s64) = COPY $vgpr2_vgpr3
Daniel Sanderse74c5b92019-11-01 13:18:00 -0700173 %2:vgpr(p0) = G_PTR_ADD %0, %1
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000174 S_ENDPGM 0, implicit %2
175
176...
177
178---
179name: gep_p0_sgpr_vgpr
180legalized: true
181regBankSelected: true
182
183body: |
184 bb.0:
185 liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
186 ; GFX6-LABEL: name: gep_p0_sgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100187 ; GFX6: liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
188 ; GFX6-NEXT: {{ $}}
189 ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
190 ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
191 ; GFX6-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
192 ; GFX6-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub0
193 ; GFX6-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
194 ; GFX6-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub1
195 ; GFX6-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY2]], [[COPY3]], 0, implicit $exec
Matt Arsenault3240ae72023-07-28 08:09:10 -0400196 ; GFX6-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec
197 ; GFX6-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, [[V_ADDC_U32_e64_]], %subreg.sub1
Jay Foad8871c3c2022-06-27 12:15:25 +0100198 ; GFX6-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400199 ;
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000200 ; GFX8-LABEL: name: gep_p0_sgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100201 ; GFX8: liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
202 ; GFX8-NEXT: {{ $}}
203 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
204 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
205 ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
206 ; GFX8-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub0
207 ; GFX8-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
208 ; GFX8-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub1
209 ; GFX8-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY2]], [[COPY3]], 0, implicit $exec
Matt Arsenault3240ae72023-07-28 08:09:10 -0400210 ; GFX8-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec
211 ; GFX8-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, [[V_ADDC_U32_e64_]], %subreg.sub1
Jay Foad8871c3c2022-06-27 12:15:25 +0100212 ; GFX8-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400213 ;
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000214 ; GFX9-LABEL: name: gep_p0_sgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100215 ; GFX9: liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
216 ; GFX9-NEXT: {{ $}}
217 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
218 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
219 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
220 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub0
221 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
222 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub1
223 ; GFX9-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY2]], [[COPY3]], 0, implicit $exec
Matt Arsenault3240ae72023-07-28 08:09:10 -0400224 ; GFX9-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec
225 ; GFX9-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, [[V_ADDC_U32_e64_]], %subreg.sub1
Jay Foad8871c3c2022-06-27 12:15:25 +0100226 ; GFX9-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400227 ;
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000228 ; GFX10-WAVE64-LABEL: name: gep_p0_sgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100229 ; GFX10-WAVE64: liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
230 ; GFX10-WAVE64-NEXT: {{ $}}
231 ; GFX10-WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
232 ; GFX10-WAVE64-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
233 ; GFX10-WAVE64-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
234 ; GFX10-WAVE64-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub0
235 ; GFX10-WAVE64-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
236 ; GFX10-WAVE64-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub1
237 ; GFX10-WAVE64-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY2]], [[COPY3]], 0, implicit $exec
Matt Arsenault3240ae72023-07-28 08:09:10 -0400238 ; GFX10-WAVE64-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec
239 ; GFX10-WAVE64-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, [[V_ADDC_U32_e64_]], %subreg.sub1
Jay Foad8871c3c2022-06-27 12:15:25 +0100240 ; GFX10-WAVE64-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400241 ;
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000242 ; GFX10-WAVE32-LABEL: name: gep_p0_sgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100243 ; GFX10-WAVE32: liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
244 ; GFX10-WAVE32-NEXT: {{ $}}
245 ; GFX10-WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
246 ; GFX10-WAVE32-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
247 ; GFX10-WAVE32-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
248 ; GFX10-WAVE32-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub0
249 ; GFX10-WAVE32-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
250 ; GFX10-WAVE32-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub1
251 ; GFX10-WAVE32-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 [[COPY2]], [[COPY3]], 0, implicit $exec
Matt Arsenault3240ae72023-07-28 08:09:10 -0400252 ; GFX10-WAVE32-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec
253 ; GFX10-WAVE32-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, [[V_ADDC_U32_e64_]], %subreg.sub1
Jay Foad8871c3c2022-06-27 12:15:25 +0100254 ; GFX10-WAVE32-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenault70a4d3f2019-07-02 14:40:22 +0000255 %0:sgpr(p0) = COPY $sgpr0_sgpr1
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000256 %1:vgpr(s64) = COPY $vgpr0_vgpr1
Daniel Sanderse74c5b92019-11-01 13:18:00 -0700257 %2:vgpr(p0) = G_PTR_ADD %0, %1
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000258 S_ENDPGM 0, implicit %2
259
260...
261
262---
263name: gep_p3_sgpr_sgpr
264legalized: true
265regBankSelected: true
266
267body: |
268 bb.0:
269 liveins: $sgpr0, $sgpr1
270 ; GFX6-LABEL: name: gep_p3_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100271 ; GFX6: liveins: $sgpr0, $sgpr1
272 ; GFX6-NEXT: {{ $}}
273 ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
274 ; GFX6-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
Matt Arsenault3240ae72023-07-28 08:09:10 -0400275 ; GFX6-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY]], [[COPY1]], implicit-def dead $scc
Jay Foad8871c3c2022-06-27 12:15:25 +0100276 ; GFX6-NEXT: S_ENDPGM 0, implicit [[S_ADD_U32_]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400277 ;
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000278 ; GFX8-LABEL: name: gep_p3_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100279 ; GFX8: liveins: $sgpr0, $sgpr1
280 ; GFX8-NEXT: {{ $}}
281 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
282 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
Matt Arsenault3240ae72023-07-28 08:09:10 -0400283 ; GFX8-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY]], [[COPY1]], implicit-def dead $scc
Jay Foad8871c3c2022-06-27 12:15:25 +0100284 ; GFX8-NEXT: S_ENDPGM 0, implicit [[S_ADD_U32_]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400285 ;
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000286 ; GFX9-LABEL: name: gep_p3_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100287 ; GFX9: liveins: $sgpr0, $sgpr1
288 ; GFX9-NEXT: {{ $}}
289 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
290 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
Matt Arsenault3240ae72023-07-28 08:09:10 -0400291 ; GFX9-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY]], [[COPY1]], implicit-def dead $scc
Jay Foad8871c3c2022-06-27 12:15:25 +0100292 ; GFX9-NEXT: S_ENDPGM 0, implicit [[S_ADD_U32_]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400293 ;
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000294 ; GFX10-WAVE64-LABEL: name: gep_p3_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100295 ; GFX10-WAVE64: liveins: $sgpr0, $sgpr1
296 ; GFX10-WAVE64-NEXT: {{ $}}
297 ; GFX10-WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
298 ; GFX10-WAVE64-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
Matt Arsenault3240ae72023-07-28 08:09:10 -0400299 ; GFX10-WAVE64-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY]], [[COPY1]], implicit-def dead $scc
Jay Foad8871c3c2022-06-27 12:15:25 +0100300 ; GFX10-WAVE64-NEXT: S_ENDPGM 0, implicit [[S_ADD_U32_]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400301 ;
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000302 ; GFX10-WAVE32-LABEL: name: gep_p3_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100303 ; GFX10-WAVE32: liveins: $sgpr0, $sgpr1
304 ; GFX10-WAVE32-NEXT: {{ $}}
305 ; GFX10-WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
306 ; GFX10-WAVE32-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
Matt Arsenault3240ae72023-07-28 08:09:10 -0400307 ; GFX10-WAVE32-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY]], [[COPY1]], implicit-def dead $scc
Jay Foad8871c3c2022-06-27 12:15:25 +0100308 ; GFX10-WAVE32-NEXT: S_ENDPGM 0, implicit [[S_ADD_U32_]]
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000309 %0:sgpr(p3) = COPY $sgpr0
310 %1:sgpr(s32) = COPY $sgpr1
Daniel Sanderse74c5b92019-11-01 13:18:00 -0700311 %2:sgpr(p3) = G_PTR_ADD %0, %1
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000312 S_ENDPGM 0, implicit %2
313
314...
315
316---
317name: gep_p3_vgpr_vgpr
318legalized: true
319regBankSelected: true
320
321body: |
322 bb.0:
323 liveins: $vgpr0, $vgpr1
324 ; GFX6-LABEL: name: gep_p3_vgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100325 ; GFX6: liveins: $vgpr0, $vgpr1
326 ; GFX6-NEXT: {{ $}}
327 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
328 ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
Matt Arsenault3240ae72023-07-28 08:09:10 -0400329 ; GFX6-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec
330 ; GFX6-NEXT: S_ENDPGM 0, implicit [[V_ADD_CO_U32_e64_]]
331 ;
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000332 ; GFX8-LABEL: name: gep_p3_vgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100333 ; GFX8: liveins: $vgpr0, $vgpr1
334 ; GFX8-NEXT: {{ $}}
335 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
336 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
Matt Arsenault3240ae72023-07-28 08:09:10 -0400337 ; GFX8-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec
338 ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_ADD_CO_U32_e64_]]
339 ;
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000340 ; GFX9-LABEL: name: gep_p3_vgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100341 ; GFX9: liveins: $vgpr0, $vgpr1
342 ; GFX9-NEXT: {{ $}}
343 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
344 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
345 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec
346 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_ADD_U32_e64_]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400347 ;
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000348 ; GFX10-WAVE64-LABEL: name: gep_p3_vgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100349 ; GFX10-WAVE64: liveins: $vgpr0, $vgpr1
350 ; GFX10-WAVE64-NEXT: {{ $}}
351 ; GFX10-WAVE64-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
352 ; GFX10-WAVE64-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
353 ; GFX10-WAVE64-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec
354 ; GFX10-WAVE64-NEXT: S_ENDPGM 0, implicit [[V_ADD_U32_e64_]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400355 ;
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000356 ; GFX10-WAVE32-LABEL: name: gep_p3_vgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100357 ; GFX10-WAVE32: liveins: $vgpr0, $vgpr1
358 ; GFX10-WAVE32-NEXT: {{ $}}
359 ; GFX10-WAVE32-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
360 ; GFX10-WAVE32-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
361 ; GFX10-WAVE32-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec
362 ; GFX10-WAVE32-NEXT: S_ENDPGM 0, implicit [[V_ADD_U32_e64_]]
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000363 %0:vgpr(p3) = COPY $vgpr0
364 %1:vgpr(s32) = COPY $vgpr1
Daniel Sanderse74c5b92019-11-01 13:18:00 -0700365 %2:vgpr(p3) = G_PTR_ADD %0, %1
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000366 S_ENDPGM 0, implicit %2
367
368...
369
370---
371name: gep_p3_sgpr_vgpr
372legalized: true
373regBankSelected: true
374
375body: |
376 bb.0:
377 liveins: $sgpr0, $vgpr0
378 ; GFX6-LABEL: name: gep_p3_sgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100379 ; GFX6: liveins: $sgpr0, $vgpr0
380 ; GFX6-NEXT: {{ $}}
381 ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
382 ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
Matt Arsenault3240ae72023-07-28 08:09:10 -0400383 ; GFX6-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec
384 ; GFX6-NEXT: S_ENDPGM 0, implicit [[V_ADD_CO_U32_e64_]]
385 ;
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000386 ; GFX8-LABEL: name: gep_p3_sgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100387 ; GFX8: liveins: $sgpr0, $vgpr0
388 ; GFX8-NEXT: {{ $}}
389 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
390 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
Matt Arsenault3240ae72023-07-28 08:09:10 -0400391 ; GFX8-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec
392 ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_ADD_CO_U32_e64_]]
393 ;
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000394 ; GFX9-LABEL: name: gep_p3_sgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100395 ; GFX9: liveins: $sgpr0, $vgpr0
396 ; GFX9-NEXT: {{ $}}
397 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
398 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
399 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec
400 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_ADD_U32_e64_]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400401 ;
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000402 ; GFX10-WAVE64-LABEL: name: gep_p3_sgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100403 ; GFX10-WAVE64: liveins: $sgpr0, $vgpr0
404 ; GFX10-WAVE64-NEXT: {{ $}}
405 ; GFX10-WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
406 ; GFX10-WAVE64-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
407 ; GFX10-WAVE64-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec
408 ; GFX10-WAVE64-NEXT: S_ENDPGM 0, implicit [[V_ADD_U32_e64_]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400409 ;
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000410 ; GFX10-WAVE32-LABEL: name: gep_p3_sgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100411 ; GFX10-WAVE32: liveins: $sgpr0, $vgpr0
412 ; GFX10-WAVE32-NEXT: {{ $}}
413 ; GFX10-WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
414 ; GFX10-WAVE32-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
415 ; GFX10-WAVE32-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec
416 ; GFX10-WAVE32-NEXT: S_ENDPGM 0, implicit [[V_ADD_U32_e64_]]
Matt Arsenault70a4d3f2019-07-02 14:40:22 +0000417 %0:sgpr(p3) = COPY $sgpr0
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000418 %1:vgpr(s32) = COPY $vgpr0
Daniel Sanderse74c5b92019-11-01 13:18:00 -0700419 %2:vgpr(p3) = G_PTR_ADD %0, %1
Matt Arsenault0a52e9d2019-07-01 16:34:48 +0000420 S_ENDPGM 0, implicit %2
421
422...
Matt Arsenaultf3bfb852019-07-19 22:28:44 +0000423
424---
425name: gep_p6_sgpr_sgpr
426legalized: true
427regBankSelected: true
428
429body: |
430 bb.0:
431 liveins: $sgpr0, $sgpr1
432 ; GFX6-LABEL: name: gep_p6_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100433 ; GFX6: liveins: $sgpr0, $sgpr1
434 ; GFX6-NEXT: {{ $}}
435 ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
436 ; GFX6-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
Matt Arsenault3240ae72023-07-28 08:09:10 -0400437 ; GFX6-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY]], [[COPY1]], implicit-def dead $scc
Jay Foad8871c3c2022-06-27 12:15:25 +0100438 ; GFX6-NEXT: S_ENDPGM 0, implicit [[S_ADD_U32_]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400439 ;
Matt Arsenaultf3bfb852019-07-19 22:28:44 +0000440 ; GFX8-LABEL: name: gep_p6_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100441 ; GFX8: liveins: $sgpr0, $sgpr1
442 ; GFX8-NEXT: {{ $}}
443 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
444 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
Matt Arsenault3240ae72023-07-28 08:09:10 -0400445 ; GFX8-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY]], [[COPY1]], implicit-def dead $scc
Jay Foad8871c3c2022-06-27 12:15:25 +0100446 ; GFX8-NEXT: S_ENDPGM 0, implicit [[S_ADD_U32_]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400447 ;
Matt Arsenaultf3bfb852019-07-19 22:28:44 +0000448 ; GFX9-LABEL: name: gep_p6_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100449 ; GFX9: liveins: $sgpr0, $sgpr1
450 ; GFX9-NEXT: {{ $}}
451 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
452 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
Matt Arsenault3240ae72023-07-28 08:09:10 -0400453 ; GFX9-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY]], [[COPY1]], implicit-def dead $scc
Jay Foad8871c3c2022-06-27 12:15:25 +0100454 ; GFX9-NEXT: S_ENDPGM 0, implicit [[S_ADD_U32_]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400455 ;
Matt Arsenaultf3bfb852019-07-19 22:28:44 +0000456 ; GFX10-WAVE64-LABEL: name: gep_p6_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100457 ; GFX10-WAVE64: liveins: $sgpr0, $sgpr1
458 ; GFX10-WAVE64-NEXT: {{ $}}
459 ; GFX10-WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
460 ; GFX10-WAVE64-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
Matt Arsenault3240ae72023-07-28 08:09:10 -0400461 ; GFX10-WAVE64-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY]], [[COPY1]], implicit-def dead $scc
Jay Foad8871c3c2022-06-27 12:15:25 +0100462 ; GFX10-WAVE64-NEXT: S_ENDPGM 0, implicit [[S_ADD_U32_]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400463 ;
Matt Arsenaultf3bfb852019-07-19 22:28:44 +0000464 ; GFX10-WAVE32-LABEL: name: gep_p6_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100465 ; GFX10-WAVE32: liveins: $sgpr0, $sgpr1
466 ; GFX10-WAVE32-NEXT: {{ $}}
467 ; GFX10-WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
468 ; GFX10-WAVE32-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
Matt Arsenault3240ae72023-07-28 08:09:10 -0400469 ; GFX10-WAVE32-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY]], [[COPY1]], implicit-def dead $scc
Jay Foad8871c3c2022-06-27 12:15:25 +0100470 ; GFX10-WAVE32-NEXT: S_ENDPGM 0, implicit [[S_ADD_U32_]]
Matt Arsenaultf3bfb852019-07-19 22:28:44 +0000471 %0:sgpr(p6) = COPY $sgpr0
472 %1:sgpr(s32) = COPY $sgpr1
Daniel Sanderse74c5b92019-11-01 13:18:00 -0700473 %2:sgpr(p6) = G_PTR_ADD %0, %1
Matt Arsenaultf3bfb852019-07-19 22:28:44 +0000474 S_ENDPGM 0, implicit %2
475
476...
477
478---
479name: gep_p2_sgpr_sgpr
480legalized: true
481regBankSelected: true
482
483body: |
484 bb.0:
485 liveins: $sgpr0, $sgpr1
486 ; GFX6-LABEL: name: gep_p2_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100487 ; GFX6: liveins: $sgpr0, $sgpr1
488 ; GFX6-NEXT: {{ $}}
489 ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
490 ; GFX6-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
Matt Arsenault3240ae72023-07-28 08:09:10 -0400491 ; GFX6-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY]], [[COPY1]], implicit-def dead $scc
Jay Foad8871c3c2022-06-27 12:15:25 +0100492 ; GFX6-NEXT: S_ENDPGM 0, implicit [[S_ADD_U32_]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400493 ;
Matt Arsenaultf3bfb852019-07-19 22:28:44 +0000494 ; GFX8-LABEL: name: gep_p2_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100495 ; GFX8: liveins: $sgpr0, $sgpr1
496 ; GFX8-NEXT: {{ $}}
497 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
498 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
Matt Arsenault3240ae72023-07-28 08:09:10 -0400499 ; GFX8-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY]], [[COPY1]], implicit-def dead $scc
Jay Foad8871c3c2022-06-27 12:15:25 +0100500 ; GFX8-NEXT: S_ENDPGM 0, implicit [[S_ADD_U32_]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400501 ;
Matt Arsenaultf3bfb852019-07-19 22:28:44 +0000502 ; GFX9-LABEL: name: gep_p2_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100503 ; GFX9: liveins: $sgpr0, $sgpr1
504 ; GFX9-NEXT: {{ $}}
505 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
506 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
Matt Arsenault3240ae72023-07-28 08:09:10 -0400507 ; GFX9-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY]], [[COPY1]], implicit-def dead $scc
Jay Foad8871c3c2022-06-27 12:15:25 +0100508 ; GFX9-NEXT: S_ENDPGM 0, implicit [[S_ADD_U32_]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400509 ;
Matt Arsenaultf3bfb852019-07-19 22:28:44 +0000510 ; GFX10-WAVE64-LABEL: name: gep_p2_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100511 ; GFX10-WAVE64: liveins: $sgpr0, $sgpr1
512 ; GFX10-WAVE64-NEXT: {{ $}}
513 ; GFX10-WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
514 ; GFX10-WAVE64-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
Matt Arsenault3240ae72023-07-28 08:09:10 -0400515 ; GFX10-WAVE64-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY]], [[COPY1]], implicit-def dead $scc
Jay Foad8871c3c2022-06-27 12:15:25 +0100516 ; GFX10-WAVE64-NEXT: S_ENDPGM 0, implicit [[S_ADD_U32_]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400517 ;
Matt Arsenaultf3bfb852019-07-19 22:28:44 +0000518 ; GFX10-WAVE32-LABEL: name: gep_p2_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100519 ; GFX10-WAVE32: liveins: $sgpr0, $sgpr1
520 ; GFX10-WAVE32-NEXT: {{ $}}
521 ; GFX10-WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
522 ; GFX10-WAVE32-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
Matt Arsenault3240ae72023-07-28 08:09:10 -0400523 ; GFX10-WAVE32-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY]], [[COPY1]], implicit-def dead $scc
Jay Foad8871c3c2022-06-27 12:15:25 +0100524 ; GFX10-WAVE32-NEXT: S_ENDPGM 0, implicit [[S_ADD_U32_]]
Matt Arsenaultf3bfb852019-07-19 22:28:44 +0000525 %0:sgpr(p2) = COPY $sgpr0
526 %1:sgpr(s32) = COPY $sgpr1
Daniel Sanderse74c5b92019-11-01 13:18:00 -0700527 %2:sgpr(p2) = G_PTR_ADD %0, %1
Matt Arsenaultf3bfb852019-07-19 22:28:44 +0000528 S_ENDPGM 0, implicit %2
529
530...
Matt Arsenaultfd109302020-01-21 16:07:22 -0500531
532---
533name: gep_p999_sgpr_sgpr
534legalized: true
535regBankSelected: true
536
537body: |
538 bb.0:
539 liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
540 ; GFX6-LABEL: name: gep_p999_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100541 ; GFX6: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
542 ; GFX6-NEXT: {{ $}}
543 ; GFX6-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
544 ; GFX6-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3
545 ; GFX6-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
546 ; GFX6-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY1]].sub0
547 ; GFX6-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
548 ; GFX6-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY [[COPY1]].sub1
549 ; GFX6-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY2]], [[COPY3]], implicit-def $scc
Matt Arsenault3240ae72023-07-28 08:09:10 -0400550 ; GFX6-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY4]], [[COPY5]], implicit-def dead $scc, implicit $scc
Jay Foad8871c3c2022-06-27 12:15:25 +0100551 ; GFX6-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
552 ; GFX6-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400553 ;
Matt Arsenaultfd109302020-01-21 16:07:22 -0500554 ; GFX8-LABEL: name: gep_p999_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100555 ; GFX8: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
556 ; GFX8-NEXT: {{ $}}
557 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
558 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3
559 ; GFX8-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
560 ; GFX8-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY1]].sub0
561 ; GFX8-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
562 ; GFX8-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY [[COPY1]].sub1
563 ; GFX8-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY2]], [[COPY3]], implicit-def $scc
Matt Arsenault3240ae72023-07-28 08:09:10 -0400564 ; GFX8-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY4]], [[COPY5]], implicit-def dead $scc, implicit $scc
Jay Foad8871c3c2022-06-27 12:15:25 +0100565 ; GFX8-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
566 ; GFX8-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400567 ;
Matt Arsenaultfd109302020-01-21 16:07:22 -0500568 ; GFX9-LABEL: name: gep_p999_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100569 ; GFX9: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
570 ; GFX9-NEXT: {{ $}}
571 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
572 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3
573 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
574 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY1]].sub0
575 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
576 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY [[COPY1]].sub1
577 ; GFX9-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY2]], [[COPY3]], implicit-def $scc
Matt Arsenault3240ae72023-07-28 08:09:10 -0400578 ; GFX9-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY4]], [[COPY5]], implicit-def dead $scc, implicit $scc
Jay Foad8871c3c2022-06-27 12:15:25 +0100579 ; GFX9-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
580 ; GFX9-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400581 ;
Matt Arsenaultfd109302020-01-21 16:07:22 -0500582 ; GFX10-WAVE64-LABEL: name: gep_p999_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100583 ; GFX10-WAVE64: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
584 ; GFX10-WAVE64-NEXT: {{ $}}
585 ; GFX10-WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
586 ; GFX10-WAVE64-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3
587 ; GFX10-WAVE64-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
588 ; GFX10-WAVE64-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY1]].sub0
589 ; GFX10-WAVE64-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
590 ; GFX10-WAVE64-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY [[COPY1]].sub1
591 ; GFX10-WAVE64-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY2]], [[COPY3]], implicit-def $scc
Matt Arsenault3240ae72023-07-28 08:09:10 -0400592 ; GFX10-WAVE64-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY4]], [[COPY5]], implicit-def dead $scc, implicit $scc
Jay Foad8871c3c2022-06-27 12:15:25 +0100593 ; GFX10-WAVE64-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
594 ; GFX10-WAVE64-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400595 ;
Matt Arsenaultfd109302020-01-21 16:07:22 -0500596 ; GFX10-WAVE32-LABEL: name: gep_p999_sgpr_sgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100597 ; GFX10-WAVE32: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
598 ; GFX10-WAVE32-NEXT: {{ $}}
599 ; GFX10-WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
600 ; GFX10-WAVE32-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3
601 ; GFX10-WAVE32-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
602 ; GFX10-WAVE32-NEXT: [[COPY3:%[0-9]+]]:sreg_32 = COPY [[COPY1]].sub0
603 ; GFX10-WAVE32-NEXT: [[COPY4:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
604 ; GFX10-WAVE32-NEXT: [[COPY5:%[0-9]+]]:sreg_32 = COPY [[COPY1]].sub1
605 ; GFX10-WAVE32-NEXT: [[S_ADD_U32_:%[0-9]+]]:sreg_32 = S_ADD_U32 [[COPY2]], [[COPY3]], implicit-def $scc
Matt Arsenault3240ae72023-07-28 08:09:10 -0400606 ; GFX10-WAVE32-NEXT: [[S_ADDC_U32_:%[0-9]+]]:sreg_32 = S_ADDC_U32 [[COPY4]], [[COPY5]], implicit-def dead $scc, implicit $scc
Jay Foad8871c3c2022-06-27 12:15:25 +0100607 ; GFX10-WAVE32-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64_xexec = REG_SEQUENCE [[S_ADD_U32_]], %subreg.sub0, [[S_ADDC_U32_]], %subreg.sub1
608 ; GFX10-WAVE32-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenaultfd109302020-01-21 16:07:22 -0500609 %0:sgpr(p999) = COPY $sgpr0_sgpr1
610 %1:sgpr(s64) = COPY $sgpr2_sgpr3
611 %2:sgpr(p999) = G_PTR_ADD %0, %1
612 S_ENDPGM 0, implicit %2
613
614...
615
616---
617name: gep_p999_vgpr_vgpr
618legalized: true
619regBankSelected: true
620
621body: |
622 bb.0:
623 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
624 ; GFX6-LABEL: name: gep_p999_vgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100625 ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
626 ; GFX6-NEXT: {{ $}}
627 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
628 ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
629 ; GFX6-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
630 ; GFX6-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub0
631 ; GFX6-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
632 ; GFX6-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub1
633 ; GFX6-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY2]], [[COPY3]], 0, implicit $exec
Matt Arsenault3240ae72023-07-28 08:09:10 -0400634 ; GFX6-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec
635 ; GFX6-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, [[V_ADDC_U32_e64_]], %subreg.sub1
Jay Foad8871c3c2022-06-27 12:15:25 +0100636 ; GFX6-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400637 ;
Matt Arsenaultfd109302020-01-21 16:07:22 -0500638 ; GFX8-LABEL: name: gep_p999_vgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100639 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
640 ; GFX8-NEXT: {{ $}}
641 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
642 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
643 ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
644 ; GFX8-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub0
645 ; GFX8-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
646 ; GFX8-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub1
647 ; GFX8-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY2]], [[COPY3]], 0, implicit $exec
Matt Arsenault3240ae72023-07-28 08:09:10 -0400648 ; GFX8-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec
649 ; GFX8-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, [[V_ADDC_U32_e64_]], %subreg.sub1
Jay Foad8871c3c2022-06-27 12:15:25 +0100650 ; GFX8-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400651 ;
Matt Arsenaultfd109302020-01-21 16:07:22 -0500652 ; GFX9-LABEL: name: gep_p999_vgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100653 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
654 ; GFX9-NEXT: {{ $}}
655 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
656 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
657 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
658 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub0
659 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
660 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub1
661 ; GFX9-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY2]], [[COPY3]], 0, implicit $exec
Matt Arsenault3240ae72023-07-28 08:09:10 -0400662 ; GFX9-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec
663 ; GFX9-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, [[V_ADDC_U32_e64_]], %subreg.sub1
Jay Foad8871c3c2022-06-27 12:15:25 +0100664 ; GFX9-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400665 ;
Matt Arsenaultfd109302020-01-21 16:07:22 -0500666 ; GFX10-WAVE64-LABEL: name: gep_p999_vgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100667 ; GFX10-WAVE64: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
668 ; GFX10-WAVE64-NEXT: {{ $}}
669 ; GFX10-WAVE64-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
670 ; GFX10-WAVE64-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
671 ; GFX10-WAVE64-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
672 ; GFX10-WAVE64-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub0
673 ; GFX10-WAVE64-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
674 ; GFX10-WAVE64-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub1
675 ; GFX10-WAVE64-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY2]], [[COPY3]], 0, implicit $exec
Matt Arsenault3240ae72023-07-28 08:09:10 -0400676 ; GFX10-WAVE64-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec
677 ; GFX10-WAVE64-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, [[V_ADDC_U32_e64_]], %subreg.sub1
Jay Foad8871c3c2022-06-27 12:15:25 +0100678 ; GFX10-WAVE64-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenault3240ae72023-07-28 08:09:10 -0400679 ;
Matt Arsenaultfd109302020-01-21 16:07:22 -0500680 ; GFX10-WAVE32-LABEL: name: gep_p999_vgpr_vgpr
Jay Foad8871c3c2022-06-27 12:15:25 +0100681 ; GFX10-WAVE32: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
682 ; GFX10-WAVE32-NEXT: {{ $}}
683 ; GFX10-WAVE32-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
684 ; GFX10-WAVE32-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
685 ; GFX10-WAVE32-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
686 ; GFX10-WAVE32-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub0
687 ; GFX10-WAVE32-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
688 ; GFX10-WAVE32-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[COPY1]].sub1
689 ; GFX10-WAVE32-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 [[COPY2]], [[COPY3]], 0, implicit $exec
Matt Arsenault3240ae72023-07-28 08:09:10 -0400690 ; GFX10-WAVE32-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec
691 ; GFX10-WAVE32-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, [[V_ADDC_U32_e64_]], %subreg.sub1
Jay Foad8871c3c2022-06-27 12:15:25 +0100692 ; GFX10-WAVE32-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
Matt Arsenaultfd109302020-01-21 16:07:22 -0500693 %0:vgpr(p999) = COPY $vgpr0_vgpr1
694 %1:vgpr(s64) = COPY $vgpr2_vgpr3
695 %2:vgpr(p999) = G_PTR_ADD %0, %1
696 S_ENDPGM 0, implicit %2
697
698...