annotate llvm/test/CodeGen/AMDGPU/sdwa-scalar-ops.mir @ 266:00f31e85ec16 default tip

Added tag current for changeset 31d058e83c98
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Oct 2023 10:13:55 +0900
parents 5f17cb93ff66
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 # RUN: llc -march=amdgcn -mcpu=fiji -start-before si-peephole-sdwa -o - %s | FileCheck -check-prefix=VI -check-prefix=GCN %s
anatofuz
parents:
diff changeset
2 # RUN: llc -march=amdgcn -mcpu=gfx900 -start-before si-peephole-sdwa -o - %s | FileCheck -check-prefix=GFX9 -check-prefix=GCN %s
anatofuz
parents:
diff changeset
3
anatofuz
parents:
diff changeset
4 # GCN-LABEL: {{^}}sdwa_imm_operand:
anatofuz
parents:
diff changeset
5 # GCN: v_mov_b32_e32 v[[SHIFT:[0-9]+]], 2
anatofuz
parents:
diff changeset
6 # GCN-NOT: v_mov_b32_e32 v{{[0-9]+}}, 2
anatofuz
parents:
diff changeset
7 # GCN: BB0_1:
anatofuz
parents:
diff changeset
8 # GCN: v_lshlrev_b32_sdwa v{{[0-9]+}}, v[[SHIFT]], v{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1
anatofuz
parents:
diff changeset
9 # GCN: v_lshlrev_b32_sdwa v{{[0-9]+}}, v[[SHIFT]], v{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1
anatofuz
parents:
diff changeset
10
anatofuz
parents:
diff changeset
11 # GCN-LABEL: {{^}}sdwa_sgpr_operand:
anatofuz
parents:
diff changeset
12 # VI: v_mov_b32_e32 v[[SHIFT:[0-9]+]], 2
anatofuz
parents:
diff changeset
13 # VI-NOT: v_mov_b32_e32 v{{[0-9]+}}, 2
anatofuz
parents:
diff changeset
14 # VI: BB1_1:
anatofuz
parents:
diff changeset
15 # VI: v_lshlrev_b32_sdwa v{{[0-9]+}}, v[[SHIFT]], v{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1
anatofuz
parents:
diff changeset
16 # VI: v_lshlrev_b32_sdwa v{{[0-9]+}}, v[[SHIFT]], v{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1
anatofuz
parents:
diff changeset
17
anatofuz
parents:
diff changeset
18 # GFX9: s_mov_b32 s[[SHIFT:[0-9]+]], 2
anatofuz
parents:
diff changeset
19 # GFX9-NOT: v_mov_b32_e32 v{{[0-9]+}}, 2
anatofuz
parents:
diff changeset
20 # GFX9: BB1_1:
anatofuz
parents:
diff changeset
21 # GFX9: v_lshlrev_b32_sdwa v{{[0-9]+}}, s[[SHIFT]], v{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1
anatofuz
parents:
diff changeset
22 # GFX9: v_lshlrev_b32_sdwa v{{[0-9]+}}, s[[SHIFT]], v{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1
anatofuz
parents:
diff changeset
23
anatofuz
parents:
diff changeset
24 --- |
anatofuz
parents:
diff changeset
25 ; ModuleID = 'sdwa-scalar-ops.opt.ll'
anatofuz
parents:
diff changeset
26 source_filename = "sdwa-scalar-ops.opt.ll"
anatofuz
parents:
diff changeset
27 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"
anatofuz
parents:
diff changeset
28
anatofuz
parents:
diff changeset
29 define amdgpu_kernel void @sdwa_imm_operand(i32 addrspace(1)* nocapture %arg) {
anatofuz
parents:
diff changeset
30 bb:
anatofuz
parents:
diff changeset
31 br label %bb2
anatofuz
parents:
diff changeset
32
anatofuz
parents:
diff changeset
33 bb1: ; preds = %bb2
anatofuz
parents:
diff changeset
34 ret void
anatofuz
parents:
diff changeset
35
anatofuz
parents:
diff changeset
36 bb2: ; preds = %bb2, %bb
anatofuz
parents:
diff changeset
37 %lsr.iv = phi i64 [ %lsr.iv.next, %bb2 ], [ 0, %bb ]
anatofuz
parents:
diff changeset
38 %bc = bitcast i32 addrspace(1)* %arg to i8 addrspace(1)*
anatofuz
parents:
diff changeset
39 %uglygep4 = getelementptr i8, i8 addrspace(1)* %bc, i64 %lsr.iv
anatofuz
parents:
diff changeset
40 %uglygep45 = bitcast i8 addrspace(1)* %uglygep4 to i32 addrspace(1)*
anatofuz
parents:
diff changeset
41 %tmp5 = load i32, i32 addrspace(1)* %uglygep45, align 4
anatofuz
parents:
diff changeset
42 %tmp6 = lshr i32 %tmp5, 8
anatofuz
parents:
diff changeset
43 %tmp7 = and i32 %tmp6, 255
anatofuz
parents:
diff changeset
44 %tmp8 = zext i32 %tmp7 to i64
anatofuz
parents:
diff changeset
45 %tmp9 = getelementptr inbounds i32, i32 addrspace(1)* %arg, i64 %tmp8
anatofuz
parents:
diff changeset
46 store i32 1, i32 addrspace(1)* %tmp9, align 4
anatofuz
parents:
diff changeset
47 %scevgep = getelementptr i32, i32 addrspace(1)* %uglygep45, i64 1
anatofuz
parents:
diff changeset
48 %tmp13 = load i32, i32 addrspace(1)* %scevgep, align 4
anatofuz
parents:
diff changeset
49 %tmp14 = lshr i32 %tmp13, 8
anatofuz
parents:
diff changeset
50 %tmp15 = and i32 %tmp14, 255
anatofuz
parents:
diff changeset
51 %tmp16 = zext i32 %tmp15 to i64
anatofuz
parents:
diff changeset
52 %tmp17 = getelementptr inbounds i32, i32 addrspace(1)* %arg, i64 %tmp16
anatofuz
parents:
diff changeset
53 store i32 1, i32 addrspace(1)* %tmp17, align 4
anatofuz
parents:
diff changeset
54 %lsr.iv.next = add nuw nsw i64 %lsr.iv, 8
anatofuz
parents:
diff changeset
55 %tmp1 = trunc i64 %lsr.iv.next to i32
anatofuz
parents:
diff changeset
56 %tmp19 = icmp eq i32 %tmp1, 4096
anatofuz
parents:
diff changeset
57 br i1 %tmp19, label %bb1, label %bb2
anatofuz
parents:
diff changeset
58 }
anatofuz
parents:
diff changeset
59
anatofuz
parents:
diff changeset
60 define amdgpu_kernel void @sdwa_sgpr_operand(i32 addrspace(1)* nocapture %arg) {
anatofuz
parents:
diff changeset
61 bb:
anatofuz
parents:
diff changeset
62 br label %bb2
anatofuz
parents:
diff changeset
63
anatofuz
parents:
diff changeset
64 bb1: ; preds = %bb2
anatofuz
parents:
diff changeset
65 ret void
anatofuz
parents:
diff changeset
66
anatofuz
parents:
diff changeset
67 bb2: ; preds = %bb2, %bb
anatofuz
parents:
diff changeset
68 %lsr.iv = phi i64 [ %lsr.iv.next, %bb2 ], [ 0, %bb ]
anatofuz
parents:
diff changeset
69 %bc = bitcast i32 addrspace(1)* %arg to i8 addrspace(1)*
anatofuz
parents:
diff changeset
70 %uglygep4 = getelementptr i8, i8 addrspace(1)* %bc, i64 %lsr.iv
anatofuz
parents:
diff changeset
71 %uglygep45 = bitcast i8 addrspace(1)* %uglygep4 to i32 addrspace(1)*
anatofuz
parents:
diff changeset
72 %tmp5 = load i32, i32 addrspace(1)* %uglygep45, align 4
anatofuz
parents:
diff changeset
73 %tmp6 = lshr i32 %tmp5, 8
anatofuz
parents:
diff changeset
74 %tmp7 = and i32 %tmp6, 255
anatofuz
parents:
diff changeset
75 %tmp8 = zext i32 %tmp7 to i64
anatofuz
parents:
diff changeset
76 %tmp9 = getelementptr inbounds i32, i32 addrspace(1)* %arg, i64 %tmp8
anatofuz
parents:
diff changeset
77 store i32 1, i32 addrspace(1)* %tmp9, align 4
anatofuz
parents:
diff changeset
78 %scevgep = getelementptr i32, i32 addrspace(1)* %uglygep45, i64 1
anatofuz
parents:
diff changeset
79 %tmp13 = load i32, i32 addrspace(1)* %scevgep, align 4
anatofuz
parents:
diff changeset
80 %tmp14 = lshr i32 %tmp13, 8
anatofuz
parents:
diff changeset
81 %tmp15 = and i32 %tmp14, 255
anatofuz
parents:
diff changeset
82 %tmp16 = zext i32 %tmp15 to i64
anatofuz
parents:
diff changeset
83 %tmp17 = getelementptr inbounds i32, i32 addrspace(1)* %arg, i64 %tmp16
anatofuz
parents:
diff changeset
84 store i32 1, i32 addrspace(1)* %tmp17, align 4
anatofuz
parents:
diff changeset
85 %lsr.iv.next = add nuw nsw i64 %lsr.iv, 8
anatofuz
parents:
diff changeset
86 %tmp1 = trunc i64 %lsr.iv.next to i32
anatofuz
parents:
diff changeset
87 %tmp19 = icmp eq i32 %tmp1, 4096
anatofuz
parents:
diff changeset
88 br i1 %tmp19, label %bb1, label %bb2
anatofuz
parents:
diff changeset
89 }
anatofuz
parents:
diff changeset
90
anatofuz
parents:
diff changeset
91 ...
anatofuz
parents:
diff changeset
92 ---
anatofuz
parents:
diff changeset
93 name: sdwa_imm_operand
anatofuz
parents:
diff changeset
94 alignment: 1
anatofuz
parents:
diff changeset
95 exposesReturnsTwice: false
anatofuz
parents:
diff changeset
96 legalized: false
anatofuz
parents:
diff changeset
97 regBankSelected: false
anatofuz
parents:
diff changeset
98 selected: false
anatofuz
parents:
diff changeset
99 tracksRegLiveness: true
anatofuz
parents:
diff changeset
100 registers:
anatofuz
parents:
diff changeset
101 - { id: 0, class: sreg_64 }
anatofuz
parents:
diff changeset
102 - { id: 1, class: sreg_64 }
anatofuz
parents:
diff changeset
103 - { id: 2, class: vgpr_32 }
anatofuz
parents:
diff changeset
104 - { id: 3, class: sgpr_128 }
anatofuz
parents:
diff changeset
105 - { id: 4, class: sgpr_64 }
anatofuz
parents:
diff changeset
106 - { id: 5, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
107 - { id: 6, class: sgpr_32 }
anatofuz
parents:
diff changeset
108 - { id: 7, class: sreg_64 }
anatofuz
parents:
diff changeset
109 - { id: 8, class: sreg_64 }
anatofuz
parents:
diff changeset
110 - { id: 9, class: sreg_64_xexec }
anatofuz
parents:
diff changeset
111 - { id: 10, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
112 - { id: 11, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
113 - { id: 12, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
114 - { id: 13, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
115 - { id: 14, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
116 - { id: 15, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
117 - { id: 16, class: sreg_64 }
anatofuz
parents:
diff changeset
118 - { id: 17, class: vgpr_32 }
anatofuz
parents:
diff changeset
119 - { id: 18, class: vreg_64 }
anatofuz
parents:
diff changeset
120 - { id: 19, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
121 - { id: 20, class: sreg_32 }
anatofuz
parents:
diff changeset
122 - { id: 21, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
123 - { id: 22, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
124 - { id: 23, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
125 - { id: 24, class: sreg_64 }
anatofuz
parents:
diff changeset
126 - { id: 25, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
127 - { id: 26, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
128 - { id: 27, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
129 - { id: 28, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
130 - { id: 29, class: sreg_64 }
anatofuz
parents:
diff changeset
131 - { id: 30, class: vgpr_32 }
anatofuz
parents:
diff changeset
132 - { id: 31, class: vreg_64 }
anatofuz
parents:
diff changeset
133 - { id: 32, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
134 - { id: 33, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
135 - { id: 34, class: sreg_64 }
anatofuz
parents:
diff changeset
136 - { id: 35, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
137 - { id: 36, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
138 - { id: 37, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
139 - { id: 38, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
140 - { id: 39, class: vreg_64 }
anatofuz
parents:
diff changeset
141 - { id: 40, class: vgpr_32 }
anatofuz
parents:
diff changeset
142 - { id: 41, class: vreg_64 }
anatofuz
parents:
diff changeset
143 - { id: 42, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
144 - { id: 43, class: sreg_32 }
anatofuz
parents:
diff changeset
145 - { id: 44, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
146 - { id: 45, class: sreg_64 }
anatofuz
parents:
diff changeset
147 - { id: 46, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
148 - { id: 47, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
149 - { id: 48, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
150 - { id: 49, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
151 - { id: 50, class: sreg_64 }
anatofuz
parents:
diff changeset
152 - { id: 51, class: vreg_64 }
anatofuz
parents:
diff changeset
153 - { id: 52, class: sreg_64 }
anatofuz
parents:
diff changeset
154 - { id: 53, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
155 - { id: 54, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
156 - { id: 55, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
157 - { id: 56, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
158 - { id: 57, class: sreg_64 }
anatofuz
parents:
diff changeset
159 - { id: 58, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
160 - { id: 59, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
161 - { id: 60, class: vgpr_32 }
anatofuz
parents:
diff changeset
162 - { id: 61, class: vgpr_32 }
anatofuz
parents:
diff changeset
163 - { id: 62, class: vreg_64 }
anatofuz
parents:
diff changeset
164 - { id: 63, class: vgpr_32 }
anatofuz
parents:
diff changeset
165 - { id: 64, class: vgpr_32 }
anatofuz
parents:
diff changeset
166 - { id: 65, class: vgpr_32 }
anatofuz
parents:
diff changeset
167 - { id: 66, class: vgpr_32 }
anatofuz
parents:
diff changeset
168 - { id: 67, class: vreg_64 }
anatofuz
parents:
diff changeset
169 - { id: 68, class: vgpr_32 }
anatofuz
parents:
diff changeset
170 - { id: 69, class: vgpr_32 }
anatofuz
parents:
diff changeset
171 - { id: 70, class: vgpr_32 }
anatofuz
parents:
diff changeset
172 - { id: 71, class: vgpr_32 }
anatofuz
parents:
diff changeset
173 - { id: 72, class: vgpr_32 }
anatofuz
parents:
diff changeset
174 - { id: 73, class: vgpr_32 }
anatofuz
parents:
diff changeset
175 - { id: 74, class: vgpr_32 }
anatofuz
parents:
diff changeset
176 - { id: 75, class: vreg_64 }
anatofuz
parents:
diff changeset
177 - { id: 76, class: vgpr_32 }
anatofuz
parents:
diff changeset
178 - { id: 77, class: vgpr_32 }
anatofuz
parents:
diff changeset
179 - { id: 78, class: vgpr_32 }
anatofuz
parents:
diff changeset
180 - { id: 79, class: vgpr_32 }
anatofuz
parents:
diff changeset
181 - { id: 80, class: vreg_64 }
anatofuz
parents:
diff changeset
182 - { id: 81, class: vgpr_32 }
anatofuz
parents:
diff changeset
183 - { id: 82, class: vgpr_32 }
anatofuz
parents:
diff changeset
184 - { id: 83, class: vgpr_32 }
anatofuz
parents:
diff changeset
185 liveins:
anatofuz
parents:
diff changeset
186 - { reg: '$sgpr4_sgpr5', virtual-reg: '%4' }
anatofuz
parents:
diff changeset
187 frameInfo:
anatofuz
parents:
diff changeset
188 isFrameAddressTaken: false
anatofuz
parents:
diff changeset
189 isReturnAddressTaken: false
anatofuz
parents:
diff changeset
190 hasStackMap: false
anatofuz
parents:
diff changeset
191 hasPatchPoint: false
anatofuz
parents:
diff changeset
192 stackSize: 0
anatofuz
parents:
diff changeset
193 offsetAdjustment: 0
anatofuz
parents:
diff changeset
194 maxAlignment: 0
anatofuz
parents:
diff changeset
195 adjustsStack: false
anatofuz
parents:
diff changeset
196 hasCalls: false
anatofuz
parents:
diff changeset
197 hasOpaqueSPAdjustment: false
anatofuz
parents:
diff changeset
198 hasVAStart: false
anatofuz
parents:
diff changeset
199 hasMustTailInVarArgFunc: false
anatofuz
parents:
diff changeset
200 body: |
anatofuz
parents:
diff changeset
201 bb.0.bb:
anatofuz
parents:
diff changeset
202 successors: %bb.2.bb2(0x80000000)
anatofuz
parents:
diff changeset
203 liveins: $sgpr4_sgpr5
anatofuz
parents:
diff changeset
204
anatofuz
parents:
diff changeset
205 %4 = COPY $sgpr4_sgpr5
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
206 %9 = S_LOAD_DWORDX2_IMM %4, 0, 0 :: (non-temporal dereferenceable invariant load (s64) from `i64 addrspace(4)* undef`)
150
anatofuz
parents:
diff changeset
207 %8 = S_MOV_B64 0
anatofuz
parents:
diff changeset
208 %7 = COPY %9
anatofuz
parents:
diff changeset
209 %30 = V_MOV_B32_e32 1, implicit $exec
anatofuz
parents:
diff changeset
210 S_BRANCH %bb.2.bb2
anatofuz
parents:
diff changeset
211
anatofuz
parents:
diff changeset
212 bb.1.bb1:
anatofuz
parents:
diff changeset
213 S_ENDPGM 0
anatofuz
parents:
diff changeset
214
anatofuz
parents:
diff changeset
215 bb.2.bb2:
anatofuz
parents:
diff changeset
216 successors: %bb.1.bb1(0x04000000), %bb.2.bb2(0x7c000000)
anatofuz
parents:
diff changeset
217
anatofuz
parents:
diff changeset
218 %0 = PHI %8, %bb.0.bb, %1, %bb.2.bb2
anatofuz
parents:
diff changeset
219 %13 = COPY %7.sub1
anatofuz
parents:
diff changeset
220 %14 = S_ADD_U32 %7.sub0, %0.sub0, implicit-def $scc
anatofuz
parents:
diff changeset
221 %15 = S_ADDC_U32 %7.sub1, %0.sub1, implicit-def dead $scc, implicit $scc
anatofuz
parents:
diff changeset
222 %16 = REG_SEQUENCE %14, %subreg.sub0, %15, %subreg.sub1
anatofuz
parents:
diff changeset
223 %18 = COPY %16
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
224 %17 = FLAT_LOAD_DWORD %18, 0, 0, implicit $exec, implicit $flat_scr :: (load (s32) from %ir.uglygep45)
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
225 %60 = V_BFE_U32_e64 %17, 8, 8, implicit $exec
150
anatofuz
parents:
diff changeset
226 %61 = V_LSHLREV_B32_e32 2, killed %60, implicit $exec
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
227 %70 = V_ADD_CO_U32_e32 %7.sub0, %61, implicit-def $vcc, implicit $exec
150
anatofuz
parents:
diff changeset
228 %66 = COPY %13
anatofuz
parents:
diff changeset
229 %65 = V_ADDC_U32_e32 0, %66, implicit-def $vcc, implicit $vcc, implicit $exec
anatofuz
parents:
diff changeset
230 %67 = REG_SEQUENCE %70, %subreg.sub0, killed %65, %subreg.sub1
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
231 FLAT_STORE_DWORD %67, %30, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into %ir.tmp9)
150
anatofuz
parents:
diff changeset
232 %37 = S_ADD_U32 %14, 4, implicit-def $scc
anatofuz
parents:
diff changeset
233 %38 = S_ADDC_U32 %15, 0, implicit-def dead $scc, implicit $scc
anatofuz
parents:
diff changeset
234 %71 = COPY killed %37
anatofuz
parents:
diff changeset
235 %72 = COPY killed %38
anatofuz
parents:
diff changeset
236 %41 = REG_SEQUENCE killed %71, %subreg.sub0, killed %72, %subreg.sub1
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
237 %40 = FLAT_LOAD_DWORD killed %41, 0, 0, implicit $exec, implicit $flat_scr :: (load (s32) from %ir.scevgep)
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
238 %73 = V_BFE_U32_e64 %40, 8, 8, implicit $exec
150
anatofuz
parents:
diff changeset
239 %74 = V_LSHLREV_B32_e32 2, killed %73, implicit $exec
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
240 %83 = V_ADD_CO_U32_e32 %7.sub0, %74, implicit-def $vcc, implicit $exec
150
anatofuz
parents:
diff changeset
241 %78 = V_ADDC_U32_e32 0, %66, implicit-def $vcc, implicit $vcc, implicit $exec
anatofuz
parents:
diff changeset
242 %80 = REG_SEQUENCE %83, %subreg.sub0, killed %78, %subreg.sub1
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
243 FLAT_STORE_DWORD %80, %30, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into %ir.tmp17)
150
anatofuz
parents:
diff changeset
244 %55 = S_ADD_U32 %0.sub0, 8, implicit-def $scc
anatofuz
parents:
diff changeset
245 %56 = S_ADDC_U32 %0.sub1, 0, implicit-def dead $scc, implicit $scc
anatofuz
parents:
diff changeset
246 %57 = REG_SEQUENCE %55, %subreg.sub0, killed %56, %subreg.sub1
anatofuz
parents:
diff changeset
247 %1 = COPY %57
anatofuz
parents:
diff changeset
248 S_CMPK_EQ_I32 %55, 4096, implicit-def $scc
anatofuz
parents:
diff changeset
249 S_CBRANCH_SCC1 %bb.1.bb1, implicit $scc
anatofuz
parents:
diff changeset
250 S_BRANCH %bb.2.bb2
anatofuz
parents:
diff changeset
251
anatofuz
parents:
diff changeset
252 ...
anatofuz
parents:
diff changeset
253 ---
anatofuz
parents:
diff changeset
254 name: sdwa_sgpr_operand
anatofuz
parents:
diff changeset
255 alignment: 1
anatofuz
parents:
diff changeset
256 exposesReturnsTwice: false
anatofuz
parents:
diff changeset
257 legalized: false
anatofuz
parents:
diff changeset
258 regBankSelected: false
anatofuz
parents:
diff changeset
259 selected: false
anatofuz
parents:
diff changeset
260 tracksRegLiveness: true
anatofuz
parents:
diff changeset
261 registers:
anatofuz
parents:
diff changeset
262 - { id: 0, class: sreg_64 }
anatofuz
parents:
diff changeset
263 - { id: 1, class: sreg_64 }
anatofuz
parents:
diff changeset
264 - { id: 2, class: vgpr_32 }
anatofuz
parents:
diff changeset
265 - { id: 3, class: sgpr_128 }
anatofuz
parents:
diff changeset
266 - { id: 4, class: sgpr_64 }
anatofuz
parents:
diff changeset
267 - { id: 5, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
268 - { id: 6, class: sgpr_32 }
anatofuz
parents:
diff changeset
269 - { id: 7, class: sreg_64 }
anatofuz
parents:
diff changeset
270 - { id: 8, class: sreg_64 }
anatofuz
parents:
diff changeset
271 - { id: 9, class: sreg_64_xexec }
anatofuz
parents:
diff changeset
272 - { id: 10, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
273 - { id: 11, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
274 - { id: 12, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
275 - { id: 13, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
276 - { id: 14, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
277 - { id: 15, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
278 - { id: 16, class: sreg_64 }
anatofuz
parents:
diff changeset
279 - { id: 17, class: vgpr_32 }
anatofuz
parents:
diff changeset
280 - { id: 18, class: vreg_64 }
anatofuz
parents:
diff changeset
281 - { id: 19, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
282 - { id: 20, class: sreg_32 }
anatofuz
parents:
diff changeset
283 - { id: 21, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
284 - { id: 22, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
285 - { id: 23, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
286 - { id: 24, class: sreg_64 }
anatofuz
parents:
diff changeset
287 - { id: 25, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
288 - { id: 26, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
289 - { id: 27, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
290 - { id: 28, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
291 - { id: 29, class: sreg_64 }
anatofuz
parents:
diff changeset
292 - { id: 30, class: vgpr_32 }
anatofuz
parents:
diff changeset
293 - { id: 31, class: vreg_64 }
anatofuz
parents:
diff changeset
294 - { id: 32, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
295 - { id: 33, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
296 - { id: 34, class: sreg_64 }
anatofuz
parents:
diff changeset
297 - { id: 35, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
298 - { id: 36, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
299 - { id: 37, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
300 - { id: 38, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
301 - { id: 39, class: vreg_64 }
anatofuz
parents:
diff changeset
302 - { id: 40, class: vgpr_32 }
anatofuz
parents:
diff changeset
303 - { id: 41, class: vreg_64 }
anatofuz
parents:
diff changeset
304 - { id: 42, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
305 - { id: 43, class: sreg_32 }
anatofuz
parents:
diff changeset
306 - { id: 44, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
307 - { id: 45, class: sreg_64 }
anatofuz
parents:
diff changeset
308 - { id: 46, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
309 - { id: 47, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
310 - { id: 48, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
311 - { id: 49, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
312 - { id: 50, class: sreg_64 }
anatofuz
parents:
diff changeset
313 - { id: 51, class: vreg_64 }
anatofuz
parents:
diff changeset
314 - { id: 52, class: sreg_64 }
anatofuz
parents:
diff changeset
315 - { id: 53, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
316 - { id: 54, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
317 - { id: 55, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
318 - { id: 56, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
319 - { id: 57, class: sreg_64 }
anatofuz
parents:
diff changeset
320 - { id: 58, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
321 - { id: 59, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
322 - { id: 60, class: vgpr_32 }
anatofuz
parents:
diff changeset
323 - { id: 61, class: vgpr_32 }
anatofuz
parents:
diff changeset
324 - { id: 62, class: vreg_64 }
anatofuz
parents:
diff changeset
325 - { id: 63, class: vgpr_32 }
anatofuz
parents:
diff changeset
326 - { id: 64, class: vgpr_32 }
anatofuz
parents:
diff changeset
327 - { id: 65, class: vgpr_32 }
anatofuz
parents:
diff changeset
328 - { id: 66, class: vgpr_32 }
anatofuz
parents:
diff changeset
329 - { id: 67, class: vreg_64 }
anatofuz
parents:
diff changeset
330 - { id: 68, class: vgpr_32 }
anatofuz
parents:
diff changeset
331 - { id: 69, class: vgpr_32 }
anatofuz
parents:
diff changeset
332 - { id: 70, class: vgpr_32 }
anatofuz
parents:
diff changeset
333 - { id: 71, class: vgpr_32 }
anatofuz
parents:
diff changeset
334 - { id: 72, class: vgpr_32 }
anatofuz
parents:
diff changeset
335 - { id: 73, class: vgpr_32 }
anatofuz
parents:
diff changeset
336 - { id: 74, class: vgpr_32 }
anatofuz
parents:
diff changeset
337 - { id: 75, class: vreg_64 }
anatofuz
parents:
diff changeset
338 - { id: 76, class: vgpr_32 }
anatofuz
parents:
diff changeset
339 - { id: 77, class: vgpr_32 }
anatofuz
parents:
diff changeset
340 - { id: 78, class: vgpr_32 }
anatofuz
parents:
diff changeset
341 - { id: 79, class: vgpr_32 }
anatofuz
parents:
diff changeset
342 - { id: 80, class: vreg_64 }
anatofuz
parents:
diff changeset
343 - { id: 81, class: vgpr_32 }
anatofuz
parents:
diff changeset
344 - { id: 82, class: vgpr_32 }
anatofuz
parents:
diff changeset
345 - { id: 83, class: vgpr_32 }
anatofuz
parents:
diff changeset
346 - { id: 84, class: sreg_32_xm0 }
anatofuz
parents:
diff changeset
347 liveins:
anatofuz
parents:
diff changeset
348 - { reg: '$sgpr4_sgpr5', virtual-reg: '%4' }
anatofuz
parents:
diff changeset
349 frameInfo:
anatofuz
parents:
diff changeset
350 isFrameAddressTaken: false
anatofuz
parents:
diff changeset
351 isReturnAddressTaken: false
anatofuz
parents:
diff changeset
352 hasStackMap: false
anatofuz
parents:
diff changeset
353 hasPatchPoint: false
anatofuz
parents:
diff changeset
354 stackSize: 0
anatofuz
parents:
diff changeset
355 offsetAdjustment: 0
anatofuz
parents:
diff changeset
356 maxAlignment: 0
anatofuz
parents:
diff changeset
357 adjustsStack: false
anatofuz
parents:
diff changeset
358 hasCalls: false
anatofuz
parents:
diff changeset
359 hasOpaqueSPAdjustment: false
anatofuz
parents:
diff changeset
360 hasVAStart: false
anatofuz
parents:
diff changeset
361 hasMustTailInVarArgFunc: false
anatofuz
parents:
diff changeset
362 body: |
anatofuz
parents:
diff changeset
363 bb.0.bb:
anatofuz
parents:
diff changeset
364 successors: %bb.2.bb2(0x80000000)
anatofuz
parents:
diff changeset
365 liveins: $sgpr4_sgpr5
anatofuz
parents:
diff changeset
366
anatofuz
parents:
diff changeset
367 %4 = COPY $sgpr4_sgpr5
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
368 %9 = S_LOAD_DWORDX2_IMM %4, 0, 0 :: (non-temporal dereferenceable invariant load (s64) from `i64 addrspace(4)* undef`)
150
anatofuz
parents:
diff changeset
369 %8 = S_MOV_B64 0
anatofuz
parents:
diff changeset
370 %7 = COPY %9
anatofuz
parents:
diff changeset
371 %30 = V_MOV_B32_e32 1, implicit $exec
anatofuz
parents:
diff changeset
372 %84 = S_MOV_B32 2
anatofuz
parents:
diff changeset
373 S_BRANCH %bb.2.bb2
anatofuz
parents:
diff changeset
374
anatofuz
parents:
diff changeset
375 bb.1.bb1:
anatofuz
parents:
diff changeset
376 S_ENDPGM 0
anatofuz
parents:
diff changeset
377
anatofuz
parents:
diff changeset
378 bb.2.bb2:
anatofuz
parents:
diff changeset
379 successors: %bb.1.bb1(0x04000000), %bb.2.bb2(0x7c000000)
anatofuz
parents:
diff changeset
380
anatofuz
parents:
diff changeset
381 %0 = PHI %8, %bb.0.bb, %1, %bb.2.bb2
anatofuz
parents:
diff changeset
382 %13 = COPY %7.sub1
anatofuz
parents:
diff changeset
383 %14 = S_ADD_U32 %7.sub0, %0.sub0, implicit-def $scc
anatofuz
parents:
diff changeset
384 %15 = S_ADDC_U32 %7.sub1, %0.sub1, implicit-def dead $scc, implicit $scc
anatofuz
parents:
diff changeset
385 %16 = REG_SEQUENCE %14, %subreg.sub0, %15, %subreg.sub1
anatofuz
parents:
diff changeset
386 %18 = COPY %16
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
387 %17 = FLAT_LOAD_DWORD %18, 0, 0, implicit $exec, implicit $flat_scr :: (load (s32) from %ir.uglygep45)
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
388 %60 = V_BFE_U32_e64 %17, 8, 8, implicit $exec
150
anatofuz
parents:
diff changeset
389 %61 = V_LSHLREV_B32_e32 %84, killed %60, implicit $exec
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
390 %70 = V_ADD_CO_U32_e32 %7.sub0, %61, implicit-def $vcc, implicit $exec
150
anatofuz
parents:
diff changeset
391 %66 = COPY %13
anatofuz
parents:
diff changeset
392 %65 = V_ADDC_U32_e32 0, %66, implicit-def $vcc, implicit $vcc, implicit $exec
anatofuz
parents:
diff changeset
393 %67 = REG_SEQUENCE %70, %subreg.sub0, killed %65, %subreg.sub1
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
394 FLAT_STORE_DWORD %67, %30, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into %ir.tmp9)
150
anatofuz
parents:
diff changeset
395 %37 = S_ADD_U32 %14, 4, implicit-def $scc
anatofuz
parents:
diff changeset
396 %38 = S_ADDC_U32 %15, 0, implicit-def dead $scc, implicit $scc
anatofuz
parents:
diff changeset
397 %71 = COPY killed %37
anatofuz
parents:
diff changeset
398 %72 = COPY killed %38
anatofuz
parents:
diff changeset
399 %41 = REG_SEQUENCE killed %71, %subreg.sub0, killed %72, %subreg.sub1
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
400 %40 = FLAT_LOAD_DWORD killed %41, 0, 0, implicit $exec, implicit $flat_scr :: (load (s32) from %ir.scevgep)
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
401 %73 = V_BFE_U32_e64 %40, 8, 8, implicit $exec
150
anatofuz
parents:
diff changeset
402 %74 = V_LSHLREV_B32_e32 %84, killed %73, implicit $exec
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
403 %83 = V_ADD_CO_U32_e32 %7.sub0, %74, implicit-def $vcc, implicit $exec
150
anatofuz
parents:
diff changeset
404 %78 = V_ADDC_U32_e32 0, %66, implicit-def $vcc, implicit $vcc, implicit $exec
anatofuz
parents:
diff changeset
405 %80 = REG_SEQUENCE %83, %subreg.sub0, killed %78, %subreg.sub1
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
406 FLAT_STORE_DWORD %80, %30, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into %ir.tmp17)
150
anatofuz
parents:
diff changeset
407 %55 = S_ADD_U32 %0.sub0, 8, implicit-def $scc
anatofuz
parents:
diff changeset
408 %56 = S_ADDC_U32 %0.sub1, 0, implicit-def dead $scc, implicit $scc
anatofuz
parents:
diff changeset
409 %57 = REG_SEQUENCE %55, %subreg.sub0, killed %56, %subreg.sub1
anatofuz
parents:
diff changeset
410 %1 = COPY %57
anatofuz
parents:
diff changeset
411 S_CMPK_EQ_I32 %55, 4096, implicit-def $scc
anatofuz
parents:
diff changeset
412 S_CBRANCH_SCC1 %bb.1.bb1, implicit $scc
anatofuz
parents:
diff changeset
413 S_BRANCH %bb.2.bb2
anatofuz
parents:
diff changeset
414
anatofuz
parents:
diff changeset
415 ...