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
272 lines
11 KiB
YAML
272 lines
11 KiB
YAML
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
|
|
# RUN: llc %s -o - -mtriple=riscv64 -mattr=+v -run-pass=riscv-vector-peephole -verify-machineinstrs | FileCheck %s
|
|
|
|
---
|
|
name: vle32
|
|
body: |
|
|
bb.0:
|
|
liveins: $x8, $v0, $v8
|
|
; CHECK-LABEL: name: vle32
|
|
; CHECK: liveins: $x8, $v0, $v8
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %avl:gprnox0 = COPY $x8
|
|
; CHECK-NEXT: %passthru:vrnov0 = COPY $v8
|
|
; CHECK-NEXT: %mask:vmv0 = COPY $v0
|
|
; CHECK-NEXT: %y:vrnov0 = PseudoVLE32_V_M1_MASK %passthru, $noreg, %mask, %avl /* vl */, 5 /* e32 */, 0 /* tu, mu */ :: (load unknown-size, align 1)
|
|
%avl:gprnox0 = COPY $x8
|
|
%passthru:vrnov0 = COPY $v8
|
|
%x:vrnov0 = PseudoVLE32_V_M1 $noreg, $noreg, %avl, 5 /* e32 */, 2 /* tu, ma */ :: (load unknown-size)
|
|
%mask:vmv0 = COPY $v0
|
|
%y:vrnov0 = PseudoVMERGE_VVM_M1 %passthru, %passthru, %x, %mask, %avl, 5 /* e32 */
|
|
...
|
|
---
|
|
name: vle32_no_passthru
|
|
body: |
|
|
bb.0:
|
|
liveins: $x8, $v0, $v8
|
|
; CHECK-LABEL: name: vle32_no_passthru
|
|
; CHECK: liveins: $x8, $v0, $v8
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %avl:gprnox0 = COPY $x8
|
|
; CHECK-NEXT: %false:vrnov0 = COPY $v8
|
|
; CHECK-NEXT: %mask:vmv0 = COPY $v0
|
|
; CHECK-NEXT: %y:vrnov0 = PseudoVLE32_V_M1_MASK %false, $noreg, %mask, %avl /* vl */, 5 /* e32 */, 1 /* ta, mu */ :: (load unknown-size, align 1)
|
|
%avl:gprnox0 = COPY $x8
|
|
%false:vrnov0 = COPY $v8
|
|
%x:vrnov0 = PseudoVLE32_V_M1 $noreg, $noreg, %avl, 5 /* e32 */, 2 /* tu, ma */ :: (load unknown-size)
|
|
%mask:vmv0 = COPY $v0
|
|
%y:vrnov0 = PseudoVMERGE_VVM_M1 $noreg, %false, %x, %mask, %avl, 5 /* e32 */
|
|
...
|
|
---
|
|
name: vle32_move_past_passthru
|
|
body: |
|
|
bb.0:
|
|
liveins: $x8, $v0, $v8
|
|
; CHECK-LABEL: name: vle32_move_past_passthru
|
|
; CHECK: liveins: $x8, $v0, $v8
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %avl:gprnox0 = COPY $x8
|
|
; CHECK-NEXT: %passthru:vrnov0 = COPY $v8
|
|
; CHECK-NEXT: %mask:vmv0 = COPY $v0
|
|
; CHECK-NEXT: %y:vrnov0 = PseudoVLE32_V_M1_MASK %passthru, $noreg, %mask, %avl /* vl */, 5 /* e32 */, 0 /* tu, mu */ :: (load unknown-size, align 1)
|
|
%avl:gprnox0 = COPY $x8
|
|
%x:vrnov0 = PseudoVLE32_V_M1 $noreg, $noreg, %avl, 5 /* e32 */, 2 /* tu, ma */ :: (load unknown-size)
|
|
%passthru:vrnov0 = COPY $v8
|
|
%mask:vmv0 = COPY $v0
|
|
%y:vrnov0 = PseudoVMERGE_VVM_M1 %passthru, %passthru, %x, %mask, %avl, 5 /* e32 */
|
|
...
|
|
---
|
|
name: vnclip_move_past_passthru
|
|
body: |
|
|
bb.0:
|
|
liveins: $x8, $v0, $v8
|
|
; CHECK-LABEL: name: vnclip_move_past_passthru
|
|
; CHECK: liveins: $x8, $v0, $v8
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %avl:gprnox0 = COPY $x8
|
|
; CHECK-NEXT: %passthru:vrnov0 = COPY $v8
|
|
; CHECK-NEXT: %mask:vmv0 = COPY $v0
|
|
; CHECK-NEXT: %y:vrnov0 = PseudoVNCLIPU_WV_MF2_MASK %passthru, $noreg, $noreg, %mask, 0 /* vxrm=rnu */, %avl /* vl */, 5 /* e32 */, 0 /* tu, mu */, implicit-def $vxsat
|
|
%avl:gprnox0 = COPY $x8
|
|
%x:vrnov0 = PseudoVNCLIPU_WV_MF2 $noreg, $noreg, $noreg, 0, -1, 5, 3, implicit-def $vxsat
|
|
%passthru:vrnov0 = COPY $v8
|
|
%mask:vmv0 = COPY $v0
|
|
%y:vrnov0 = PseudoVMERGE_VVM_M1 %passthru, %passthru, %x, %mask, %avl, 5 /* e32 */
|
|
...
|
|
---
|
|
name: vnclip_cant_move_past_passthru
|
|
body: |
|
|
bb.0:
|
|
liveins: $x8, $v0, $v8
|
|
; CHECK-LABEL: name: vnclip_cant_move_past_passthru
|
|
; CHECK: liveins: $x8, $v0, $v8
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %avl:gprnox0 = COPY $x8
|
|
; CHECK-NEXT: %x:vrnov0 = PseudoVNCLIPU_WV_MF2 $noreg, $noreg, $noreg, 0 /* vxrm=rnu */, -1 /* vl=VLMAX */, 5 /* e32 */, 3 /* ta, ma */, implicit-def $vxsat
|
|
; CHECK-NEXT: %vxsat:gpr = COPY $vxsat
|
|
; CHECK-NEXT: %passthru:vrnov0 = COPY $v8
|
|
; CHECK-NEXT: %mask:vmv0 = COPY $v0
|
|
; CHECK-NEXT: %y:vrnov0 = PseudoVMERGE_VVM_M1 %passthru, %passthru, %x, %mask, %avl /* vl */, 5 /* e32 */
|
|
%avl:gprnox0 = COPY $x8
|
|
%x:vrnov0 = PseudoVNCLIPU_WV_MF2 $noreg, $noreg, $noreg, 0, -1, 5, 3, implicit-def $vxsat
|
|
%vxsat:gpr = COPY $vxsat
|
|
%passthru:vrnov0 = COPY $v8
|
|
%mask:vmv0 = COPY $v0
|
|
%y:vrnov0 = PseudoVMERGE_VVM_M1 %passthru, %passthru, %x, %mask, %avl, 5 /* e32 */
|
|
...
|
|
---
|
|
name: commute_vfmadd
|
|
body: |
|
|
bb.0:
|
|
liveins: $x8, $v0, $v8, $v9, $v10
|
|
; CHECK-LABEL: name: commute_vfmadd
|
|
; CHECK: liveins: $x8, $v0, $v8, $v9, $v10
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %avl:gprnox0 = COPY $x8
|
|
; CHECK-NEXT: %mask:vmv0 = COPY $v0
|
|
; CHECK-NEXT: %passthru:vrnov0 = COPY $v8
|
|
; CHECK-NEXT: %x:vr = COPY $v9
|
|
; CHECK-NEXT: %y:vr = COPY $v10
|
|
; CHECK-NEXT: %vmerge:vrnov0 = nofpexcept PseudoVFMACC_VV_M1_E32_MASK %passthru, %y, %x, %mask, 7 /* frm=dyn */, %avl /* vl */, 5 /* e32 */, 0 /* tu, mu */, implicit $frm
|
|
%avl:gprnox0 = COPY $x8
|
|
%mask:vmv0 = COPY $v0
|
|
%passthru:vrnov0 = COPY $v8
|
|
%x:vr = COPY $v9
|
|
%y:vr = COPY $v10
|
|
%vfmadd:vrnov0 = nofpexcept PseudoVFMADD_VV_M1_E32 %x, %y, %passthru, 7, -1, 5 /* e32 */, 3 /* ta, ma */, implicit $frm
|
|
%vmerge:vrnov0 = PseudoVMERGE_VVM_M1 %passthru, %passthru, %vfmadd, %mask, %avl, 5
|
|
...
|
|
---
|
|
name: true_copy
|
|
body: |
|
|
bb.0:
|
|
liveins: $x8, $v0, $v8
|
|
; CHECK-LABEL: name: true_copy
|
|
; CHECK: liveins: $x8, $v0, $v8
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %avl:gprnox0 = COPY $x8
|
|
; CHECK-NEXT: %passthru:vrnov0 = COPY $v8
|
|
; CHECK-NEXT: %mask:vmv0 = COPY $v0
|
|
; CHECK-NEXT: %z:vrnov0 = PseudoVLE32_V_M1_MASK %passthru, $noreg, %mask, %avl /* vl */, 5 /* e32 */, 0 /* tu, mu */ :: (load unknown-size, align 1)
|
|
%avl:gprnox0 = COPY $x8
|
|
%passthru:vrnov0 = COPY $v8
|
|
%x:vr = PseudoVLE32_V_M1 $noreg, $noreg, %avl, 5 /* e32 */, 2 /* tu, ma */ :: (load unknown-size)
|
|
%mask:vmv0 = COPY $v0
|
|
%y:vrnov0 = COPY %x
|
|
%z:vrnov0 = PseudoVMERGE_VVM_M1 %passthru, %passthru, %y, %mask, %avl, 5 /* e32 */
|
|
...
|
|
---
|
|
name: copy_is_killed
|
|
body: |
|
|
bb.0:
|
|
liveins: $v0, $v8, $v9
|
|
; CHECK-LABEL: name: copy_is_killed
|
|
; CHECK: liveins: $v0, $v8, $v9
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %x:vr = COPY $v8
|
|
; CHECK-NEXT: %y:vr = COPY $v9
|
|
; CHECK-NEXT: %mask:vmv0 = COPY $v0
|
|
; CHECK-NEXT: %add0:vr = PseudoVADD_VV_M1 $noreg, %x, %y, -1 /* vl=VLMAX */, 5 /* e32 */, 3 /* ta, ma */
|
|
; CHECK-NEXT: %add1:vrnov0 = COPY %add:vrnov0
|
|
; CHECK-NEXT: %merge:vrnov0 = PseudoVOR_VV_M1_MASK %add:vrnov0, %add1, %y, %mask, -1 /* vl=VLMAX */, 5 /* e32 */, 1 /* ta, mu */
|
|
%x:vr = COPY $v8
|
|
%y:vr = COPY $v9
|
|
%mask:vmv0 = COPY $v0
|
|
%add0:vr = PseudoVADD_VV_M1 $noreg, %x:vr, %y:vr, -1, 5, 3
|
|
%add1:vrnov0 = COPY killed %add:vr
|
|
%or:vrnov0 = PseudoVOR_VV_M1 $noreg, %add1:vrnov0, %y:vr, -1, 5, 3
|
|
%merge:vrnov0 = PseudoVMERGE_VVM_M1 $noreg, %add1:vrnov0, killed %or:vrnov0, killed %mask:vmv0, -1, 5 /* e32 */
|
|
|
|
...
|
|
---
|
|
name: copy_multiple_use
|
|
body: |
|
|
bb.0:
|
|
liveins: $x8, $v0, $v8
|
|
; CHECK-LABEL: name: copy_multiple_use
|
|
; CHECK: liveins: $x8, $v0, $v8
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %avl:gprnox0 = COPY $x8
|
|
; CHECK-NEXT: %passthru:vrnov0 = COPY $v8
|
|
; CHECK-NEXT: %x:vrnov0 = PseudoVLE32_V_M1 $noreg, $noreg, %avl /* vl */, 5 /* e32 */, 2 /* tu, ma */ :: (load unknown-size, align 1)
|
|
; CHECK-NEXT: %copy:vrnov0 = COPY %x
|
|
; CHECK-NEXT: %mask:vmv0 = COPY $v0
|
|
; CHECK-NEXT: PseudoVSE8_V_M1 %copy, $noreg, %avl /* vl */, 5 /* e32 */
|
|
; CHECK-NEXT: %y:vrnov0 = PseudoVMERGE_VVM_M1 %passthru, %passthru, %copy, %mask, %avl /* vl */, 5 /* e32 */
|
|
%avl:gprnox0 = COPY $x8
|
|
%passthru:vrnov0 = COPY $v8
|
|
%x:vrnov0 = PseudoVLE32_V_M1 $noreg, $noreg, %avl, 5 /* e32 */, 2 /* tu, ma */ :: (load unknown-size)
|
|
%copy:vrnov0 = COPY %x
|
|
%mask:vmv0 = COPY $v0
|
|
PseudoVSE8_V_M1 %copy, $noreg, %avl, 5 /* e8 */
|
|
%y:vrnov0 = PseudoVMERGE_VVM_M1 %passthru, %passthru, %copy, %mask, %avl, 5 /* e32 */
|
|
...
|
|
---
|
|
name: true_copy_elimination
|
|
body: |
|
|
; CHECK-LABEL: name: true_copy_elimination
|
|
; CHECK: bb.0:
|
|
; CHECK-NEXT: successors: %bb.1(0x80000000)
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: PseudoBR %bb.1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: bb.1:
|
|
; CHECK-NEXT: [[DEF:%[0-9]+]]:vmv0 = IMPLICIT_DEF
|
|
; CHECK-NEXT: early-clobber %5:vrm8nov0 = PseudoVZEXT_VF8_M8_MASK $noreg, $noreg, [[DEF]], 16 /* vl */, 6 /* e64 */, 1 /* ta, mu */
|
|
; CHECK-NEXT: [[COPY:%[0-9]+]]:vrm8 = COPY %5
|
|
; CHECK-NEXT: PseudoRET
|
|
bb.0:
|
|
successors: %bb.1
|
|
|
|
PseudoBR %bb.1
|
|
|
|
bb.1:
|
|
|
|
%102:vrm8 = PseudoVZEXT_VF8_M8 $noreg, $noreg, 16, 6 /* e64 */, 3 /* ta, ma */
|
|
%123:vrm8nov0 = COPY %102
|
|
%a123:vrm8 = COPY %123
|
|
%b123:vrm8nov0 = COPY %a123
|
|
%124:vmv0 = IMPLICIT_DEF
|
|
%121:vrm8nov0 = PseudoVMERGE_VVM_M8 $noreg, $noreg, %b123, undef %124, 16, 6 /* e64 */
|
|
%125:vrm8 = COPY %121
|
|
PseudoRET
|
|
...
|
|
---
|
|
name: increase_vl
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: increase_vl
|
|
; CHECK: %passthru:vrnov0 = COPY $v8
|
|
; CHECK-NEXT: %avl:gprnox0 = COPY $x8
|
|
; CHECK-NEXT: %mask:vmv0 = COPY $v0
|
|
; CHECK-NEXT: %merge:vrnov0 = PseudoVADD_VV_M1_MASK %passthru, %x:vr, %y:vr, %mask, %avl /* vl */, 5 /* e32 */, 0 /* tu, mu */
|
|
%passthru:vrnov0 = COPY $v8
|
|
%avl:gprnox0 = COPY $x8
|
|
%mask:vmv0 = COPY $v0
|
|
%add:vrnov0 = PseudoVADD_VV_M1 $noreg, %x:vr, %y:vr, 1, 5 /* e32 */, 0 /* tu, mu */
|
|
%merge:vrnov0 = PseudoVMERGE_VVM_M1 %passthru, %passthru, %add, %mask, %avl, 5 /* e32 */
|
|
...
|
|
---
|
|
# Negative test: Shouldn't fold vmerge into the load because we may increase vl.
|
|
name: increase_vl_load
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: increase_vl_load
|
|
; CHECK: %passthru:vrnov0 = COPY $v8
|
|
; CHECK-NEXT: %avl:gprnox0 = COPY $x8
|
|
; CHECK-NEXT: %mask:vmv0 = COPY $v0
|
|
; CHECK-NEXT: %load:vrnov0 = PseudoVLE32_V_M1 $noreg, $noreg, 1 /* vl */, 5 /* e32 */, 0 /* tu, mu */ :: (load unknown-size, align 1)
|
|
; CHECK-NEXT: %merge:vrnov0 = PseudoVMERGE_VVM_M1 %passthru, %passthru, %load, %mask, %avl /* vl */, 5 /* e32 */
|
|
%passthru:vrnov0 = COPY $v8
|
|
%avl:gprnox0 = COPY $x8
|
|
%mask:vmv0 = COPY $v0
|
|
%load:vrnov0 = PseudoVLE32_V_M1 $noreg, $noreg, 1, 5 /* e32 */, 0 /* tu, mu */ :: (load unknown-size)
|
|
%merge:vrnov0 = PseudoVMERGE_VVM_M1 %passthru, %passthru, %load, %mask, %avl, 5 /* e32 */
|
|
...
|
|
---
|
|
name: sink_past_false
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sink_past_false
|
|
; CHECK: %mask:vmv0 = COPY $v0
|
|
; CHECK-NEXT: %y:vrnov0 = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1 /* vl=VLMAX */, 5 /* e32 */, 3 /* ta, ma */
|
|
; CHECK-NEXT: %z:vrnov0 = PseudoVADD_VV_M1_MASK %y, $noreg, $noreg, %mask, -1 /* vl=VLMAX */, 5 /* e32 */, 1 /* ta, mu */
|
|
%mask:vmv0 = COPY $v0
|
|
%x:vrnov0 = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 5, 3
|
|
%y:vrnov0 = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 5, 3
|
|
%z:vrnov0 = PseudoVMERGE_VVM_M1 $noreg, %y:vrnov0, %x:vrnov0, %mask, -1, 5
|
|
...
|
|
---
|
|
name: sink_past_avl
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: sink_past_avl
|
|
; CHECK: %mask:vmv0 = COPY $v0
|
|
; CHECK-NEXT: %avl:gprnox0 = ADDI $noreg, 1
|
|
; CHECK-NEXT: %z:vrnov0 = PseudoVADD_VV_M1_MASK $noreg, $noreg, $noreg, %mask, %avl /* vl */, 5 /* e32 */, 1 /* ta, mu */
|
|
%mask:vmv0 = COPY $v0
|
|
%x:vrnov0 = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 5, 3
|
|
%avl:gprnox0 = ADDI $noreg, 1
|
|
%z:vrnov0 = PseudoVMERGE_VVM_M1 $noreg, $noreg, %x:vrnov0, %mask, %avl, 5
|
|
...
|