xref: /llvm-project/llvm/test/Transforms/DeadStoreElimination/const-pointers.ll (revision f497a00da968b0ff90d8c98caa184d14b9a92495)
1; RUN: opt -passes=dse -S < %s | FileCheck %s
2target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
3
4%t = type { i32 }
5
6@g = global i32 42
7
8define void @test1(ptr noalias %pp) {
9
10  store i32 1, ptr %pp; <-- This is dead
11  %x = load i32, ptr inttoptr (i32 12345 to ptr)
12  store i32 %x, ptr %pp
13  ret void
14; CHECK-LABEL: define void @test1(
15; CHECK: store
16; CHECK-NOT: store
17; CHECK: ret void
18}
19
20define void @test3() {
21  store i32 1, ptr @g; <-- This is dead.
22  store i32 42, ptr @g
23  ret void
24; CHECK-LABEL: define void @test3(
25; CHECK: store
26; CHECK-NOT: store
27; CHECK: ret void
28}
29
30define void @test4(ptr %p) {
31  store i32 1, ptr %p
32  %x = load i32, ptr @g; <-- %p and @g could alias
33  store i32 %x, ptr %p
34  ret void
35; CHECK-LABEL: define void @test4(
36; CHECK: store
37; CHECK: store
38; CHECK: ret void
39}
40