xref: /llvm-project/llvm/test/Transforms/GlobalOpt/evaluate-bitcast-3.ll (revision d586bd5ca231a6022f439d4c6e43cfeeb53eb1d6)
1; RUN: opt < %s -passes=globalopt -S | FileCheck %s
2
3; Test the evaluation of a load via a bitcast and a store via a GEP.
4; Check that globals are constant folded to the correct value.
5
6; CHECK: @u = dso_local local_unnamed_addr global %union.A { ptr inttoptr (i64 12345 to ptr) }, align 8
7; CHECK: @l = dso_local local_unnamed_addr global i64 12345, align 8
8
9target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
10target triple = "x86_64-unknown-linux-gnu"
11
12%union.A = type { ptr }
13
14$_ZN1AC2Ex = comdat any
15
16@u = dso_local global %union.A zeroinitializer, align 8
17@l = dso_local global i64 0, align 8
18@llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__sub_I_test.cpp, ptr null }]
19
20define internal void @__cxx_global_var_init() section ".text.startup" {
21  call void @_ZN1AC2Ex(ptr @u, i64 12345)
22  ret void
23}
24
25define linkonce_odr dso_local void @_ZN1AC2Ex(ptr %this, i64 %ll) unnamed_addr comdat align 2 {
26  %l = inttoptr i64 %ll to ptr
27  store ptr %l, ptr %this
28  ret void
29}
30
31define internal void @__cxx_global_var_init.1() section ".text.startup" {
32  %1 = load i64, ptr @u, align 8
33  store i64 %1, ptr @l, align 8
34  ret void
35}
36
37define internal void @_GLOBAL__sub_I_test.cpp() section ".text.startup" {
38  call void @__cxx_global_var_init()
39  call void @__cxx_global_var_init.1()
40  ret void
41}
42