Skip to content

Commit d067a8a

Browse files
committed
more simplify
1 parent 6fef706 commit d067a8a

File tree

1 file changed

+45
-55
lines changed

1 file changed

+45
-55
lines changed

llvm/test/Transforms/LoopVectorize/RISCV/dbg-tail-folding-by-evl.ll

Lines changed: 45 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -12,36 +12,35 @@ define void @reverse_store(ptr %a, i64 %n) !dbg !4 {
1212
; CHECK-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[UMIN]]
1313
; CHECK-NEXT: br label %[[VECTOR_PH:.*]]
1414
; CHECK: [[VECTOR_PH]]:
15-
; CHECK-NEXT: [[TMP2:%.*]] = call <vscale x 4 x i64> @llvm.stepvector.nxv4i64()
16-
; CHECK-NEXT: [[BROADCAST_SPLATINSERT:%.*]] = insertelement <vscale x 4 x i64> poison, i64 [[N]], i64 0
17-
; CHECK-NEXT: [[BROADCAST_SPLAT:%.*]] = shufflevector <vscale x 4 x i64> [[BROADCAST_SPLATINSERT]], <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
18-
; CHECK-NEXT: [[TMP3:%.*]] = mul nsw <vscale x 4 x i64> [[TMP2]], splat (i64 -1)
19-
; CHECK-NEXT: [[INDUCTION:%.*]] = add nsw <vscale x 4 x i64> [[BROADCAST_SPLAT]], [[TMP3]]
15+
; CHECK-NEXT: [[TMP2:%.*]] = call <vscale x 2 x i64> @llvm.stepvector.nxv2i64()
16+
; CHECK-NEXT: [[BROADCAST_SPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[N]], i64 0
17+
; CHECK-NEXT: [[BROADCAST_SPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[BROADCAST_SPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
18+
; CHECK-NEXT: [[TMP3:%.*]] = mul nsw <vscale x 2 x i64> [[TMP2]], splat (i64 -1)
19+
; CHECK-NEXT: [[INDUCTION:%.*]] = add nsw <vscale x 2 x i64> [[BROADCAST_SPLAT]], [[TMP3]]
2020
; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
2121
; CHECK: [[VECTOR_BODY]]:
22-
; CHECK-NEXT: [[VEC_IND:%.*]] = phi <vscale x 4 x i64> [ [[INDUCTION]], %[[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], %[[VECTOR_BODY]] ]
22+
; CHECK-NEXT: [[VEC_IND:%.*]] = phi <vscale x 2 x i64> [ [[INDUCTION]], %[[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], %[[VECTOR_BODY]] ]
2323
; CHECK-NEXT: [[AVL:%.*]] = phi i64 [ [[TMP1]], %[[VECTOR_PH]] ], [ [[AVL_NEXT:%.*]], %[[VECTOR_BODY]] ]
24-
; CHECK-NEXT: [[TMP4:%.*]] = call i32 @llvm.experimental.get.vector.length.i64(i64 [[AVL]], i32 4, i1 true)
24+
; CHECK-NEXT: [[TMP4:%.*]] = call i32 @llvm.experimental.get.vector.length.i64(i64 [[AVL]], i32 2, i1 true)
2525
; CHECK-NEXT: [[TMP5:%.*]] = zext i32 [[TMP4]] to i64
2626
; CHECK-NEXT: [[TMP6:%.*]] = mul nsw i64 -1, [[TMP5]]
27-
; CHECK-NEXT: [[BROADCAST_SPLATINSERT1:%.*]] = insertelement <vscale x 4 x i64> poison, i64 [[TMP6]], i64 0
28-
; CHECK-NEXT: [[BROADCAST_SPLAT2:%.*]] = shufflevector <vscale x 4 x i64> [[BROADCAST_SPLATINSERT1]], <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
29-
; CHECK-NEXT: [[TMP7:%.*]] = add nsw <vscale x 4 x i64> [[VEC_IND]], splat (i64 -1), !dbg [[DBG11:![0-9]+]]
30-
; CHECK-NEXT: [[TMP8:%.*]] = extractelement <vscale x 4 x i64> [[TMP7]], i32 0
31-
; CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw i32, ptr [[A]], i64 [[TMP8]], !dbg [[DBG12:![0-9]+]]
32-
; CHECK-NEXT: [[TMP10:%.*]] = trunc nuw nsw <vscale x 4 x i64> [[TMP7]] to <vscale x 4 x i32>, !dbg [[DBG13:![0-9]+]]
33-
; CHECK-NEXT: [[TMP11:%.*]] = zext i32 [[TMP4]] to i64, !dbg [[DBG13]]
34-
; CHECK-NEXT: [[TMP12:%.*]] = mul i64 0, [[TMP11]], !dbg [[DBG13]]
35-
; CHECK-NEXT: [[TMP13:%.*]] = sub i64 [[TMP11]], 1, !dbg [[DBG13]]
36-
; CHECK-NEXT: [[TMP14:%.*]] = mul i64 -1, [[TMP13]], !dbg [[DBG13]]
37-
; CHECK-NEXT: [[TMP15:%.*]] = getelementptr i32, ptr [[TMP9]], i64 [[TMP12]], !dbg [[DBG13]]
38-
; CHECK-NEXT: [[TMP16:%.*]] = getelementptr i32, ptr [[TMP15]], i64 [[TMP14]], !dbg [[DBG13]]
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 [[DBG13]]
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 [[DBG13]]
27+
; CHECK-NEXT: [[BROADCAST_SPLATINSERT1:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[TMP6]], i64 0
28+
; 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]+]]
30+
; 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]]
4140
; CHECK-NEXT: [[AVL_NEXT]] = sub nuw i64 [[AVL]], [[TMP5]]
42-
; CHECK-NEXT: [[VEC_IND_NEXT]] = add nsw <vscale x 4 x i64> [[VEC_IND]], [[BROADCAST_SPLAT2]]
41+
; CHECK-NEXT: [[VEC_IND_NEXT]] = add nsw <vscale x 2 x i64> [[VEC_IND]], [[BROADCAST_SPLAT2]]
4342
; CHECK-NEXT: [[TMP17:%.*]] = icmp eq i64 [[AVL_NEXT]], 0
44-
; CHECK-NEXT: br i1 [[TMP17]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP14:![0-9]+]]
43+
; CHECK-NEXT: br i1 [[TMP17]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP10:![0-9]+]]
4544
; CHECK: [[MIDDLE_BLOCK]]:
4645
; CHECK-NEXT: br label %[[FOR_COND_CLEANUP:.*]]
4746
; CHECK: [[FOR_COND_CLEANUP]]:
@@ -55,12 +54,11 @@ for.cond.cleanup: ; preds = %for.body
5554

