[AMDGPU] Add True16 register classes.
[llvm-project.git] / llvm / test / Transforms / GVN / PRE / pre-load-dbg.ll
blobe9614f08388c5e671c9e262672a8056f27021bca
1 ; RUN: opt < %s -passes=gvn -gvn-max-num-insns=22 -S | FileCheck %s
3 ; Debug information should not impact gvn. The following two functions have same
4 ; code except debug information. They should generate same optimized
5 ; instructions.
7 %struct.a = type { i16 }
9 @f = local_unnamed_addr global i16 0, align 1
10 @m = local_unnamed_addr global ptr null, align 1
11 @h = global %struct.a zeroinitializer, align 1
13 define void @withdbg() {
14 ; CHECK-LABEL: @withdbg
15 ; CHECK:         [[PRE_PRE1:%.*]] = load i16, ptr @f, align 1
16 ; CHECK-NEXT:    [[PRE_PRE2:%.*]] = load ptr, ptr @m, align 1
17 ; CHECK-NEXT:    br i1 true, label %[[BLOCK1:.*]], label %[[BLOCK2:.*]]
18 ; CHECK:       [[BLOCK1]]:
19 ; CHECK-NEXT:    [[CONV:%.*]] = sext i16 [[PRE_PRE1]] to i32
20 ; CHECK-NEXT:    store i32 [[CONV]], ptr [[PRE_PRE2]], align 1
22 entry:
23   %agg.tmp.ensured.sroa.0.i = alloca i16, align 1
24   br i1 icmp ne (ptr  @withdbg, ptr  null), label %lor.end, label %lor.rhs
26 lor.rhs:                                          ; preds = %entry
27   call void @llvm.dbg.declare(metadata ptr undef, metadata !46, metadata !DIExpression()), !dbg !40
28   call void @llvm.dbg.declare(metadata ptr undef, metadata !47, metadata !DIExpression()), !dbg !40
29   call void @llvm.dbg.declare(metadata ptr undef, metadata !48, metadata !DIExpression()), !dbg !40
30   call void @llvm.dbg.declare(metadata ptr undef, metadata !49, metadata !DIExpression()), !dbg !40
31   call void @llvm.dbg.declare(metadata ptr undef, metadata !50, metadata !DIExpression()), !dbg !40
32   %agg.tmp.ensured.sroa.0.0.copyload.i = load volatile i16, ptr @h, align 1
33   store i16 %agg.tmp.ensured.sroa.0.0.copyload.i, ptr %agg.tmp.ensured.sroa.0.i, align 1
34   %agg.tmp.ensured.sroa.0.0.copyload.1.i = load volatile i16, ptr @h, align 1
35   store i16 %agg.tmp.ensured.sroa.0.0.copyload.1.i, ptr %agg.tmp.ensured.sroa.0.i, align 1
36   %agg.tmp.ensured.sroa.0.0.copyload.2.i = load volatile i16, ptr @h, align 1
37   store i16 %agg.tmp.ensured.sroa.0.0.copyload.2.i, ptr %agg.tmp.ensured.sroa.0.i, align 1
38   %agg.tmp.ensured.sroa.0.0.copyload.3.i = load volatile i16, ptr @h, align 1
39   store i16 %agg.tmp.ensured.sroa.0.0.copyload.3.i, ptr %agg.tmp.ensured.sroa.0.i, align 1
40   %agg.tmp.ensured.sroa.0.0.copyload.4.i = load volatile i16, ptr @h, align 1
41   store i16 %agg.tmp.ensured.sroa.0.0.copyload.4.i, ptr %agg.tmp.ensured.sroa.0.i, align 1
42   %agg.tmp.ensured.sroa.0.0.copyload.5.i = load volatile i16, ptr @h, align 1
43   store i16 %agg.tmp.ensured.sroa.0.0.copyload.5.i, ptr %agg.tmp.ensured.sroa.0.i, align 1
44   %agg.tmp.ensured.sroa.0.0.copyload.6.i = load volatile i16, ptr @h, align 1
45   store i16 %agg.tmp.ensured.sroa.0.0.copyload.6.i, ptr %agg.tmp.ensured.sroa.0.i, align 1
46   %agg.tmp.ensured.sroa.0.0.copyload.7.i = load volatile i16, ptr @h, align 1
47   store i16 %agg.tmp.ensured.sroa.0.0.copyload.7.i, ptr %agg.tmp.ensured.sroa.0.i, align 1
48   %agg.tmp.ensured.sroa.0.0.copyload.8.i = load volatile i16, ptr @h, align 1
49   store i16 %agg.tmp.ensured.sroa.0.0.copyload.8.i, ptr %agg.tmp.ensured.sroa.0.i, align 1
50   %fvalue = load i16, ptr @f, align 1
51   %mvalue = load ptr, ptr @m, align 1
52   br label %lor.end
54 lor.end:                                          ; preds = %lor.rhs, %entry
55   %tmp11 = load i16, ptr @f, align 1
56   %conv.i.i6 = sext i16 %tmp11 to i32
57   %tmp12 = load ptr, ptr @m, align 1
58   store i32 %conv.i.i6, ptr %tmp12, align 1
59   ret void
62 define void @lessdbg() {
63 ; CHECK-LABEL: @lessdbg
64 ; CHECK:         [[PRE_PRE1:%.*]] = load i16, ptr @f, align 1
65 ; CHECK-NEXT:    [[PRE_PRE2:%.*]] = load ptr, ptr @m, align 1
66 ; CHECK-NEXT:    br i1 true, label %[[BLOCK1:.*]], label %[[BLOCK2:.*]]
67 ; CHECK:       [[BLOCK1]]:
68 ; CHECK-NEXT:    [[CONV:%.*]] = sext i16 [[PRE_PRE1]] to i32
69 ; CHECK-NEXT:    store i32 [[CONV]], ptr [[PRE_PRE2]], align 1
71 entry:
72   %agg.tmp.ensured.sroa.0.i = alloca i16, align 1
73   br i1 icmp ne (ptr  @lessdbg, ptr  null), label %lor.end, label %lor.rhs
75 lor.rhs:                                          ; preds = %entry
76   %agg.tmp.ensured.sroa.0.0.copyload.i = load volatile i16, ptr @h, align 1
77   store i16 %agg.tmp.ensured.sroa.0.0.copyload.i, ptr %agg.tmp.ensured.sroa.0.i, align 1
78   %agg.tmp.ensured.sroa.0.0.copyload.1.i = load volatile i16, ptr @h, align 1
79   store i16 %agg.tmp.ensured.sroa.0.0.copyload.1.i, ptr %agg.tmp.ensured.sroa.0.i, align 1
80   %agg.tmp.ensured.sroa.0.0.copyload.2.i = load volatile i16, ptr @h, align 1
81   store i16 %agg.tmp.ensured.sroa.0.0.copyload.2.i, ptr %agg.tmp.ensured.sroa.0.i, align 1
82   %agg.tmp.ensured.sroa.0.0.copyload.3.i = load volatile i16, ptr @h, align 1
83   store i16 %agg.tmp.ensured.sroa.0.0.copyload.3.i, ptr %agg.tmp.ensured.sroa.0.i, align 1
84   %agg.tmp.ensured.sroa.0.0.copyload.4.i = load volatile i16, ptr @h, align 1
85   store i16 %agg.tmp.ensured.sroa.0.0.copyload.4.i, ptr %agg.tmp.ensured.sroa.0.i, align 1
86   %agg.tmp.ensured.sroa.0.0.copyload.5.i = load volatile i16, ptr @h, align 1
87   store i16 %agg.tmp.ensured.sroa.0.0.copyload.5.i, ptr %agg.tmp.ensured.sroa.0.i, align 1
88   %agg.tmp.ensured.sroa.0.0.copyload.6.i = load volatile i16, ptr @h, align 1
89   store i16 %agg.tmp.ensured.sroa.0.0.copyload.6.i, ptr %agg.tmp.ensured.sroa.0.i, align 1
90   %agg.tmp.ensured.sroa.0.0.copyload.7.i = load volatile i16, ptr @h, align 1
91   store i16 %agg.tmp.ensured.sroa.0.0.copyload.7.i, ptr %agg.tmp.ensured.sroa.0.i, align 1
92   %agg.tmp.ensured.sroa.0.0.copyload.8.i = load volatile i16, ptr @h, align 1
93   store i16 %agg.tmp.ensured.sroa.0.0.copyload.8.i, ptr %agg.tmp.ensured.sroa.0.i, align 1
94   %fvalue = load i16, ptr @f, align 1
95   %mvalue = load ptr, ptr @m, align 1
96   br label %lor.end
98 lor.end:                                          ; preds = %lor.rhs, %entry
99   %tmp11 = load i16, ptr @f, align 1
100   %conv.i.i6 = sext i16 %tmp11 to i32
101   %tmp12 = load ptr, ptr @m, align 1
102   store i32 %conv.i.i6, ptr %tmp12, align 1
103   ret void
106 declare void @llvm.dbg.declare(metadata, metadata, metadata)
108 !llvm.dbg.cu = !{!0}
109 !llvm.module.flags = !{!35, !36}
111 !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)
112 !1 = !DIFile(filename: "bbi-78272.c", directory: "/tmp")
113 !5 = !DIBasicType(name: "int", size: 16, encoding: DW_ATE_signed)
115 !35 = !{i32 7, !"Dwarf Version", i32 4}
116 !36 = !{i32 2, !"Debug Info Version", i32 3}
117 !40 = !DILocation(line: 15, column: 7, scope: !41)
118 !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)
119 !42 = !DISubroutineType(types: !43)
120 !43 = !{!5}
121 !45 = !{!46, !47, !48, !49, !50}
122 !46 = !DILocalVariable(name: "t", scope: !41, file: !1, line: 15, type: !5)
123 !47 = !DILocalVariable(name: "c", scope: !41, file: !1, line: 15, type: !5)
124 !48 = !DILocalVariable(name: "v", scope: !41, file: !1, line: 15, type: !5)
125 !49 = !DILocalVariable(name: "d", scope: !41, file: !1, line: 15, type: !5)
126 !50 = !DILocalVariable(name: "u", scope: !41, file: !1, line: 16, type: !5)