
In NegateValue in Reassociate, we return the negation of an existing value in order to break a subtract into an negate + add, potentially creating a new instruction to perform the negation, but we neglect to propagate the DebugLoc of the sub being replaced to the negate instruction if one is created. This patch adds that propagation. Found using https://github.com/llvm/llvm-project/pull/107279.
39 lines
1.9 KiB
LLVM
39 lines
1.9 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
|
|
;; Tests that we preserve DebugLocs through reassociation of sub instructions.
|
|
; RUN: opt < %s -passes=reassociate -S | FileCheck %s
|
|
|
|
define void @foo(i64 %0) {
|
|
; CHECK-LABEL: define void @foo(
|
|
; CHECK-SAME: i64 [[TMP0:%.*]]) {
|
|
; CHECK-NEXT: [[ENTRY:.*:]]
|
|
; CHECK-NEXT: [[DOTNEG:%.*]] = sub i64 0, [[TMP0]], !dbg [[DBG3:![0-9]+]]
|
|
; CHECK-NEXT: [[ADD_I_I:%.*]] = add i64 [[DOTNEG]], 1
|
|
; CHECK-NEXT: store i64 [[ADD_I_I]], ptr null, align 8
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
entry:
|
|
%sub5.i.i = sub i64 1, %0, !dbg !4
|
|
%add.i.i = add i64 %sub5.i.i, 0
|
|
store i64 %add.i.i, ptr null, align 8
|
|
ret void
|
|
}
|
|
|
|
!llvm.dbg.cu = !{!0}
|
|
!llvm.module.flags = !{!3}
|
|
|
|
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 20.0.0git", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug)
|
|
!1 = !DIFile(filename: "test.cpp", directory: "/tmp")
|
|
!2 = !{}
|
|
!3 = !{i32 2, !"Debug Info Version", i32 3}
|
|
!4 = !DILocation(line: 212, column: 25, scope: !5)
|
|
!5 = distinct !DISubprogram(name: "foo", scope: !0, file: !1, line: 161, type: !6, scopeLine: 162, unit: !0, retainedNodes: !2)
|
|
!6 = distinct !DISubroutineType(types: !2)
|
|
;.
|
|
; CHECK: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: [[META1:![0-9]+]], producer: "{{.*}}clang version {{.*}}", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug)
|
|
; CHECK: [[META1]] = !DIFile(filename: "test.cpp", directory: {{.*}})
|
|
; CHECK: [[DBG3]] = !DILocation(line: 212, column: 25, scope: [[META4:![0-9]+]])
|
|
; CHECK: [[META4]] = distinct !DISubprogram(name: "foo", scope: [[META0]], file: [[META1]], line: 161, type: [[META5:![0-9]+]], scopeLine: 162, spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META6:![0-9]+]])
|
|
; CHECK: [[META5]] = distinct !DISubroutineType(types: [[META6]])
|
|
; CHECK: [[META6]] = !{}
|
|
;.
|