388 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn -run-pass=amdgpu-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s3 4---5name: test_f16_poszero_nsz6tracksRegLiveness: true7body: |8 bb.0:9 liveins: $vgpr010 11 ; CHECK-LABEL: name: test_f16_poszero_nsz12 ; CHECK: liveins: $vgpr013 ; CHECK-NEXT: {{ $}}14 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr015 ; CHECK-NEXT: %input:_(s16) = G_TRUNC [[COPY]](s32)16 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s16) = G_FNEG %input17 ; CHECK-NEXT: [[FCANONICALIZE:%[0-9]+]]:_(s16) = G_FCANONICALIZE [[FNEG]]18 ; CHECK-NEXT: %res:_(s32) = G_ANYEXT [[FCANONICALIZE]](s16)19 ; CHECK-NEXT: $vgpr0 = COPY %res(s32)20 %0:_(s32) = COPY $vgpr021 %input:_(s16) = G_TRUNC %022 %cst:_(s16) = G_FCONSTANT half 0.023 %sub:_(s16) = nsz G_FSUB %cst, %input24 %res:_(s32) = G_ANYEXT %sub25 $vgpr0 = COPY %res26...27 28---29name: test_f16_poszero_nonsz_nofold30tracksRegLiveness: true31body: |32 bb.0:33 liveins: $vgpr034 35 ; CHECK-LABEL: name: test_f16_poszero_nonsz_nofold36 ; CHECK: liveins: $vgpr037 ; CHECK-NEXT: {{ $}}38 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr039 ; CHECK-NEXT: %input:_(s16) = G_TRUNC [[COPY]](s32)40 ; CHECK-NEXT: %cst:_(s16) = G_FCONSTANT half 0xH000041 ; CHECK-NEXT: %sub:_(s16) = G_FSUB %cst, %input42 ; CHECK-NEXT: %res:_(s32) = G_ANYEXT %sub(s16)43 ; CHECK-NEXT: $vgpr0 = COPY %res(s32)44 %0:_(s32) = COPY $vgpr045 %input:_(s16) = G_TRUNC %046 %cst:_(s16) = G_FCONSTANT half 0.047 %sub:_(s16) = G_FSUB %cst, %input48 %res:_(s32) = G_ANYEXT %sub49 $vgpr0 = COPY %res50...51 52---53name: test_f16_negzero54tracksRegLiveness: true55body: |56 bb.0:57 liveins: $vgpr058 59 ; CHECK-LABEL: name: test_f16_negzero60 ; CHECK: liveins: $vgpr061 ; CHECK-NEXT: {{ $}}62 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr063 ; CHECK-NEXT: %input:_(s16) = G_TRUNC [[COPY]](s32)64 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s16) = G_FNEG %input65 ; CHECK-NEXT: [[FCANONICALIZE:%[0-9]+]]:_(s16) = G_FCANONICALIZE [[FNEG]]66 ; CHECK-NEXT: %res:_(s32) = G_ANYEXT [[FCANONICALIZE]](s16)67 ; CHECK-NEXT: $vgpr0 = COPY %res(s32)68 %0:_(s32) = COPY $vgpr069 %input:_(s16) = G_TRUNC %070 %cst:_(s16) = G_FCONSTANT half -0.071 %sub:_(s16) = G_FSUB %cst, %input72 %res:_(s32) = G_ANYEXT %sub73 $vgpr0 = COPY %res74...75 76---77name: test_f32_poszero_nsz78tracksRegLiveness: true79body: |80 bb.0:81 liveins: $vgpr082 83 ; CHECK-LABEL: name: test_f32_poszero_nsz84 ; CHECK: liveins: $vgpr085 ; CHECK-NEXT: {{ $}}86 ; CHECK-NEXT: %input:_(s32) = COPY $vgpr087 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG %input88 ; CHECK-NEXT: [[FCANONICALIZE:%[0-9]+]]:_(s32) = G_FCANONICALIZE [[FNEG]]89 ; CHECK-NEXT: $vgpr0 = COPY [[FCANONICALIZE]](s32)90 %input:_(s32) = COPY $vgpr091 %cst:_(s32) = G_FCONSTANT float 0.092 %sub:_(s32) = nsz G_FSUB %cst, %input93 $vgpr0 = COPY %sub94...95 96---97name: test_f32_poszero_nonsz_nofold98tracksRegLiveness: true99body: |100 bb.0:101 liveins: $vgpr0102 103 ; CHECK-LABEL: name: test_f32_poszero_nonsz_nofold104 ; CHECK: liveins: $vgpr0105 ; CHECK-NEXT: {{ $}}106 ; CHECK-NEXT: %input:_(s32) = COPY $vgpr0107 ; CHECK-NEXT: %cst:_(s32) = G_FCONSTANT float 0.000000e+00108 ; CHECK-NEXT: %sub:_(s32) = G_FSUB %cst, %input109 ; CHECK-NEXT: $vgpr0 = COPY %sub(s32)110 %input:_(s32) = COPY $vgpr0111 %cst:_(s32) = G_FCONSTANT float 0.0112 %sub:_(s32) = G_FSUB %cst, %input113 $vgpr0 = COPY %sub114...115 116---117name: test_f32_negzero118tracksRegLiveness: true119body: |120 bb.0:121 liveins: $vgpr0122 123 ; CHECK-LABEL: name: test_f32_negzero124 ; CHECK: liveins: $vgpr0125 ; CHECK-NEXT: {{ $}}126 ; CHECK-NEXT: %input:_(s32) = COPY $vgpr0127 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG %input128 ; CHECK-NEXT: [[FCANONICALIZE:%[0-9]+]]:_(s32) = G_FCANONICALIZE [[FNEG]]129 ; CHECK-NEXT: $vgpr0 = COPY [[FCANONICALIZE]](s32)130 %input:_(s32) = COPY $vgpr0131 %cst:_(s32) = G_FCONSTANT float -0.0132 %sub:_(s32) = G_FSUB %cst, %input133 $vgpr0 = COPY %sub134...135 136---137name: test_f64_poszero_nsz138tracksRegLiveness: true139body: |140 bb.0:141 liveins: $vgpr0_vgpr1142 143 ; CHECK-LABEL: name: test_f64_poszero_nsz144 ; CHECK: liveins: $vgpr0_vgpr1145 ; CHECK-NEXT: {{ $}}146 ; CHECK-NEXT: %input:_(s64) = COPY $vgpr0_vgpr1147 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s64) = G_FNEG %input148 ; CHECK-NEXT: [[FCANONICALIZE:%[0-9]+]]:_(s64) = G_FCANONICALIZE [[FNEG]]149 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[FCANONICALIZE]](s64)150 %input:_(s64) = COPY $vgpr0_vgpr1151 %cst:_(s64) = G_FCONSTANT double 0.0152 %sub:_(s64) = nsz G_FSUB %cst, %input153 $vgpr0_vgpr1 = COPY %sub154...155 156---157name: test_f64_poszero_nonsz_nofold158tracksRegLiveness: true159body: |160 bb.0:161 liveins: $vgpr0_vgpr1162 163 ; CHECK-LABEL: name: test_f64_poszero_nonsz_nofold164 ; CHECK: liveins: $vgpr0_vgpr1165 ; CHECK-NEXT: {{ $}}166 ; CHECK-NEXT: %input:_(s64) = COPY $vgpr0_vgpr1167 ; CHECK-NEXT: %cst:_(s64) = G_FCONSTANT double 0.000000e+00168 ; CHECK-NEXT: %sub:_(s64) = G_FSUB %cst, %input169 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY %sub(s64)170 %input:_(s64) = COPY $vgpr0_vgpr1171 %cst:_(s64) = G_FCONSTANT double 0.0172 %sub:_(s64) = G_FSUB %cst, %input173 $vgpr0_vgpr1 = COPY %sub174...175 176---177name: test_f64_negzero178tracksRegLiveness: true179body: |180 bb.0:181 liveins: $vgpr0_vgpr1182 183 ; CHECK-LABEL: name: test_f64_negzero184 ; CHECK: liveins: $vgpr0_vgpr1185 ; CHECK-NEXT: {{ $}}186 ; CHECK-NEXT: %input:_(s64) = COPY $vgpr0_vgpr1187 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s64) = G_FNEG %input188 ; CHECK-NEXT: [[FCANONICALIZE:%[0-9]+]]:_(s64) = G_FCANONICALIZE [[FNEG]]189 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[FCANONICALIZE]](s64)190 %input:_(s64) = COPY $vgpr0_vgpr1191 %cst:_(s64) = G_FCONSTANT double -0.0192 %sub:_(s64) = G_FSUB %cst, %input193 $vgpr0_vgpr1 = COPY %sub194...195 196---197name: test_v4f16_poszero_nsz198tracksRegLiveness: true199body: |200 bb.0:201 liveins: $vgpr0_vgpr1202 203 ; CHECK-LABEL: name: test_v4f16_poszero_nsz204 ; CHECK: liveins: $vgpr0_vgpr1205 ; CHECK-NEXT: {{ $}}206 ; CHECK-NEXT: %input:_(<4 x s16>) = COPY $vgpr0_vgpr1207 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(<4 x s16>) = G_FNEG %input208 ; CHECK-NEXT: [[FCANONICALIZE:%[0-9]+]]:_(<4 x s16>) = G_FCANONICALIZE [[FNEG]]209 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[FCANONICALIZE]](<4 x s16>)210 %input:_(<4 x s16>) = COPY $vgpr0_vgpr1211 %cst:_(s16) = G_FCONSTANT half 0.0212 %veccst:_(<4 x s16>) = G_BUILD_VECTOR %cst, %cst, %cst, %cst213 %sub:_(<4 x s16>) = nsz G_FSUB %veccst, %input214 $vgpr0_vgpr1 = COPY %sub215...216 217---218name: test_v4f16_poszero_nonsz_nofold219tracksRegLiveness: true220body: |221 bb.0:222 liveins: $vgpr0_vgpr1223 224 ; CHECK-LABEL: name: test_v4f16_poszero_nonsz_nofold225 ; CHECK: liveins: $vgpr0_vgpr1226 ; CHECK-NEXT: {{ $}}227 ; CHECK-NEXT: %input:_(<4 x s16>) = COPY $vgpr0_vgpr1228 ; CHECK-NEXT: %cst:_(s16) = G_FCONSTANT half 0xH0000229 ; CHECK-NEXT: %veccst:_(<4 x s16>) = G_BUILD_VECTOR %cst(s16), %cst(s16), %cst(s16), %cst(s16)230 ; CHECK-NEXT: %sub:_(<4 x s16>) = G_FSUB %veccst, %input231 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY %sub(<4 x s16>)232 %input:_(<4 x s16>) = COPY $vgpr0_vgpr1233 %cst:_(s16) = G_FCONSTANT half 0.0234 %veccst:_(<4 x s16>) = G_BUILD_VECTOR %cst, %cst, %cst, %cst235 %sub:_(<4 x s16>) = G_FSUB %veccst, %input236 $vgpr0_vgpr1 = COPY %sub237...238 239---240name: test_v4f16_negzero241tracksRegLiveness: true242body: |243 bb.0:244 liveins: $vgpr0_vgpr1245 246 ; CHECK-LABEL: name: test_v4f16_negzero247 ; CHECK: liveins: $vgpr0_vgpr1248 ; CHECK-NEXT: {{ $}}249 ; CHECK-NEXT: %input:_(<4 x s16>) = COPY $vgpr0_vgpr1250 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(<4 x s16>) = G_FNEG %input251 ; CHECK-NEXT: [[FCANONICALIZE:%[0-9]+]]:_(<4 x s16>) = G_FCANONICALIZE [[FNEG]]252 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[FCANONICALIZE]](<4 x s16>)253 %input:_(<4 x s16>) = COPY $vgpr0_vgpr1254 %cst:_(s16) = G_FCONSTANT half -0.0255 %veccst:_(<4 x s16>) = G_BUILD_VECTOR %cst, %cst, %cst, %cst256 %sub:_(<4 x s16>) = G_FSUB %veccst, %input257 $vgpr0_vgpr1 = COPY %sub258...259 260---261name: test_v4f32262tracksRegLiveness: true263body: |264 bb.0:265 liveins: $vgpr0_vgpr1_vgpr2_vgpr3266 267 ; CHECK-LABEL: name: test_v4f32268 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3269 ; CHECK-NEXT: {{ $}}270 ; CHECK-NEXT: %input:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3271 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(<4 x s32>) = G_FNEG %input272 ; CHECK-NEXT: [[FCANONICALIZE:%[0-9]+]]:_(<4 x s32>) = G_FCANONICALIZE [[FNEG]]273 ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[FCANONICALIZE]](<4 x s32>)274 %input:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3275 %cst:_(s32) = G_FCONSTANT float 0.0276 %veccst:_(<4 x s32>) = G_BUILD_VECTOR %cst, %cst, %cst, %cst277 %sub:_(<4 x s32>) = nsz G_FSUB %veccst, %input278 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %sub279...280 281---282name: test_v4f32_negzero283tracksRegLiveness: true284body: |285 bb.0:286 liveins: $vgpr0_vgpr1_vgpr2_vgpr3287 288 ; CHECK-LABEL: name: test_v4f32_negzero289 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3290 ; CHECK-NEXT: {{ $}}291 ; CHECK-NEXT: %input:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3292 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(<4 x s32>) = G_FNEG %input293 ; CHECK-NEXT: [[FCANONICALIZE:%[0-9]+]]:_(<4 x s32>) = G_FCANONICALIZE [[FNEG]]294 ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[FCANONICALIZE]](<4 x s32>)295 %input:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3296 %cst:_(s32) = G_FCONSTANT float -0.0297 %veccst:_(<4 x s32>) = G_BUILD_VECTOR %cst, %cst, %cst, %cst298 %sub:_(<4 x s32>) = G_FSUB %veccst, %input299 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %sub300...301 302---303name: test_v4f32_negzero_undef_elt304tracksRegLiveness: true305body: |306 bb.0:307 liveins: $vgpr0_vgpr1_vgpr2_vgpr3308 309 ; CHECK-LABEL: name: test_v4f32_negzero_undef_elt310 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3311 ; CHECK-NEXT: {{ $}}312 ; CHECK-NEXT: %input:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3313 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(<4 x s32>) = G_FNEG %input314 ; CHECK-NEXT: [[FCANONICALIZE:%[0-9]+]]:_(<4 x s32>) = G_FCANONICALIZE [[FNEG]]315 ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[FCANONICALIZE]](<4 x s32>)316 %input:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3317 %cst:_(s32) = G_FCONSTANT float -0.0318 %undef:_(s32) = G_IMPLICIT_DEF319 %veccst:_(<4 x s32>) = G_BUILD_VECTOR %cst, %undef, %cst, %cst320 %sub:_(<4 x s32>) = G_FSUB %veccst, %input321 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %sub322...323 324---325name: test_v4f32_poszero_undef_elt326tracksRegLiveness: true327body: |328 bb.0:329 liveins: $vgpr0_vgpr1_vgpr2_vgpr3330 331 ; CHECK-LABEL: name: test_v4f32_poszero_undef_elt332 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3333 ; CHECK-NEXT: {{ $}}334 ; CHECK-NEXT: %input:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3335 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(<4 x s32>) = G_FNEG %input336 ; CHECK-NEXT: [[FCANONICALIZE:%[0-9]+]]:_(<4 x s32>) = G_FCANONICALIZE [[FNEG]]337 ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[FCANONICALIZE]](<4 x s32>)338 %input:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3339 %cst:_(s32) = G_FCONSTANT float 0.0340 %undef:_(s32) = G_IMPLICIT_DEF341 %veccst:_(<4 x s32>) = G_BUILD_VECTOR %cst, %undef, %cst, %cst342 %sub:_(<4 x s32>) = nsz G_FSUB %veccst, %input343 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %sub344...345 346---347name: test_v2f64348tracksRegLiveness: true349body: |350 bb.0:351 liveins: $vgpr0_vgpr1_vgpr2_vgpr3352 353 ; CHECK-LABEL: name: test_v2f64354 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3355 ; CHECK-NEXT: {{ $}}356 ; CHECK-NEXT: %input:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3357 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(<2 x s64>) = G_FNEG %input358 ; CHECK-NEXT: [[FCANONICALIZE:%[0-9]+]]:_(<2 x s64>) = G_FCANONICALIZE [[FNEG]]359 ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[FCANONICALIZE]](<2 x s64>)360 %input:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3361 %cst:_(s64) = G_FCONSTANT double 0.0362 %veccst:_(<2 x s64>) = G_BUILD_VECTOR %cst, %cst363 %sub:_(<2 x s64>) = nsz G_FSUB %veccst, %input364 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %sub365...366 367---368name: test_v2f64_negzero369tracksRegLiveness: true370body: |371 bb.0:372 liveins: $vgpr0_vgpr1_vgpr2_vgpr3373 374 ; CHECK-LABEL: name: test_v2f64_negzero375 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3376 ; CHECK-NEXT: {{ $}}377 ; CHECK-NEXT: %input:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3378 ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(<2 x s64>) = G_FNEG %input379 ; CHECK-NEXT: [[FCANONICALIZE:%[0-9]+]]:_(<2 x s64>) = G_FCANONICALIZE [[FNEG]]380 ; CHECK-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[FCANONICALIZE]](<2 x s64>)381 %input:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3382 %cst:_(s64) = G_FCONSTANT double -0.0383 %veccst:_(<2 x s64>) = G_BUILD_VECTOR %cst, %cst384 %sub:_(<2 x s64>) = G_FSUB %veccst, %input385 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %sub386...387 388