| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py |
| # RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -run-pass=amdgpu-postlegalizer-combiner -verify-machineinstrs -o - %s | FileCheck %s |
| |
| --- |
| name: v2s16_trunc_same_bitcast_lshr16 |
| tracksRegLiveness: true |
| legalized: true |
| body: | |
| bb.0: |
| liveins: $vgpr0 |
| ; CHECK-LABEL: name: v2s16_trunc_same_bitcast_lshr16 |
| ; CHECK: liveins: $vgpr0 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: %src:_(<2 x s16>) = COPY $vgpr0 |
| ; CHECK-NEXT: $vgpr0 = COPY %src(<2 x s16>) |
| %src:_(<2 x s16>) = COPY $vgpr0 |
| %bitcast:_(s32) = G_BITCAST %src |
| %lshr_amount:_(s32) = G_CONSTANT i32 16 |
| %lshr:_(s32) = G_LSHR %bitcast, %lshr_amount |
| %root:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC %bitcast, %lshr |
| $vgpr0 = COPY %root |
| ... |
| |
| --- |
| name: v2s16_trunc_different_bitcast_lshr16 |
| tracksRegLiveness: true |
| legalized: true |
| body: | |
| bb.0: |
| liveins: $vgpr0 |
| ; CHECK-LABEL: name: v2s16_trunc_different_bitcast_lshr16 |
| ; CHECK: liveins: $vgpr0 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: %src:_(<2 x s16>) = COPY $vgpr0 |
| ; CHECK-NEXT: $vgpr0 = COPY %src(<2 x s16>) |
| %src:_(<2 x s16>) = COPY $vgpr0 |
| %bitcast0:_(s32) = G_BITCAST %src |
| %bitcast1:_(s32) = G_BITCAST %src |
| %lshr_amount:_(s32) = G_CONSTANT i32 16 |
| %lshr:_(s32) = G_LSHR %bitcast1, %lshr_amount |
| %root:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC %bitcast0, %lshr |
| $vgpr0 = COPY %root |
| ... |
| |
| --- |
| name: v2s16_trunc_same_bitcast_lshr8_nocombine |
| tracksRegLiveness: true |
| legalized: true |
| body: | |
| bb.0: |
| liveins: $vgpr0 |
| ; CHECK-LABEL: name: v2s16_trunc_same_bitcast_lshr8_nocombine |
| ; CHECK: liveins: $vgpr0 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: %src:_(<2 x s16>) = COPY $vgpr0 |
| ; CHECK-NEXT: %bitcast:_(s32) = G_BITCAST %src(<2 x s16>) |
| ; CHECK-NEXT: %lshr_amount:_(s32) = G_CONSTANT i32 8 |
| ; CHECK-NEXT: %lshr:_(s32) = G_LSHR %bitcast, %lshr_amount(s32) |
| ; CHECK-NEXT: %root:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC %bitcast(s32), %lshr(s32) |
| ; CHECK-NEXT: $vgpr0 = COPY %root(<2 x s16>) |
| %src:_(<2 x s16>) = COPY $vgpr0 |
| %bitcast:_(s32) = G_BITCAST %src |
| %lshr_amount:_(s32) = G_CONSTANT i32 8 |
| %lshr:_(s32) = G_LSHR %bitcast, %lshr_amount |
| %root:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC %bitcast, %lshr |
| $vgpr0 = COPY %root |
| ... |
| |
| --- |
| name: v2s16_same_bitcast_lshr16 |
| tracksRegLiveness: true |
| legalized: true |
| body: | |
| bb.0: |
| liveins: $vgpr0 |
| ; CHECK-LABEL: name: v2s16_same_bitcast_lshr16 |
| ; CHECK: liveins: $vgpr0 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: %src:_(<2 x s16>) = COPY $vgpr0 |
| ; CHECK-NEXT: $vgpr0 = COPY %src(<2 x s16>) |
| %src:_(<2 x s16>) = COPY $vgpr0 |
| %bitcast:_(s32) = G_BITCAST %src |
| %lshr_amount:_(s32) = G_CONSTANT i32 16 |
| %lshr:_(s32) = G_LSHR %bitcast, %lshr_amount |
| %trunclo:_(s16) = G_TRUNC %bitcast |
| %trunchi:_(s16) = G_TRUNC %lshr |
| %root:_(<2 x s16>) = G_BUILD_VECTOR %trunclo, %trunchi |
| $vgpr0 = COPY %root |
| ... |
| |
| --- |
| name: v2s16_same_bitcast_lshr8_nocombine |
| tracksRegLiveness: true |
| legalized: true |
| body: | |
| bb.0: |
| liveins: $vgpr0 |
| ; CHECK-LABEL: name: v2s16_same_bitcast_lshr8_nocombine |
| ; CHECK: liveins: $vgpr0 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: %src:_(<2 x s16>) = COPY $vgpr0 |
| ; CHECK-NEXT: %bitcast:_(s32) = G_BITCAST %src(<2 x s16>) |
| ; CHECK-NEXT: %lshr_amount:_(s32) = G_CONSTANT i32 8 |
| ; CHECK-NEXT: %lshr:_(s32) = G_LSHR %bitcast, %lshr_amount(s32) |
| ; CHECK-NEXT: %trunclo:_(s16) = G_TRUNC %bitcast(s32) |
| ; CHECK-NEXT: %trunchi:_(s16) = G_TRUNC %lshr(s32) |
| ; CHECK-NEXT: %root:_(<2 x s16>) = G_BUILD_VECTOR %trunclo(s16), %trunchi(s16) |
| ; CHECK-NEXT: $vgpr0 = COPY %root(<2 x s16>) |
| %src:_(<2 x s16>) = COPY $vgpr0 |
| %bitcast:_(s32) = G_BITCAST %src |
| %lshr_amount:_(s32) = G_CONSTANT i32 8 |
| %lshr:_(s32) = G_LSHR %bitcast, %lshr_amount |
| %trunclo:_(s16) = G_TRUNC %bitcast |
| %trunchi:_(s16) = G_TRUNC %lshr |
| %root:_(<2 x s16>) = G_BUILD_VECTOR %trunclo, %trunchi |
| $vgpr0 = COPY %root |
| ... |
| |
| --- |
| name: v2s16_undefhi |
| tracksRegLiveness: true |
| legalized: true |
| body: | |
| bb.0: |
| liveins: $vgpr0 |
| ; CHECK-LABEL: name: v2s16_undefhi |
| ; CHECK: liveins: $vgpr0 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: %src:_(<2 x s16>) = COPY $vgpr0 |
| ; CHECK-NEXT: $vgpr0 = COPY %src(<2 x s16>) |
| %src:_(<2 x s16>) = COPY $vgpr0 |
| %bitcast:_(s32) = G_BITCAST %src |
| %trunc:_(s16) = G_TRUNC %bitcast |
| %undef:_(s16) = G_IMPLICIT_DEF |
| %root:_(<2 x s16>) = G_BUILD_VECTOR %trunc, %undef |
| $vgpr0 = COPY %root |
| ... |
| |
| --- |
| name: v2s32_undefhi |
| tracksRegLiveness: true |
| legalized: true |
| body: | |
| bb.0: |
| liveins: $vgpr0_vgpr1 |
| ; CHECK-LABEL: name: v2s32_undefhi |
| ; CHECK: liveins: $vgpr0_vgpr1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: %src:_(<2 x s32>) = COPY $vgpr0_vgpr1 |
| ; CHECK-NEXT: $vgpr0_vgpr1 = COPY %src(<2 x s32>) |
| %src:_(<2 x s32>) = COPY $vgpr0_vgpr1 |
| %bitcast:_(s64) = G_BITCAST %src |
| %trunc:_(s32) = G_TRUNC %bitcast |
| %undef:_(s32) = G_IMPLICIT_DEF |
| %root:_(<2 x s32>) = G_BUILD_VECTOR %trunc, %undef |
| $vgpr0_vgpr1 = COPY %root |
| ... |