276 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 -run-pass=legalizer %s -o - | FileCheck -check-prefix=GFX9 %s3# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1200 -mattr=-real-true16 -run-pass=legalizer %s -o - | FileCheck -check-prefixes=GFX12 %s4 5---6name: test_fmaximum_f167body: |8 bb.0:9 liveins: $vgpr0, $vgpr110 11 ; GFX9-LABEL: name: test_fmaximum_f1612 ; GFX9: liveins: $vgpr0, $vgpr113 ; GFX9-NEXT: {{ $}}14 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr015 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)16 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr117 ; GFX9-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)18 ; GFX9-NEXT: [[FMAXNUM_IEEE:%[0-9]+]]:_(s16) = G_FMAXNUM_IEEE [[TRUNC]], [[TRUNC1]]19 ; GFX9-NEXT: [[FCMP:%[0-9]+]]:_(s1) = G_FCMP floatpred(ord), [[TRUNC]](s16), [[TRUNC1]]20 ; GFX9-NEXT: [[C:%[0-9]+]]:_(s16) = G_FCONSTANT half 0xH7E0021 ; GFX9-NEXT: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[FCMP]](s1), [[FMAXNUM_IEEE]], [[C]]22 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s16) = COPY [[SELECT]](s16)23 ; GFX9-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[COPY2]](s16)24 ; GFX9-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)25 ; GFX9-NEXT: SI_RETURN implicit $vgpr026 ;27 ; GFX12-LABEL: name: test_fmaximum_f1628 ; GFX12: liveins: $vgpr0, $vgpr129 ; GFX12-NEXT: {{ $}}30 ; GFX12-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr031 ; GFX12-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)32 ; GFX12-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr133 ; GFX12-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)34 ; GFX12-NEXT: [[FMAXIMUM:%[0-9]+]]:_(s16) = G_FMAXIMUM [[TRUNC]], [[TRUNC1]]35 ; GFX12-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FMAXIMUM]](s16)36 ; GFX12-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)37 ; GFX12-NEXT: SI_RETURN implicit $vgpr038 %0:_(s32) = COPY $vgpr039 %1:_(s16) = G_TRUNC %0(s32)40 %2:_(s32) = COPY $vgpr141 %3:_(s16) = G_TRUNC %2(s32)42 %4:_(s16) = G_FMAXIMUM %1, %343 %5:_(s32) = G_ANYEXT %4(s16)44 $vgpr0 = COPY %5(s32)45 SI_RETURN implicit $vgpr046...47---48name: test_fmaximum_f3249body: |50 bb.0:51 liveins: $vgpr0, $vgpr152 53 ; GFX9-LABEL: name: test_fmaximum_f3254 ; GFX9: liveins: $vgpr0, $vgpr155 ; GFX9-NEXT: {{ $}}56 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr057 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr158 ; GFX9-NEXT: [[FMAXNUM_IEEE:%[0-9]+]]:_(s32) = G_FMAXNUM_IEEE [[COPY]], [[COPY1]]59 ; GFX9-NEXT: [[FCMP:%[0-9]+]]:_(s1) = G_FCMP floatpred(ord), [[COPY]](s32), [[COPY1]]60 ; GFX9-NEXT: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 0x7FF800000000000061 ; GFX9-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[FCMP]](s1), [[FMAXNUM_IEEE]], [[C]]62 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY [[SELECT]](s32)63 ; GFX9-NEXT: $vgpr0 = COPY [[COPY2]](s32)64 ; GFX9-NEXT: SI_RETURN implicit $vgpr065 ;66 ; GFX12-LABEL: name: test_fmaximum_f3267 ; GFX12: liveins: $vgpr0, $vgpr168 ; GFX12-NEXT: {{ $}}69 ; GFX12-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr070 ; GFX12-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr171 ; GFX12-NEXT: [[FMAXIMUM:%[0-9]+]]:_(s32) = G_FMAXIMUM [[COPY]], [[COPY1]]72 ; GFX12-NEXT: $vgpr0 = COPY [[FMAXIMUM]](s32)73 ; GFX12-NEXT: SI_RETURN implicit $vgpr074 %0:_(s32) = COPY $vgpr075 %1:_(s32) = COPY $vgpr176 %2:_(s32) = G_FMAXIMUM %0, %177 $vgpr0 = COPY %2(s32)78 SI_RETURN implicit $vgpr079...80---81name: test_fmaximum_f6482body: |83 bb.0:84 liveins: $vgpr0_vgpr1, $vgpr2_vgpr385 86 ; GFX9-LABEL: name: test_fmaximum_f6487 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr388 ; GFX9-NEXT: {{ $}}89 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr190 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr391 ; GFX9-NEXT: [[FMAXNUM_IEEE:%[0-9]+]]:_(s64) = G_FMAXNUM_IEEE [[COPY]], [[COPY1]]92 ; GFX9-NEXT: [[FCMP:%[0-9]+]]:_(s1) = G_FCMP floatpred(ord), [[COPY]](s64), [[COPY1]]93 ; GFX9-NEXT: [[C:%[0-9]+]]:_(s64) = G_FCONSTANT double 0x7FF800000000000094 ; GFX9-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[FCMP]](s1), [[FMAXNUM_IEEE]], [[C]]95 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY [[SELECT]](s64)96 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[COPY2]](s64)97 ; GFX9-NEXT: SI_RETURN implicit $vgpr0_vgpr198 ;99 ; GFX12-LABEL: name: test_fmaximum_f64100 ; GFX12: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3101 ; GFX12-NEXT: {{ $}}102 ; GFX12-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1103 ; GFX12-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr3104 ; GFX12-NEXT: [[FMAXIMUM:%[0-9]+]]:_(s64) = G_FMAXIMUM [[COPY]], [[COPY1]]105 ; GFX12-NEXT: $vgpr0_vgpr1 = COPY [[FMAXIMUM]](s64)106 ; GFX12-NEXT: SI_RETURN implicit $vgpr0_vgpr1107 %0:_(s64) = COPY $vgpr0_vgpr1108 %1:_(s64) = COPY $vgpr2_vgpr3109 %2:_(s64) = G_FMAXIMUM %0, %1110 $vgpr0_vgpr1 = COPY %2(s64)111 SI_RETURN implicit $vgpr0_vgpr1112...113---114name: test_fmaximum_v2f16115body: |116 bb.0:117 liveins: $vgpr0, $vgpr1118 119 ; GFX9-LABEL: name: test_fmaximum_v2f16120 ; GFX9: liveins: $vgpr0, $vgpr1121 ; GFX9-NEXT: {{ $}}122 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0123 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1124 ; GFX9-NEXT: [[FMAXNUM_IEEE:%[0-9]+]]:_(<2 x s16>) = G_FMAXNUM_IEEE [[COPY]], [[COPY1]]125 ; GFX9-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)126 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST]](s32)127 ; GFX9-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16128 ; GFX9-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)129 ; GFX9-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)130 ; GFX9-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)131 ; GFX9-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST1]](s32)132 ; GFX9-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)133 ; GFX9-NEXT: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32)134 ; GFX9-NEXT: [[FCMP:%[0-9]+]]:_(s1) = G_FCMP floatpred(ord), [[TRUNC]](s16), [[TRUNC2]]135 ; GFX9-NEXT: [[FCMP1:%[0-9]+]]:_(s1) = G_FCMP floatpred(ord), [[TRUNC1]](s16), [[TRUNC3]]136 ; GFX9-NEXT: [[C1:%[0-9]+]]:_(s16) = G_FCONSTANT half 0xH7E00137 ; GFX9-NEXT: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[FMAXNUM_IEEE]](<2 x s16>)138 ; GFX9-NEXT: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST2]](s32)139 ; GFX9-NEXT: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C]](s32)140 ; GFX9-NEXT: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32)141 ; GFX9-NEXT: [[SELECT:%[0-9]+]]:_(s16) = G_SELECT [[FCMP]](s1), [[TRUNC4]], [[C1]]142 ; GFX9-NEXT: [[SELECT1:%[0-9]+]]:_(s16) = G_SELECT [[FCMP1]](s1), [[TRUNC5]], [[C1]]143 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR [[SELECT]](s16), [[SELECT1]](s16)144 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY [[BUILD_VECTOR]](<2 x s16>)145 ; GFX9-NEXT: $vgpr0 = COPY [[COPY2]](<2 x s16>)146 ; GFX9-NEXT: SI_RETURN implicit $vgpr0147 ;148 ; GFX12-LABEL: name: test_fmaximum_v2f16149 ; GFX12: liveins: $vgpr0, $vgpr1150 ; GFX12-NEXT: {{ $}}151 ; GFX12-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0152 ; GFX12-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1153 ; GFX12-NEXT: [[FMAXIMUM:%[0-9]+]]:_(<2 x s16>) = G_FMAXIMUM [[COPY]], [[COPY1]]154 ; GFX12-NEXT: $vgpr0 = COPY [[FMAXIMUM]](<2 x s16>)155 ; GFX12-NEXT: SI_RETURN implicit $vgpr0156 %0:_(<2 x s16>) = COPY $vgpr0157 %1:_(<2 x s16>) = COPY $vgpr1158 %2:_(<2 x s16>) = G_FMAXIMUM %0, %1159 $vgpr0 = COPY %2(<2 x s16>)160 SI_RETURN implicit $vgpr0161...162---163name: test_fmaximum_v2f32164body: |165 bb.0:166 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3167 168 ; GFX9-LABEL: name: test_fmaximum_v2f32169 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3170 ; GFX9-NEXT: {{ $}}171 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0172 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1173 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2174 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3175 ; GFX9-NEXT: [[FMAXNUM_IEEE:%[0-9]+]]:_(s32) = G_FMAXNUM_IEEE [[COPY]], [[COPY2]]176 ; GFX9-NEXT: [[FCMP:%[0-9]+]]:_(s1) = G_FCMP floatpred(ord), [[COPY]](s32), [[COPY2]]177 ; GFX9-NEXT: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 0x7FF8000000000000178 ; GFX9-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[FCMP]](s1), [[FMAXNUM_IEEE]], [[C]]179 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY [[SELECT]](s32)180 ; GFX9-NEXT: [[FMAXNUM_IEEE1:%[0-9]+]]:_(s32) = G_FMAXNUM_IEEE [[COPY1]], [[COPY3]]181 ; GFX9-NEXT: [[FCMP1:%[0-9]+]]:_(s1) = G_FCMP floatpred(ord), [[COPY1]](s32), [[COPY3]]182 ; GFX9-NEXT: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[FCMP1]](s1), [[FMAXNUM_IEEE1]], [[C]]183 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY [[SELECT1]](s32)184 ; GFX9-NEXT: $vgpr0 = COPY [[COPY4]](s32)185 ; GFX9-NEXT: $vgpr1 = COPY [[COPY5]](s32)186 ; GFX9-NEXT: SI_RETURN implicit $vgpr0, implicit $vgpr1187 ;188 ; GFX12-LABEL: name: test_fmaximum_v2f32189 ; GFX12: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3190 ; GFX12-NEXT: {{ $}}191 ; GFX12-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0192 ; GFX12-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1193 ; GFX12-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2194 ; GFX12-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3195 ; GFX12-NEXT: [[FMAXIMUM:%[0-9]+]]:_(s32) = G_FMAXIMUM [[COPY]], [[COPY2]]196 ; GFX12-NEXT: [[FMAXIMUM1:%[0-9]+]]:_(s32) = G_FMAXIMUM [[COPY1]], [[COPY3]]197 ; GFX12-NEXT: $vgpr0 = COPY [[FMAXIMUM]](s32)198 ; GFX12-NEXT: $vgpr1 = COPY [[FMAXIMUM1]](s32)199 ; GFX12-NEXT: SI_RETURN implicit $vgpr0, implicit $vgpr1200 %0:_(s32) = COPY $vgpr0201 %1:_(s32) = COPY $vgpr1202 %2:_(<2 x s32>) = G_BUILD_VECTOR %0(s32), %1(s32)203 %3:_(s32) = COPY $vgpr2204 %4:_(s32) = COPY $vgpr3205 %5:_(<2 x s32>) = G_BUILD_VECTOR %3(s32), %4(s32)206 %6:_(<2 x s32>) = G_FMAXIMUM %2, %5207 %7:_(s32), %8:_(s32) = G_UNMERGE_VALUES %6(<2 x s32>)208 $vgpr0 = COPY %7(s32)209 $vgpr1 = COPY %8(s32)210 SI_RETURN implicit $vgpr0, implicit $vgpr1211...212---213name: test_fmaximum_nsz_f32214body: |215 bb.0:216 liveins: $vgpr0, $vgpr1217 218 ; GFX9-LABEL: name: test_fmaximum_nsz_f32219 ; GFX9: liveins: $vgpr0, $vgpr1220 ; GFX9-NEXT: {{ $}}221 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0222 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1223 ; GFX9-NEXT: [[FMAXNUM_IEEE:%[0-9]+]]:_(s32) = G_FMAXNUM_IEEE [[COPY]], [[COPY1]]224 ; GFX9-NEXT: [[FCMP:%[0-9]+]]:_(s1) = G_FCMP floatpred(ord), [[COPY]](s32), [[COPY1]]225 ; GFX9-NEXT: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 0x7FF8000000000000226 ; GFX9-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[FCMP]](s1), [[FMAXNUM_IEEE]], [[C]]227 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY [[SELECT]](s32)228 ; GFX9-NEXT: $vgpr0 = COPY [[COPY2]](s32)229 ; GFX9-NEXT: SI_RETURN implicit $vgpr0230 ;231 ; GFX12-LABEL: name: test_fmaximum_nsz_f32232 ; GFX12: liveins: $vgpr0, $vgpr1233 ; GFX12-NEXT: {{ $}}234 ; GFX12-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0235 ; GFX12-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1236 ; GFX12-NEXT: [[FMAXIMUM:%[0-9]+]]:_(s32) = nsz G_FMAXIMUM [[COPY]], [[COPY1]]237 ; GFX12-NEXT: $vgpr0 = COPY [[FMAXIMUM]](s32)238 ; GFX12-NEXT: SI_RETURN implicit $vgpr0239 %0:_(s32) = COPY $vgpr0240 %1:_(s32) = COPY $vgpr1241 %2:_(s32) = nsz G_FMAXIMUM %0, %1242 $vgpr0 = COPY %2(s32)243 SI_RETURN implicit $vgpr0244...245---246name: test_fmaximum_nnan_f32247body: |248 bb.0:249 liveins: $vgpr0, $vgpr1250 251 ; GFX9-LABEL: name: test_fmaximum_nnan_f32252 ; GFX9: liveins: $vgpr0, $vgpr1253 ; GFX9-NEXT: {{ $}}254 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0255 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1256 ; GFX9-NEXT: [[FMAXNUM_IEEE:%[0-9]+]]:_(s32) = G_FMAXNUM_IEEE [[COPY]], [[COPY1]]257 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY [[FMAXNUM_IEEE]](s32)258 ; GFX9-NEXT: $vgpr0 = COPY [[COPY2]](s32)259 ; GFX9-NEXT: SI_RETURN implicit $vgpr0260 ;261 ; GFX12-LABEL: name: test_fmaximum_nnan_f32262 ; GFX12: liveins: $vgpr0, $vgpr1263 ; GFX12-NEXT: {{ $}}264 ; GFX12-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0265 ; GFX12-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1266 ; GFX12-NEXT: [[FMAXIMUM:%[0-9]+]]:_(s32) = nnan G_FMAXIMUM [[COPY]], [[COPY1]]267 ; GFX12-NEXT: $vgpr0 = COPY [[FMAXIMUM]](s32)268 ; GFX12-NEXT: SI_RETURN implicit $vgpr0269 %0:_(s32) = COPY $vgpr0270 %1:_(s32) = COPY $vgpr1271 %2:_(s32) = nnan G_FMAXIMUM %0, %1272 $vgpr0 = COPY %2(s32)273 SI_RETURN implicit $vgpr0274...275 276