mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
be7810833d
Add simple pass for removing redundant vsetvli instructions within a basic block. This handles the case where the AVL register and VTYPE immediate are the same and no other instructions that change VTYPE or VL are between them. There are going to be more opportunities for improvement in this space as we development more complex tests. Differential Revision: https://reviews.llvm.org/D92679
41 lines
1.3 KiB
YAML
41 lines
1.3 KiB
YAML
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
|
# RUN: llc %s -mtriple=riscv64 -run-pass=riscv-cleanup-vsetvli -o - | FileCheck %s
|
|
|
|
# Make sure we don't combine these two VSETVLIs in the cleanup pass. The first
|
|
# keeps the previous value of VL, the second time sets it to VLMAX. We can't
|
|
# remove the first since we can't tell if this is a change VL.
|
|
|
|
--- |
|
|
; ModuleID = '../llvm/test/CodeGen/RISCV/rvv/add-vsetvli-vlmax.ll'
|
|
source_filename = "../llvm/test/CodeGen/RISCV/rvv/add-vsetvli-vlmax.ll"
|
|
target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n64-S128"
|
|
target triple = "riscv64"
|
|
|
|
define void @cleanup_vsetvli() #0 {
|
|
ret void
|
|
}
|
|
|
|
attributes #0 = { "target-features"="+experimental-v" }
|
|
|
|
...
|
|
---
|
|
name: cleanup_vsetvli
|
|
alignment: 4
|
|
tracksRegLiveness: true
|
|
registers:
|
|
- { id: 0, class: gpr }
|
|
frameInfo:
|
|
maxAlignment: 1
|
|
machineFunctionInfo: {}
|
|
body: |
|
|
bb.0 (%ir-block.0):
|
|
; CHECK-LABEL: name: cleanup_vsetvli
|
|
; CHECK: dead $x0 = PseudoVSETVLI $x0, 12, implicit-def $vl, implicit-def $vtype
|
|
; CHECK: dead %0:gpr = PseudoVSETVLI $x0, 12, implicit-def $vl, implicit-def $vtype
|
|
; CHECK: PseudoRET
|
|
dead $x0 = PseudoVSETVLI $x0, 12, implicit-def $vl, implicit-def $vtype
|
|
dead %0:gpr = PseudoVSETVLI $x0, 12, implicit-def $vl, implicit-def $vtype
|
|
PseudoRET
|
|
|
|
...
|