Skip to content
This repository was archived by the owner on Feb 21, 2026. It is now read-only.

Commit b8bf040

Browse files
committed
add LLVM & OGCG tests
1 parent 4b4b693 commit b8bf040

File tree

1 file changed

+67
-19
lines changed

1 file changed

+67
-19
lines changed

clang/test/CIR/CodeGen/cleanup-null-fixups.cpp

Lines changed: 67 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,74 @@
11
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-cir %s -o %t.cir
22
// RUN: FileCheck --check-prefix=CIR --input-file=%t.cir %s
33

4-
// CIR-LABEL: cir.func {{.*}} @{{.*}}ZNK1d1eEv
5-
// CIR: cir.scope {
6-
// CIR: %[[V5:.*]] = cir.alloca !rec_aj, !cir.ptr<!rec_aj>
7-
// CIR: %[[V6:.*]] = cir.get_global @an : !cir.ptr<!rec_aj>
8-
// CIR: cir.copy %[[V6]] to %[[V5]] : !cir.ptr<!rec_aj>
9-
// CIR: %[[V7:.*]] = cir.load align(1) %[[V5]] : !cir.ptr<!rec_aj>, !rec_aj
10-
// CIR: cir.call @_ZN1a1cC1I2ajEET_({{.*}}, %[[V7]]) : (!cir.ptr<!rec_a3A3Ac>, !rec_aj) -> ()
11-
// CIR: cir.call @_ZN2ajD1Ev(%[[V5]]) : (!cir.ptr<!rec_aj>) -> ()
12-
// CIR: }
13-
// CIR: cir.call @_ZN2ajD1Ev({{.*}}) : (!cir.ptr<!rec_aj>) -> ()
14-
// CIR: %[[V4:.*]] = cir.load {{.*}} : !cir.ptr<!rec_a3A3Ac>, !rec_a3A3Ac
15-
// CIR: cir.return %[[V4]] : !rec_a3A3Ac
16-
// CIR: ^bb1: // no predecessors
4+
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm %s -o %t.ll
5+
// RUN: FileCheck --check-prefix=LLVM --input-file=%t.ll %s
6+
7+
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm %s -o %t.og.ll
8+
// RUN: FileCheck --check-prefix=OGCG --input-file=%t.og.ll %s
9+
10+
// CIR-LABEL: cir.func {{.*}} @_ZNK1d1eEv
1711
// CIR: cir.scope {
18-
// CIR: %[[V5:.*]] = cir.alloca !rec_a3A3Ac, !cir.ptr<!rec_a3A3Ac>
19-
// CIR: %[[V6:.*]] = cir.const #cir.int<0> : !s32i
20-
// CIR: cir.call @_ZN1a1cC1IiEET_(%[[V5]], %[[V6]]) : (!cir.ptr<!rec_a3A3Ac>, !s32i) -> ()
21-
// CIR: cir.call @_ZN1a1cD1Ev(%[[V5]]) : (!cir.ptr<!rec_a3A3Ac>) -> ()
22-
// CIR: }
23-
// CIR: cir.trap
12+
// CIR-NEXT: %[[V5:.*]] = cir.alloca !rec_aj, !cir.ptr<!rec_aj>
13+
// CIR-NEXT: %[[V6:.*]] = cir.get_global @an : !cir.ptr<!rec_aj>
14+
// CIR-NEXT: cir.copy %[[V6]] to %[[V5]] : !cir.ptr<!rec_aj>
15+
// CIR-NEXT: %[[V7:.*]] = cir.load align(1) %[[V5]] : !cir.ptr<!rec_aj>, !rec_aj
16+
// CIR-NEXT: cir.call @_ZN1a1cC1I2ajEET_({{.*}}, %[[V7]]) : (!cir.ptr<!rec_a3A3Ac>, !rec_aj) -> ()
17+
// CIR-NEXT: cir.call @_ZN2ajD1Ev(%[[V5]]) : (!cir.ptr<!rec_aj>) -> ()
18+
// CIR-NEXT: }
19+
// CIR-NEXT: cir.call @_ZN2ajD1Ev({{.*}}) : (!cir.ptr<!rec_aj>) -> ()
20+
// CIR-NEXT: %[[V4:.*]] = cir.load {{.*}} : !cir.ptr<!rec_a3A3Ac>, !rec_a3A3Ac
21+
// CIR-NEXT: cir.return %[[V4]] : !rec_a3A3Ac
22+
// CIR-NEXT: ^bb1: // no predecessors
23+
// CIR-NEXT: cir.scope {
24+
// CIR-NEXT: %[[V5:.*]] = cir.alloca !rec_a3A3Ac, !cir.ptr<!rec_a3A3Ac>
25+
// CIR-NEXT: %[[V6:.*]] = cir.const #cir.int<0> : !s32i
26+
// CIR-NEXT: cir.call @_ZN1a1cC1IiEET_(%[[V5]], %[[V6]]) : (!cir.ptr<!rec_a3A3Ac>, !s32i) -> ()
27+
// CIR-NEXT: cir.call @_ZN1a1cD1Ev(%[[V5]]) : (!cir.ptr<!rec_a3A3Ac>) -> ()
28+
// CIR-NEXT: }
29+
// CIR-NEXT: cir.trap
30+
31+
// LLVM-LABEL: {{.*}} @_ZNK1d1eEv(ptr {{.*}})
32+
// LLVM-NEXT: %[[V2:.*]] = alloca %class.aj, i64 1, align 1
33+
// LLVM-NEXT: %[[V3:.*]] = alloca %"class.a::c", i64 1, align 1
34+
// LLVM-NEXT: %[[V4:.*]] = alloca ptr, i64 1, align 8
35+
// LLVM-NEXT: %[[V5:.*]] = alloca %"class.a::c", i64 1, align 1
36+
// LLVM-NEXT: %[[V6:.*]] = alloca %class.aj, i64 1, align 1
37+
// LLVM-NEXT: store ptr {{.*}}, ptr %[[V4]], align 8
38+
// LLVM-NEXT: %[[V7:.*]] = load ptr, ptr %[[V4]], align 8
39+
// LLVM-NEXT: br label %[[B8:.*]]
40+
// LLVM: [[B8]]:
41+
// LLVM-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr %[[V2]], ptr @an, i32 1, i1 false)
42+
// LLVM-NEXT: %[[V9:.*]] = load %class.aj, ptr %[[V2]], align 1
43+
// LLVM-NEXT: call void @_ZN1a1cC1I2ajEET_(ptr %[[V5]], %class.aj %[[V9]])
44+
// LLVM-NEXT: call void @_ZN2ajD1Ev(ptr %[[V2]])
45+
// LLVM-NEXT: br label %[[B10:.*]]
46+
// LLVM: [[B10]]:
47+
// LLVM-NEXT: call void @_ZN2ajD1Ev(ptr %[[V6]])
48+
// LLVM-NEXT: %[[V11:.*]] = load %"class.a::c", ptr %[[V5]], align 1
49+
// LLVM-NEXT: ret %"class.a::c" %[[V11]]
50+
// LLVM: [[B12:.*]]: ; No predecessors!
51+
// LLVM-NEXT: br label %[[B13:.*]]
52+
// LLVM: [[B13]]:
53+
// LLVM-NEXT: call void @_ZN1a1cC1IiEET_(ptr %[[V3]], i32 0)
54+
// LLVM-NEXT: call void @_ZN1a1cD1Ev(ptr %[[V3]])
55+
// LLVM-NEXT: br label %[[B14:.*]]
56+
// LLVM: [[B14]]:
57+
// LLVM-NEXT: call void @llvm.trap()
58+
59+
// OGCG-LABEL: {{.*}} @_ZNK1d1eEv(ptr {{.*}})
60+
// OGCG: %{{.*}} = alloca ptr, align 8
61+
// OGCG-NEXT: %{{.*}} = alloca ptr, align 8
62+
// OGCG-NEXT: %{{.*}} = alloca %{{.*}}, align 1
63+
// OGCG-NEXT: %{{.*}} = alloca %{{.*}}, align 1
64+
// OGCG-NEXT: store ptr %{{.*}}, ptr %{{.*}}, align 8
65+
// OGCG-NEXT: store ptr %{{.*}}, ptr %{{.*}}, align 8
66+
// OGCG-NEXT: %{{.*}} = load ptr, ptr %{{.*}}, align 8
67+
// OGCG-NEXT: call void @_ZN1a1cC1I2ajEET_(ptr noundef nonnull align 1 dereferenceable(1) %{{.*}}, ptr noundef %{{.*}})
68+
// OGCG-NEXT: call void @_ZN2ajD1Ev(ptr noundef nonnull align 1 dereferenceable(1) %{{.*}})
69+
// OGCG-NEXT: call void @_ZN2ajD1Ev(ptr noundef nonnull align 1 dereferenceable(1) %{{.*}})
70+
// OGCG-NEXT: ret void
71+
// OGCG-NEXT: }
2472

2573
inline namespace a {
2674
class c {

0 commit comments

Comments
 (0)