1; RUN: opt -passes=globalopt %s -S -o - | FileCheck %s 2target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 3target triple = "x86_64-unknown-linux-gnu" 4 5%struct.A = type { %class.Wrapper } 6%class.Wrapper = type { i32 } 7 8$Wrapper = comdat any 9 10@kA = internal global %struct.A zeroinitializer, align 4 11; CHECK: @kA = internal unnamed_addr constant %struct.A { %class.Wrapper { i32 1036831949 } }, align 4 12 13@llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { 14i32 65535, ptr @_GLOBAL__sub_I_const_static.cc, ptr null }] 15 16define dso_local i32 @AsBits(ptr %x) #0 { 17entry: 18 %0 = load i32, ptr %x, align 4 19 ret i32 %0 20} 21 22define internal void @__cxx_global_var_init() #1 section ".text.startup" { 23entry: 24 call void @Wrapper(ptr @kA, float 0x3FB99999A0000000) 25 %0 = call ptr @llvm.invariant.start.p0(i64 4, ptr @kA) 26 ret void 27} 28 29define linkonce_odr dso_local void @Wrapper(ptr %this, float %x) unnamed_addr #0 comdat align 2 { 30entry: 31 %x.addr = alloca float, align 4 32 store float %x, ptr %x.addr, align 4 33 %call = call i32 @AsBits(ptr %x.addr) 34 store i32 %call, ptr %this, align 4 35 ret void 36} 37 38declare ptr @llvm.invariant.start.p0(i64, ptr nocapture) #2 39 40; Function Attrs: nounwind uwtable 41define dso_local void @LoadIt(ptr %c) #0 { 42entry: 43 call void @llvm.memcpy.p0.p0.i64(ptr align 4 %c, ptr align 4 @kA, i64 4, i1 false) 44 ret void 45} 46 47; Function Attrs: argmemonly nounwind 48declare void @llvm.memcpy.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1) #2 49 50; Function Attrs: uwtable 51define internal void @_GLOBAL__sub_I_const_static.cc() #1 section ".text.startup" { 52entry: 53 call void @__cxx_global_var_init() 54 ret void 55} 56 57attributes #0 = { nounwind uwtable "target-cpu"="x86-64" } 58attributes #1 = { uwtable "target-cpu"="x86-64" } 59attributes #2 = { argmemonly nounwind } 60