xref: /llvm-project/llvm/test/Transforms/GlobalOpt/evaluate-constfold-call.ll (revision 5013c81b781eb95af8e429956d63c8f9c16a4647)
1; Check that we do not try to evaluate function calls with signature
2; mismatches.
3; RUN: opt -passes=globalopt,instcombine %s -S -o - | FileCheck %s
4
5; CHECK: @_q = dso_local global %struct.Q zeroinitializer
6; CHECK: @llvm.global_ctors
7
8source_filename = "main.cpp"
9target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
10target triple = "x86_64-none-linux-gnu"
11
12%struct.Q = type { i32 }
13
14$_ZN1QC2Ev = comdat any
15
16@_q = dso_local global %struct.Q zeroinitializer, align 4
17@llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__sub_I_main.cpp, ptr null }]
18
19define internal void @__cxx_global_var_init() section ".text.startup" {
20  call void @_ZN1QC2Ev(ptr @_q)
21  ret void
22}
23
24define linkonce_odr dso_local void @_ZN1QC2Ev(ptr) unnamed_addr #1 comdat align 2 {
25  %2 = alloca ptr, align 8
26  store ptr %0, ptr %2, align 8
27  %3 = load ptr, ptr %2, align 8
28  %4 = call i32 @fmodf(float 0x40091EB860000000, float 2.000000e+00)
29  store i32 %4, ptr %3, align 4
30  ret void
31}
32
33define dso_local i32 @main(i32, ptr) {
34  %3 = alloca i32, align 4
35  %4 = alloca i32, align 4
36  %5 = alloca ptr, align 8
37  store i32 0, ptr %3, align 4
38  store i32 %0, ptr %4, align 4
39  store ptr %1, ptr %5, align 8
40  %6 = load i32, ptr @_q, align 4
41  ret i32 %6
42}
43
44; Function Attrs: nounwind
45declare dso_local float @fmodf(float, float)
46
47; Function Attrs: noinline uwtable
48define internal void @_GLOBAL__sub_I_main.cpp() section ".text.startup" {
49  call void @__cxx_global_var_init()
50  ret void
51}
52