[rtsan] Add fork/execve interceptors (#117198)
[llvm-project.git] / llvm / test / Transforms / GlobalOpt / load-store-global.ll
blob5001bef6a84974d6fba04c14a2a2d40fb14dd9ef
1 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
3 @G = internal global i32 17             ; <ptr> [#uses=3]
4 ; CHECK-NOT: @G
6 define void @foo() {
7         %V = load i32, ptr @G               ; <i32> [#uses=1]
8         store i32 %V, ptr @G
9         ret void
10 ; CHECK-LABEL: @foo(
11 ; CHECK-NEXT: ret void
14 define i32 @bar() {
15         %X = load i32, ptr @G               ; <i32> [#uses=1]
16         ret i32 %X
17 ; CHECK-LABEL: @bar(
18 ; CHECK-NEXT: ret i32 17
21 @a = internal global ptr null, align 8
22 ; CHECK-NOT: @a
24 ; PR13968
25 define void @qux() nounwind {
26   %g = getelementptr ptr, ptr @a, i32 1
27   %cmp = icmp ne ptr null, @a
28   %cmp2 = icmp eq ptr null, @a
29   %cmp3 = icmp eq ptr null, %g
30   store ptr inttoptr (i64 1 to ptr), ptr @a, align 8
31   %l = load ptr, ptr @a, align 8
32   ret void
33 ; CHECK-LABEL: @qux(
34 ; CHECK-NOT: store
35 ; CHECK-NOT: load
38 @addrspacecast_a = internal global ptr null
40 define void @addrspacecast_user() {
41 ; CHECK-LABEL: @addrspacecast_user
42 ; CHECK-NOT: store
43 ; CHECK-NOT: load
44   %g = addrspacecast ptr @addrspacecast_a to ptr addrspace(1)
45   store ptr inttoptr (i64 1 to ptr), ptr @addrspacecast_a, align 8
46   %l = load ptr, ptr @addrspacecast_a, align 8
47   ret void