Skip to content

Commit f9cb95c

Browse files
authored
[AMDGPU] Add additional test cases to integer src mod test (#152692)
Adds missing 16-bit test cases to the test that src mods are not applied to integers in instructions with canonicalizing patterns.
1 parent 2936774 commit f9cb95c

File tree

1 file changed

+149
-5
lines changed

1 file changed

+149
-5
lines changed

llvm/test/CodeGen/AMDGPU/integer-canonicalizing-src-modifiers.ll

Lines changed: 149 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,152 @@ define double @s_uitofp_i32_to_f64_neg(i32 inreg %arg0) nounwind {
8686
%cvt = uitofp i32 %arg0.neg to double
8787
ret double %cvt
8888
}
89-
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
90-
; GFX11-FAKE16: {{.*}}
91-
; GFX11-TRUE16: {{.*}}
92-
; GFX7: {{.*}}
93-
; GFX9: {{.*}}
89+
90+
define half @v_uitofp_i16_to_f16_abs(i16 %arg0) nounwind {
91+
; GFX7-LABEL: v_uitofp_i16_to_f16_abs:
92+
; GFX7: ; %bb.0:
93+
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
94+
; GFX7-NEXT: v_and_b32_e32 v0, 0x7fff, v0
95+
; GFX7-NEXT: v_cvt_f32_u32_e32 v0, v0
96+
; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0
97+
; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0
98+
; GFX7-NEXT: s_setpc_b64 s[30:31]
99+
;
100+
; GFX9-LABEL: v_uitofp_i16_to_f16_abs:
101+
; GFX9: ; %bb.0:
102+
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
103+
; GFX9-NEXT: v_and_b32_e32 v0, 0x7fff, v0
104+
; GFX9-NEXT: v_cvt_f16_u16_e32 v0, v0
105+
; GFX9-NEXT: s_setpc_b64 s[30:31]
106+
;
107+
; GFX11-TRUE16-LABEL: v_uitofp_i16_to_f16_abs:
108+
; GFX11-TRUE16: ; %bb.0:
109+
; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
110+
; GFX11-TRUE16-NEXT: v_and_b16 v0.l, 0x7fff, v0.l
111+
; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
112+
; GFX11-TRUE16-NEXT: v_cvt_f16_u16_e32 v0.l, v0.l
113+
; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]
114+
;
115+
; GFX11-FAKE16-LABEL: v_uitofp_i16_to_f16_abs:
116+
; GFX11-FAKE16: ; %bb.0:
117+
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
118+
; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0x7fff, v0
119+
; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
120+
; GFX11-FAKE16-NEXT: v_cvt_f16_u16_e32 v0, v0
121+
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
122+
%arg0.abs = and i16 %arg0, u0x7fff
123+
%cvt = uitofp i16 %arg0.abs to half
124+
ret half %cvt
125+
}
126+
127+
define half @v_uitofp_i16_to_f16_neg(i16 %arg0) nounwind {
128+
; GFX7-LABEL: v_uitofp_i16_to_f16_neg:
129+
; GFX7: ; %bb.0:
130+
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
131+
; GFX7-NEXT: v_and_b32_e32 v0, 0x8000, v0
132+
; GFX7-NEXT: v_cvt_f32_u32_e32 v0, v0
133+
; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0
134+
; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0
135+
; GFX7-NEXT: s_setpc_b64 s[30:31]
136+
;
137+
; GFX9-LABEL: v_uitofp_i16_to_f16_neg:
138+
; GFX9: ; %bb.0:
139+
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
140+
; GFX9-NEXT: v_and_b32_e32 v0, 0xffff8000, v0
141+
; GFX9-NEXT: v_cvt_f16_u16_e32 v0, v0
142+
; GFX9-NEXT: s_setpc_b64 s[30:31]
143+
;
144+
; GFX11-TRUE16-LABEL: v_uitofp_i16_to_f16_neg:
145+
; GFX11-TRUE16: ; %bb.0:
146+
; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
147+
; GFX11-TRUE16-NEXT: v_and_b16 v0.l, 0x8000, v0.l
148+
; GFX11-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
149+
; GFX11-TRUE16-NEXT: v_cvt_f16_u16_e32 v0.l, v0.l
150+
; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]
151+
;
152+
; GFX11-FAKE16-LABEL: v_uitofp_i16_to_f16_neg:
153+
; GFX11-FAKE16: ; %bb.0:
154+
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
155+
; GFX11-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff8000, v0
156+
; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
157+
; GFX11-FAKE16-NEXT: v_cvt_f16_u16_e32 v0, v0
158+
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
159+
%arg0.neg = and i16 %arg0, u0x8000
160+
%cvt = uitofp i16 %arg0.neg to half
161+
ret half %cvt
162+
}
163+
164+
define half @s_uitofp_i16_to_f16_abs(i16 inreg %arg0) nounwind {
165+
; GFX7-LABEL: s_uitofp_i16_to_f16_abs:
166+
; GFX7: ; %bb.0:
167+
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
168+
; GFX7-NEXT: s_and_b32 s4, s16, 0x7fff
169+
; GFX7-NEXT: v_cvt_f32_u32_e32 v0, s4
170+
; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0
171+
; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0
172+
; GFX7-NEXT: s_setpc_b64 s[30:31]
173+
;
174+
; GFX9-LABEL: s_uitofp_i16_to_f16_abs:
175+
; GFX9: ; %bb.0:
176+
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
177+
; GFX9-NEXT: s_and_b32 s4, s16, 0x7fff
178+
; GFX9-NEXT: v_cvt_f16_u16_e32 v0, s4
179+
; GFX9-NEXT: s_setpc_b64 s[30:31]
180+
;
181+
; GFX11-TRUE16-LABEL: s_uitofp_i16_to_f16_abs:
182+
; GFX11-TRUE16: ; %bb.0:
183+
; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
184+
; GFX11-TRUE16-NEXT: s_and_b32 s0, s0, 0x7fff
185+
; GFX11-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
186+
; GFX11-TRUE16-NEXT: v_cvt_f16_u16_e32 v0.l, s0
187+
; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]
188+
;
189+
; GFX11-FAKE16-LABEL: s_uitofp_i16_to_f16_abs:
190+
; GFX11-FAKE16: ; %bb.0:
191+
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
192+
; GFX11-FAKE16-NEXT: s_and_b32 s0, s0, 0x7fff
193+
; GFX11-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
194+
; GFX11-FAKE16-NEXT: v_cvt_f16_u16_e32 v0, s0
195+
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
196+
%arg0.abs = and i16 %arg0, u0x7fff
197+
%cvt = uitofp i16 %arg0.abs to half
198+
ret half %cvt
199+
}
200+
201+
define half @s_uitofp_i16_to_f16_neg(i16 inreg %arg0) nounwind {
202+
; GFX7-LABEL: s_uitofp_i16_to_f16_neg:
203+
; GFX7: ; %bb.0:
204+
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
205+
; GFX7-NEXT: s_and_b32 s4, s16, 0x8000
206+
; GFX7-NEXT: v_cvt_f32_u32_e32 v0, s4
207+
; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0
208+
; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0
209+
; GFX7-NEXT: s_setpc_b64 s[30:31]
210+
;
211+
; GFX9-LABEL: s_uitofp_i16_to_f16_neg:
212+
; GFX9: ; %bb.0:
213+
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
214+
; GFX9-NEXT: s_and_b32 s4, s16, 0x8000
215+
; GFX9-NEXT: v_cvt_f16_u16_e32 v0, s4
216+
; GFX9-NEXT: s_setpc_b64 s[30:31]
217+
;
218+
; GFX11-TRUE16-LABEL: s_uitofp_i16_to_f16_neg:
219+
; GFX11-TRUE16: ; %bb.0:
220+
; GFX11-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
221+
; GFX11-TRUE16-NEXT: s_and_b32 s0, s0, 0x8000
222+
; GFX11-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
223+
; GFX11-TRUE16-NEXT: v_cvt_f16_u16_e32 v0.l, s0
224+
; GFX11-TRUE16-NEXT: s_setpc_b64 s[30:31]
225+
;
226+
; GFX11-FAKE16-LABEL: s_uitofp_i16_to_f16_neg:
227+
; GFX11-FAKE16: ; %bb.0:
228+
; GFX11-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
229+
; GFX11-FAKE16-NEXT: s_and_b32 s0, s0, 0x8000
230+
; GFX11-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)
231+
; GFX11-FAKE16-NEXT: v_cvt_f16_u16_e32 v0, s0
232+
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
233+
%arg0.neg = and i16 %arg0, u0x8000
234+
%cvt = uitofp i16 %arg0.neg to half
235+
ret half %cvt
236+
}
237+

0 commit comments

Comments
 (0)