@@ -7,20 +7,17 @@ define void @reverse_store(ptr %a, i64 %n) !dbg !4 {
77; CHECK-LABEL: define void @reverse_store(
88; CHECK-SAME: ptr [[A:%.*]], i64 [[N:%.*]]) #[[ATTR0:[0-9]+]] !dbg [[DBG4:![0-9]+]] {
99; CHECK-NEXT: [[ENTRY:.*:]]
10- ; CHECK-NEXT: #dbg_value(ptr [[A]], [[META11:![0-9]+]], !DIExpression(), [[META15:![0-9]+]])
11- ; CHECK-NEXT: #dbg_value(i64 [[N]], [[META12:![0-9]+]], !DIExpression(), [[META15]])
12- ; CHECK-NEXT: #dbg_value(i64 [[N]], [[META13:![0-9]+]], !DIExpression(DW_OP_constu, 1, DW_OP_minus, DW_OP_stack_value), [[META16:![0-9]+]])
13- ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[N]], 1, !dbg [[DBG17:![0-9]+]]
14- ; CHECK-NEXT: [[UMIN:%.*]] = call i64 @llvm.umin.i64(i64 [[N]], i64 1), !dbg [[DBG17]]
15- ; CHECK-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[UMIN]], !dbg [[DBG17]]
16- ; CHECK-NEXT: br label %[[VECTOR_PH:.*]], !dbg [[DBG17]]
10+ ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[N]], 1, !dbg [[DBG15:![0-9]+]]
11+ ; CHECK-NEXT: [[UMIN:%.*]] = call i64 @llvm.umin.i64(i64 [[N]], i64 1), !dbg [[DBG15]]
12+ ; CHECK-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[UMIN]], !dbg [[DBG15]]
13+ ; CHECK-NEXT: br label %[[VECTOR_PH:.*]], !dbg [[DBG15]]
1714; CHECK: [[VECTOR_PH]]:
1815; CHECK-NEXT: [[TMP2:%.*]] = call <vscale x 4 x i64> @llvm.stepvector.nxv4i64()
1916; CHECK-NEXT: [[BROADCAST_SPLATINSERT:%.*]] = insertelement <vscale x 4 x i64> poison, i64 [[N]], i64 0
2017; CHECK-NEXT: [[BROADCAST_SPLAT:%.*]] = shufflevector <vscale x 4 x i64> [[BROADCAST_SPLATINSERT]], <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
2118; CHECK-NEXT: [[TMP3:%.*]] = mul nsw <vscale x 4 x i64> [[TMP2]], splat (i64 -1)
2219; CHECK-NEXT: [[INDUCTION:%.*]] = add nsw <vscale x 4 x i64> [[BROADCAST_SPLAT]], [[TMP3]]
23- ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]], !dbg [[DBG17 ]]
20+ ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]], !dbg [[DBG15 ]]
2421; CHECK: [[VECTOR_BODY]]:
2522; CHECK-NEXT: [[VEC_IND:%.*]] = phi <vscale x 4 x i64> [ [[INDUCTION]], %[[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], %[[VECTOR_BODY]] ]
2623; CHECK-NEXT: [[AVL:%.*]] = phi i64 [ [[TMP1]], %[[VECTOR_PH]] ], [ [[AVL_NEXT:%.*]], %[[VECTOR_BODY]] ]
@@ -29,47 +26,41 @@ define void @reverse_store(ptr %a, i64 %n) !dbg !4 {
2926; CHECK-NEXT: [[TMP6:%.*]] = mul nsw i64 -1, [[TMP5]]
3027; CHECK-NEXT: [[BROADCAST_SPLATINSERT1:%.*]] = insertelement <vscale x 4 x i64> poison, i64 [[TMP6]], i64 0
3128; CHECK-NEXT: [[BROADCAST_SPLAT2:%.*]] = shufflevector <vscale x 4 x i64> [[BROADCAST_SPLATINSERT1]], <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
32- ; CHECK-NEXT: [[TMP7:%.*]] = add nsw <vscale x 4 x i64> [[VEC_IND]], splat (i64 -1), !dbg [[DBG18 :![0-9]+]]
29+ ; CHECK-NEXT: [[TMP7:%.*]] = add nsw <vscale x 4 x i64> [[VEC_IND]], splat (i64 -1), !dbg [[DBG16 :![0-9]+]]
3330; CHECK-NEXT: [[TMP8:%.*]] = extractelement <vscale x 4 x i64> [[TMP7]], i32 0
34- ; CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw i32, ptr [[A]], i64 [[TMP8]], !dbg [[DBG19 :![0-9]+]]
35- ; CHECK-NEXT: [[TMP10:%.*]] = trunc nuw nsw <vscale x 4 x i64> [[TMP7]] to <vscale x 4 x i32>, !dbg [[DBG21 :![0-9]+]]
36- ; CHECK-NEXT: [[TMP11:%.*]] = zext i32 [[TMP4]] to i64, !dbg [[DBG21 ]]
37- ; CHECK-NEXT: [[TMP12:%.*]] = mul i64 0, [[TMP11]], !dbg [[DBG21 ]]
38- ; CHECK-NEXT: [[TMP13:%.*]] = sub i64 [[TMP11]], 1, !dbg [[DBG21 ]]
39- ; CHECK-NEXT: [[TMP14:%.*]] = mul i64 -1, [[TMP13]], !dbg [[DBG21 ]]
40- ; CHECK-NEXT: [[TMP15:%.*]] = getelementptr i32, ptr [[TMP9]], i64 [[TMP12]], !dbg [[DBG21 ]]
41- ; CHECK-NEXT: [[TMP16:%.*]] = getelementptr i32, ptr [[TMP15]], i64 [[TMP14]], !dbg [[DBG21 ]]
42- ; CHECK-NEXT: [[VP_REVERSE:%.*]] = call <vscale x 4 x i32> @llvm.experimental.vp.reverse.nxv4i32(<vscale x 4 x i32> [[TMP10]], <vscale x 4 x i1> splat (i1 true), i32 [[TMP4]]), !dbg [[DBG21 ]]
43- ; CHECK-NEXT: call void @llvm.vp.store.nxv4i32.p0(<vscale x 4 x i32> [[VP_REVERSE]], ptr align 4 [[TMP16]], <vscale x 4 x i1> splat (i1 true), i32 [[TMP4]]), !dbg [[DBG21 ]]
31+ ; CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw i32, ptr [[A]], i64 [[TMP8]], !dbg [[DBG17 :![0-9]+]]
32+ ; CHECK-NEXT: [[TMP10:%.*]] = trunc nuw nsw <vscale x 4 x i64> [[TMP7]] to <vscale x 4 x i32>, !dbg [[DBG19 :![0-9]+]]
33+ ; CHECK-NEXT: [[TMP11:%.*]] = zext i32 [[TMP4]] to i64, !dbg [[DBG19 ]]
34+ ; CHECK-NEXT: [[TMP12:%.*]] = mul i64 0, [[TMP11]], !dbg [[DBG19 ]]
35+ ; CHECK-NEXT: [[TMP13:%.*]] = sub i64 [[TMP11]], 1, !dbg [[DBG19 ]]
36+ ; CHECK-NEXT: [[TMP14:%.*]] = mul i64 -1, [[TMP13]], !dbg [[DBG19 ]]
37+ ; CHECK-NEXT: [[TMP15:%.*]] = getelementptr i32, ptr [[TMP9]], i64 [[TMP12]], !dbg [[DBG19 ]]
38+ ; CHECK-NEXT: [[TMP16:%.*]] = getelementptr i32, ptr [[TMP15]], i64 [[TMP14]], !dbg [[DBG19 ]]
39+ ; CHECK-NEXT: [[VP_REVERSE:%.*]] = call <vscale x 4 x i32> @llvm.experimental.vp.reverse.nxv4i32(<vscale x 4 x i32> [[TMP10]], <vscale x 4 x i1> splat (i1 true), i32 [[TMP4]]), !dbg [[DBG19 ]]
40+ ; CHECK-NEXT: call void @llvm.vp.store.nxv4i32.p0(<vscale x 4 x i32> [[VP_REVERSE]], ptr align 4 [[TMP16]], <vscale x 4 x i1> splat (i1 true), i32 [[TMP4]]), !dbg [[DBG19 ]]
4441; CHECK-NEXT: [[AVL_NEXT]] = sub nuw i64 [[AVL]], [[TMP5]]
4542; CHECK-NEXT: [[VEC_IND_NEXT]] = add nsw <vscale x 4 x i64> [[VEC_IND]], [[BROADCAST_SPLAT2]]
4643; CHECK-NEXT: [[TMP17:%.*]] = icmp eq i64 [[AVL_NEXT]], 0
47- ; CHECK-NEXT: br i1 [[TMP17]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP22 :![0-9]+]]
44+ ; CHECK-NEXT: br i1 [[TMP17]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP20 :![0-9]+]]
4845; CHECK: [[MIDDLE_BLOCK]]:
4946; CHECK-NEXT: br label %[[FOR_COND_CLEANUP:.*]]
5047; CHECK: [[FOR_COND_CLEANUP]]:
51- ; CHECK-NEXT: ret void, !dbg [[DBG25 :![0-9]+]]
48+ ; CHECK-NEXT: ret void, !dbg [[DBG23 :![0-9]+]]
5249;
5350entry:
54- #dbg_value(ptr %a , !11 , !DIExpression (), !15 )
55- #dbg_value(i64 %n , !12 , !DIExpression (), !15 )
56- #dbg_value(i64 %n , !13 , !DIExpression (DW_OP_constu, 1 , DW_OP_minus, DW_OP_stack_value), !16 )
57- br label %for.body , !dbg !17
51+ br label %for.body , !dbg !15
5852
5953for.cond.cleanup: ; preds = %for.body
60- ret void , !dbg !18
54+ ret void , !dbg !16
6155
6256for.body: ; preds = %entry, %for.body
6357 %indvars.iv = phi i64 [ %n , %entry ], [ %indvars.iv.next , %for.body ]
64- #dbg_value(i64 %indvars.iv , !13 , !DIExpression (DW_OP_constu, 1 , DW_OP_minus, DW_OP_stack_value), !16 )
65- %indvars.iv.next = add nsw i64 %indvars.iv , -1 , !dbg !20
66- #dbg_value(i64 %indvars.iv.next , !13 , !DIExpression (), !16 )
67- %arrayidx = getelementptr inbounds nuw i32 , ptr %a , i64 %indvars.iv.next , !dbg !21
68- %1 = trunc nuw nsw i64 %indvars.iv.next to i32 , !dbg !22
69- store i32 %1 , ptr %arrayidx , align 4 , !dbg !22
70- #dbg_value(i64 %indvars.iv.next , !13 , !DIExpression (DW_OP_constu, 1 , DW_OP_minus, DW_OP_stack_value), !16 )
71- %cmp = icmp samesign ugt i64 %indvars.iv , 1 , !dbg !23
72- br i1 %cmp , label %for.body , label %for.cond.cleanup , !dbg !24 , !llvm.loop !25
58+ %indvars.iv.next = add nsw i64 %indvars.iv , -1 , !dbg !18
59+ %arrayidx = getelementptr inbounds nuw i32 , ptr %a , i64 %indvars.iv.next , !dbg !19
60+ %1 = trunc nuw nsw i64 %indvars.iv.next to i32 , !dbg !20
61+ store i32 %1 , ptr %arrayidx , align 4 , !dbg !20
62+ %cmp = icmp samesign ugt i64 %indvars.iv , 1 , !dbg !21
63+ br i1 %cmp , label %for.body , label %for.cond.cleanup , !dbg !22 , !llvm.loop !23
7364}
7465
7566!llvm.dbg.cu = !{!0 }
@@ -90,20 +81,18 @@ for.body: ; preds = %entry, %for.body
9081!12 = !DILocalVariable (name: "n" , arg: 2 , scope: !4 , file: !1 , line: 1 , type: !8 )
9182!13 = !DILocalVariable (name: "i" , scope: !14 , file: !1 , line: 2 , type: !9 )
9283!14 = distinct !DILexicalBlock (scope: !4 , file: !1 , line: 2 , column: 5 )
93- !15 = !DILocation (line: 0 , scope: !4 )
94- !16 = !DILocation (line: 0 , scope: !14 )
95- !17 = !DILocation (line: 2 , column: 5 , scope: !14 )
96- !18 = !DILocation (line: 4 , column: 1 , scope: !4 )
97- !19 = distinct !DILexicalBlock (scope: !14 , file: !1 , line: 2 , column: 5 )
98- !20 = !DILocation (line: 2 , scope: !14 )
99- !21 = !DILocation (line: 3 , column: 7 , scope: !19 )
100- !22 = !DILocation (line: 3 , column: 12 , scope: !19 )
101- !23 = !DILocation (line: 2 , column: 27 , scope: !19 )
102- !24 = !DILocation (line: 2 , column: 5 , scope: !14 )
103- !25 = distinct !{!25 , !17 , !26 , !27 }
104- !26 = !DILocation (line: 3 , column: 14 , scope: !14 )
105- !27 = !{!"llvm.loop.vectorize.enable" , i1 true }
106- ;
84+ !15 = !DILocation (line: 2 , column: 5 , scope: !14 )
85+ !16 = !DILocation (line: 4 , column: 1 , scope: !4 )
86+ !17 = distinct !DILexicalBlock (scope: !14 , file: !1 , line: 2 , column: 5 )
87+ !18 = !DILocation (line: 2 , scope: !14 )
88+ !19 = !DILocation (line: 3 , column: 7 , scope: !17 )
89+ !20 = !DILocation (line: 3 , column: 12 , scope: !17 )
90+ !21 = !DILocation (line: 2 , column: 27 , scope: !17 )
91+ !22 = !DILocation (line: 2 , column: 5 , scope: !14 )
92+ !23 = distinct !{!23 , !15 , !24 , !25 }
93+ !24 = !DILocation (line: 3 , column: 14 , scope: !14 )
94+ !25 = !{!"llvm.loop.vectorize.enable" , i1 true }
95+ ;.
10796; 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)
10897; CHECK: [[META1]] = !DIFile(filename: "{{.*}}dbg-tail-folding-by-evl.cpp", directory: {{.*}})
10998; CHECK: [[DBG4]] = distinct !DISubprogram(name: "reverse_store", linkageName: "_Z13reverse_storePil", scope: [[META1]], file: [[META1]], line: 1, type: [[META5:![0-9]+]], scopeLine: 1, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META10:![0-9]+]])
@@ -112,20 +101,18 @@ for.body: ; preds = %entry, %for.body
112101; CHECK: [[META7]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META8:![0-9]+]], size: 64)
113102; CHECK: [[META8]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
114103; CHECK: [[META9]] = !DIBasicType(name: "long", size: 64, encoding: DW_ATE_signed)
115- ; CHECK: [[META10]] = !{[[META11]] , [[META12]] , [[META13]]}
104+ ; CHECK: [[META10]] = !{[[META11:![0-9]+]] , [[META12:![0-9]+]] , [[META13:![0-9]+ ]]}
116105; CHECK: [[META11]] = !DILocalVariable(name: "a", arg: 1, scope: [[DBG4]], file: [[META1]], line: 1, type: [[META7]])
117106; CHECK: [[META12]] = !DILocalVariable(name: "n", arg: 2, scope: [[DBG4]], file: [[META1]], line: 1, type: [[META9]])
118107; CHECK: [[META13]] = !DILocalVariable(name: "i", scope: [[META14:![0-9]+]], file: [[META1]], line: 2, type: [[META8]])
119108; CHECK: [[META14]] = distinct !DILexicalBlock(scope: [[DBG4]], file: [[META1]], line: 2, column: 5)
120- ; CHECK: [[META15]] = !DILocation(line: 0, scope: [[DBG4]])
121- ; CHECK: [[META16]] = !DILocation(line: 0, scope: [[META14]])
122- ; CHECK: [[DBG17]] = !DILocation(line: 2, column: 5, scope: [[META14]])
123- ; CHECK: [[DBG18]] = !DILocation(line: 2, scope: [[META14]])
124- ; CHECK: [[DBG19]] = !DILocation(line: 3, column: 7, scope: [[META20:![0-9]+]])
125- ; CHECK: [[META20]] = distinct !DILexicalBlock(scope: [[META14]], file: [[META1]], line: 2, column: 5)
126- ; CHECK: [[DBG21]] = !DILocation(line: 3, column: 12, scope: [[META20]])
127- ; CHECK: [[LOOP22]] = distinct !{[[LOOP22]], [[META23:![0-9]+]], [[META24:![0-9]+]]}
128- ; CHECK: [[META23]] = !{!"llvm.loop.isvectorized", i32 1}
129- ; CHECK: [[META24]] = !{!"llvm.loop.unroll.runtime.disable"}
130- ; CHECK: [[DBG25]] = !DILocation(line: 4, column: 1, scope: [[DBG4]])
109+ ; CHECK: [[DBG15]] = !DILocation(line: 2, column: 5, scope: [[META14]])
110+ ; CHECK: [[DBG16]] = !DILocation(line: 2, scope: [[META14]])
111+ ; CHECK: [[DBG17]] = !DILocation(line: 3, column: 7, scope: [[META18:![0-9]+]])
112+ ; CHECK: [[META18]] = distinct !DILexicalBlock(scope: [[META14]], file: [[META1]], line: 2, column: 5)
113+ ; CHECK: [[DBG19]] = !DILocation(line: 3, column: 12, scope: [[META18]])
114+ ; CHECK: [[LOOP20]] = distinct !{[[LOOP20]], [[META21:![0-9]+]], [[META22:![0-9]+]]}
115+ ; CHECK: [[META21]] = !{!"llvm.loop.isvectorized", i32 1}
116+ ; CHECK: [[META22]] = !{!"llvm.loop.unroll.runtime.disable"}
117+ ; CHECK: [[DBG23]] = !DILocation(line: 4, column: 1, scope: [[DBG4]])
131118;.
0 commit comments