33; RUN: -prefer-predicate-over-epilogue=predicate-else-scalar-epilogue \
44; RUN: -mtriple=riscv64 -mattr=+v -S < %s | FileCheck %s
55
6- define void @reverse_store (ptr %a , i64 %n ) !dbg !4 {
6+ define void @reverse_store (ptr %a , i64 %n ) !dbg !3 {
77; CHECK-LABEL: define void @reverse_store(
8- ; CHECK-SAME: ptr [[A:%.*]], i64 [[N:%.*]]) #[[ATTR0:[0-9]+]] !dbg [[DBG4 :![0-9]+]] {
8+ ; CHECK-SAME: ptr [[A:%.*]], i64 [[N:%.*]]) #[[ATTR0:[0-9]+]] !dbg [[DBG3 :![0-9]+]] {
99; CHECK-NEXT: [[ENTRY:.*:]]
1010; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[N]], 1
1111; CHECK-NEXT: [[UMIN:%.*]] = call i64 @llvm.umin.i64(i64 [[N]], i64 1)
@@ -26,23 +26,23 @@ define void @reverse_store(ptr %a, i64 %n) !dbg !4 {
2626; CHECK-NEXT: [[TMP6:%.*]] = mul nsw i64 -1, [[TMP5]]
2727; CHECK-NEXT: [[BROADCAST_SPLATINSERT1:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[TMP6]], i64 0
2828; CHECK-NEXT: [[BROADCAST_SPLAT2:%.*]] = shufflevector <vscale x 2 x i64> [[BROADCAST_SPLATINSERT1]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
29- ; CHECK-NEXT: [[TMP7:%.*]] = add nsw <vscale x 2 x i64> [[VEC_IND]], splat (i64 -1), !dbg [[DBG7 :![0-9]+]]
29+ ; CHECK-NEXT: [[TMP7:%.*]] = add nsw <vscale x 2 x i64> [[VEC_IND]], splat (i64 -1), !dbg [[DBG6 :![0-9]+]]
3030; CHECK-NEXT: [[TMP8:%.*]] = extractelement <vscale x 2 x i64> [[TMP7]], i32 0
31- ; CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw i64, ptr [[A]], i64 [[TMP8]], !dbg [[DBG8 :![0-9]+]]
32- ; CHECK-NEXT: [[TMP10:%.*]] = zext i32 [[TMP4]] to i64, !dbg [[DBG9 :![0-9]+]]
33- ; CHECK-NEXT: [[TMP11:%.*]] = mul i64 0, [[TMP10]], !dbg [[DBG9 ]]
34- ; CHECK-NEXT: [[TMP12:%.*]] = sub i64 [[TMP10]], 1, !dbg [[DBG9 ]]
35- ; CHECK-NEXT: [[TMP13:%.*]] = mul i64 -1, [[TMP12]], !dbg [[DBG9 ]]
36- ; CHECK-NEXT: [[TMP14:%.*]] = getelementptr i64, ptr [[TMP9]], i64 [[TMP11]], !dbg [[DBG9 ]]
37- ; CHECK-NEXT: [[TMP15:%.*]] = getelementptr i64, ptr [[TMP14]], i64 [[TMP13]], !dbg [[DBG9 ]]
38- ; CHECK-NEXT: [[VP_REVERSE:%.*]] = call <vscale x 2 x i64> @llvm.experimental.vp.reverse.nxv2i64(<vscale x 2 x i64> [[TMP7]], <vscale x 2 x i1> splat (i1 true), i32 [[TMP4]]), !dbg [[DBG9 ]]
39- ; CHECK-NEXT: call void @llvm.vp.store.nxv2i64.p0(<vscale x 2 x i64> [[VP_REVERSE]], ptr align 8 [[TMP15]], <vscale x 2 x i1> splat (i1 true), i32 [[TMP4]]), !dbg [[DBG9 ]]
31+ ; CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw i64, ptr [[A]], i64 [[TMP8]], !dbg [[DBG7 :![0-9]+]]
32+ ; CHECK-NEXT: [[TMP10:%.*]] = zext i32 [[TMP4]] to i64, !dbg [[DBG8 :![0-9]+]]
33+ ; CHECK-NEXT: [[TMP11:%.*]] = mul i64 0, [[TMP10]], !dbg [[DBG8 ]]
34+ ; CHECK-NEXT: [[TMP12:%.*]] = sub i64 [[TMP10]], 1, !dbg [[DBG8 ]]
35+ ; CHECK-NEXT: [[TMP13:%.*]] = mul i64 -1, [[TMP12]], !dbg [[DBG8 ]]
36+ ; CHECK-NEXT: [[TMP14:%.*]] = getelementptr i64, ptr [[TMP9]], i64 [[TMP11]], !dbg [[DBG8 ]]
37+ ; CHECK-NEXT: [[TMP15:%.*]] = getelementptr i64, ptr [[TMP14]], i64 [[TMP13]], !dbg [[DBG8 ]]
38+ ; CHECK-NEXT: [[VP_REVERSE:%.*]] = call <vscale x 2 x i64> @llvm.experimental.vp.reverse.nxv2i64(<vscale x 2 x i64> [[TMP7]], <vscale x 2 x i1> splat (i1 true), i32 [[TMP4]]), !dbg [[DBG8 ]]
39+ ; CHECK-NEXT: call void @llvm.vp.store.nxv2i64.p0(<vscale x 2 x i64> [[VP_REVERSE]], ptr align 8 [[TMP15]], <vscale x 2 x i1> splat (i1 true), i32 [[TMP4]]), !dbg [[DBG8 ]]
4040; CHECK-NEXT: [[AVL_NEXT]] = sub nuw i64 [[AVL]], [[TMP5]]
4141; CHECK-NEXT: [[VEC_IND_NEXT]] = add nsw <vscale x 2 x i64> [[VEC_IND]], [[BROADCAST_SPLAT2]]
4242; CHECK-NEXT: [[TMP17:%.*]] = icmp eq i64 [[AVL_NEXT]], 0
43- ; CHECK-NEXT: br i1 [[TMP17]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !dbg [[DBG10 :![0-9]+]], !llvm.loop [[LOOP11 :![0-9]+]]
43+ ; CHECK-NEXT: br i1 [[TMP17]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !dbg [[DBG9 :![0-9]+]], !llvm.loop [[LOOP10 :![0-9]+]]
4444; CHECK: [[MIDDLE_BLOCK]]:
45- ; CHECK-NEXT: br label %[[EXIT:.*]], !dbg [[DBG10 ]]
45+ ; CHECK-NEXT: br label %[[EXIT:.*]], !dbg [[DBG9 ]]
4646; CHECK: [[EXIT]]:
4747; CHECK-NEXT: ret void
4848;
@@ -51,44 +51,43 @@ entry:
5151
5252loop:
5353 %iv = phi i64 [ %n , %entry ], [ %iv.next , %loop ]
54- %iv.next = add nsw i64 %iv , -1 , !dbg !7
55- %arrayidx = getelementptr inbounds nuw i64 , ptr %a , i64 %iv.next , !dbg !8
56- store i64 %iv.next , ptr %arrayidx , align 8 , !dbg !9
57- %cmp = icmp samesign ugt i64 %iv , 1 , !dbg !10
58- br i1 %cmp , label %loop , label %exit , !dbg !11 , !llvm.loop !12
54+ %iv.next = add nsw i64 %iv , -1 , !dbg !6
55+ %arrayidx = getelementptr inbounds nuw i64 , ptr %a , i64 %iv.next , !dbg !7
56+ store i64 %iv.next , ptr %arrayidx , align 8 , !dbg !8
57+ %cmp = icmp samesign ugt i64 %iv , 1 , !dbg !9
58+ br i1 %cmp , label %loop , label %exit , !dbg !10 , !llvm.loop !11
5959
6060exit:
6161 ret void
6262}
6363
6464!llvm.dbg.cu = !{!0 }
65- !llvm.module.flags = !{!2 , !3 }
65+ !llvm.module.flags = !{!2 }
6666
6767!0 = distinct !DICompileUnit (language: DW_LANG_C_plus_plus_14, file: !1 , producer: "clang" , isOptimized: true , runtimeVersion: 0 , emissionKind: FullDebug, splitDebugInlining: false , nameTableKind: None)
6868!1 = !DIFile (filename: "dbg-tail-folding-by-evl.cpp" , directory: "/test/file/path" )
6969!2 = !{i32 2 , !"Debug Info Version" , i32 3 }
70- !3 = !{i32 7 , !"debug-info-assignment-tracking" , i1 true }
71- !4 = distinct !DISubprogram (name: "reverse_store" , scope: !1 , file: !1 , line: 1 , type: !5 , scopeLine: 1 , flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0 , retainedNodes: !6 )
72- !5 = !DISubroutineType (types: !6 )
73- !6 = !{}
74- !7 = !DILocation (line: 2 , scope: !4 )
75- !8 = !DILocation (line: 3 , column: 7 , scope: !4 )
76- !9 = !DILocation (line: 3 , column: 12 , scope: !4 )
77- !10 = !DILocation (line: 2 , column: 27 , scope: !4 )
78- !11 = !DILocation (line: 2 , column: 5 , scope: !4 )
79- !12 = distinct !{!12 , !13 }
80- !13 = !{!"llvm.loop.vectorize.enable" , i1 true }
70+ !3 = distinct !DISubprogram (name: "reverse_store" , scope: !1 , file: !1 , line: 1 , type: !4 , scopeLine: 1 , flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0 , retainedNodes: !5 )
71+ !4 = !DISubroutineType (types: !5 )
72+ !5 = !{}
73+ !6 = !DILocation (line: 2 , scope: !3 )
74+ !7 = !DILocation (line: 3 , column: 7 , scope: !3 )
75+ !8 = !DILocation (line: 3 , column: 12 , scope: !3 )
76+ !9 = !DILocation (line: 2 , column: 27 , scope: !3 )
77+ !10 = !DILocation (line: 2 , column: 5 , scope: !3 )
78+ !11 = distinct !{!11 , !12 }
79+ !12 = !{!"llvm.loop.vectorize.enable" , i1 true }
8180;.
8281; CHECK: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: [[META1:![0-9]+]], producer: "clang", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None)
8382; CHECK: [[META1]] = !DIFile(filename: "{{.*}}dbg-tail-folding-by-evl.cpp", directory: {{.*}})
84- ; CHECK: [[DBG4 ]] = distinct !DISubprogram(name: "reverse_store", scope: [[META1]], file: [[META1]], line: 1, type: [[META5 :![0-9]+]], scopeLine: 1, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META6 :![0-9]+]])
85- ; CHECK: [[META5 ]] = !DISubroutineType(types: [[META6 ]])
86- ; CHECK: [[META6 ]] = !{}
87- ; CHECK: [[DBG7 ]] = !DILocation(line: 2, scope: [[DBG4 ]])
88- ; CHECK: [[DBG8 ]] = !DILocation(line: 3, column: 7, scope: [[DBG4 ]])
89- ; CHECK: [[DBG9 ]] = !DILocation(line: 3, column: 12, scope: [[DBG4 ]])
90- ; CHECK: [[DBG10 ]] = !DILocation(line: 2, column: 5, scope: [[DBG4 ]])
91- ; CHECK: [[LOOP11 ]] = distinct !{[[LOOP11 ]], [[META12 :![0-9]+]], [[META13 :![0-9]+]]}
92- ; CHECK: [[META12 ]] = !{!"llvm.loop.isvectorized", i32 1}
93- ; CHECK: [[META13 ]] = !{!"llvm.loop.unroll.runtime.disable"}
83+ ; CHECK: [[DBG3 ]] = distinct !DISubprogram(name: "reverse_store", scope: [[META1]], file: [[META1]], line: 1, type: [[META4 :![0-9]+]], scopeLine: 1, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META5 :![0-9]+]])
84+ ; CHECK: [[META4 ]] = !DISubroutineType(types: [[META5 ]])
85+ ; CHECK: [[META5 ]] = !{}
86+ ; CHECK: [[DBG6 ]] = !DILocation(line: 2, scope: [[DBG3 ]])
87+ ; CHECK: [[DBG7 ]] = !DILocation(line: 3, column: 7, scope: [[DBG3 ]])
88+ ; CHECK: [[DBG8 ]] = !DILocation(line: 3, column: 12, scope: [[DBG3 ]])
89+ ; CHECK: [[DBG9 ]] = !DILocation(line: 2, column: 5, scope: [[DBG3 ]])
90+ ; CHECK: [[LOOP10 ]] = distinct !{[[LOOP10 ]], [[META11 :![0-9]+]], [[META12 :![0-9]+]]}
91+ ; CHECK: [[META11 ]] = !{!"llvm.loop.isvectorized", i32 1}
92+ ; CHECK: [[META12 ]] = !{!"llvm.loop.unroll.runtime.disable"}
9493;.
0 commit comments