701 lines
22 KiB
Plaintext
701 lines
22 KiB
Plaintext
|
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
||
|
# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX9 %s
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_v2s16_s_s32_s_s32
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
liveins: $sgpr0, $sgpr1
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_v2s16_s_s32_s_s32
|
||
|
; GFX9: liveins: $sgpr0, $sgpr1
|
||
|
; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
|
||
|
; GFX9: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
|
||
|
; GFX9: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[COPY]], [[COPY1]]
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_PACK_LL_B32_B16_]]
|
||
|
%0:sgpr(s32) = COPY $sgpr0
|
||
|
%1:sgpr(s32) = COPY $sgpr1
|
||
|
%2:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %0, %1
|
||
|
S_ENDPGM 0, implicit %2
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_pack_lh
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
liveins: $sgpr0, $sgpr1
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_pack_lh
|
||
|
; GFX9: liveins: $sgpr0, $sgpr1
|
||
|
; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
|
||
|
; GFX9: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
|
||
|
; GFX9: [[S_PACK_LH_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LH_B32_B16 [[COPY]], [[COPY1]]
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_PACK_LH_B32_B16_]]
|
||
|
%0:sgpr(s32) = COPY $sgpr0
|
||
|
%1:sgpr(s32) = COPY $sgpr1
|
||
|
%2:sgpr(s32) = G_CONSTANT i32 16
|
||
|
%3:sgpr(s32) = G_LSHR %1, %2
|
||
|
%4:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %0, %3
|
||
|
S_ENDPGM 0, implicit %4
|
||
|
...
|
||
|
|
||
|
# There is no s_pack_hl_b32
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_pack_lh_swapped
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
liveins: $sgpr0, $sgpr1
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_pack_lh_swapped
|
||
|
; GFX9: liveins: $sgpr0, $sgpr1
|
||
|
; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
|
||
|
; GFX9: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
|
||
|
; GFX9: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 16
|
||
|
; GFX9: [[S_LSHR_B32_:%[0-9]+]]:sreg_32 = S_LSHR_B32 [[COPY1]], [[S_MOV_B32_]], implicit-def $scc
|
||
|
; GFX9: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[S_LSHR_B32_]], [[COPY]]
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_PACK_LL_B32_B16_]]
|
||
|
%0:sgpr(s32) = COPY $sgpr0
|
||
|
%1:sgpr(s32) = COPY $sgpr1
|
||
|
%2:sgpr(s32) = G_CONSTANT i32 16
|
||
|
%3:sgpr(s32) = G_LSHR %1, %2
|
||
|
%4:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %3, %0
|
||
|
S_ENDPGM 0, implicit %4
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_pack_hh
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
liveins: $sgpr0, $sgpr1
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_pack_hh
|
||
|
; GFX9: liveins: $sgpr0, $sgpr1
|
||
|
; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
|
||
|
; GFX9: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
|
||
|
; GFX9: [[S_PACK_HH_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_HH_B32_B16 [[COPY]], [[COPY1]]
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_PACK_HH_B32_B16_]]
|
||
|
%0:sgpr(s32) = COPY $sgpr0
|
||
|
%1:sgpr(s32) = COPY $sgpr1
|
||
|
%2:sgpr(s32) = G_CONSTANT i32 16
|
||
|
%3:sgpr(s32) = G_LSHR %0, %2
|
||
|
%4:sgpr(s32) = G_LSHR %1, %2
|
||
|
%5:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %3, %4
|
||
|
S_ENDPGM 0, implicit %5
|
||
|
...
|
||
|
|
||
|
# TODO: Should this use an and instead?
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_v2s16_s_s32_s_0_s32
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
liveins: $sgpr0
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_v2s16_s_s32_s_0_s32
|
||
|
; GFX9: liveins: $sgpr0
|
||
|
; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
|
||
|
; GFX9: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
|
||
|
; GFX9: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[COPY]], [[S_MOV_B32_]]
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_PACK_LL_B32_B16_]]
|
||
|
%0:sgpr(s32) = COPY $sgpr0
|
||
|
%1:sgpr(s32) = G_CONSTANT i32 0
|
||
|
%2:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %0, %1
|
||
|
S_ENDPGM 0, implicit %2
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_v2s16_s_0_s32_s_s32
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
liveins: $sgpr0
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_v2s16_s_0_s32_s_s32
|
||
|
; GFX9: liveins: $sgpr0
|
||
|
; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
|
||
|
; GFX9: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
|
||
|
; GFX9: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[S_MOV_B32_]], [[COPY]]
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_PACK_LL_B32_B16_]]
|
||
|
%0:sgpr(s32) = COPY $sgpr0
|
||
|
%1:sgpr(s32) = G_CONSTANT i32 0
|
||
|
%2:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %1, %0
|
||
|
S_ENDPGM 0, implicit %2
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_v2s16_s_s32_s_undef_s32
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
liveins: $sgpr0
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_v2s16_s_s32_s_undef_s32
|
||
|
; GFX9: liveins: $sgpr0
|
||
|
; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
|
||
|
; GFX9: S_ENDPGM 0, implicit [[COPY]]
|
||
|
%0:sgpr(s32) = COPY $sgpr0
|
||
|
%1:sgpr(s32) = G_IMPLICIT_DEF
|
||
|
%2:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %0, %1
|
||
|
S_ENDPGM 0, implicit %2
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_v2s16_s_undef_s32_s_s32
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
liveins: $sgpr0
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_v2s16_s_undef_s32_s_s32
|
||
|
; GFX9: liveins: $sgpr0
|
||
|
; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
|
||
|
; GFX9: [[DEF:%[0-9]+]]:sreg_32 = IMPLICIT_DEF
|
||
|
; GFX9: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[DEF]], [[COPY]]
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_PACK_LL_B32_B16_]]
|
||
|
%0:sgpr(s32) = COPY $sgpr0
|
||
|
%1:sgpr(s32) = G_IMPLICIT_DEF
|
||
|
%2:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %1, %0
|
||
|
S_ENDPGM 0, implicit %2
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_v2s16_s_undef_s_s32
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
liveins: $sgpr1
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_v2s16_s_undef_s_s32
|
||
|
; GFX9: liveins: $sgpr1
|
||
|
; GFX9: [[DEF:%[0-9]+]]:sreg_32 = IMPLICIT_DEF
|
||
|
; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr1
|
||
|
; GFX9: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[DEF]], [[COPY]]
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_PACK_LL_B32_B16_]]
|
||
|
%0:sgpr(s32) = G_IMPLICIT_DEF
|
||
|
%1:sgpr(s32) = COPY $sgpr1
|
||
|
%2:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %0, %1
|
||
|
S_ENDPGM 0, implicit %2
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_v2s16_s_s32_undef
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
liveins: $sgpr0
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_v2s16_s_s32_undef
|
||
|
; GFX9: liveins: $sgpr0
|
||
|
; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
|
||
|
; GFX9: S_ENDPGM 0, implicit [[COPY]]
|
||
|
%0:sgpr(s32) = COPY $sgpr0
|
||
|
%1:sgpr(s32) = G_IMPLICIT_DEF
|
||
|
%2:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %0, %1
|
||
|
S_ENDPGM 0, implicit %2
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_v2s16_s_zero_s_s32
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
liveins: $sgpr1
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_v2s16_s_zero_s_s32
|
||
|
; GFX9: liveins: $sgpr1
|
||
|
; GFX9: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
|
||
|
; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr1
|
||
|
; GFX9: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[S_MOV_B32_]], [[COPY]]
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_PACK_LL_B32_B16_]]
|
||
|
%0:sgpr(s32) = G_CONSTANT i32 0
|
||
|
%1:sgpr(s32) = COPY $sgpr1
|
||
|
%2:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %0, %1
|
||
|
S_ENDPGM 0, implicit %2
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_v2s16_s_s32_zero
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
liveins: $sgpr0
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_v2s16_s_s32_zero
|
||
|
; GFX9: liveins: $sgpr0
|
||
|
; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
|
||
|
; GFX9: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
|
||
|
; GFX9: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[COPY]], [[S_MOV_B32_]]
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_PACK_LL_B32_B16_]]
|
||
|
%0:sgpr(s32) = COPY $sgpr0
|
||
|
%1:sgpr(s32) = G_CONSTANT i32 0
|
||
|
%2:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %0, %1
|
||
|
S_ENDPGM 0, implicit %2
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_lshr16_zero
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
liveins: $sgpr0
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_lshr16_zero
|
||
|
; GFX9: liveins: $sgpr0
|
||
|
; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
|
||
|
; GFX9: [[S_LSHR_B32_:%[0-9]+]]:sreg_32 = S_LSHR_B32 [[COPY]], 16, implicit-def $scc
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_LSHR_B32_]]
|
||
|
%0:sgpr(s32) = G_CONSTANT i32 0
|
||
|
%1:sgpr(s32) = COPY $sgpr0
|
||
|
%2:sgpr(s32) = G_CONSTANT i32 16
|
||
|
%3:sgpr(s32) = G_LSHR %1, %2
|
||
|
%4:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %3, %0
|
||
|
S_ENDPGM 0, implicit %4
|
||
|
...
|
||
|
|
||
|
# Don't use pack since it would duplicate the shift use
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_pack_lh_multi_use
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
liveins: $sgpr0, $sgpr1
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_pack_lh_multi_use
|
||
|
; GFX9: liveins: $sgpr0, $sgpr1
|
||
|
; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
|
||
|
; GFX9: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
|
||
|
; GFX9: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 16
|
||
|
; GFX9: [[S_LSHR_B32_:%[0-9]+]]:sreg_32 = S_LSHR_B32 [[COPY1]], [[S_MOV_B32_]], implicit-def $scc
|
||
|
; GFX9: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[COPY]], [[S_LSHR_B32_]]
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_PACK_LL_B32_B16_]], implicit [[S_LSHR_B32_]]
|
||
|
%0:sgpr(s32) = COPY $sgpr0
|
||
|
%1:sgpr(s32) = COPY $sgpr1
|
||
|
%2:sgpr(s32) = G_CONSTANT i32 16
|
||
|
%3:sgpr(s32) = G_LSHR %1, %2
|
||
|
%4:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %0, %3
|
||
|
S_ENDPGM 0, implicit %4, implicit %3
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_pack_hh_multi_use_lhs
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
liveins: $sgpr0, $sgpr1
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_pack_hh_multi_use_lhs
|
||
|
; GFX9: liveins: $sgpr0, $sgpr1
|
||
|
; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
|
||
|
; GFX9: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
|
||
|
; GFX9: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 16
|
||
|
; GFX9: [[S_LSHR_B32_:%[0-9]+]]:sreg_32 = S_LSHR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def $scc
|
||
|
; GFX9: [[S_PACK_LH_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LH_B32_B16 [[S_LSHR_B32_]], [[COPY1]]
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_PACK_LH_B32_B16_]], implicit [[S_LSHR_B32_]]
|
||
|
%0:sgpr(s32) = COPY $sgpr0
|
||
|
%1:sgpr(s32) = COPY $sgpr1
|
||
|
%2:sgpr(s32) = G_CONSTANT i32 16
|
||
|
%3:sgpr(s32) = G_LSHR %0, %2
|
||
|
%4:sgpr(s32) = G_LSHR %1, %2
|
||
|
%5:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %3, %4
|
||
|
S_ENDPGM 0, implicit %5, implicit %3
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_pack_hh_multi_use_rhs
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
liveins: $sgpr0, $sgpr1
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_pack_hh_multi_use_rhs
|
||
|
; GFX9: liveins: $sgpr0, $sgpr1
|
||
|
; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
|
||
|
; GFX9: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
|
||
|
; GFX9: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 16
|
||
|
; GFX9: [[S_LSHR_B32_:%[0-9]+]]:sreg_32 = S_LSHR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def $scc
|
||
|
; GFX9: [[S_LSHR_B32_1:%[0-9]+]]:sreg_32 = S_LSHR_B32 [[COPY1]], [[S_MOV_B32_]], implicit-def $scc
|
||
|
; GFX9: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[S_LSHR_B32_]], [[S_LSHR_B32_1]]
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_PACK_LL_B32_B16_]], implicit [[S_LSHR_B32_1]]
|
||
|
%0:sgpr(s32) = COPY $sgpr0
|
||
|
%1:sgpr(s32) = COPY $sgpr1
|
||
|
%2:sgpr(s32) = G_CONSTANT i32 16
|
||
|
%3:sgpr(s32) = G_LSHR %0, %2
|
||
|
%4:sgpr(s32) = G_LSHR %1, %2
|
||
|
%5:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %3, %4
|
||
|
S_ENDPGM 0, implicit %5, implicit %4
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_pack_lh_wrong_shift_amt
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
liveins: $sgpr0, $sgpr1
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_pack_lh_wrong_shift_amt
|
||
|
; GFX9: liveins: $sgpr0, $sgpr1
|
||
|
; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
|
||
|
; GFX9: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
|
||
|
; GFX9: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 15
|
||
|
; GFX9: [[S_LSHR_B32_:%[0-9]+]]:sreg_32 = S_LSHR_B32 [[COPY1]], [[S_MOV_B32_]], implicit-def $scc
|
||
|
; GFX9: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[COPY]], [[S_LSHR_B32_]]
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_PACK_LL_B32_B16_]]
|
||
|
%0:sgpr(s32) = COPY $sgpr0
|
||
|
%1:sgpr(s32) = COPY $sgpr1
|
||
|
%2:sgpr(s32) = G_CONSTANT i32 15
|
||
|
%3:sgpr(s32) = G_LSHR %1, %2
|
||
|
%4:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %0, %3
|
||
|
S_ENDPGM 0, implicit %4
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_pack_hh_wrong_shift_amt
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
liveins: $sgpr0, $sgpr1
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_pack_hh_wrong_shift_amt
|
||
|
; GFX9: liveins: $sgpr0, $sgpr1
|
||
|
; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
|
||
|
; GFX9: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
|
||
|
; GFX9: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 15
|
||
|
; GFX9: [[S_LSHR_B32_:%[0-9]+]]:sreg_32 = S_LSHR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def $scc
|
||
|
; GFX9: [[S_LSHR_B32_1:%[0-9]+]]:sreg_32 = S_LSHR_B32 [[COPY1]], [[S_MOV_B32_]], implicit-def $scc
|
||
|
; GFX9: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[S_LSHR_B32_]], [[S_LSHR_B32_1]]
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_PACK_LL_B32_B16_]]
|
||
|
%0:sgpr(s32) = COPY $sgpr0
|
||
|
%1:sgpr(s32) = COPY $sgpr1
|
||
|
%2:sgpr(s32) = G_CONSTANT i32 15
|
||
|
%3:sgpr(s32) = G_LSHR %0, %2
|
||
|
%4:sgpr(s32) = G_LSHR %1, %2
|
||
|
%5:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %3, %4
|
||
|
S_ENDPGM 0, implicit %5
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_v2s16_constant_constant
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_v2s16_constant_constant
|
||
|
; GFX9: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 29884539
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_MOV_B32_]]
|
||
|
%0:sgpr(s32) = G_CONSTANT i32 123
|
||
|
%1:sgpr(s32) = G_CONSTANT i32 456
|
||
|
%2:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %0, %1
|
||
|
S_ENDPGM 0, implicit %2
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_v2s16_constant_impdef
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_v2s16_constant_impdef
|
||
|
; GFX9: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 123
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_MOV_B32_]]
|
||
|
%0:sgpr(s32) = G_CONSTANT i32 123
|
||
|
%1:sgpr(s32) = G_IMPLICIT_DEF
|
||
|
%2:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %0, %1
|
||
|
S_ENDPGM 0, implicit %2
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_v2s16_impdef_constant
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_v2s16_impdef_constant
|
||
|
; GFX9: [[DEF:%[0-9]+]]:sreg_32 = IMPLICIT_DEF
|
||
|
; GFX9: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 123
|
||
|
; GFX9: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[DEF]], [[S_MOV_B32_]]
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_PACK_LL_B32_B16_]]
|
||
|
%0:sgpr(s32) = G_IMPLICIT_DEF
|
||
|
%1:sgpr(s32) = G_CONSTANT i32 123
|
||
|
%2:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %0, %1
|
||
|
S_ENDPGM 0, implicit %2
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_v2s16_impdef_impdef
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_v2s16_impdef_impdef
|
||
|
; GFX9: [[DEF:%[0-9]+]]:sreg_32 = IMPLICIT_DEF
|
||
|
; GFX9: S_ENDPGM 0, implicit [[DEF]]
|
||
|
%0:sgpr(s32) = G_IMPLICIT_DEF
|
||
|
%1:sgpr(s32) = G_IMPLICIT_DEF
|
||
|
%2:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %0, %1
|
||
|
S_ENDPGM 0, implicit %2
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_v2s16_zext_constant_zext_constant
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_v2s16_zext_constant_zext_constant
|
||
|
; GFX9: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 29884539
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_MOV_B32_]]
|
||
|
%0:sgpr(s16) = G_CONSTANT i16 123
|
||
|
%1:sgpr(s16) = G_CONSTANT i16 456
|
||
|
%2:sgpr(s32) = G_ZEXT %0
|
||
|
%3:sgpr(s32) = G_ZEXT %1
|
||
|
%4:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %2, %3
|
||
|
S_ENDPGM 0, implicit %4
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_v2s16_zext_impdef_zext_constant
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_v2s16_zext_impdef_zext_constant
|
||
|
; GFX9: [[DEF:%[0-9]+]]:sreg_32 = IMPLICIT_DEF
|
||
|
; GFX9: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 123
|
||
|
; GFX9: [[S_BFE_U32_:%[0-9]+]]:sreg_32 = S_BFE_U32 [[DEF]], 1048576, implicit-def $scc
|
||
|
; GFX9: [[S_BFE_U32_1:%[0-9]+]]:sreg_32 = S_BFE_U32 [[S_MOV_B32_]], 1048576, implicit-def $scc
|
||
|
; GFX9: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[S_BFE_U32_]], [[S_BFE_U32_1]]
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_PACK_LL_B32_B16_]]
|
||
|
%0:sgpr(s16) = G_IMPLICIT_DEF
|
||
|
%1:sgpr(s16) = G_CONSTANT i16 123
|
||
|
%2:sgpr(s32) = G_ZEXT %0
|
||
|
%3:sgpr(s32) = G_ZEXT %1
|
||
|
%4:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %2, %3
|
||
|
S_ENDPGM 0, implicit %4
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_v2s16_sext_constant_sext_constant
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_v2s16_sext_constant_sext_constant
|
||
|
; GFX9: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4294836208
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_MOV_B32_]]
|
||
|
%0:sgpr(s16) = G_CONSTANT i16 -16
|
||
|
%1:sgpr(s16) = G_CONSTANT i16 -3
|
||
|
%2:sgpr(s32) = G_SEXT %0
|
||
|
%3:sgpr(s32) = G_SEXT %1
|
||
|
%4:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %2, %3
|
||
|
S_ENDPGM 0, implicit %4
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_v2s16_anyext_constant_anyext_constant
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_v2s16_anyext_constant_anyext_constant
|
||
|
; GFX9: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 29884539
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_MOV_B32_]]
|
||
|
%0:sgpr(s16) = G_CONSTANT i16 123
|
||
|
%1:sgpr(s16) = G_CONSTANT i16 456
|
||
|
%2:sgpr(s32) = G_ANYEXT %0
|
||
|
%3:sgpr(s32) = G_ANYEXT %1
|
||
|
%4:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %2, %3
|
||
|
S_ENDPGM 0, implicit %4
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_v2s16_anyext_impdef_anyext_constant
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_v2s16_anyext_impdef_anyext_constant
|
||
|
; GFX9: [[DEF:%[0-9]+]]:sreg_32 = IMPLICIT_DEF
|
||
|
; GFX9: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 123
|
||
|
; GFX9: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[DEF]], [[S_MOV_B32_]]
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_PACK_LL_B32_B16_]]
|
||
|
%0:sgpr(s16) = G_IMPLICIT_DEF
|
||
|
%1:sgpr(s16) = G_CONSTANT i16 123
|
||
|
%2:sgpr(s32) = G_ANYEXT %0
|
||
|
%3:sgpr(s32) = G_ANYEXT %1
|
||
|
%4:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %2, %3
|
||
|
S_ENDPGM 0, implicit %4
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_v2s16_var_constant
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
liveins: $sgpr0
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_v2s16_var_constant
|
||
|
; GFX9: liveins: $sgpr0
|
||
|
; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
|
||
|
; GFX9: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 456
|
||
|
; GFX9: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[COPY]], [[S_MOV_B32_]]
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_PACK_LL_B32_B16_]]
|
||
|
%0:sgpr(s32) = COPY $sgpr0
|
||
|
%1:sgpr(s32) = G_CONSTANT i32 456
|
||
|
%2:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %0, %1
|
||
|
S_ENDPGM 0, implicit %2
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_v2s16_constant_var
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
liveins: $sgpr0
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_v2s16_constant_var
|
||
|
; GFX9: liveins: $sgpr0
|
||
|
; GFX9: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 456
|
||
|
; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
|
||
|
; GFX9: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[S_MOV_B32_]], [[COPY]]
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_PACK_LL_B32_B16_]]
|
||
|
%0:sgpr(s32) = G_CONSTANT i32 456
|
||
|
%1:sgpr(s32) = COPY $sgpr0
|
||
|
%2:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %0, %1
|
||
|
S_ENDPGM 0, implicit %2
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_v2s16_var_0
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
liveins: $sgpr0
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_v2s16_var_0
|
||
|
; GFX9: liveins: $sgpr0
|
||
|
; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
|
||
|
; GFX9: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
|
||
|
; GFX9: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[COPY]], [[S_MOV_B32_]]
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_PACK_LL_B32_B16_]]
|
||
|
%0:sgpr(s32) = COPY $sgpr0
|
||
|
%1:sgpr(s32) = G_CONSTANT i32 0
|
||
|
%2:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %0, %1
|
||
|
S_ENDPGM 0, implicit %2
|
||
|
...
|
||
|
|
||
|
---
|
||
|
name: test_build_vector_trunc_s_v2s16_0_var
|
||
|
legalized: true
|
||
|
regBankSelected: true
|
||
|
tracksRegLiveness: true
|
||
|
|
||
|
body: |
|
||
|
bb.0:
|
||
|
liveins: $sgpr0
|
||
|
|
||
|
; GFX9-LABEL: name: test_build_vector_trunc_s_v2s16_0_var
|
||
|
; GFX9: liveins: $sgpr0
|
||
|
; GFX9: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
|
||
|
; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
|
||
|
; GFX9: [[S_PACK_LL_B32_B16_:%[0-9]+]]:sreg_32 = S_PACK_LL_B32_B16 [[S_MOV_B32_]], [[COPY]]
|
||
|
; GFX9: S_ENDPGM 0, implicit [[S_PACK_LL_B32_B16_]]
|
||
|
%0:sgpr(s32) = G_CONSTANT i32 0
|
||
|
%1:sgpr(s32) = COPY $sgpr0
|
||
|
%2:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC %0, %1
|
||
|
S_ENDPGM 0, implicit %2
|
||
|
...
|