Files
clang-p2996/llvm/test/Transforms/GVN/load-through-select-dbg.ll
Sergey Kachkov 4b14148d24 [GVN] Skip debug instructions in findDominatingValue function (#65977)
findDominatingValue has a search limit, and when it is reached, optimization is
not applied. This patch fixes the issue that this limit also takes into account
debug intrinsics, so the result of optimization can depend from the presence of
debug info.
2023-09-13 11:23:26 +03:00

43 lines
2.0 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 3
; RUN: opt < %s -passes=gvn -gvn-max-num-visited-insts=4 -S | FileCheck %s
declare void @llvm.dbg.declare(metadata, metadata, metadata)
define i32 @foo(ptr %a, ptr %b) {
; CHECK-LABEL: define i32 @foo(
; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) {
; CHECK-NEXT: entry:
; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[A]], align 4
; CHECK-NEXT: call void @llvm.dbg.declare(metadata ptr undef, metadata [[META4:![0-9]+]], metadata !DIExpression()), !dbg [[DBG10:![0-9]+]]
; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr [[B]], align 4
; CHECK-NEXT: [[COND:%.*]] = icmp slt i32 [[TMP0]], [[TMP1]]
; CHECK-NEXT: [[TMP2:%.*]] = select i1 [[COND]], i32 [[TMP0]], i32 [[TMP1]]
; CHECK-NEXT: [[PTR:%.*]] = select i1 [[COND]], ptr [[A]], ptr [[B]]
; CHECK-NEXT: ret i32 [[TMP2]]
;
entry:
%0 = load i32, ptr %a, align 4
call void @llvm.dbg.declare(metadata ptr undef, metadata !46, metadata !DIExpression()), !dbg !40
%1 = load i32, ptr %b, align 4
%cond = icmp slt i32 %0, %1
%ptr = select i1 %cond, ptr %a, ptr %b
%res = load i32, ptr %ptr, align 4
ret i32 %res
}
!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!35, !36}
!0 = distinct !DICompileUnit(language: DW_LANG_C11, file: !1, producer: "clang version 17.0.0.prerel", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None)
!1 = !DIFile(filename: "bbi-78272.c", directory: "/tmp")
!5 = !DIBasicType(name: "int", size: 16, encoding: DW_ATE_signed)
!35 = !{i32 7, !"Dwarf Version", i32 4}
!36 = !{i32 2, !"Debug Info Version", i32 3}
!40 = !DILocation(line: 15, column: 7, scope: !41)
!41 = distinct !DISubprogram(name: "x", scope: !1, file: !1, line: 14, type: !42, scopeLine: 14, flags: DIFlagAllCallsDescribed, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !45)
!42 = !DISubroutineType(types: !43)
!43 = !{!5}
!45 = !{!46}
!46 = !DILocalVariable(name: "t", scope: !41, file: !1, line: 15, type: !5)