@@ -322,19 +322,19 @@ declare void @foo()
322322define <vscale x 1 x double > @test8 (i64 %avl , i8 zeroext %cond , <vscale x 1 x double > %a , <vscale x 1 x double > %b ) nounwind {
323323; CHECK-LABEL: test8:
324324; 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
332325; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
333326; CHECK-NEXT: beqz a1, .LBB6_2
334327; CHECK-NEXT: # %bb.1: # %if.then
335328; CHECK-NEXT: vfadd.vv v8, v8, v9
336- ; CHECK-NEXT: j .LBB6_3
329+ ; CHECK-NEXT: ret
337330; 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
338338; CHECK-NEXT: csrr a0, vlenb
339339; CHECK-NEXT: add a0, a0, sp
340340; 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
350350; CHECK-NEXT: vl1r.v v9, (a0) # Unknown-size Folded Reload
351351; CHECK-NEXT: vsetvli zero, s0, e64, m1, ta, ma
352352; CHECK-NEXT: vfsub.vv v8, v9, v8
353- ; CHECK-NEXT: .LBB6_3: # %if.then
354353; CHECK-NEXT: csrr a0, vlenb
355354; CHECK-NEXT: slli a0, a0, 1
356355; CHECK-NEXT: add sp, sp, a0
@@ -1063,17 +1062,48 @@ exit:
10631062 ret <vscale x 2 x i32 > %c
10641063}
10651064
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+
10661096define void @vlmax_avl_phi (i1 %cmp , ptr %p , i64 %a , i64 %b ) {
10671097; CHECK-LABEL: vlmax_avl_phi:
10681098; CHECK: # %bb.0: # %entry
10691099; CHECK-NEXT: andi a0, a0, 1
1070- ; CHECK-NEXT: beqz a0, .LBB25_2
1100+ ; CHECK-NEXT: beqz a0, .LBB26_2
10711101; CHECK-NEXT: # %bb.1: # %foo
10721102; 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
10751105; CHECK-NEXT: vsetvli zero, a3, e8, m1, ta, ma
1076- ; CHECK-NEXT: .LBB25_3 : # %exit
1106+ ; CHECK-NEXT: .LBB26_3 : # %exit
10771107; CHECK-NEXT: vmv.v.i v8, 0
10781108; CHECK-NEXT: vsetivli zero, 1, e8, m1, ta, ma
10791109; CHECK-NEXT: vse8.v v8, (a1)
0 commit comments