Files
Hassnaa Hamdi 7f676cc7f0 [LV] Fix analysis remarks leak (#197697)
Currently, `LoopVectorizeHints::vectorizeAnalysisPassName()` returns
empty pass name when the user forces vectorization, which allows
analysis remarks to be emitted implicitly.
The code sometimes emits analysis remarks with passing explicit pass
name and other times it uses the `vectorizeAnalysisPassName()` which
prevents consistent behaviour.

This PR removes the implicit emitting so that analysis remarks
consistently require `-pass-remarks-analysis` to print. Affected tests
are updated to add `-pass-remarks-analysis`.
2026-05-19 17:17:50 +01:00

69 lines
2.6 KiB
LLVM

; RUN: opt < %s -passes=loop-vectorize -force-vector-width=4 -S -pass-remarks-missed='loop-vectorize' -pass-remarks-analysis=loop-vectorize 2>&1 | FileCheck %s
; C/C++ code for control flow test
; int test(int *A, int Length) {
; for (int i = 0; i < Length; i++) {
; if (A[i] > 10.0) goto end;
; A[i] = 0;
; }
; end:
; return 0;
; }
; CHECK: remark: source.cpp:5:9: loop not vectorized: Cannot determine whether critical uncountable exit load address does not alias with a memory write
; CHECK: remark: source.cpp:5:9: loop not vectorized
; CHECK: _Z4testPii
; CHECK-NOT: x i32>
; CHECK: ret
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
define i32 @_Z4testPii(ptr nocapture %A, i32 %Length) !dbg !4 {
entry:
%cmp8 = icmp sgt i32 %Length, 0, !dbg !10
br i1 %cmp8, label %for.body.preheader, label %end, !dbg !10
for.body.preheader:
br label %for.body, !dbg !12
for.body:
%indvars.iv = phi i64 [ %indvars.iv.next, %if.else ], [ 0, %for.body.preheader ]
%arrayidx = getelementptr inbounds i32, ptr %A, i64 %indvars.iv, !dbg !12
%0 = load i32, ptr %arrayidx, align 4, !dbg !12
%cmp1 = icmp sgt i32 %0, 10, !dbg !12
br i1 %cmp1, label %end.loopexit, label %if.else, !dbg !12
if.else:
store i32 0, ptr %arrayidx, align 4, !dbg !19
%indvars.iv.next = add nuw nsw i64 %indvars.iv, 1, !dbg !10
%1 = trunc i64 %indvars.iv.next to i32, !dbg !10
%cmp = icmp slt i32 %1, %Length, !dbg !10
br i1 %cmp, label %for.body, label %end.loopexit, !dbg !10
end.loopexit:
br label %end
end:
ret i32 0, !dbg !20
}
!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!7, !8}
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.5.0", isOptimized: true, runtimeVersion: 6, emissionKind: LineTablesOnly, file: !1, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
!1 = !DIFile(filename: "source.cpp", directory: ".")
!2 = !{}
!4 = distinct !DISubprogram(name: "test", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: true, unit: !0, scopeLine: 2, file: !1, scope: !5, type: !6, retainedNodes: !2)
!5 = !DIFile(filename: "source.cpp", directory: ".")
!6 = !DISubroutineType(types: !2)
!7 = !{i32 2, !"Dwarf Version", i32 2}
!8 = !{i32 2, !"Debug Info Version", i32 3}
!10 = !DILocation(line: 3, column: 8, scope: !11)
!11 = distinct !DILexicalBlock(line: 3, column: 3, file: !1, scope: !4)
!12 = !DILocation(line: 5, column: 9, scope: !13)
!13 = distinct !DILexicalBlock(line: 5, column: 9, file: !1, scope: !14)
!14 = distinct !DILexicalBlock(line: 4, column: 3, file: !1, scope: !11)
!19 = !DILocation(line: 8, column: 7, scope: !13)
!20 = !DILocation(line: 12, column: 3, scope: !4)