@@ -322,19 +322,19 @@ declare void @foo()
322
322
define <vscale x 1 x double > @test8 (i64 %avl , i8 zeroext %cond , <vscale x 1 x double > %a , <vscale x 1 x double > %b ) nounwind {
323
323
; CHECK-LABEL: test8:
324
324
; CHECK: # %bb.0: # %entry
325
- ; CHECK-NEXT: addi sp, sp, -32
326
- ; CHECK-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
327
- ; CHECK-NEXT: sd s0, 16(sp) # 8-byte Folded Spill
328
- ; CHECK-NEXT: csrr a2, vlenb
329
- ; CHECK-NEXT: slli a2, a2, 1
330
- ; CHECK-NEXT: sub sp, sp, a2
331
- ; CHECK-NEXT: mv s0, a0
332
325
; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
333
326
; CHECK-NEXT: beqz a1, .LBB6_2
334
327
; CHECK-NEXT: # %bb.1: # %if.then
335
328
; CHECK-NEXT: vfadd.vv v8, v8, v9
336
- ; CHECK-NEXT: j .LBB6_3
329
+ ; CHECK-NEXT: ret
337
330
; CHECK-NEXT: .LBB6_2: # %if.else
331
+ ; CHECK-NEXT: addi sp, sp, -32
332
+ ; CHECK-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
333
+ ; CHECK-NEXT: sd s0, 16(sp) # 8-byte Folded Spill
334
+ ; CHECK-NEXT: csrr a1, vlenb
335
+ ; CHECK-NEXT: slli a1, a1, 1
336
+ ; CHECK-NEXT: sub sp, sp, a1
337
+ ; CHECK-NEXT: mv s0, a0
338
338
; CHECK-NEXT: csrr a0, vlenb
339
339
; CHECK-NEXT: add a0, a0, sp
340
340
; CHECK-NEXT: addi a0, a0, 16
@@ -350,7 +350,6 @@ define <vscale x 1 x double> @test8(i64 %avl, i8 zeroext %cond, <vscale x 1 x do
350
350
; CHECK-NEXT: vl1r.v v9, (a0) # Unknown-size Folded Reload
351
351
; CHECK-NEXT: vsetvli zero, s0, e64, m1, ta, ma
352
352
; CHECK-NEXT: vfsub.vv v8, v9, v8
353
- ; CHECK-NEXT: .LBB6_3: # %if.then
354
353
; CHECK-NEXT: csrr a0, vlenb
355
354
; CHECK-NEXT: slli a0, a0, 1
356
355
; CHECK-NEXT: add sp, sp, a0
@@ -1063,17 +1062,48 @@ exit:
1063
1062
ret <vscale x 2 x i32 > %c
1064
1063
}
1065
1064
1065
+ define void @cross_block_avl_extend_backwards (i1 %cond , <vscale x 8 x i8 > %v , ptr %p , i64 %avl ) {
1066
+ ; CHECK-LABEL: cross_block_avl_extend_backwards:
1067
+ ; CHECK: # %bb.0: # %entry
1068
+ ; CHECK-NEXT: andi a0, a0, 1
1069
+ ; CHECK-NEXT: beqz a0, .LBB25_2
1070
+ ; CHECK-NEXT: # %bb.1: # %exit
1071
+ ; CHECK-NEXT: ret
1072
+ ; CHECK-NEXT: .LBB25_2: # %bar
1073
+ ; CHECK-NEXT: addi a2, a2, 1
1074
+ ; CHECK-NEXT: .LBB25_3: # %foo
1075
+ ; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
1076
+ ; CHECK-NEXT: vsetivli zero, 1, e8, m1, ta, ma
1077
+ ; CHECK-NEXT: vse8.v v8, (a1)
1078
+ ; CHECK-NEXT: vsetvli zero, a2, e8, m1, ta, ma
1079
+ ; CHECK-NEXT: vse8.v v8, (a1)
1080
+ ; CHECK-NEXT: j .LBB25_3
1081
+ entry:
1082
+ br i1 %cond , label %exit , label %bar
1083
+ foo:
1084
+ ; Force a vl toggle
1085
+ call void @llvm.riscv.vse.nxv8i8.i64 (<vscale x 8 x i8 > %v , ptr %p , i64 1 )
1086
+ ; %add's LiveRange needs to be extended backwards to here.
1087
+ call void @llvm.riscv.vse.nxv8i8.i64 (<vscale x 8 x i8 > %v , ptr %p , i64 %add )
1088
+ br label %foo
1089
+ exit:
1090
+ ret void
1091
+ bar:
1092
+ %add = add i64 %avl , 1
1093
+ br label %foo
1094
+ }
1095
+
1066
1096
define void @vlmax_avl_phi (i1 %cmp , ptr %p , i64 %a , i64 %b ) {
1067
1097
; CHECK-LABEL: vlmax_avl_phi:
1068
1098
; CHECK: # %bb.0: # %entry
1069
1099
; CHECK-NEXT: andi a0, a0, 1
1070
- ; CHECK-NEXT: beqz a0, .LBB25_2
1100
+ ; CHECK-NEXT: beqz a0, .LBB26_2
1071
1101
; CHECK-NEXT: # %bb.1: # %foo
1072
1102
; CHECK-NEXT: vsetvli zero, a2, e8, m1, ta, ma
1073
- ; CHECK-NEXT: j .LBB25_3
1074
- ; CHECK-NEXT: .LBB25_2 : # %bar
1103
+ ; CHECK-NEXT: j .LBB26_3
1104
+ ; CHECK-NEXT: .LBB26_2 : # %bar
1075
1105
; CHECK-NEXT: vsetvli zero, a3, e8, m1, ta, ma
1076
- ; CHECK-NEXT: .LBB25_3 : # %exit
1106
+ ; CHECK-NEXT: .LBB26_3 : # %exit
1077
1107
; CHECK-NEXT: vmv.v.i v8, 0
1078
1108
; CHECK-NEXT: vsetivli zero, 1, e8, m1, ta, ma
1079
1109
; CHECK-NEXT: vse8.v v8, (a1)
0 commit comments