11; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
22; RUN: opt -passes=instcombine -S %s -o - | FileCheck %s
33
4- 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"
5- target triple = "x86_64-unknown-linux-gnu"
4+ ; Make sure that the DIExpression is updated correctly after InstCombinerImpl::freelyInvertAllUsersOf.
65
76define i32 @test (i32 noundef %x , i32 noundef %y ) !dbg !10 {
87; CHECK-LABEL: define i32 @test(
98; CHECK-SAME: i32 noundef [[X:%.*]], i32 noundef [[Y:%.*]]) !dbg [[DBG10:![0-9]+]] {
109; CHECK-NEXT: [[ENTRY:.*:]]
11- ; CHECK-NEXT: #dbg_value(i32 [[X]], [[META15:![0-9]+]], !DIExpression(), [[META18:![0-9]+]])
12- ; CHECK-NEXT: #dbg_value(i32 [[Y]], [[META16:![0-9]+]], !DIExpression(), [[META18]])
13- ; CHECK-NEXT: [[CMP_NOT:%.*]] = icmp eq i32 [[X]], 0, !dbg [[DBG19:![0-9]+]]
14- ; CHECK-NEXT: #dbg_value(i1 [[CMP_NOT]], [[META17:![0-9]+]], !DIExpression(DW_OP_not, DW_OP_LLVM_convert, 1, DW_ATE_unsigned, DW_OP_LLVM_convert, 32, DW_ATE_unsigned, DW_OP_stack_value), [[META18]])
15- ; CHECK-NEXT: [[TMP0:%.*]] = and i32 [[Y]], 1, !dbg [[DBG20:![0-9]+]]
16- ; CHECK-NEXT: [[AND:%.*]] = select i1 [[CMP_NOT]], i32 0, i32 [[TMP0]], !dbg [[DBG20]]
17- ; CHECK-NEXT: ret i32 [[AND]], !dbg [[DBG21:![0-9]+]]
10+ ; CHECK-NEXT: [[CMP_NOT:%.*]] = icmp eq i32 [[X]], 0
11+ ; CHECK-NEXT: #dbg_value(i1 [[CMP_NOT]], [[META15:![0-9]+]], !DIExpression(DW_OP_not, DW_OP_LLVM_convert, 1, DW_ATE_unsigned, DW_OP_LLVM_convert, 32, DW_ATE_unsigned, DW_OP_stack_value), [[META16:![0-9]+]])
12+ ; CHECK-NEXT: [[TMP0:%.*]] = and i32 [[Y]], 1
13+ ; CHECK-NEXT: [[AND:%.*]] = select i1 [[CMP_NOT]], i32 0, i32 [[TMP0]]
14+ ; CHECK-NEXT: ret i32 [[AND]]
1815;
1916entry:
20- #dbg_value(i32 %x , !15 , !DIExpression (), !18 )
21- #dbg_value(i32 %y , !16 , !DIExpression (), !18 )
22- %cmp = icmp ne i32 %x , 0 , !dbg !19
23- %conv = zext i1 %cmp to i32 , !dbg !19
24- #dbg_value(i32 %conv , !17 , !DIExpression (), !18 )
25- %and = and i32 %conv , %y , !dbg !20
26- ret i32 %and , !dbg !21
17+ %cmp = icmp ne i32 %x , 0
18+ %conv = zext i1 %cmp to i32
19+ #dbg_value(i32 %conv , !15 , !DIExpression (), !16 )
20+ %and = and i32 %conv , %y
21+ ret i32 %and
2722}
2823
2924!llvm.dbg.cu = !{!0 }
@@ -44,27 +39,17 @@ entry:
4439!11 = !DISubroutineType (types: !12 )
4540!12 = !{!13 , !13 , !13 }
4641!13 = !DIBasicType (name: "int" , size: 32 , encoding: DW_ATE_signed)
47- !14 = !{!15 , !16 , !17 }
48- !15 = !DILocalVariable (name: "x" , arg: 1 , scope: !10 , file: !1 , line: 1 , type: !13 )
49- !16 = !DILocalVariable (name: "y" , arg: 2 , scope: !10 , file: !1 , line: 1 , type: !13 )
50- !17 = !DILocalVariable (name: "z" , scope: !10 , file: !1 , line: 2 , type: !13 )
51- !18 = !DILocation (line: 0 , scope: !10 )
52- !19 = !DILocation (line: 2 , column: 13 , scope: !10 )
53- !20 = !DILocation (line: 3 , column: 12 , scope: !10 )
54- !21 = !DILocation (line: 3 , column: 3 , scope: !10 )
42+ !14 = !{!15 }
43+ !15 = !DILocalVariable (name: "z" , scope: !10 , file: !1 , line: 2 , type: !13 )
44+ !16 = !DILocation (line: 0 , scope: !10 )
5545;.
5646; CHECK: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C11, file: [[META1:![0-9]+]], producer: "{{.*}}clang version {{.*}}", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None)
5747; CHECK: [[META1]] = !DIFile(filename: "test.c", directory: {{.*}})
5848; CHECK: [[DBG10]] = distinct !DISubprogram(name: "test", scope: [[META1]], file: [[META1]], line: 1, type: [[META11:![0-9]+]], scopeLine: 1, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: [[META0]], retainedNodes: [[META14:![0-9]+]])
5949; CHECK: [[META11]] = !DISubroutineType(types: [[META12:![0-9]+]])
6050; CHECK: [[META12]] = !{[[META13:![0-9]+]], [[META13]], [[META13]]}
6151; CHECK: [[META13]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
62- ; CHECK: [[META14]] = !{[[META15]], [[META16]], [[META17]]}
63- ; CHECK: [[META15]] = !DILocalVariable(name: "x", arg: 1, scope: [[DBG10]], file: [[META1]], line: 1, type: [[META13]])
64- ; CHECK: [[META16]] = !DILocalVariable(name: "y", arg: 2, scope: [[DBG10]], file: [[META1]], line: 1, type: [[META13]])
65- ; CHECK: [[META17]] = !DILocalVariable(name: "z", scope: [[DBG10]], file: [[META1]], line: 2, type: [[META13]])
66- ; CHECK: [[META18]] = !DILocation(line: 0, scope: [[DBG10]])
67- ; CHECK: [[DBG19]] = !DILocation(line: 2, column: 13, scope: [[DBG10]])
68- ; CHECK: [[DBG20]] = !DILocation(line: 3, column: 12, scope: [[DBG10]])
69- ; CHECK: [[DBG21]] = !DILocation(line: 3, column: 3, scope: [[DBG10]])
52+ ; CHECK: [[META14]] = !{[[META15]]}
53+ ; CHECK: [[META15]] = !DILocalVariable(name: "z", scope: [[DBG10]], file: [[META1]], line: 2, type: [[META13]])
54+ ; CHECK: [[META16]] = !DILocation(line: 0, scope: [[DBG10]])
7055;.
0 commit comments