5655
for.body: ; preds = %entry, %for.body
5756
%indvars.iv = phi i64 [ %n, %entry ], [ %indvars.iv.next, %for.body ]
58-
%indvars.iv.next = add nsw i64 %indvars.iv, -1, !dbg !11
59-
%arrayidx = getelementptr inbounds nuw i32, ptr %a, i64 %indvars.iv.next, !dbg !12
60-
%1 = trunc nuw nsw i64 %indvars.iv.next to i32, !dbg !13
61-
store i32 %1, ptr %arrayidx, align 4, !dbg !13
62-
%cmp = icmp samesign ugt i64 %indvars.iv, 1, !dbg !14
63-
br i1 %cmp, label %for.body, label %for.cond.cleanup, !dbg !15, !llvm.loop !16
57+
%indvars.iv.next = add nsw i64 %indvars.iv, -1, !dbg !7
58+
%arrayidx = getelementptr inbounds nuw i64, ptr %a, i64 %indvars.iv.next, !dbg !8
59+
store i64 %indvars.iv.next, ptr %arrayidx, align 8, !dbg !9
60+
%cmp = icmp samesign ugt i64 %indvars.iv, 1, !dbg !10
61+
br i1 %cmp, label %for.body, label %for.cond.cleanup, !dbg !11, !llvm.loop !12
6462
}
6563

6664
!llvm.dbg.cu = !{!0}
@@ -70,34 +68,26 @@ for.body: ; preds = %entry, %for.body
7068
!1 = !DIFile(filename: "dbg-tail-folding-by-evl.cpp", directory: "/test/file/path")
7169
!2 = !{i32 2, !"Debug Info Version", i32 3}
7270
!3 = !{i32 7, !"debug-info-assignment-tracking", i1 true}
73-
!4 = distinct !DISubprogram(name: "reverse_store", linkageName: "_Z13reverse_storePil", scope: !1, file: !1, line: 1, type: !5, scopeLine: 1, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !10)
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)
7472
!5 = !DISubroutineType(types: !6)
75-
!6 = !{null, !7, !8}
76-
!7 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !9, size: 64)
77-
!8 = !DIBasicType(name: "long", size: 64, encoding: DW_ATE_signed)
78-
!9 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
79-
!10 = !{}
80-
!11 = !DILocation(line: 2, scope: !4)
81-
!12 = !DILocation(line: 3, column: 7, scope: !4)
82-
!13 = !DILocation(line: 3, column: 12, scope: !4)
83-
!14 = !DILocation(line: 2, column: 27, scope: !4)
84-
!15 = !DILocation(line: 2, column: 5, scope: !4)
85-
!16 = distinct !{!16, !17}
86-
!17 = !{!"llvm.loop.vectorize.enable", i1 true}
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}
8781
;.
8882
; 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)
8983
; CHECK: [[META1]] = !DIFile(filename: "{{.*}}dbg-tail-folding-by-evl.cpp", directory: {{.*}})
90-
; 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]+]])
91-
; CHECK: [[META5]] = !DISubroutineType(types: [[META6:![0-9]+]])
92-
; CHECK: [[META6]] = !{null, [[META7:![0-9]+]], [[META9:![0-9]+]]}
93-
; CHECK: [[META7]] = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: [[META8:![0-9]+]], size: 64)
94-
; CHECK: [[META8]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
95-
; CHECK: [[META9]] = !DIBasicType(name: "long", size: 64, encoding: DW_ATE_signed)
96-
; CHECK: [[META10]] = !{}
97-
; CHECK: [[DBG11]] = !DILocation(line: 2, scope: [[DBG4]])
98-
; CHECK: [[DBG12]] = !DILocation(line: 3, column: 7, scope: [[DBG4]])
99-
; CHECK: [[DBG13]] = !DILocation(line: 3, column: 12, scope: [[DBG4]])
100-
; CHECK: [[LOOP14]] = distinct !{[[LOOP14]], [[META15:![0-9]+]], [[META16:![0-9]+]]}
101-
; CHECK: [[META15]] = !{!"llvm.loop.isvectorized", i32 1}
102-
; CHECK: [[META16]] = !{!"llvm.loop.unroll.runtime.disable"}
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: [[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"}
10393
;.

0 commit comments

Comments
 (0)