xref: /llvm-project/llvm/test/Transforms/GlobalOpt/null-check-global-value.ll (revision d586bd5ca231a6022f439d4c6e43cfeeb53eb1d6)
1; RUN: opt -passes=globalopt -S < %s | FileCheck %s
2
3%sometype = type { ptr }
4
5@map = internal unnamed_addr global ptr null, align 8
6
7define void @Init() {
8; CHECK-LABEL: @Init(
9; CHECK-NEXT:  entry:
10; CHECK-NEXT:    store i1 true, ptr @map.init, align 1
11; CHECK-NEXT:    ret void
12;
13entry:
14  %call = tail call noalias nonnull dereferenceable(48) ptr @_Znwm(i64 48)
15  store ptr %call, ptr @map, align 8
16  ret void
17}
18
19define void @Usage() {
20; CHECK-LABEL: @Usage(
21; CHECK-NEXT:  entry:
22; CHECK-NEXT:    [[MAP_INIT_VAL:%.*]] = load i1, ptr @map.init, align 1
23; CHECK-NEXT:    [[NOTINIT:%.*]] = xor i1 [[MAP_INIT_VAL]], true
24; CHECK-NEXT:    unreachable
25;
26entry:
27  %0 = load ptr, ptr @map, align 8
28  %.not = icmp eq ptr %0, null
29  unreachable
30}
31
32declare ptr @_Znwm(i64)
33