xref: /llvm-project/llvm/test/Transforms/GlobalOpt/cleanup-pointer-root-users.ll (revision 055fb7795aa219a3d274d280ec9129784f169f56)
1; RUN: opt -passes=globalopt -S -o - < %s | FileCheck %s
2
3@glbl = internal global ptr null
4
5define void @test1a() {
6; CHECK-LABEL: @test1a(
7; CHECK-NOT: store
8; CHECK-NEXT: ret void
9  store ptr null, ptr @glbl
10  ret void
11}
12
13define void @test1b(ptr %p) {
14; CHECK-LABEL: @test1b(
15; CHECK-NEXT: store
16; CHECK-NEXT: ret void
17  store ptr %p, ptr @glbl
18  ret void
19}
20
21define void @test2() {
22; CHECK-LABEL: @test2(
23; CHECK: alloca i8
24  %txt = alloca i8
25  call void @foo2(ptr %txt)
26  %call2 = call ptr @strdup(ptr %txt)
27  store ptr %call2, ptr @glbl
28  ret void
29}
30declare ptr @strdup(ptr)
31declare void @foo2(ptr)
32
33define void @test3() uwtable personality ptr @__gxx_personality_v0 {
34; CHECK-LABEL: @test3(
35; CHECK-NOT: bb1:
36; CHECK-NOT: bb2:
37; CHECK: invoke
38  %ptr = invoke ptr @_Znwm(i64 1)
39          to label %bb1 unwind label %bb2
40bb1:
41  store ptr %ptr, ptr @glbl
42  unreachable
43bb2:
44  %tmp1 = landingpad { ptr, i32 }
45          cleanup
46  resume { ptr, i32 } %tmp1
47}
48declare i32 @__gxx_personality_v0(i32, i64, ptr, ptr)
49declare ptr @_Znwm(i64)
50