Skip to content

Commit 20f895c

Browse files
committed
[RISCV] Add a test case for a missed PRE oppurtunity when inserting vsetvlis
1 parent 59b18b5 commit 20f895c

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

llvm/test/CodeGen/RISCV/rvv/vsetvli-insert-crossbb.ll

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -956,6 +956,40 @@ if.end:
956956
ret <vscale x 2 x i32> %e
957957
}
958958

959+
; This case demonstrates a PRE oppurtunity where the first instruction
960+
; in the block doesn't require a state transition. Essentially, we need
961+
; to FRE the transition to the start of the block, and *then* PRE it.
962+
define void @pre_over_vle(ptr %A) {
963+
; CHECK-LABEL: pre_over_vle:
964+
; CHECK: # %bb.0: # %entry
965+
; CHECK-NEXT: li a1, 0
966+
; CHECK-NEXT: li a2, 800
967+
; CHECK-NEXT: .LBB22_1: # %vector.body
968+
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
969+
; CHECK-NEXT: add a3, a0, a1
970+
; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
971+
; CHECK-NEXT: vle8.v v8, (a3)
972+
; CHECK-NEXT: vsext.vf4 v9, v8
973+
; CHECK-NEXT: addi a1, a1, 8
974+
; CHECK-NEXT: vse32.v v9, (a3)
975+
; CHECK-NEXT: bne a1, a2, .LBB22_1
976+
; CHECK-NEXT: # %bb.2: # %exit
977+
; CHECK-NEXT: ret
978+
entry:
979+
br label %vector.body
980+
981+
vector.body:
982+
%iv = phi i64 [ 0, %entry], [%iv.next, %vector.body]
983+
%addr = getelementptr inbounds <2 x i32>, ptr %A, i64 %iv
984+
%v = load <2 x i8>, ptr %addr
985+
%v2 = sext <2 x i8> %v to <2 x i32>
986+
store <2 x i32> %v2, ptr %addr
987+
%iv.next = add i64 %iv, 1
988+
%cmp = icmp ne i64 %iv.next, 100
989+
br i1 %cmp, label %vector.body, label %exit
990+
exit:
991+
ret void
992+
}
959993

960994
declare i64 @llvm.riscv.vsetvlimax.i64(i64, i64)
961995
declare <vscale x 1 x double> @llvm.riscv.vle.nxv1f64.i64(<vscale x 1 x double>, <vscale x 1 x double>* nocapture, i64)

0 commit comments

Comments
 (0)