13612d9eaSPierre van Houtryve# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2*9e9907f1SFangrui Song# RUN: llc -mtriple=amdgcn -run-pass=amdgpu-postlegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s 33612d9eaSPierre van Houtryve 43612d9eaSPierre van Houtryve--- 53612d9eaSPierre van Houtryvename: trunc_s32_shl_s64_5 63612d9eaSPierre van Houtryvelegalized: true 73612d9eaSPierre van HoutryvetracksRegLiveness: true 83612d9eaSPierre van Houtryvebody: | 93612d9eaSPierre van Houtryve bb.0: 103612d9eaSPierre van Houtryve liveins: $vgpr0_vgpr1 113612d9eaSPierre van Houtryve 123612d9eaSPierre van Houtryve ; CHECK-LABEL: name: trunc_s32_shl_s64_5 133612d9eaSPierre van Houtryve ; CHECK: liveins: $vgpr0_vgpr1 143612d9eaSPierre van Houtryve ; CHECK-NEXT: {{ $}} 153612d9eaSPierre van Houtryve ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 163612d9eaSPierre van Houtryve ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 173612d9eaSPierre van Houtryve ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64) 183612d9eaSPierre van Houtryve ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[TRUNC]], [[C]](s32) 193612d9eaSPierre van Houtryve ; CHECK-NEXT: $vgpr0 = COPY [[SHL]](s32) 203612d9eaSPierre van Houtryve %0:_(s64) = COPY $vgpr0_vgpr1 213612d9eaSPierre van Houtryve %1:_(s32) = G_CONSTANT i32 1 223612d9eaSPierre van Houtryve %2:_(s64) = G_SHL %0:_, %1 233612d9eaSPierre van Houtryve %3:_(s32) = G_TRUNC %2 243612d9eaSPierre van Houtryve $vgpr0 = COPY %3 253612d9eaSPierre van Houtryve... 263612d9eaSPierre van Houtryve 273612d9eaSPierre van Houtryve--- 283612d9eaSPierre van Houtryvename: trunc_s16_shl_s32_5 293612d9eaSPierre van Houtryvelegalized: true 303612d9eaSPierre van HoutryvetracksRegLiveness: true 313612d9eaSPierre van Houtryvebody: | 323612d9eaSPierre van Houtryve bb.0: 333612d9eaSPierre van Houtryve liveins: $vgpr0 343612d9eaSPierre van Houtryve 353612d9eaSPierre van Houtryve ; CHECK-LABEL: name: trunc_s16_shl_s32_5 363612d9eaSPierre van Houtryve ; CHECK: liveins: $vgpr0 373612d9eaSPierre van Houtryve ; CHECK-NEXT: {{ $}} 383612d9eaSPierre van Houtryve ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 393612d9eaSPierre van Houtryve ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 403612d9eaSPierre van Houtryve ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s32) 413612d9eaSPierre van Houtryve ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s32) 423612d9eaSPierre van Houtryve ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s16) 433612d9eaSPierre van Houtryve %0:_(s32) = COPY $vgpr0 443612d9eaSPierre van Houtryve %1:_(s32) = G_CONSTANT i32 1 453612d9eaSPierre van Houtryve %2:_(s32) = G_SHL %0:_, %1 463612d9eaSPierre van Houtryve %3:_(s16) = G_TRUNC %2 473612d9eaSPierre van Houtryve S_ENDPGM 0, implicit %3 483612d9eaSPierre van Houtryve 493612d9eaSPierre van Houtryve... 503612d9eaSPierre van Houtryve 513612d9eaSPierre van Houtryve--- 523612d9eaSPierre van Houtryvename: trunc_s16_shl_s64_5 533612d9eaSPierre van Houtryvelegalized: true 543612d9eaSPierre van HoutryvetracksRegLiveness: true 553612d9eaSPierre van Houtryvebody: | 563612d9eaSPierre van Houtryve bb.0: 573612d9eaSPierre van Houtryve liveins: $vgpr0_vgpr1 583612d9eaSPierre van Houtryve 593612d9eaSPierre van Houtryve ; CHECK-LABEL: name: trunc_s16_shl_s64_5 603612d9eaSPierre van Houtryve ; CHECK: liveins: $vgpr0_vgpr1 613612d9eaSPierre van Houtryve ; CHECK-NEXT: {{ $}} 623612d9eaSPierre van Houtryve ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 633612d9eaSPierre van Houtryve ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 643612d9eaSPierre van Houtryve ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY]], [[C]](s32) 653612d9eaSPierre van Houtryve ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s64) 663612d9eaSPierre van Houtryve ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s16) 673612d9eaSPierre van Houtryve %0:_(s64) = COPY $vgpr0_vgpr1 683612d9eaSPierre van Houtryve %1:_(s32) = G_CONSTANT i32 1 693612d9eaSPierre van Houtryve %2:_(s64) = G_SHL %0:_, %1 703612d9eaSPierre van Houtryve %3:_(s16) = G_TRUNC %2 713612d9eaSPierre van Houtryve S_ENDPGM 0, implicit %3 723612d9eaSPierre van Houtryve 733612d9eaSPierre van Houtryve... 743612d9eaSPierre van Houtryve 753612d9eaSPierre van Houtryve--- 763612d9eaSPierre van Houtryvename: s16_trunc_s64_lshr_16 773612d9eaSPierre van HoutryvetracksRegLiveness: true 783612d9eaSPierre van Houtryvebody: | 793612d9eaSPierre van Houtryve bb.0: 803612d9eaSPierre van Houtryve liveins: $vgpr0 813612d9eaSPierre van Houtryve ; CHECK-LABEL: name: s16_trunc_s64_lshr_16 823612d9eaSPierre van Houtryve ; CHECK: liveins: $vgpr0 833612d9eaSPierre van Houtryve ; CHECK-NEXT: {{ $}} 843612d9eaSPierre van Houtryve ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 853612d9eaSPierre van Houtryve ; CHECK-NEXT: %amt:_(s32) = G_CONSTANT i32 16 863612d9eaSPierre van Houtryve ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], %amt(s32) 873612d9eaSPierre van Houtryve ; CHECK-NEXT: %trunc:_(s16) = G_TRUNC [[LSHR]](s32) 883612d9eaSPierre van Houtryve ; CHECK-NEXT: %foo:_(s16) = G_CONSTANT i16 55 893612d9eaSPierre van Houtryve ; CHECK-NEXT: %keep:_(s32) = G_MERGE_VALUES %trunc(s16), %foo(s16) 903612d9eaSPierre van Houtryve ; CHECK-NEXT: $vgpr0 = COPY %keep(s32) 913612d9eaSPierre van Houtryve %0:_(s32) = COPY $vgpr0 923612d9eaSPierre van Houtryve %src:_(s64) = G_ZEXT %0 933612d9eaSPierre van Houtryve %amt:_(s32) = G_CONSTANT i32 16 943612d9eaSPierre van Houtryve %shift:_(s64) = G_LSHR %src, %amt 953612d9eaSPierre van Houtryve %trunc:_(s16) = G_TRUNC %shift 963612d9eaSPierre van Houtryve %foo:_(s16) = G_CONSTANT i16 55 973612d9eaSPierre van Houtryve %keep:_(s32) = G_MERGE_VALUES %trunc, %foo 983612d9eaSPierre van Houtryve $vgpr0 = COPY %keep 993612d9eaSPierre van Houtryve... 1003612d9eaSPierre van Houtryve 1013612d9eaSPierre van Houtryve--- 1023612d9eaSPierre van Houtryvename: s16_trunc_s64_ashr_16 1033612d9eaSPierre van HoutryvetracksRegLiveness: true 1043612d9eaSPierre van Houtryvebody: | 1053612d9eaSPierre van Houtryve bb.0: 1063612d9eaSPierre van Houtryve liveins: $vgpr0 1073612d9eaSPierre van Houtryve ; CHECK-LABEL: name: s16_trunc_s64_ashr_16 1083612d9eaSPierre van Houtryve ; CHECK: liveins: $vgpr0 1093612d9eaSPierre van Houtryve ; CHECK-NEXT: {{ $}} 1103612d9eaSPierre van Houtryve ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 1113612d9eaSPierre van Houtryve ; CHECK-NEXT: %amt:_(s32) = G_CONSTANT i32 16 1123612d9eaSPierre van Houtryve ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[COPY]], %amt(s32) 1133612d9eaSPierre van Houtryve ; CHECK-NEXT: %trunc:_(s16) = G_TRUNC [[ASHR]](s32) 1143612d9eaSPierre van Houtryve ; CHECK-NEXT: %foo:_(s16) = G_CONSTANT i16 55 1153612d9eaSPierre van Houtryve ; CHECK-NEXT: %keep:_(s32) = G_MERGE_VALUES %trunc(s16), %foo(s16) 1163612d9eaSPierre van Houtryve ; CHECK-NEXT: $vgpr0 = COPY %keep(s32) 1173612d9eaSPierre van Houtryve %0:_(s32) = COPY $vgpr0 1183612d9eaSPierre van Houtryve %src:_(s64) = G_ZEXT %0 1193612d9eaSPierre van Houtryve %amt:_(s32) = G_CONSTANT i32 16 1203612d9eaSPierre van Houtryve %shift:_(s64) = G_ASHR %src, %amt 1213612d9eaSPierre van Houtryve %trunc:_(s16) = G_TRUNC %shift 1223612d9eaSPierre van Houtryve %foo:_(s16) = G_CONSTANT i16 55 1233612d9eaSPierre van Houtryve %keep:_(s32) = G_MERGE_VALUES %trunc, %foo 1243612d9eaSPierre van Houtryve $vgpr0 = COPY %keep 1253612d9eaSPierre van Houtryve... 1263612d9eaSPierre van Houtryve 1273612d9eaSPierre van Houtryve--- 1283612d9eaSPierre van Houtryvename: s16_trunc_s64_lshr_17_nofold 1293612d9eaSPierre van HoutryvetracksRegLiveness: true 1303612d9eaSPierre van Houtryvebody: | 1313612d9eaSPierre van Houtryve bb.0: 1323612d9eaSPierre van Houtryve liveins: $vgpr0 1333612d9eaSPierre van Houtryve ; CHECK-LABEL: name: s16_trunc_s64_lshr_17_nofold 1343612d9eaSPierre van Houtryve ; CHECK: liveins: $vgpr0 1353612d9eaSPierre van Houtryve ; CHECK-NEXT: {{ $}} 1363612d9eaSPierre van Houtryve ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 1373612d9eaSPierre van Houtryve ; CHECK-NEXT: %src:_(s64) = G_ZEXT [[COPY]](s32) 1383612d9eaSPierre van Houtryve ; CHECK-NEXT: %amt:_(s32) = G_CONSTANT i32 17 1393612d9eaSPierre van Houtryve ; CHECK-NEXT: %shift:_(s64) = G_LSHR %src, %amt(s32) 1403612d9eaSPierre van Houtryve ; CHECK-NEXT: %trunc:_(s16) = G_TRUNC %shift(s64) 1413612d9eaSPierre van Houtryve ; CHECK-NEXT: %foo:_(s16) = G_CONSTANT i16 55 1423612d9eaSPierre van Houtryve ; CHECK-NEXT: %keep:_(s32) = G_MERGE_VALUES %trunc(s16), %foo(s16) 1433612d9eaSPierre van Houtryve ; CHECK-NEXT: $vgpr0 = COPY %keep(s32) 1443612d9eaSPierre van Houtryve %0:_(s32) = COPY $vgpr0 1453612d9eaSPierre van Houtryve %src:_(s64) = G_ZEXT %0 1463612d9eaSPierre van Houtryve %amt:_(s32) = G_CONSTANT i32 17 1473612d9eaSPierre van Houtryve %shift:_(s64) = G_LSHR %src, %amt 1483612d9eaSPierre van Houtryve %trunc:_(s16) = G_TRUNC %shift 1493612d9eaSPierre van Houtryve %foo:_(s16) = G_CONSTANT i16 55 1503612d9eaSPierre van Houtryve %keep:_(s32) = G_MERGE_VALUES %trunc, %foo 1513612d9eaSPierre van Houtryve $vgpr0 = COPY %keep 1523612d9eaSPierre van Houtryve... 1533612d9eaSPierre van Houtryve 1543612d9eaSPierre van Houtryve--- 1553612d9eaSPierre van Houtryvename: s26_trunc_s64_lshr_6 1563612d9eaSPierre van HoutryvetracksRegLiveness: true 1573612d9eaSPierre van Houtryvebody: | 1583612d9eaSPierre van Houtryve bb.0: 1593612d9eaSPierre van Houtryve liveins: $vgpr0 1603612d9eaSPierre van Houtryve ; CHECK-LABEL: name: s26_trunc_s64_lshr_6 1613612d9eaSPierre van Houtryve ; CHECK: liveins: $vgpr0 1623612d9eaSPierre van Houtryve ; CHECK-NEXT: {{ $}} 1633612d9eaSPierre van Houtryve ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 1643612d9eaSPierre van Houtryve ; CHECK-NEXT: %amt:_(s32) = G_CONSTANT i32 6 1653612d9eaSPierre van Houtryve ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], %amt(s32) 1663612d9eaSPierre van Houtryve ; CHECK-NEXT: %trunc:_(s26) = G_TRUNC [[LSHR]](s32) 1673612d9eaSPierre van Houtryve ; CHECK-NEXT: %foo:_(s26) = G_CONSTANT i26 55 1683612d9eaSPierre van Houtryve ; CHECK-NEXT: %keep0:_(s26) = G_ADD %trunc, %foo 1693612d9eaSPierre van Houtryve ; CHECK-NEXT: %keep1:_(s32) = G_ANYEXT %keep0(s26) 1703612d9eaSPierre van Houtryve ; CHECK-NEXT: $vgpr0 = COPY %keep1(s32) 1713612d9eaSPierre van Houtryve %0:_(s32) = COPY $vgpr0 1723612d9eaSPierre van Houtryve %src:_(s64) = G_ZEXT %0 1733612d9eaSPierre van Houtryve %amt:_(s32) = G_CONSTANT i32 6 1743612d9eaSPierre van Houtryve %shift:_(s64) = G_LSHR %src, %amt 1753612d9eaSPierre van Houtryve %trunc:_(s26) = G_TRUNC %shift 1763612d9eaSPierre van Houtryve %foo:_(s26) = G_CONSTANT i26 55 1773612d9eaSPierre van Houtryve %keep0:_(s26) = G_ADD %trunc, %foo 1783612d9eaSPierre van Houtryve %keep1:_(s32) = G_ANYEXT %keep0 1793612d9eaSPierre van Houtryve $vgpr0 = COPY %keep1 1803612d9eaSPierre van Houtryve... 1813612d9eaSPierre van Houtryve 1823612d9eaSPierre van Houtryve--- 1833612d9eaSPierre van Houtryvename: s26_trunc_s64_lshr_7_nofold 1843612d9eaSPierre van HoutryvetracksRegLiveness: true 1853612d9eaSPierre van Houtryvebody: | 1863612d9eaSPierre van Houtryve bb.0: 1873612d9eaSPierre van Houtryve liveins: $vgpr0 1883612d9eaSPierre van Houtryve ; CHECK-LABEL: name: s26_trunc_s64_lshr_7_nofold 1893612d9eaSPierre van Houtryve ; CHECK: liveins: $vgpr0 1903612d9eaSPierre van Houtryve ; CHECK-NEXT: {{ $}} 1913612d9eaSPierre van Houtryve ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 1923612d9eaSPierre van Houtryve ; CHECK-NEXT: %src:_(s64) = G_ZEXT [[COPY]](s32) 1933612d9eaSPierre van Houtryve ; CHECK-NEXT: %amt:_(s32) = G_CONSTANT i32 7 1943612d9eaSPierre van Houtryve ; CHECK-NEXT: %shift:_(s64) = G_LSHR %src, %amt(s32) 1953612d9eaSPierre van Houtryve ; CHECK-NEXT: %trunc:_(s26) = G_TRUNC %shift(s64) 1963612d9eaSPierre van Houtryve ; CHECK-NEXT: %foo:_(s26) = G_CONSTANT i26 55 1973612d9eaSPierre van Houtryve ; CHECK-NEXT: %keep0:_(s26) = G_ADD %trunc, %foo 1983612d9eaSPierre van Houtryve ; CHECK-NEXT: %keep1:_(s32) = G_ANYEXT %keep0(s26) 1993612d9eaSPierre van Houtryve ; CHECK-NEXT: $vgpr0 = COPY %keep1(s32) 2003612d9eaSPierre van Houtryve %0:_(s32) = COPY $vgpr0 2013612d9eaSPierre van Houtryve %src:_(s64) = G_ZEXT %0 2023612d9eaSPierre van Houtryve %amt:_(s32) = G_CONSTANT i32 7 2033612d9eaSPierre van Houtryve %shift:_(s64) = G_LSHR %src, %amt 2043612d9eaSPierre van Houtryve %trunc:_(s26) = G_TRUNC %shift 2053612d9eaSPierre van Houtryve %foo:_(s26) = G_CONSTANT i26 55 2063612d9eaSPierre van Houtryve %keep0:_(s26) = G_ADD %trunc, %foo 2073612d9eaSPierre van Houtryve %keep1:_(s32) = G_ANYEXT %keep0 2083612d9eaSPierre van Houtryve $vgpr0 = COPY %keep1 2093612d9eaSPierre van Houtryve... 210