1
+ ; RUN: opt < %s -passes=gvn-sink -S | FileCheck %s
2
+
3
+ ; Function Attrs: noinline nounwind uwtable
4
+ define dso_local i32 @fun (i32 noundef %a , i32 noundef %b ) #0 !dbg !10 {
5
+ entry:
6
+ tail call void @llvm.dbg.value (metadata i32 %a , metadata !15 , metadata !DIExpression ()), !dbg !16
7
+ tail call void @llvm.dbg.value (metadata i32 %b , metadata !17 , metadata !DIExpression ()), !dbg !16
8
+ %cmp = icmp sgt i32 %b , 10 , !dbg !18
9
+ br i1 %cmp , label %if.then , label %if.else , !dbg !20
10
+
11
+ if.then: ; preds = %entry
12
+ %add = add nsw i32 %a , 1 , !dbg !21
13
+ tail call void @llvm.dbg.value (metadata i32 %add , metadata !23 , metadata !DIExpression ()), !dbg !24
14
+ %xor = xor i32 %add , 1 , !dbg !25
15
+ tail call void @llvm.dbg.value (metadata i32 %xor , metadata !26 , metadata !DIExpression ()), !dbg !24
16
+ tail call void @llvm.dbg.value (metadata i32 %xor , metadata !27 , metadata !DIExpression ()), !dbg !16
17
+ br label %if.end , !dbg !28
18
+
19
+ if.else: ; preds = %entry
20
+ %add1 = add nsw i32 %b , 1 , !dbg !29
21
+ tail call void @llvm.dbg.value (metadata i32 %add1 , metadata !31 , metadata !DIExpression ()), !dbg !32
22
+ %xor2 = xor i32 %add1 , 1 , !dbg !33
23
+ tail call void @llvm.dbg.value (metadata i32 %xor2 , metadata !34 , metadata !DIExpression ()), !dbg !32
24
+ tail call void @llvm.dbg.value (metadata i32 %xor2 , metadata !27 , metadata !DIExpression ()), !dbg !16
25
+ br label %if.end
26
+
27
+ ; CHECK-LABEL: if.end:
28
+ ; CHECK: %a.sink = phi i32 [ %a, %if.then ], [ %b, %if.else ]
29
+ ; CHECK: %add = add nsw i32 %a.sink, 1
30
+ ; CHECK: %xor = xor i32 %add, 1
31
+ if.end: ; preds = %if.else, %if.then
32
+ %ret.0 = phi i32 [ %xor , %if.then ], [ %xor2 , %if.else ], !dbg !35
33
+ tail call void @llvm.dbg.value (metadata i32 %ret.0 , metadata !27 , metadata !DIExpression ()), !dbg !16
34
+ ret i32 %ret.0 , !dbg !36
35
+ }
36
+
37
+ ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
38
+ declare void @llvm.dbg.declare (metadata , metadata , metadata ) #1
39
+
40
+ ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
41
+ declare void @llvm.dbg.value (metadata , metadata , metadata ) #1
42
+
43
+ attributes #0 = { noinline nounwind uwtable "frame-pointer" ="all" "min-legal-vector-width" ="0" "no-trapping-math" ="true" "stack-protector-buffer-size" ="8" "target-cpu" ="x86-64" "target-features" ="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu" ="generic" }
44
+ attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
45
+
46
+ !llvm.dbg.cu = !{!0 }
47
+ !llvm.module.flags = !{!2 , !3 , !4 , !5 , !6 , !7 , !8 }
48
+ !llvm.ident = !{!9 }
49
+
50
+ !0 = distinct !DICompileUnit (language: DW_LANG_C11, file: !1 , producer: "clang version 18.0.0git (https://github.com/llvm/llvm-project.git 5dfcb3e5d1d16bb4f8fce52b3c089119ed977e7f)" , isOptimized: false , runtimeVersion: 0 , emissionKind: FullDebug, splitDebugInlining: false , nameTableKind: None)
51
+ !1 = !DIFile (filename: "main.c" , directory: "/home/hs/llvm-test" , checksumkind: CSK_MD5, checksum: "68c28c3d0877bed08ff43db70c573802" )
52
+ !2 = !{i32 7 , !"Dwarf Version" , i32 5 }
53
+ !3 = !{i32 2 , !"Debug Info Version" , i32 3 }
54
+ !4 = !{i32 1 , !"wchar_size" , i32 4 }
55
+ !5 = !{i32 8 , !"PIC Level" , i32 2 }
56
+ !6 = !{i32 7 , !"PIE Level" , i32 2 }
57
+ !7 = !{i32 7 , !"uwtable" , i32 2 }
58
+ !8 = !{i32 7 , !"frame-pointer" , i32 2 }
59
+ !9 = !{!"clang version 18.0.0git (https://github.com/llvm/llvm-project.git 5dfcb3e5d1d16bb4f8fce52b3c089119ed977e7f)" }
60
+ !10 = distinct !DISubprogram (name: "fun" , scope: !1 , file: !1 , line: 1 , type: !11 , scopeLine: 1 , flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0 , retainedNodes: !14 )
61
+ !11 = !DISubroutineType (types: !12 )
62
+ !12 = !{!13 , !13 , !13 }
63
+ !13 = !DIBasicType (name: "int" , size: 32 , encoding: DW_ATE_signed)
64
+ !14 = !{}
65
+ !15 = !DILocalVariable (name: "a" , arg: 1 , scope: !10 , file: !1 , line: 1 , type: !13 )
66
+ !16 = !DILocation (line: 0 , scope: !10 )
67
+ !17 = !DILocalVariable (name: "b" , arg: 2 , scope: !10 , file: !1 , line: 1 , type: !13 )
68
+ !18 = !DILocation (line: 3 , column: 11 , scope: !19 )
69
+ !19 = distinct !DILexicalBlock (scope: !10 , file: !1 , line: 3 , column: 9 )
70
+ !20 = !DILocation (line: 3 , column: 9 , scope: !10 )
71
+ !21 = !DILocation (line: 4 , column: 20 , scope: !22 )
72
+ !22 = distinct !DILexicalBlock (scope: !19 , file: !1 , line: 3 , column: 17 )
73
+ !23 = !DILocalVariable (name: "a1" , scope: !22 , file: !1 , line: 4 , type: !13 )
74
+ !24 = !DILocation (line: 0 , scope: !22 )
75
+ !25 = !DILocation (line: 5 , column: 21 , scope: !22 )
76
+ !26 = !DILocalVariable (name: "a2" , scope: !22 , file: !1 , line: 5 , type: !13 )
77
+ !27 = !DILocalVariable (name: "ret" , scope: !10 , file: !1 , line: 2 , type: !13 )
78
+ !28 = !DILocation (line: 7 , column: 5 , scope: !22 )
79
+ !29 = !DILocation (line: 8 , column: 20 , scope: !30 )
80
+ !30 = distinct !DILexicalBlock (scope: !19 , file: !1 , line: 7 , column: 12 )
81
+ !31 = !DILocalVariable (name: "b1" , scope: !30 , file: !1 , line: 8 , type: !13 )
82
+ !32 = !DILocation (line: 0 , scope: !30 )
83
+ !33 = !DILocation (line: 9 , column: 21 , scope: !30 )
84
+ !34 = !DILocalVariable (name: "b2" , scope: !30 , file: !1 , line: 9 , type: !13 )
85
+ !35 = !DILocation (line: 0 , scope: !19 )
86
+ !36 = !DILocation (line: 12 , column: 5 , scope: !10 )
0 commit comments