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.
68 lines
3.5 KiB
LLVM
68 lines
3.5 KiB
LLVM
; RUN: opt < %s -S -passes=loop-vectorize -force-vector-interleave=1 -force-vector-width=4 | FileCheck %s
|
|
; Make sure we vectorize with debugging turned on.
|
|
|
|
source_filename = "test/Transforms/LoopVectorize/dbg.value.ll"
|
|
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
|
|
|
|
@A = global [1024 x i32] zeroinitializer, align 16, !dbg !0
|
|
@B = global [1024 x i32] zeroinitializer, align 16, !dbg !7
|
|
@C = global [1024 x i32] zeroinitializer, align 16, !dbg !9
|
|
; CHECK-LABEL: @test(
|
|
|
|
define i32 @test() #0 !dbg !15 {
|
|
entry:
|
|
tail call void @llvm.dbg.value(metadata i32 0, metadata !19, metadata !21), !dbg !22
|
|
br label %for.body, !dbg !22
|
|
|
|
for.body:
|
|
;CHECK: load <4 x i32>
|
|
%indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
|
|
%arrayidx = getelementptr inbounds [1024 x i32], ptr @B, i64 0, i64 %indvars.iv, !dbg !23
|
|
%0 = load i32, ptr %arrayidx, align 4, !dbg !23
|
|
%arrayidx2 = getelementptr inbounds [1024 x i32], ptr @C, i64 0, i64 %indvars.iv, !dbg !23
|
|
%1 = load i32, ptr %arrayidx2, align 4, !dbg !23
|
|
%add = add nsw i32 %1, %0, !dbg !23
|
|
%arrayidx4 = getelementptr inbounds [1024 x i32], ptr @A, i64 0, i64 %indvars.iv, !dbg !23
|
|
store i32 %add, ptr %arrayidx4, align 4, !dbg !23
|
|
%indvars.iv.next = add i64 %indvars.iv, 1, !dbg !22
|
|
tail call void @llvm.dbg.value(metadata !12, metadata !19, metadata !21), !dbg !22
|
|
%lftr.wideiv = trunc i64 %indvars.iv.next to i32, !dbg !22
|
|
%exitcond = icmp ne i32 %lftr.wideiv, 1024, !dbg !22
|
|
br i1 %exitcond, label %for.body, label %for.end, !dbg !22
|
|
|
|
for.end:
|
|
ret i32 0, !dbg !25
|
|
}
|
|
|
|
|
|
attributes #0 = { "fp-contract-model"="standard" "frame-pointer"="non-leaf" "relocation-model"="pic" "ssp-buffers-size"="8" }
|
|
|
|
!llvm.dbg.cu = !{!11}
|
|
!llvm.module.flags = !{!14}
|
|
|
|
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
|
|
!1 = !DIGlobalVariable(name: "A", scope: null, file: !2, line: 1, type: !3, isLocal: false, isDefinition: true)
|
|
!2 = !DIFile(filename: "test", directory: "/path/to/somewhere")
|
|
!3 = !DICompositeType(tag: DW_TAG_array_type, baseType: !4, size: 32768, align: 32)
|
|
!4 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
|
|
!7 = !DIGlobalVariableExpression(var: !8, expr: !DIExpression())
|
|
!8 = !DIGlobalVariable(name: "B", scope: null, file: !2, line: 2, type: !3, isLocal: false, isDefinition: true)
|
|
!9 = !DIGlobalVariableExpression(var: !10, expr: !DIExpression())
|
|
!10 = !DIGlobalVariable(name: "C", scope: null, file: !2, line: 3, type: !3, isLocal: false, isDefinition: true)
|
|
!11 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !2, producer: "clang", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !12, retainedTypes: !12, globals: !13)
|
|
!12 = !{}
|
|
!13 = !{!0, !7, !9}
|
|
!14 = !{i32 1, !"Debug Info Version", i32 3}
|
|
!15 = distinct !DISubprogram(name: "test", linkageName: "test", scope: !2, file: !2, line: 5, type: !16, isLocal: false, isDefinition: true, scopeLine: 5, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !11, retainedNodes: !18)
|
|
!16 = !DISubroutineType(types: !17)
|
|
!17 = !{!4}
|
|
!18 = !{!19}
|
|
!19 = !DILocalVariable(name: "i", scope: !20, file: !2, line: 6, type: !4)
|
|
!20 = distinct !DILexicalBlock(scope: !15, file: !2, line: 6)
|
|
!21 = !DIExpression()
|
|
!22 = !DILocation(line: 6, scope: !20)
|
|
!23 = !DILocation(line: 7, scope: !24)
|
|
!24 = distinct !DILexicalBlock(scope: !20, file: !2, line: 6)
|
|
!25 = !DILocation(line: 9, scope: !15)
|
|
|