CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
215 lines
11 KiB
YAML
215 lines
11 KiB
YAML
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
|
# RUN: llc -mtriple=amdgcn -mcpu=gfx1250 -run-pass=postmisched,gcn-create-vopd %s -o - | FileCheck -check-prefix=GFX1250 %s
|
|
# RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -run-pass=postmisched,gcn-create-vopd %s -o - | FileCheck -check-prefix=GFX1200 %s
|
|
|
|
# Test multi-cycle VOPD formation constraints
|
|
# When OpX is a DPMACC instruction (multi-cycle) and OpX writes to
|
|
# OpY's source registers, VOPD formation is blocked. OpX must come second in
|
|
# original program order, or this would otherwise be a regular data dependency.
|
|
# This applies to:
|
|
# V_FMA_F64, V_ADD_F64, V_MUL_F64, V_MAX_NUM_F64, V_MIN_NUM_F64
|
|
|
|
---
|
|
name: test_fma_f64_dpmacc_constraint
|
|
tracksRegLiveness: true
|
|
body: |
|
|
bb.0:
|
|
liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7
|
|
|
|
; GFX1250-LABEL: name: test_fma_f64_dpmacc_constraint
|
|
; GFX1250: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7
|
|
; GFX1250-NEXT: {{ $}}
|
|
; GFX1250-NEXT: $vgpr8 = V_ADD_F32_e32 killed $vgpr6, killed $vgpr7, implicit $mode, implicit $exec
|
|
; GFX1250-NEXT: $vgpr6_vgpr7 = V_FMA_F64_e64 0, killed $vgpr0_vgpr1, 0, killed $vgpr2_vgpr3, 0, killed $vgpr4_vgpr5, 0, 0, implicit $mode, implicit $exec
|
|
; GFX1250-NEXT: S_ENDPGM 0
|
|
;
|
|
; GFX1200-LABEL: name: test_fma_f64_dpmacc_constraint
|
|
; GFX1200: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7
|
|
; GFX1200-NEXT: {{ $}}
|
|
; GFX1200-NEXT: $vgpr8 = V_ADD_F32_e32 killed $vgpr6, killed $vgpr7, implicit $mode, implicit $exec
|
|
; GFX1200-NEXT: $vgpr6_vgpr7 = V_FMA_F64_e64 0, killed $vgpr0_vgpr1, 0, killed $vgpr2_vgpr3, 0, killed $vgpr4_vgpr5, 0, 0, implicit $mode, implicit $exec
|
|
; GFX1200-NEXT: S_ENDPGM 0
|
|
$vgpr8 = V_ADD_F32_e32 $vgpr6, $vgpr7, implicit $mode, implicit $exec
|
|
$vgpr6_vgpr7 = V_FMA_F64_e64 0, $vgpr0_vgpr1, 0, $vgpr2_vgpr3, 0, $vgpr4_vgpr5, 0, 0, implicit $mode, implicit $exec
|
|
S_ENDPGM 0
|
|
|
|
...
|
|
|
|
---
|
|
name: test_add_f64_dpmacc_constraint
|
|
tracksRegLiveness: true
|
|
body: |
|
|
bb.0:
|
|
liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7
|
|
|
|
; GFX1250-LABEL: name: test_add_f64_dpmacc_constraint
|
|
; GFX1250: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7
|
|
; GFX1250-NEXT: {{ $}}
|
|
; GFX1250-NEXT: $vgpr6 = V_ADD_F32_e32 killed $vgpr6, killed $vgpr4, implicit $mode, implicit $exec
|
|
; GFX1250-NEXT: $vgpr4_vgpr5 = V_ADD_F64_pseudo_e32 killed $vgpr0_vgpr1, killed $vgpr2_vgpr3, implicit $mode, implicit $exec
|
|
; GFX1250-NEXT: S_ENDPGM 0
|
|
;
|
|
; GFX1200-LABEL: name: test_add_f64_dpmacc_constraint
|
|
; GFX1200: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7
|
|
; GFX1200-NEXT: {{ $}}
|
|
; GFX1200-NEXT: $vgpr6 = V_ADD_F32_e32 killed $vgpr6, killed $vgpr4, implicit $mode, implicit $exec
|
|
; GFX1200-NEXT: $vgpr4_vgpr5 = V_ADD_F64_pseudo_e32 killed $vgpr0_vgpr1, killed $vgpr2_vgpr3, implicit $mode, implicit $exec
|
|
; GFX1200-NEXT: S_ENDPGM 0
|
|
$vgpr6 = V_ADD_F32_e32 $vgpr6, $vgpr4, implicit $mode, implicit $exec
|
|
$vgpr4_vgpr5 = V_ADD_F64_pseudo_e32 $vgpr0_vgpr1, $vgpr2_vgpr3, implicit $mode, implicit $exec
|
|
S_ENDPGM 0
|
|
|
|
...
|
|
|
|
---
|
|
name: test_mul_f64_dpmacc_constraint
|
|
tracksRegLiveness: true
|
|
body: |
|
|
bb.0:
|
|
liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7
|
|
|
|
; GFX1250-LABEL: name: test_mul_f64_dpmacc_constraint
|
|
; GFX1250: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7
|
|
; GFX1250-NEXT: {{ $}}
|
|
; GFX1250-NEXT: $vgpr6 = V_MUL_F32_e32 killed $vgpr6, killed $vgpr4, implicit $mode, implicit $exec
|
|
; GFX1250-NEXT: $vgpr4_vgpr5 = V_MUL_F64_pseudo_e32 killed $vgpr0_vgpr1, killed $vgpr2_vgpr3, implicit $mode, implicit $exec
|
|
; GFX1250-NEXT: S_ENDPGM 0
|
|
;
|
|
; GFX1200-LABEL: name: test_mul_f64_dpmacc_constraint
|
|
; GFX1200: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7
|
|
; GFX1200-NEXT: {{ $}}
|
|
; GFX1200-NEXT: $vgpr6 = V_MUL_F32_e32 killed $vgpr6, killed $vgpr4, implicit $mode, implicit $exec
|
|
; GFX1200-NEXT: $vgpr4_vgpr5 = V_MUL_F64_pseudo_e32 killed $vgpr0_vgpr1, killed $vgpr2_vgpr3, implicit $mode, implicit $exec
|
|
; GFX1200-NEXT: S_ENDPGM 0
|
|
$vgpr6 = V_MUL_F32_e32 $vgpr6, $vgpr4, implicit $mode, implicit $exec
|
|
$vgpr4_vgpr5 = V_MUL_F64_pseudo_e32 $vgpr0_vgpr1, $vgpr2_vgpr3, implicit $mode, implicit $exec
|
|
S_ENDPGM 0
|
|
|
|
...
|
|
|
|
---
|
|
name: test_min_num_f64_dpmacc_constraint
|
|
tracksRegLiveness: true
|
|
body: |
|
|
bb.0:
|
|
liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7
|
|
|
|
; GFX1250-LABEL: name: test_min_num_f64_dpmacc_constraint
|
|
; GFX1250: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7
|
|
; GFX1250-NEXT: {{ $}}
|
|
; GFX1250-NEXT: $vgpr6 = V_ADD_F32_e32 killed $vgpr6, killed $vgpr4, implicit $mode, implicit $exec
|
|
; GFX1250-NEXT: $vgpr4_vgpr5 = V_MIN_NUM_F64_e32 killed $vgpr0_vgpr1, killed $vgpr2_vgpr3, implicit $mode, implicit $exec
|
|
; GFX1250-NEXT: S_ENDPGM 0
|
|
;
|
|
; GFX1200-LABEL: name: test_min_num_f64_dpmacc_constraint
|
|
; GFX1200: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7
|
|
; GFX1200-NEXT: {{ $}}
|
|
; GFX1200-NEXT: $vgpr6 = V_ADD_F32_e32 killed $vgpr6, killed $vgpr4, implicit $mode, implicit $exec
|
|
; GFX1200-NEXT: $vgpr4_vgpr5 = V_MIN_NUM_F64_e32 killed $vgpr0_vgpr1, killed $vgpr2_vgpr3, implicit $mode, implicit $exec
|
|
; GFX1200-NEXT: S_ENDPGM 0
|
|
$vgpr6 = V_ADD_F32_e32 $vgpr6, $vgpr4, implicit $mode, implicit $exec
|
|
$vgpr4_vgpr5 = V_MIN_NUM_F64_e32 $vgpr0_vgpr1, $vgpr2_vgpr3, implicit $mode, implicit $exec
|
|
S_ENDPGM 0
|
|
|
|
...
|
|
|
|
---
|
|
name: test_max_num_f64_dpmacc_constraint
|
|
tracksRegLiveness: true
|
|
body: |
|
|
bb.0:
|
|
liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7
|
|
|
|
; GFX1250-LABEL: name: test_max_num_f64_dpmacc_constraint
|
|
; GFX1250: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7
|
|
; GFX1250-NEXT: {{ $}}
|
|
; GFX1250-NEXT: $vgpr6 = V_MUL_F32_e32 killed $vgpr7, killed $vgpr4, implicit $mode, implicit $exec
|
|
; GFX1250-NEXT: $vgpr4_vgpr5 = V_MAX_NUM_F64_e32 killed $vgpr0_vgpr1, killed $vgpr2_vgpr3, implicit $mode, implicit $exec
|
|
; GFX1250-NEXT: S_ENDPGM 0
|
|
;
|
|
; GFX1200-LABEL: name: test_max_num_f64_dpmacc_constraint
|
|
; GFX1200: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7
|
|
; GFX1200-NEXT: {{ $}}
|
|
; GFX1200-NEXT: $vgpr6 = V_MUL_F32_e32 killed $vgpr7, killed $vgpr4, implicit $mode, implicit $exec
|
|
; GFX1200-NEXT: $vgpr4_vgpr5 = V_MAX_NUM_F64_e32 killed $vgpr0_vgpr1, killed $vgpr2_vgpr3, implicit $mode, implicit $exec
|
|
; GFX1200-NEXT: S_ENDPGM 0
|
|
$vgpr6 = V_MUL_F32_e32 $vgpr7, $vgpr4, implicit $mode, implicit $exec
|
|
$vgpr4_vgpr5 = V_MAX_NUM_F64_e32 $vgpr0_vgpr1, $vgpr2_vgpr3, implicit $mode, implicit $exec
|
|
S_ENDPGM 0
|
|
|
|
...
|
|
|
|
---
|
|
name: test_non_dpmacc_antidep_allows_vopd
|
|
tracksRegLiveness: true
|
|
body: |
|
|
bb.0:
|
|
liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3
|
|
|
|
; GFX1250-LABEL: name: test_non_dpmacc_antidep_allows_vopd
|
|
; GFX1250: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3
|
|
; GFX1250-NEXT: {{ $}}
|
|
; GFX1250-NEXT: $vgpr3, $vgpr2 = V_DUAL_ADD_F32_e32_X_MUL_F32_e32_gfx1250 killed $vgpr2, $vgpr2, killed $vgpr0, killed $vgpr1, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec
|
|
; GFX1250-NEXT: S_ENDPGM 0
|
|
;
|
|
; GFX1200-LABEL: name: test_non_dpmacc_antidep_allows_vopd
|
|
; GFX1200: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3
|
|
; GFX1200-NEXT: {{ $}}
|
|
; GFX1200-NEXT: $vgpr3, $vgpr2 = V_DUAL_ADD_F32_e32_X_MUL_F32_e32_gfx12 killed $vgpr2, $vgpr2, killed $vgpr0, killed $vgpr1, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec
|
|
; GFX1200-NEXT: S_ENDPGM 0
|
|
$vgpr3 = V_ADD_F32_e32 $vgpr2, $vgpr2, implicit $mode, implicit $exec
|
|
$vgpr2 = V_MUL_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
|
|
S_ENDPGM 0
|
|
|
|
...
|
|
|
|
---
|
|
name: test_fma_f64_no_write_dependency_forms_vopd
|
|
tracksRegLiveness: true
|
|
body: |
|
|
bb.0:
|
|
liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6, $vgpr7
|
|
|
|
; GFX1250-LABEL: name: test_fma_f64_no_write_dependency_forms_vopd
|
|
; GFX1250: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6, $vgpr7
|
|
; GFX1250-NEXT: {{ $}}
|
|
; GFX1250-NEXT: $vgpr8_vgpr9, $vgpr10 = V_DUAL_FMA_F64_e64_X_ADD_F32_e32_e96_gfx1250 0, $vgpr0_vgpr1, 0, killed $vgpr2_vgpr3, 0, killed $vgpr4_vgpr5, 0, killed $vgpr6, 0, killed $vgpr1, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec
|
|
; GFX1250-NEXT: S_ENDPGM 0
|
|
;
|
|
; GFX1200-LABEL: name: test_fma_f64_no_write_dependency_forms_vopd
|
|
; GFX1200: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6, $vgpr7
|
|
; GFX1200-NEXT: {{ $}}
|
|
; GFX1200-NEXT: $vgpr8_vgpr9 = V_FMA_F64_e64 0, $vgpr0_vgpr1, 0, killed $vgpr2_vgpr3, 0, killed $vgpr4_vgpr5, 0, 0, implicit $mode, implicit $exec
|
|
; GFX1200-NEXT: $vgpr10 = V_ADD_F32_e32 killed $vgpr6, killed $vgpr1, implicit $mode, implicit $exec
|
|
; GFX1200-NEXT: S_ENDPGM 0
|
|
$vgpr8_vgpr9 = V_FMA_F64_e64 0, $vgpr0_vgpr1, 0, $vgpr2_vgpr3, 0, $vgpr4_vgpr5, 0, 0, implicit $mode, implicit $exec
|
|
$vgpr10 = V_ADD_F32_e32 $vgpr6, $vgpr1, implicit $mode, implicit $exec
|
|
S_ENDPGM 0
|
|
|
|
...
|
|
|
|
---
|
|
name: test_add_f64_no_write_dependency_allows_vopd_gfx1250
|
|
tracksRegLiveness: true
|
|
body: |
|
|
bb.0:
|
|
liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7
|
|
|
|
; GFX1250-LABEL: name: test_add_f64_no_write_dependency_allows_vopd_gfx1250
|
|
; GFX1250: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7
|
|
; GFX1250-NEXT: {{ $}}
|
|
; GFX1250-NEXT: $vgpr8_vgpr9, $vgpr10 = V_DUAL_ADD_F64_pseudo_e32_X_ADD_F32_e32_e96_gfx1250 0, killed $vgpr0_vgpr1, 0, killed $vgpr2_vgpr3, 0, killed $vgpr6, 0, $vgpr1, implicit $mode, implicit $exec, implicit $mode, implicit $exec, implicit $mode, implicit $exec
|
|
; GFX1250-NEXT: S_ENDPGM 0
|
|
;
|
|
; GFX1200-LABEL: name: test_add_f64_no_write_dependency_allows_vopd_gfx1250
|
|
; GFX1200: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7
|
|
; GFX1200-NEXT: {{ $}}
|
|
; GFX1200-NEXT: $vgpr10 = V_ADD_F32_e32 killed $vgpr6, $vgpr1, implicit $mode, implicit $exec
|
|
; GFX1200-NEXT: $vgpr8_vgpr9 = V_ADD_F64_pseudo_e32 killed $vgpr0_vgpr1, killed $vgpr2_vgpr3, implicit $mode, implicit $exec
|
|
; GFX1200-NEXT: S_ENDPGM 0
|
|
$vgpr10 = V_ADD_F32_e32 $vgpr6, $vgpr1, implicit $mode, implicit $exec
|
|
$vgpr8_vgpr9 = V_ADD_F64_pseudo_e32 $vgpr0_vgpr1, $vgpr2_vgpr3, implicit $mode, implicit $exec
|
|
S_ENDPGM 0
|
|
|
|
...
|