xref: /llvm-project/llvm/test/CodeGen/AMDGPU/GlobalISel/combine-trunc-shift.mir (revision 9e9907f1cfa424366fba58d9520f9305b537cec9)
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