Prior to this patch, we required that all users had the same VL in order to optimize. But as the FIXME said, we can use the largest VL to optimize, as long as we can determine what the largest is. This patch implements the FIXME.
114 lines
5.0 KiB
YAML
114 lines
5.0 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-vl-optimizer -verify-machineinstrs | FileCheck %s
|
|
|
|
---
|
|
name: vnsrl_wv_user
|
|
body: |
|
|
bb.0:
|
|
liveins: $x1
|
|
; CHECK-LABEL: name: vnsrl_wv_user
|
|
; CHECK: liveins: $x1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %vl:gprnox0 = COPY $x1
|
|
; CHECK-NEXT: %x:vr = PseudoVADD_VV_MF4 $noreg, $noreg, $noreg, -1, 4 /* e16 */, 0 /* tu, mu */
|
|
; CHECK-NEXT: %y:vr = PseudoVNSRL_WV_MF4 $noreg, %x, $noreg, %vl, 4 /* e16 */, 0 /* tu, mu */
|
|
%vl:gprnox0 = COPY $x1
|
|
%x:vr = PseudoVADD_VV_MF4 $noreg, $noreg, $noreg, -1, 4 /* e16 */, 0 /* tu, mu */
|
|
%y:vr = PseudoVNSRL_WV_MF4 $noreg, %x, $noreg, %vl, 4 /* e16 */, 0 /* tu, mu */
|
|
...
|
|
---
|
|
name: vredsum_vv_user
|
|
body: |
|
|
bb.0:
|
|
liveins: $x1
|
|
; CHECK-LABEL: name: vredsum_vv_user
|
|
; CHECK: liveins: $x1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %vl:gprnox0 = COPY $x1
|
|
; CHECK-NEXT: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 5 /* e32 */, 0 /* tu, mu */
|
|
; CHECK-NEXT: %y:vr = PseudoVREDSUM_VS_M1_E64 $noreg, %x, $noreg, -1, 6 /* e64 */, 0 /* tu, mu */
|
|
; CHECK-NEXT: %z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl, 5 /* e32 */, 0 /* tu, mu */
|
|
%vl:gprnox0 = COPY $x1
|
|
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 5 /* e32 */, 0 /* tu, mu */
|
|
%y:vr = PseudoVREDSUM_VS_M1_E64 $noreg, %x, $noreg, -1, 6 /* e64 */, 0 /* tu, mu */
|
|
%z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl, 5 /* e32 */, 0 /* tu, mu */
|
|
...
|
|
---
|
|
name: use_largest_common_vl_imm_imm
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: use_largest_common_vl_imm_imm
|
|
; CHECK: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, 2, 3 /* e8 */, 0 /* tu, mu */
|
|
; CHECK-NEXT: %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */
|
|
; CHECK-NEXT: %z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 2, 3 /* e8 */, 0 /* tu, mu */
|
|
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0
|
|
%y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 3 /* e8 */, 0
|
|
%z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 2, 3 /* e8 */, 0
|
|
...
|
|
---
|
|
name: use_largest_common_vl_same_reg
|
|
body: |
|
|
bb.0:
|
|
liveins: $x1
|
|
; CHECK-LABEL: name: use_largest_common_vl_same_reg
|
|
; CHECK: liveins: $x1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %vl:gprnox0 = COPY $x1
|
|
; CHECK-NEXT: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, %vl, 3 /* e8 */, 0 /* tu, mu */
|
|
; CHECK-NEXT: %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl, 3 /* e8 */, 0 /* tu, mu */
|
|
; CHECK-NEXT: %z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl, 3 /* e8 */, 0 /* tu, mu */
|
|
%vl:gprnox0 = COPY $x1
|
|
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0
|
|
%y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl, 3 /* e8 */, 0
|
|
%z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl, 3 /* e8 */, 0
|
|
...
|
|
---
|
|
name: use_largest_common_vl_diff_regs
|
|
body: |
|
|
bb.0:
|
|
liveins: $x1, $x2
|
|
; CHECK-LABEL: name: use_largest_common_vl_diff_regs
|
|
; CHECK: liveins: $x1, $x2
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %vl0:gprnox0 = COPY $x1
|
|
; CHECK-NEXT: %vl1:gprnox0 = COPY $x2
|
|
; CHECK-NEXT: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */
|
|
; CHECK-NEXT: %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl0, 3 /* e8 */, 0 /* tu, mu */
|
|
; CHECK-NEXT: %z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl1, 3 /* e8 */, 0 /* tu, mu */
|
|
%vl0:gprnox0 = COPY $x1
|
|
%vl1:gprnox0 = COPY $x2
|
|
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0
|
|
%y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl0, 3 /* e8 */, 0
|
|
%z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl1, 3 /* e8 */, 0
|
|
...
|
|
---
|
|
name: use_largest_common_vl_imm_reg
|
|
body: |
|
|
bb.0:
|
|
liveins: $x1
|
|
; CHECK-LABEL: name: use_largest_common_vl_imm_reg
|
|
; CHECK: liveins: $x1
|
|
; CHECK-NEXT: {{ $}}
|
|
; CHECK-NEXT: %vl:gprnox0 = COPY $x1
|
|
; CHECK-NEXT: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */
|
|
; CHECK-NEXT: %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl, 3 /* e8 */, 0 /* tu, mu */
|
|
; CHECK-NEXT: %z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */
|
|
%vl:gprnox0 = COPY $x1
|
|
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0
|
|
%y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl, 3 /* e8 */, 0
|
|
%z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 3 /* e8 */, 0
|
|
...
|
|
---
|
|
name: use_largest_common_vl_imm_vlmax
|
|
body: |
|
|
bb.0:
|
|
; CHECK-LABEL: name: use_largest_common_vl_imm_vlmax
|
|
; CHECK: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */
|
|
; CHECK-NEXT: %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */
|
|
; CHECK-NEXT: %z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */
|
|
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0
|
|
%y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 3 /* e8 */, 0
|
|
%z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, -1, 3 /* e8 */, 0
|
|
...
|
|
|