Many tests were running extra passes after loop-vectorize, but they made no difference to the outcome. If tests don't require these extra passes, then we shouldn't run them because it increases the testing time.
82 lines
3.6 KiB
LLVM
82 lines
3.6 KiB
LLVM
; TODO: The non-loop-vectorizer tests should be moved elsewhere.
|
|
; RUN: opt -S -passes=loop-vectorize -force-vector-width=4 -force-vector-interleave=1 < %s | FileCheck --check-prefix=DBG_VALUE --check-prefix=LOOPVEC_4_1 %s
|
|
; RUN: opt -S -passes=loop-vectorize -force-vector-width=2 -force-vector-interleave=3 < %s | FileCheck --check-prefix=DBG_VALUE --check-prefix=LOOPVEC_2_3 %s
|
|
; RUN: opt -S -passes=loop-unroll -unroll-count=5 < %s | FileCheck --check-prefix=DBG_VALUE --check-prefix=LOOPUNROLL_5 %s
|
|
; RUN: opt -S -passes=loop-vectorize,loop-unroll -force-vector-width=4 -force-vector-interleave=4 - -unroll-count=2 < %s | FileCheck --check-prefix=DBG_VALUE --check-prefix=LOOPVEC_UNROLL %s
|
|
; RUN: opt -S -passes=pseudo-probe,loop-unroll -unroll-count=5 < %s | FileCheck --check-prefix=PSEUDO_PROBE %s
|
|
|
|
; Test if vectorization/unroll factor is recorded in discriminator.
|
|
;
|
|
; Original source code:
|
|
; 1 int *a;
|
|
; 2 int *b;
|
|
; 3
|
|
; 4 void foo() {
|
|
; 5 for (int i = 0; i < 4096; i++)
|
|
; 6 a[i] += b[i];
|
|
; 7 }
|
|
|
|
@a = global ptr null, align 8
|
|
@b = global ptr null, align 8
|
|
|
|
define void @_Z3foov() #0 !dbg !6 {
|
|
%1 = load ptr, ptr @b, align 8, !dbg !8, !tbaa !9
|
|
%2 = load ptr, ptr @a, align 8, !dbg !13, !tbaa !9
|
|
br label %3, !dbg !14
|
|
|
|
; <label>:3:
|
|
%indvars.iv = phi i64 [ 0, %0 ], [ %indvars.iv.next, %3 ]
|
|
%4 = getelementptr inbounds i32, ptr %1, i64 %indvars.iv, !dbg !8
|
|
%5 = load i32, ptr %4, align 4, !dbg !8, !tbaa !15
|
|
%6 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv, !dbg !13
|
|
%7 = load i32, ptr %6, align 4, !dbg !17, !tbaa !15
|
|
%8 = add nsw i32 %7, %5, !dbg !17
|
|
;PSEUDO_PROBE-COUNT-5: call void @llvm.pseudoprobe(i64 6699318081062747564, i64 2, i32 0, i64 -1), !dbg ![[#PROBE:]]
|
|
;DBG_VALUE: #dbg_value{{.*}} ![[DBG:[0-9]*]]
|
|
call void @llvm.dbg.value(metadata i32 %8, metadata !22, metadata !DIExpression()), !dbg !17
|
|
store i32 %8, ptr %6, align 4, !dbg !17, !tbaa !15
|
|
%indvars.iv.next = add nuw nsw i64 %indvars.iv, 1, !dbg !18
|
|
%exitcond = icmp eq i64 %indvars.iv.next, 4096, !dbg !19
|
|
br i1 %exitcond, label %9, label %3, !dbg !14, !llvm.loop !20
|
|
|
|
; <label>:9:
|
|
ret void, !dbg !21
|
|
}
|
|
|
|
;DBG_VALUE: ![[TOP:[0-9]*]] = distinct !DISubprogram(name: "foo"
|
|
;LOOPVEC_4_1: discriminator: 17
|
|
;LOOPVEC_2_3: discriminator: 25
|
|
;LOOPUNROLL_5: discriminator: 21
|
|
; When unrolling after loop vectorize, both vec_body and remainder loop
|
|
; are unrolled.
|
|
;LOOPVEC_UNROLL: discriminator: 385
|
|
;LOOPVEC_UNROLL: discriminator: 9
|
|
;DBG_VALUE: ![[DBG]] = {{.*}}, scope: ![[TOP]]
|
|
; Pseudo probe should not have duplication factor assigned.
|
|
;PSEUDO_PROBE: ![[TOP:[0-9]*]] = distinct !DISubprogram(name: "foo"
|
|
;PSEUDO_PROBE: ![[#PROBE]] = !DILocation(line: 6, column: 13, scope: ![[TOP]])
|
|
|
|
!llvm.dbg.cu = !{!0}
|
|
!llvm.module.flags = !{!3, !4}
|
|
|
|
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, debugInfoForProfiling: true)
|
|
!1 = !DIFile(filename: "a.cc", directory: "/")
|
|
!3 = !{i32 2, !"Dwarf Version", i32 4}
|
|
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
|
!6 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 4, unit: !0)
|
|
!8 = !DILocation(line: 6, column: 13, scope: !6)
|
|
!9 = !{!10, !10, i64 0}
|
|
!10 = !{!"any pointer", !11, i64 0}
|
|
!11 = !{!"omnipotent char", !12, i64 0}
|
|
!12 = !{!"Simple C++ TBAA"}
|
|
!13 = !DILocation(line: 6, column: 5, scope: !6)
|
|
!14 = !DILocation(line: 5, column: 3, scope: !6)
|
|
!15 = !{!16, !16, i64 0}
|
|
!16 = !{!"int", !11, i64 0}
|
|
!17 = !DILocation(line: 6, column: 10, scope: !6)
|
|
!18 = !DILocation(line: 5, column: 30, scope: !6)
|
|
!19 = !DILocation(line: 5, column: 21, scope: !6)
|
|
!20 = distinct !{!20, !14}
|
|
!21 = !DILocation(line: 7, column: 1, scope: !6)
|
|
!22 = !DILocalVariable(name: "a", arg: 1, scope: !6, file: !1, line: 10)
|