1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX8 %s
3# RUN: llc -march=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX9 %s
4# RUN: llc -march=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX9 %s
5
6---
7name: umed3_s16_vvv
8legalized: true
9regBankSelected: true
10
11body: |
12  bb.0:
13    liveins: $vgpr0, $vgpr1, $vgpr2
14
15    ; GFX8-LABEL: name: umed3_s16_vvv
16    ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
17    ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
18    ; GFX8: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
19    ; GFX8: [[V_MAX_U16_e64_:%[0-9]+]]:vgpr_32 = V_MAX_U16_e64 [[COPY]], [[COPY1]], implicit $exec
20    ; GFX8: [[V_MIN_U16_e64_:%[0-9]+]]:vgpr_32 = V_MIN_U16_e64 [[COPY]], [[COPY1]], implicit $exec
21    ; GFX8: [[V_MAX_U16_e64_1:%[0-9]+]]:vgpr_32 = V_MAX_U16_e64 [[V_MIN_U16_e64_]], [[COPY2]], implicit $exec
22    ; GFX8: [[V_MIN_U16_e64_1:%[0-9]+]]:vgpr_32 = V_MIN_U16_e64 [[V_MAX_U16_e64_]], [[V_MAX_U16_e64_1]], implicit $exec
23    ; GFX8: S_ENDPGM 0, implicit [[V_MIN_U16_e64_1]]
24    ; GFX9-LABEL: name: umed3_s16_vvv
25    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
26    ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
27    ; GFX9: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
28    ; GFX9: [[V_MED3_U16_e64_:%[0-9]+]]:vgpr_32 = V_MED3_U16_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $exec
29    ; GFX9: S_ENDPGM 0, implicit [[V_MED3_U16_e64_]]
30    %0:vgpr(s32) = COPY $vgpr0
31    %1:vgpr(s32) = COPY $vgpr1
32    %2:vgpr(s32) = COPY $vgpr2
33    %3:vgpr(s16) = G_TRUNC %0
34    %4:vgpr(s16) = G_TRUNC %1
35    %5:vgpr(s16) = G_TRUNC %2
36
37    %6:vgpr(s16) = G_UMAX %3, %4
38    %7:vgpr(s16) = G_UMIN %3, %4
39    %8:vgpr(s16) = G_UMAX %7, %5
40    %9:vgpr(s16) = G_UMIN %6, %8
41
42    S_ENDPGM 0, implicit %9
43...
44
45---
46name: umed3_s16_vvv_multiuse0
47legalized: true
48regBankSelected: true
49
50body: |
51  bb.0:
52    liveins: $vgpr0, $vgpr1, $vgpr2
53
54    ; GFX8-LABEL: name: umed3_s16_vvv_multiuse0
55    ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
56    ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
57    ; GFX8: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
58    ; GFX8: [[V_MAX_U16_e64_:%[0-9]+]]:vgpr_32 = V_MAX_U16_e64 [[COPY]], [[COPY1]], implicit $exec
59    ; GFX8: [[V_MIN_U16_e64_:%[0-9]+]]:vgpr_32 = V_MIN_U16_e64 [[COPY]], [[COPY1]], implicit $exec
60    ; GFX8: [[V_MAX_U16_e64_1:%[0-9]+]]:vgpr_32 = V_MAX_U16_e64 [[V_MIN_U16_e64_]], [[COPY2]], implicit $exec
61    ; GFX8: [[V_MIN_U16_e64_1:%[0-9]+]]:vgpr_32 = V_MIN_U16_e64 [[V_MAX_U16_e64_]], [[V_MAX_U16_e64_1]], implicit $exec
62    ; GFX8: S_ENDPGM 0, implicit [[V_MIN_U16_e64_1]], implicit [[V_MAX_U16_e64_]]
63    ; GFX9-LABEL: name: umed3_s16_vvv_multiuse0
64    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
65    ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
66    ; GFX9: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
67    ; GFX9: [[V_MAX_U16_e64_:%[0-9]+]]:vgpr_32 = V_MAX_U16_e64 [[COPY]], [[COPY1]], implicit $exec
68    ; GFX9: [[V_MIN_U16_e64_:%[0-9]+]]:vgpr_32 = V_MIN_U16_e64 [[COPY]], [[COPY1]], implicit $exec
69    ; GFX9: [[V_MAX_U16_e64_1:%[0-9]+]]:vgpr_32 = V_MAX_U16_e64 [[V_MIN_U16_e64_]], [[COPY2]], implicit $exec
70    ; GFX9: [[V_MIN_U16_e64_1:%[0-9]+]]:vgpr_32 = V_MIN_U16_e64 [[V_MAX_U16_e64_]], [[V_MAX_U16_e64_1]], implicit $exec
71    ; GFX9: S_ENDPGM 0, implicit [[V_MIN_U16_e64_1]], implicit [[V_MAX_U16_e64_]]
72    %0:vgpr(s32) = COPY $vgpr0
73    %1:vgpr(s32) = COPY $vgpr1
74    %2:vgpr(s32) = COPY $vgpr2
75    %3:vgpr(s16) = G_TRUNC %0
76    %4:vgpr(s16) = G_TRUNC %1
77    %5:vgpr(s16) = G_TRUNC %2
78
79    %6:vgpr(s16) = G_UMAX %3, %4
80    %7:vgpr(s16) = G_UMIN %3, %4
81    %8:vgpr(s16) = G_UMAX %7, %5
82    %9:vgpr(s16) = G_UMIN %6, %8
83
84    S_ENDPGM 0, implicit %9, implicit %6
85...
86
87---
88name: umed3_s16_vvv_multiuse1
89legalized: true
90regBankSelected: true
91
92body: |
93  bb.0:
94    liveins: $vgpr0, $vgpr1, $vgpr2
95
96    ; GFX8-LABEL: name: umed3_s16_vvv_multiuse1
97    ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
98    ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
99    ; GFX8: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
100    ; GFX8: [[V_MAX_U16_e64_:%[0-9]+]]:vgpr_32 = V_MAX_U16_e64 [[COPY]], [[COPY1]], implicit $exec
101    ; GFX8: [[V_MIN_U16_e64_:%[0-9]+]]:vgpr_32 = V_MIN_U16_e64 [[COPY]], [[COPY1]], implicit $exec
102    ; GFX8: [[V_MAX_U16_e64_1:%[0-9]+]]:vgpr_32 = V_MAX_U16_e64 [[V_MIN_U16_e64_]], [[COPY2]], implicit $exec
103    ; GFX8: [[V_MIN_U16_e64_1:%[0-9]+]]:vgpr_32 = V_MIN_U16_e64 [[V_MAX_U16_e64_]], [[V_MAX_U16_e64_1]], implicit $exec
104    ; GFX8: S_ENDPGM 0, implicit [[V_MIN_U16_e64_1]], implicit [[V_MIN_U16_e64_]]
105    ; GFX9-LABEL: name: umed3_s16_vvv_multiuse1
106    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
107    ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
108    ; GFX9: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
109    ; GFX9: [[V_MAX_U16_e64_:%[0-9]+]]:vgpr_32 = V_MAX_U16_e64 [[COPY]], [[COPY1]], implicit $exec
110    ; GFX9: [[V_MIN_U16_e64_:%[0-9]+]]:vgpr_32 = V_MIN_U16_e64 [[COPY]], [[COPY1]], implicit $exec
111    ; GFX9: [[V_MAX_U16_e64_1:%[0-9]+]]:vgpr_32 = V_MAX_U16_e64 [[V_MIN_U16_e64_]], [[COPY2]], implicit $exec
112    ; GFX9: [[V_MIN_U16_e64_1:%[0-9]+]]:vgpr_32 = V_MIN_U16_e64 [[V_MAX_U16_e64_]], [[V_MAX_U16_e64_1]], implicit $exec
113    ; GFX9: S_ENDPGM 0, implicit [[V_MIN_U16_e64_1]], implicit [[V_MIN_U16_e64_]]
114    %0:vgpr(s32) = COPY $vgpr0
115    %1:vgpr(s32) = COPY $vgpr1
116    %2:vgpr(s32) = COPY $vgpr2
117    %3:vgpr(s16) = G_TRUNC %0
118    %4:vgpr(s16) = G_TRUNC %1
119    %5:vgpr(s16) = G_TRUNC %2
120
121    %6:vgpr(s16) = G_UMAX %3, %4
122    %7:vgpr(s16) = G_UMIN %3, %4
123    %8:vgpr(s16) = G_UMAX %7, %5
124    %9:vgpr(s16) = G_UMIN %6, %8
125
126    S_ENDPGM 0, implicit %9, implicit %7
127...
128
129---
130name: umed3_s16_vvv_multiuse2
131legalized: true
132regBankSelected: true
133
134body: |
135  bb.0:
136    liveins: $vgpr0, $vgpr1, $vgpr2
137
138    ; GFX8-LABEL: name: umed3_s16_vvv_multiuse2
139    ; GFX8: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
140    ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
141    ; GFX8: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
142    ; GFX8: [[V_MAX_U16_e64_:%[0-9]+]]:vgpr_32 = V_MAX_U16_e64 [[COPY]], [[COPY1]], implicit $exec
143    ; GFX8: [[V_MIN_U16_e64_:%[0-9]+]]:vgpr_32 = V_MIN_U16_e64 [[COPY]], [[COPY1]], implicit $exec
144    ; GFX8: [[V_MAX_U16_e64_1:%[0-9]+]]:vgpr_32 = V_MAX_U16_e64 [[V_MIN_U16_e64_]], [[COPY2]], implicit $exec
145    ; GFX8: [[V_MIN_U16_e64_1:%[0-9]+]]:vgpr_32 = V_MIN_U16_e64 [[V_MAX_U16_e64_]], [[V_MAX_U16_e64_1]], implicit $exec
146    ; GFX8: S_ENDPGM 0, implicit [[V_MIN_U16_e64_1]], implicit [[V_MAX_U16_e64_1]]
147    ; GFX9-LABEL: name: umed3_s16_vvv_multiuse2
148    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
149    ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
150    ; GFX9: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
151    ; GFX9: [[V_MAX_U16_e64_:%[0-9]+]]:vgpr_32 = V_MAX_U16_e64 [[COPY]], [[COPY1]], implicit $exec
152    ; GFX9: [[V_MIN_U16_e64_:%[0-9]+]]:vgpr_32 = V_MIN_U16_e64 [[COPY]], [[COPY1]], implicit $exec
153    ; GFX9: [[V_MAX_U16_e64_1:%[0-9]+]]:vgpr_32 = V_MAX_U16_e64 [[V_MIN_U16_e64_]], [[COPY2]], implicit $exec
154    ; GFX9: [[V_MIN_U16_e64_1:%[0-9]+]]:vgpr_32 = V_MIN_U16_e64 [[V_MAX_U16_e64_]], [[V_MAX_U16_e64_1]], implicit $exec
155    ; GFX9: S_ENDPGM 0, implicit [[V_MIN_U16_e64_1]], implicit [[V_MAX_U16_e64_1]]
156    %0:vgpr(s32) = COPY $vgpr0
157    %1:vgpr(s32) = COPY $vgpr1
158    %2:vgpr(s32) = COPY $vgpr2
159    %3:vgpr(s16) = G_TRUNC %0
160    %4:vgpr(s16) = G_TRUNC %1
161    %5:vgpr(s16) = G_TRUNC %2
162
163    %6:vgpr(s16) = G_UMAX %3, %4
164    %7:vgpr(s16) = G_UMIN %3, %4
165    %8:vgpr(s16) = G_UMAX %7, %5
166    %9:vgpr(s16) = G_UMIN %6, %8
167
168    S_ENDPGM 0, implicit %9, implicit %8
169...
170