xref: /aosp_15_r20/external/llvm/test/CodeGen/AMDGPU/indirect-addressing-undef.mir (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker# RUN: llc -march=amdgcn -verify-machineinstrs -run-pass si-lower-control-flow -o - %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker# Getting an undef that is specifically a VGPR is tricky from IR
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker# CHECK-LABEL: name: extract_undef_offset_vgpr{{$}}
5*9880d681SAndroid Build Coastguard Worker# CHECK: bb.1:
6*9880d681SAndroid Build Coastguard Worker# CHECK: successors: %bb.2(0x40000000 / 0x80000000 = 50.00%), %bb.1(0x40000000 / 0x80000000 = 50.00%)
7*9880d681SAndroid Build Coastguard Worker# CHECK: liveins: %vgpr0_vgpr1_vgpr2_vgpr3{{$}}
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Worker# CHECK: V_READFIRSTLANE_B32 undef %vgpr10, implicit %exec
10*9880d681SAndroid Build Coastguard Worker# CHECK: %vgpr0 = V_MOVRELS_B32_e32 %vgpr0, implicit %m0, implicit %exec, implicit %vgpr0_vgpr1_vgpr2_vgpr3
11*9880d681SAndroid Build Coastguard Worker# CHECK: S_CBRANCH_EXECNZ %bb.1, implicit %exec
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker# CHECK: bb.2:
14*9880d681SAndroid Build Coastguard Worker# CHECK: liveins: %sgpr6_sgpr7, %sgpr4_sgpr5_sgpr6_sgpr7, %sgpr4, %sgpr5, %sgpr6, %sgpr7, %sgpr4_sgpr5, %vgpr0_vgpr1_vgpr2_vgpr3, %vgpr0, %vgpr1, %vgpr2, %vgpr3, %vgpr0_vgpr1, %vgpr2_vgpr3, %vgpr0_vgpr1_vgpr2, %vgpr1_vgpr2, %vgpr1_vgpr2_vgpr3, %sgpr0_sgpr1, %sgpr0, %sgpr1{{$}}
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker--- |
18*9880d681SAndroid Build Coastguard Worker  target datalayout = "e-p:32:32-p1:64:64-p2:64:64-p3:32:32-p4:64:64-p5:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64"
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Worker  define void @extract_undef_offset_vgpr(i32 addrspace(1)* %out, <4 x i32> addrspace(1)* %in) {
21*9880d681SAndroid Build Coastguard Worker  entry:
22*9880d681SAndroid Build Coastguard Worker    %ld = load volatile <4 x i32>, <4 x i32> addrspace(1)* %in
23*9880d681SAndroid Build Coastguard Worker    %value = extractelement <4 x i32> %ld, i32 undef
24*9880d681SAndroid Build Coastguard Worker    store i32 %value, i32 addrspace(1)* %out
25*9880d681SAndroid Build Coastguard Worker    ret void
26*9880d681SAndroid Build Coastguard Worker  }
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Worker  define void @extract_undef_neg_offset_vgpr(i32 addrspace(1)* %out, <4 x i32> addrspace(1)* %in) {
29*9880d681SAndroid Build Coastguard Worker  entry:
30*9880d681SAndroid Build Coastguard Worker    %ld = load volatile <4 x i32>, <4 x i32> addrspace(1)* %in
31*9880d681SAndroid Build Coastguard Worker    %value = extractelement <4 x i32> %ld, i32 undef
32*9880d681SAndroid Build Coastguard Worker    store i32 %value, i32 addrspace(1)* %out
33*9880d681SAndroid Build Coastguard Worker    ret void
34*9880d681SAndroid Build Coastguard Worker  }
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Worker  define void @insert_undef_offset_vgpr(<4 x i32> addrspace(1)* %out, <4 x i32> addrspace(1)* %in) {
37*9880d681SAndroid Build Coastguard Worker  entry:
38*9880d681SAndroid Build Coastguard Worker    %ld = load <4 x i32>, <4 x i32> addrspace(1)* %in
39*9880d681SAndroid Build Coastguard Worker    %value = insertelement <4 x i32> %ld, i32 5, i32 undef
40*9880d681SAndroid Build Coastguard Worker    store <4 x i32> %value, <4 x i32> addrspace(1)* %out
41*9880d681SAndroid Build Coastguard Worker    ret void
42*9880d681SAndroid Build Coastguard Worker  }
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Worker  define void @insert_undef_neg_offset_vgpr(<4 x i32> addrspace(1)* %out, <4 x i32> addrspace(1)* %in) {
45*9880d681SAndroid Build Coastguard Worker  entry:
46*9880d681SAndroid Build Coastguard Worker    %ld = load <4 x i32>, <4 x i32> addrspace(1)* %in
47*9880d681SAndroid Build Coastguard Worker    %value = insertelement <4 x i32> %ld, i32 5, i32 undef
48*9880d681SAndroid Build Coastguard Worker    store <4 x i32> %value, <4 x i32> addrspace(1)* %out
49*9880d681SAndroid Build Coastguard Worker    ret void
50*9880d681SAndroid Build Coastguard Worker  }
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Worker  define void @insert_undef_value_offset_vgpr(<4 x i32> addrspace(1)*%out, <4 x i32> addrspace(1)* %in, i32 %idx) {
53*9880d681SAndroid Build Coastguard Worker  entry:
54*9880d681SAndroid Build Coastguard Worker    %ld = load <4 x i32>, <4 x i32> addrspace(1)* %in
55*9880d681SAndroid Build Coastguard Worker    %value = insertelement <4 x i32> %ld, i32 undef, i32 %idx
56*9880d681SAndroid Build Coastguard Worker    store <4 x i32> %value, <4 x i32> addrspace(1)* %out
57*9880d681SAndroid Build Coastguard Worker    ret void
58*9880d681SAndroid Build Coastguard Worker  }
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Worker...
61*9880d681SAndroid Build Coastguard Worker---
62*9880d681SAndroid Build Coastguard Workername:            extract_undef_offset_vgpr
63*9880d681SAndroid Build Coastguard Workeralignment:       0
64*9880d681SAndroid Build Coastguard WorkerexposesReturnsTwice: false
65*9880d681SAndroid Build Coastguard WorkerhasInlineAsm:    false
66*9880d681SAndroid Build Coastguard WorkerallVRegsAllocated: true
67*9880d681SAndroid Build Coastguard WorkerisSSA:           false
68*9880d681SAndroid Build Coastguard WorkertracksRegLiveness: true
69*9880d681SAndroid Build Coastguard WorkertracksSubRegLiveness: true
70*9880d681SAndroid Build Coastguard Workerliveins:
71*9880d681SAndroid Build Coastguard Worker  - { reg: '%sgpr0_sgpr1' }
72*9880d681SAndroid Build Coastguard WorkerframeInfo:
73*9880d681SAndroid Build Coastguard Worker  isFrameAddressTaken: false
74*9880d681SAndroid Build Coastguard Worker  isReturnAddressTaken: false
75*9880d681SAndroid Build Coastguard Worker  hasStackMap:     false
76*9880d681SAndroid Build Coastguard Worker  hasPatchPoint:   false
77*9880d681SAndroid Build Coastguard Worker  stackSize:       0
78*9880d681SAndroid Build Coastguard Worker  offsetAdjustment: 0
79*9880d681SAndroid Build Coastguard Worker  maxAlignment:    0
80*9880d681SAndroid Build Coastguard Worker  adjustsStack:    false
81*9880d681SAndroid Build Coastguard Worker  hasCalls:        false
82*9880d681SAndroid Build Coastguard Worker  maxCallFrameSize: 0
83*9880d681SAndroid Build Coastguard Worker  hasOpaqueSPAdjustment: false
84*9880d681SAndroid Build Coastguard Worker  hasVAStart:      false
85*9880d681SAndroid Build Coastguard Worker  hasMustTailInVarArgFunc: false
86*9880d681SAndroid Build Coastguard Workerbody:             |
87*9880d681SAndroid Build Coastguard Worker  bb.0.entry:
88*9880d681SAndroid Build Coastguard Worker    liveins: %sgpr0_sgpr1
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Worker    %sgpr4_sgpr5 = S_LOAD_DWORDX2_IMM %sgpr0_sgpr1, 11
91*9880d681SAndroid Build Coastguard Worker    %sgpr7 = S_MOV_B32 61440
92*9880d681SAndroid Build Coastguard Worker    %sgpr6 = S_MOV_B32 -1
93*9880d681SAndroid Build Coastguard Worker    S_WAITCNT 127
94*9880d681SAndroid Build Coastguard Worker    %vgpr0_vgpr1_vgpr2_vgpr3 = BUFFER_LOAD_DWORDX4_OFFSET %sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, 0, implicit %exec
95*9880d681SAndroid Build Coastguard Worker    %sgpr4_sgpr5 = S_LOAD_DWORDX2_IMM killed %sgpr0_sgpr1, 9
96*9880d681SAndroid Build Coastguard Worker    S_WAITCNT 3952
97*9880d681SAndroid Build Coastguard Worker    %vgpr0, dead %sgpr0_sgpr1 = SI_INDIRECT_SRC_V4 killed %vgpr0_vgpr1_vgpr2_vgpr3, undef %vgpr10, 0, implicit-def dead %exec, implicit-def dead %vcc, implicit-def dead %m0, implicit %exec
98*9880d681SAndroid Build Coastguard Worker    S_WAITCNT 127
99*9880d681SAndroid Build Coastguard Worker    BUFFER_STORE_DWORD_OFFSET killed %vgpr0, killed %sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, 0, implicit %exec
100*9880d681SAndroid Build Coastguard Worker    S_ENDPGM
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Worker...
103*9880d681SAndroid Build Coastguard Worker
104*9880d681SAndroid Build Coastguard Worker# CHECK-LABEL: name: extract_undef_neg_offset_vgpr{{$}}
105*9880d681SAndroid Build Coastguard Worker# CHECK: bb.1:
106*9880d681SAndroid Build Coastguard Worker# CHECK: successors: %bb.2(0x40000000 / 0x80000000 = 50.00%), %bb.1(0x40000000 / 0x80000000 = 50.00%)
107*9880d681SAndroid Build Coastguard Worker# CHECK: liveins: %vgpr0_vgpr1_vgpr2_vgpr3{{$}}
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Worker# CHECK: %vcc_lo = V_READFIRSTLANE_B32 undef %vgpr10, implicit %exec
110*9880d681SAndroid Build Coastguard Worker# CHECK: %m0 = S_MOV_B32 %vcc_lo
111*9880d681SAndroid Build Coastguard Worker# CHECK: %m0 = S_ADD_I32 %m0, -7, implicit-def %scc
112*9880d681SAndroid Build Coastguard Worker# CHECK: %vgpr0 = V_MOVRELS_B32_e32 %vgpr0, implicit %m0, implicit %exec, implicit %vgpr0_vgpr1_vgpr2_vgpr3
113*9880d681SAndroid Build Coastguard Worker# CHECK: S_CBRANCH_EXECNZ %bb.1, implicit %exec
114*9880d681SAndroid Build Coastguard Worker
115*9880d681SAndroid Build Coastguard Worker# CHECK: bb.2:
116*9880d681SAndroid Build Coastguard Worker# CHECK: liveins: %sgpr6_sgpr7, %sgpr4_sgpr5_sgpr6_sgpr7, %sgpr4, %sgpr5, %sgpr6, %sgpr7, %sgpr4_sgpr5, %vgpr0_vgpr1_vgpr2_vgpr3, %vgpr0, %vgpr1, %vgpr2, %vgpr3, %vgpr0_vgpr1, %vgpr2_vgpr3, %vgpr0_vgpr1_vgpr2, %vgpr1_vgpr2, %vgpr1_vgpr2_vgpr3, %sgpr0_sgpr1, %sgpr0, %sgpr1
117*9880d681SAndroid Build Coastguard Worker
118*9880d681SAndroid Build Coastguard Workername:            extract_undef_neg_offset_vgpr
119*9880d681SAndroid Build Coastguard Workeralignment:       0
120*9880d681SAndroid Build Coastguard WorkerexposesReturnsTwice: false
121*9880d681SAndroid Build Coastguard WorkerhasInlineAsm:    false
122*9880d681SAndroid Build Coastguard WorkerallVRegsAllocated: true
123*9880d681SAndroid Build Coastguard WorkerisSSA:           false
124*9880d681SAndroid Build Coastguard WorkertracksRegLiveness: true
125*9880d681SAndroid Build Coastguard WorkertracksSubRegLiveness: true
126*9880d681SAndroid Build Coastguard Workerliveins:
127*9880d681SAndroid Build Coastguard Worker  - { reg: '%sgpr0_sgpr1' }
128*9880d681SAndroid Build Coastguard WorkerframeInfo:
129*9880d681SAndroid Build Coastguard Worker  isFrameAddressTaken: false
130*9880d681SAndroid Build Coastguard Worker  isReturnAddressTaken: false
131*9880d681SAndroid Build Coastguard Worker  hasStackMap:     false
132*9880d681SAndroid Build Coastguard Worker  hasPatchPoint:   false
133*9880d681SAndroid Build Coastguard Worker  stackSize:       0
134*9880d681SAndroid Build Coastguard Worker  offsetAdjustment: 0
135*9880d681SAndroid Build Coastguard Worker  maxAlignment:    0
136*9880d681SAndroid Build Coastguard Worker  adjustsStack:    false
137*9880d681SAndroid Build Coastguard Worker  hasCalls:        false
138*9880d681SAndroid Build Coastguard Worker  maxCallFrameSize: 0
139*9880d681SAndroid Build Coastguard Worker  hasOpaqueSPAdjustment: false
140*9880d681SAndroid Build Coastguard Worker  hasVAStart:      false
141*9880d681SAndroid Build Coastguard Worker  hasMustTailInVarArgFunc: false
142*9880d681SAndroid Build Coastguard Workerbody:             |
143*9880d681SAndroid Build Coastguard Worker  bb.0.entry:
144*9880d681SAndroid Build Coastguard Worker    liveins: %sgpr0_sgpr1
145*9880d681SAndroid Build Coastguard Worker
146*9880d681SAndroid Build Coastguard Worker    %sgpr4_sgpr5 = S_LOAD_DWORDX2_IMM %sgpr0_sgpr1, 11
147*9880d681SAndroid Build Coastguard Worker    %sgpr7 = S_MOV_B32 61440
148*9880d681SAndroid Build Coastguard Worker    %sgpr6 = S_MOV_B32 -1
149*9880d681SAndroid Build Coastguard Worker    S_WAITCNT 127
150*9880d681SAndroid Build Coastguard Worker    %vgpr0_vgpr1_vgpr2_vgpr3 = BUFFER_LOAD_DWORDX4_OFFSET %sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, 0, implicit %exec
151*9880d681SAndroid Build Coastguard Worker    %sgpr4_sgpr5 = S_LOAD_DWORDX2_IMM killed %sgpr0_sgpr1, 9
152*9880d681SAndroid Build Coastguard Worker    S_WAITCNT 3952
153*9880d681SAndroid Build Coastguard Worker    %vgpr0, dead %sgpr0_sgpr1 = SI_INDIRECT_SRC_V4 killed %vgpr0_vgpr1_vgpr2_vgpr3, undef %vgpr10, -7, implicit-def dead %exec, implicit-def dead %vcc, implicit-def dead %m0, implicit %exec
154*9880d681SAndroid Build Coastguard Worker    S_WAITCNT 127
155*9880d681SAndroid Build Coastguard Worker    BUFFER_STORE_DWORD_OFFSET killed %vgpr0, killed %sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, 0, implicit %exec
156*9880d681SAndroid Build Coastguard Worker    S_ENDPGM
157*9880d681SAndroid Build Coastguard Worker
158*9880d681SAndroid Build Coastguard Worker...
159*9880d681SAndroid Build Coastguard Worker
160*9880d681SAndroid Build Coastguard Worker# CHECK-LABEL: name: insert_undef_offset_vgpr{{$}}
161*9880d681SAndroid Build Coastguard Worker# CHECK: bb.1:
162*9880d681SAndroid Build Coastguard Worker# CHECK: successors: %bb.2(0x40000000 / 0x80000000 = 50.00%), %bb.1(0x40000000 / 0x80000000 = 50.00%)
163*9880d681SAndroid Build Coastguard Worker# CHECK: liveins: %vgpr4, %vgpr0_vgpr1_vgpr2_vgpr3{{$}}
164*9880d681SAndroid Build Coastguard Worker
165*9880d681SAndroid Build Coastguard Worker# CHECK: %vcc_lo = V_READFIRSTLANE_B32 undef %vgpr10, implicit %exec
166*9880d681SAndroid Build Coastguard Worker# CHECK: %m0 = S_MOV_B32 %vcc_lo
167*9880d681SAndroid Build Coastguard Worker# CHECK: %vgpr0 = V_MOVRELD_B32_e32 %vgpr4, implicit %m0, implicit %exec, implicit %vgpr0_vgpr1_vgpr2_vgpr3
168*9880d681SAndroid Build Coastguard Worker# CHECK: S_CBRANCH_EXECNZ %bb.1, implicit %exec
169*9880d681SAndroid Build Coastguard Worker
170*9880d681SAndroid Build Coastguard Worker# CHECK: bb.2:
171*9880d681SAndroid Build Coastguard Worker# CHECK: liveins: %sgpr6_sgpr7, %sgpr7, %sgpr4_sgpr5, %sgpr5, %sgpr4_sgpr5_sgpr6_sgpr7, %sgpr6, %sgpr4, %vgpr0_vgpr1_vgpr2_vgpr3, %vgpr0, %vgpr1, %vgpr2, %vgpr3, %vgpr0_vgpr1, %vgpr2_vgpr3, %vgpr0_vgpr1_vgpr2, %vgpr1_vgpr2, %vgpr1_vgpr2_vgpr3, %vgpr4, %sgpr0_sgpr1, %sgpr0, %sgpr1
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Workername:            insert_undef_offset_vgpr
174*9880d681SAndroid Build Coastguard Workeralignment:       0
175*9880d681SAndroid Build Coastguard WorkerexposesReturnsTwice: false
176*9880d681SAndroid Build Coastguard WorkerhasInlineAsm:    false
177*9880d681SAndroid Build Coastguard WorkerallVRegsAllocated: true
178*9880d681SAndroid Build Coastguard WorkerisSSA:           false
179*9880d681SAndroid Build Coastguard WorkertracksRegLiveness: true
180*9880d681SAndroid Build Coastguard WorkertracksSubRegLiveness: true
181*9880d681SAndroid Build Coastguard Workerliveins:
182*9880d681SAndroid Build Coastguard Worker  - { reg: '%sgpr0_sgpr1' }
183*9880d681SAndroid Build Coastguard WorkerframeInfo:
184*9880d681SAndroid Build Coastguard Worker  isFrameAddressTaken: false
185*9880d681SAndroid Build Coastguard Worker  isReturnAddressTaken: false
186*9880d681SAndroid Build Coastguard Worker  hasStackMap:     false
187*9880d681SAndroid Build Coastguard Worker  hasPatchPoint:   false
188*9880d681SAndroid Build Coastguard Worker  stackSize:       0
189*9880d681SAndroid Build Coastguard Worker  offsetAdjustment: 0
190*9880d681SAndroid Build Coastguard Worker  maxAlignment:    0
191*9880d681SAndroid Build Coastguard Worker  adjustsStack:    false
192*9880d681SAndroid Build Coastguard Worker  hasCalls:        false
193*9880d681SAndroid Build Coastguard Worker  maxCallFrameSize: 0
194*9880d681SAndroid Build Coastguard Worker  hasOpaqueSPAdjustment: false
195*9880d681SAndroid Build Coastguard Worker  hasVAStart:      false
196*9880d681SAndroid Build Coastguard Worker  hasMustTailInVarArgFunc: false
197*9880d681SAndroid Build Coastguard Workerbody:             |
198*9880d681SAndroid Build Coastguard Worker  bb.0.entry:
199*9880d681SAndroid Build Coastguard Worker    liveins: %sgpr0_sgpr1
200*9880d681SAndroid Build Coastguard Worker
201*9880d681SAndroid Build Coastguard Worker    %sgpr4_sgpr5 = S_LOAD_DWORDX2_IMM %sgpr0_sgpr1, 11 :: (non-temporal invariant load 8 from `i64 addrspace(2)* undef`)
202*9880d681SAndroid Build Coastguard Worker    %sgpr7 = S_MOV_B32 61440
203*9880d681SAndroid Build Coastguard Worker    %sgpr6 = S_MOV_B32 -1
204*9880d681SAndroid Build Coastguard Worker    %vgpr4 = V_MOV_B32_e32 5, implicit %exec
205*9880d681SAndroid Build Coastguard Worker    S_WAITCNT 127
206*9880d681SAndroid Build Coastguard Worker    %vgpr0_vgpr1_vgpr2_vgpr3 = BUFFER_LOAD_DWORDX4_OFFSET %sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, 0, implicit %exec :: (load 16 from %ir.in)
207*9880d681SAndroid Build Coastguard Worker    %sgpr4_sgpr5 = S_LOAD_DWORDX2_IMM killed %sgpr0_sgpr1, 9 :: (non-temporal invariant load 8 from `i64 addrspace(2)* undef`)
208*9880d681SAndroid Build Coastguard Worker    S_WAITCNT 3952
209*9880d681SAndroid Build Coastguard Worker    %vgpr0_vgpr1_vgpr2_vgpr3, dead %sgpr0_sgpr1 = SI_INDIRECT_DST_V4 %vgpr0_vgpr1_vgpr2_vgpr3, undef %vgpr10, 0, killed %vgpr4, implicit-def dead %exec, implicit-def dead %vcc, implicit-def dead %m0, implicit %exec
210*9880d681SAndroid Build Coastguard Worker    S_WAITCNT 127
211*9880d681SAndroid Build Coastguard Worker    BUFFER_STORE_DWORDX4_OFFSET killed %vgpr0_vgpr1_vgpr2_vgpr3, killed %sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, 0, implicit %exec :: (store 16 into %ir.out)
212*9880d681SAndroid Build Coastguard Worker    S_ENDPGM
213*9880d681SAndroid Build Coastguard Worker
214*9880d681SAndroid Build Coastguard Worker...
215*9880d681SAndroid Build Coastguard Worker
216*9880d681SAndroid Build Coastguard Worker# CHECK-LABEL: name: insert_undef_neg_offset_vgpr{{$}}
217*9880d681SAndroid Build Coastguard Worker# CHECK: bb.1:
218*9880d681SAndroid Build Coastguard Worker# CHECK: successors: %bb.2(0x40000000 / 0x80000000 = 50.00%), %bb.1(0x40000000 / 0x80000000 = 50.00%)
219*9880d681SAndroid Build Coastguard Worker# CHECK: liveins: %vgpr4, %vgpr0_vgpr1_vgpr2_vgpr3{{$}}
220*9880d681SAndroid Build Coastguard Worker
221*9880d681SAndroid Build Coastguard Worker# CHECK: %vcc_lo = V_READFIRSTLANE_B32 undef %vgpr10, implicit %exec
222*9880d681SAndroid Build Coastguard Worker# CHECK: %m0 = S_MOV_B32 %vcc_lo
223*9880d681SAndroid Build Coastguard Worker# CHECK: %m0 = S_ADD_I32 %m0, -7, implicit-def %scc
224*9880d681SAndroid Build Coastguard Worker# CHECK: %vgpr0 = V_MOVRELD_B32_e32 %vgpr4, implicit %m0, implicit %exec, implicit %vgpr0_vgpr1_vgpr2_vgpr3
225*9880d681SAndroid Build Coastguard Worker# CHECK: S_CBRANCH_EXECNZ %bb.1, implicit %exec
226*9880d681SAndroid Build Coastguard Worker
227*9880d681SAndroid Build Coastguard Worker# CHECK: bb.2:
228*9880d681SAndroid Build Coastguard Worker# CHECK: liveins: %sgpr6_sgpr7, %sgpr7, %sgpr4_sgpr5, %sgpr5, %sgpr4_sgpr5_sgpr6_sgpr7, %sgpr6, %sgpr4, %vgpr0_vgpr1_vgpr2_vgpr3, %vgpr0, %vgpr1, %vgpr2, %vgpr3, %vgpr0_vgpr1, %vgpr2_vgpr3, %vgpr0_vgpr1_vgpr2, %vgpr1_vgpr2, %vgpr1_vgpr2_vgpr3, %vgpr4, %sgpr0_sgpr1, %sgpr0, %sgpr1{{$}}
229*9880d681SAndroid Build Coastguard Worker
230*9880d681SAndroid Build Coastguard Workername:            insert_undef_neg_offset_vgpr
231*9880d681SAndroid Build Coastguard Workeralignment:       0
232*9880d681SAndroid Build Coastguard WorkerexposesReturnsTwice: false
233*9880d681SAndroid Build Coastguard WorkerhasInlineAsm:    false
234*9880d681SAndroid Build Coastguard WorkerallVRegsAllocated: true
235*9880d681SAndroid Build Coastguard WorkerisSSA:           false
236*9880d681SAndroid Build Coastguard WorkertracksRegLiveness: true
237*9880d681SAndroid Build Coastguard WorkertracksSubRegLiveness: true
238*9880d681SAndroid Build Coastguard Workerliveins:
239*9880d681SAndroid Build Coastguard Worker  - { reg: '%sgpr0_sgpr1' }
240*9880d681SAndroid Build Coastguard WorkerframeInfo:
241*9880d681SAndroid Build Coastguard Worker  isFrameAddressTaken: false
242*9880d681SAndroid Build Coastguard Worker  isReturnAddressTaken: false
243*9880d681SAndroid Build Coastguard Worker  hasStackMap:     false
244*9880d681SAndroid Build Coastguard Worker  hasPatchPoint:   false
245*9880d681SAndroid Build Coastguard Worker  stackSize:       0
246*9880d681SAndroid Build Coastguard Worker  offsetAdjustment: 0
247*9880d681SAndroid Build Coastguard Worker  maxAlignment:    0
248*9880d681SAndroid Build Coastguard Worker  adjustsStack:    false
249*9880d681SAndroid Build Coastguard Worker  hasCalls:        false
250*9880d681SAndroid Build Coastguard Worker  maxCallFrameSize: 0
251*9880d681SAndroid Build Coastguard Worker  hasOpaqueSPAdjustment: false
252*9880d681SAndroid Build Coastguard Worker  hasVAStart:      false
253*9880d681SAndroid Build Coastguard Worker  hasMustTailInVarArgFunc: false
254*9880d681SAndroid Build Coastguard Workerbody:             |
255*9880d681SAndroid Build Coastguard Worker  bb.0.entry:
256*9880d681SAndroid Build Coastguard Worker    liveins: %sgpr0_sgpr1
257*9880d681SAndroid Build Coastguard Worker
258*9880d681SAndroid Build Coastguard Worker    %sgpr4_sgpr5 = S_LOAD_DWORDX2_IMM %sgpr0_sgpr1, 11 :: (non-temporal invariant load 8 from `i64 addrspace(2)* undef`)
259*9880d681SAndroid Build Coastguard Worker    %sgpr7 = S_MOV_B32 61440
260*9880d681SAndroid Build Coastguard Worker    %sgpr6 = S_MOV_B32 -1
261*9880d681SAndroid Build Coastguard Worker    %vgpr4 = V_MOV_B32_e32 5, implicit %exec
262*9880d681SAndroid Build Coastguard Worker    S_WAITCNT 127
263*9880d681SAndroid Build Coastguard Worker    %vgpr0_vgpr1_vgpr2_vgpr3 = BUFFER_LOAD_DWORDX4_OFFSET %sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, 0, implicit %exec :: (load 16 from %ir.in)
264*9880d681SAndroid Build Coastguard Worker    %sgpr4_sgpr5 = S_LOAD_DWORDX2_IMM killed %sgpr0_sgpr1, 9 :: (non-temporal invariant load 8 from `i64 addrspace(2)* undef`)
265*9880d681SAndroid Build Coastguard Worker    S_WAITCNT 3952
266*9880d681SAndroid Build Coastguard Worker    %vgpr0_vgpr1_vgpr2_vgpr3, dead %sgpr0_sgpr1 = SI_INDIRECT_DST_V4 %vgpr0_vgpr1_vgpr2_vgpr3, undef %vgpr10, -7, killed %vgpr4, implicit-def dead %exec, implicit-def dead %vcc, implicit-def dead %m0, implicit %exec
267*9880d681SAndroid Build Coastguard Worker    S_WAITCNT 127
268*9880d681SAndroid Build Coastguard Worker    BUFFER_STORE_DWORDX4_OFFSET killed %vgpr0_vgpr1_vgpr2_vgpr3, killed %sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, 0, implicit %exec :: (store 16 into %ir.out)
269*9880d681SAndroid Build Coastguard Worker    S_ENDPGM
270*9880d681SAndroid Build Coastguard Worker
271*9880d681SAndroid Build Coastguard Worker...
272*9880d681SAndroid Build Coastguard Worker
273*9880d681SAndroid Build Coastguard Worker# CHECK-LABEL: insert_undef_value_offset_vgpr{{$}}
274*9880d681SAndroid Build Coastguard Worker# CHECK: bb.1:
275*9880d681SAndroid Build Coastguard Worker# CHECK: successors: %bb.2(0x40000000 / 0x80000000 = 50.00%), %bb.1(0x40000000 / 0x80000000 = 50.00%)
276*9880d681SAndroid Build Coastguard Worker# CHECK: liveins: %vgpr4, %vgpr0_vgpr1_vgpr2_vgpr3{{$}}
277*9880d681SAndroid Build Coastguard Worker
278*9880d681SAndroid Build Coastguard Worker# CHECK: %vcc_lo = V_READFIRSTLANE_B32 %vgpr4, implicit %exec
279*9880d681SAndroid Build Coastguard Worker# CHECK: %m0 = S_MOV_B32 %vcc_lo
280*9880d681SAndroid Build Coastguard Worker# CHECK: %vgpr0 = V_MOVRELD_B32_e32 undef %vgpr10, implicit %m0, implicit %exec, implicit %vgpr0_vgpr1_vgpr2_vgpr3
281*9880d681SAndroid Build Coastguard Worker# CHECK: S_CBRANCH_EXECNZ %bb.1, implicit %exec
282*9880d681SAndroid Build Coastguard Worker
283*9880d681SAndroid Build Coastguard Worker# CHECK: bb.2:
284*9880d681SAndroid Build Coastguard Worker# CHECK: liveins: %sgpr6_sgpr7, %sgpr7, %sgpr4_sgpr5, %sgpr5, %sgpr4_sgpr5_sgpr6_sgpr7, %sgpr6, %sgpr4, %vgpr0_vgpr1_vgpr2_vgpr3, %vgpr0, %vgpr1, %vgpr2, %vgpr3, %vgpr0_vgpr1, %vgpr2_vgpr3, %vgpr0_vgpr1_vgpr2, %vgpr1_vgpr2, %vgpr1_vgpr2_vgpr3, %vgpr4, %sgpr0_sgpr1, %sgpr0, %sgpr1{{$}}
285*9880d681SAndroid Build Coastguard Worker
286*9880d681SAndroid Build Coastguard Workername:            insert_undef_value_offset_vgpr
287*9880d681SAndroid Build Coastguard Workeralignment:       0
288*9880d681SAndroid Build Coastguard WorkerexposesReturnsTwice: false
289*9880d681SAndroid Build Coastguard WorkerhasInlineAsm:    false
290*9880d681SAndroid Build Coastguard WorkerallVRegsAllocated: true
291*9880d681SAndroid Build Coastguard WorkerisSSA:           false
292*9880d681SAndroid Build Coastguard WorkertracksRegLiveness: true
293*9880d681SAndroid Build Coastguard WorkertracksSubRegLiveness: true
294*9880d681SAndroid Build Coastguard Workerliveins:
295*9880d681SAndroid Build Coastguard Worker  - { reg: '%sgpr0_sgpr1' }
296*9880d681SAndroid Build Coastguard WorkerframeInfo:
297*9880d681SAndroid Build Coastguard Worker  isFrameAddressTaken: false
298*9880d681SAndroid Build Coastguard Worker  isReturnAddressTaken: false
299*9880d681SAndroid Build Coastguard Worker  hasStackMap:     false
300*9880d681SAndroid Build Coastguard Worker  hasPatchPoint:   false
301*9880d681SAndroid Build Coastguard Worker  stackSize:       0
302*9880d681SAndroid Build Coastguard Worker  offsetAdjustment: 0
303*9880d681SAndroid Build Coastguard Worker  maxAlignment:    0
304*9880d681SAndroid Build Coastguard Worker  adjustsStack:    false
305*9880d681SAndroid Build Coastguard Worker  hasCalls:        false
306*9880d681SAndroid Build Coastguard Worker  maxCallFrameSize: 0
307*9880d681SAndroid Build Coastguard Worker  hasOpaqueSPAdjustment: false
308*9880d681SAndroid Build Coastguard Worker  hasVAStart:      false
309*9880d681SAndroid Build Coastguard Worker  hasMustTailInVarArgFunc: false
310*9880d681SAndroid Build Coastguard Workerbody:             |
311*9880d681SAndroid Build Coastguard Worker  bb.0.entry:
312*9880d681SAndroid Build Coastguard Worker    liveins: %sgpr0_sgpr1
313*9880d681SAndroid Build Coastguard Worker
314*9880d681SAndroid Build Coastguard Worker    %sgpr4_sgpr5 = S_LOAD_DWORDX2_IMM %sgpr0_sgpr1, 11 :: (non-temporal invariant load 8 from `i64 addrspace(2)* undef`)
315*9880d681SAndroid Build Coastguard Worker    %sgpr7 = S_MOV_B32 61440
316*9880d681SAndroid Build Coastguard Worker    %sgpr6 = S_MOV_B32 -1
317*9880d681SAndroid Build Coastguard Worker    %vgpr4 = V_MOV_B32_e32 2, implicit %exec
318*9880d681SAndroid Build Coastguard Worker    S_WAITCNT 127
319*9880d681SAndroid Build Coastguard Worker    %vgpr0_vgpr1_vgpr2_vgpr3 = BUFFER_LOAD_DWORDX4_OFFSET %sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, 0, implicit %exec :: (load 16 from %ir.in)
320*9880d681SAndroid Build Coastguard Worker    %sgpr4_sgpr5 = S_LOAD_DWORDX2_IMM killed %sgpr0_sgpr1, 9 :: (non-temporal invariant load 8 from `i64 addrspace(2)* undef`)
321*9880d681SAndroid Build Coastguard Worker    S_WAITCNT 3952
322*9880d681SAndroid Build Coastguard Worker    %vgpr0_vgpr1_vgpr2_vgpr3, dead %sgpr0_sgpr1 = SI_INDIRECT_DST_V4 %vgpr0_vgpr1_vgpr2_vgpr3, killed %vgpr4, 0, undef %vgpr10, implicit-def dead %exec, implicit-def dead %vcc, implicit-def dead %m0, implicit %exec
323*9880d681SAndroid Build Coastguard Worker    S_WAITCNT 127
324*9880d681SAndroid Build Coastguard Worker    BUFFER_STORE_DWORDX4_OFFSET killed %vgpr0_vgpr1_vgpr2_vgpr3, killed %sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, 0, implicit %exec :: (store 16 into %ir.out)
325*9880d681SAndroid Build Coastguard Worker    S_ENDPGM
326*9880d681SAndroid Build Coastguard Worker
327*9880d681SAndroid Build Coastguard Worker...
328