[llvm] [MergeICmps][DebugInfo] Preserve debug locations in mergeComparisons (PR #205796)
J. Ryan Stinnett via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 3 05:09:31 PDT 2026
================
@@ -0,0 +1,117 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
+; RUN: opt -S -passes=mergeicmps < %s | FileCheck %s
+
+;; Tests that we correctly set debug locations on the instructions generated
+;; while merging comparison blocks.
+;; The GEP and Load instructions take their debug locations from the
+;; corresponding GEP+Load insts in the first comparison block.
+;; The icmp/memcmp insts take their debug locations from all of the icmp insts
+;; being merged in the comparison block chain.
+;; The branch insts similarly take their debug locations from all of the branch
+;; insts being merged in the comparison block chain.
+
+
+source_filename = "reduced.ll"
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define i1 @wibble(ptr dereferenceable(600) %arg) !dbg !5 {
+; CHECK-LABEL: define i1 @wibble(
+; CHECK-SAME: ptr dereferenceable(600) [[ARG:%.*]]) !dbg [[DBG5:![0-9]+]] {
+; CHECK-NEXT: "bb+bb5":
+; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[ARG]], i64 44, !dbg [[DBG8:![0-9]+]]
+; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[ARG]], i64 280, !dbg [[DBG9:![0-9]+]]
+; CHECK-NEXT: [[MEMCMP:%.*]] = call i32 @memcmp(ptr [[TMP0]], ptr [[TMP1]], i64 2), !dbg [[DBG10:![0-9]+]]
+; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i32 [[MEMCMP]], 0, !dbg [[DBG10]]
+; CHECK-NEXT: br i1 [[TMP2]], label %[[BB121:.*]], label %[[BB18:.*]], !dbg [[DBG11:![0-9]+]]
+; CHECK: [[BB121]]:
+; CHECK-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[ARG]], i64 47, !dbg [[DBG12:![0-9]+]]
+; CHECK-NEXT: [[TMP4:%.*]] = getelementptr i8, ptr [[ARG]], i64 283, !dbg [[DBG13:![0-9]+]]
+; CHECK-NEXT: [[TMP5:%.*]] = load i8, ptr [[TMP3]], align 1, !dbg [[DBG14:![0-9]+]]
+; CHECK-NEXT: [[TMP6:%.*]] = load i8, ptr [[TMP4]], align 1, !dbg [[DBG15:![0-9]+]]
+; CHECK-NEXT: [[TMP7:%.*]] = icmp eq i8 [[TMP5]], [[TMP6]], !dbg [[DBG16:![0-9]+]]
+; CHECK-NEXT: br label %[[BB18]], !dbg [[DBG17:![0-9]+]]
+; CHECK: [[BB18]]:
+; CHECK-NEXT: [[PHI:%.*]] = phi i1 [ false, %"bb+bb5" ], [ [[TMP7]], %[[BB121]] ], !dbg [[DBG18:![0-9]+]]
+; CHECK-NEXT: ret i1 [[PHI]], !dbg [[DBG19:![0-9]+]]
+;
+bb:
+ %getelementptr = getelementptr i8, ptr %arg, i64 44, !dbg !8
+ %load = load i8, ptr %getelementptr, align 4, !dbg !9
+ %getelementptr2 = getelementptr i8, ptr %arg, i64 280, !dbg !10
+ %load3 = load i8, ptr %getelementptr2, align 8, !dbg !11
+ %icmp = icmp eq i8 %load, %load3, !dbg !12
+ br i1 %icmp, label %bb5, label %bb18, !dbg !13
+
+bb5: ; preds = %bb
+ %getelementptr7 = getelementptr i8, ptr %arg, i64 45, !dbg !14
+ %load8 = load i8, ptr %getelementptr7, align 1, !dbg !15
+ %getelementptr9 = getelementptr i8, ptr %arg, i64 281, !dbg !16
+ %load10 = load i8, ptr %getelementptr9, align 1, !dbg !17
+ %icmp11 = icmp eq i8 %load8, %load10, !dbg !18
+ br i1 %icmp11, label %bb12, label %bb18, !dbg !19
+
+bb12: ; preds = %bb5
+ %getelementptr13 = getelementptr i8, ptr %arg, i64 47, !dbg !20
+ %load14 = load i8, ptr %getelementptr13, align 1, !dbg !21
+ %getelementptr15 = getelementptr i8, ptr %arg, i64 283, !dbg !22
+ %load16 = load i8, ptr %getelementptr15, align 1, !dbg !23
+ %icmp17 = icmp eq i8 %load14, %load16, !dbg !24
+ br label %bb18, !dbg !25
+
+bb18: ; preds = %bb12, %bb5, %bb
+ %phi = phi i1 [ false, %bb ], [ false, %bb5 ], [ %icmp17, %bb12 ], !dbg !26
+ ret i1 %phi, !dbg !27
+}
+
+!llvm.dbg.cu = !{!0}
+!llvm.debugify = !{!2, !3}
+!llvm.module.flags = !{!4}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "debugify", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug)
+!1 = !DIFile(filename: "reduced.ll", directory: "/")
+!2 = !{i32 20}
+!3 = !{i32 0}
+!4 = !{i32 2, !"Debug Info Version", i32 3}
+!5 = distinct !DISubprogram(name: "wibble", linkageName: "wibble", scope: null, file: !1, line: 1, type: !6, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0)
+!6 = !DISubroutineType(types: !7)
+!7 = !{}
+!8 = !DILocation(line: 1, column: 1, scope: !5)
+!9 = !DILocation(line: 2, column: 1, scope: !5)
+!10 = !DILocation(line: 3, column: 1, scope: !5)
+!11 = !DILocation(line: 4, column: 1, scope: !5)
+!12 = !DILocation(line: 5, column: 1, scope: !5)
+!13 = !DILocation(line: 6, column: 1, scope: !5)
+!14 = !DILocation(line: 7, column: 1, scope: !5)
+!15 = !DILocation(line: 8, column: 1, scope: !5)
+!16 = !DILocation(line: 9, column: 1, scope: !5)
+!17 = !DILocation(line: 10, column: 1, scope: !5)
+!18 = !DILocation(line: 5, column: 10, scope: !5)
+!19 = !DILocation(line: 6, column: 10, scope: !5)
+!20 = !DILocation(line: 13, column: 1, scope: !5)
+!21 = !DILocation(line: 14, column: 1, scope: !5)
+!22 = !DILocation(line: 15, column: 1, scope: !5)
+!23 = !DILocation(line: 16, column: 1, scope: !5)
+!24 = !DILocation(line: 17, column: 1, scope: !5)
+!25 = !DILocation(line: 18, column: 1, scope: !5)
+!26 = !DILocation(line: 19, column: 1, scope: !5)
+!27 = !DILocation(line: 20, column: 1, scope: !5)
+;.
----------------
jryans wrote:
Maybe remove this strange dot comment...?
https://github.com/llvm/llvm-project/pull/205796
More information about the llvm-commits
mailing list