xref: /llvm-project/llvm/test/Transforms/GlobalOpt/stored-once-through-gep.ll (revision d586bd5ca231a6022f439d4c6e43cfeeb53eb1d6)
194d62633SNikita Popov; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
20676acb6SBjorn Pettersson; RUN: opt -S -passes=globalopt < %s | FileCheck %s
394d62633SNikita Popov
494d62633SNikita Popov; The global is stored once through a trivial GEP instruction (rather than
594d62633SNikita Popov; GEP constant expression) here. We should still be able to optimize it.
694d62633SNikita Popov
794d62633SNikita Popov%s = type { i32 }
894d62633SNikita Popov
994d62633SNikita Popov@g = internal unnamed_addr global i32 undef
1094d62633SNikita Popov
1194d62633SNikita Popov; CHECK-NOT: @g =
1294d62633SNikita Popov
1394d62633SNikita Popovdefine void @store() {
1494d62633SNikita Popov; CHECK-LABEL: @store(
1594d62633SNikita Popov; CHECK-NEXT:    ret void
1694d62633SNikita Popov;
17*d586bd5cSNikita Popov  store i32 1, ptr @g, align 4
1894d62633SNikita Popov  ret void
1994d62633SNikita Popov}
2094d62633SNikita Popov
2194d62633SNikita Popovdefine i32 @load() {
2294d62633SNikita Popov; CHECK-LABEL: @load(
2394d62633SNikita Popov; CHECK-NEXT:    call fastcc void @store()
2494d62633SNikita Popov; CHECK-NEXT:    ret i32 1
2594d62633SNikita Popov;
2694d62633SNikita Popov  call fastcc void @store()
27*d586bd5cSNikita Popov  %v = load i32, ptr @g
2894d62633SNikita Popov  ret i32 %v
2994d62633SNikita Popov}
30