xref: /llvm-project/llvm/test/CodeGen/AVR/pr43443-ctor-alias.ll (revision 7bdc80f35c325d148b1ddbdfce7dea8c6ba7af84)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=avr --mcpu=atmega328 -O0 -verify-machineinstrs | FileCheck %s
3
4;; This .ll file is generated from the following cpp program:
5;; struct foo {
6;;   foo();
7;; };
8;; foo::foo() {}
9;; foo f2;
10;; Check https://github.com/llvm/llvm-project/issues/43443 for details.
11
12%struct.foo = type { i8 }
13
14@f2 = global %struct.foo zeroinitializer
15
16@llvm.global_ctors = appending global [1 x { i32, ptr addrspace(1), ptr }] [{ i32, ptr addrspace(1), ptr } { i32 65535, ptr addrspace(1) @_GLOBAL__sub_I_failed.cc, ptr null }]
17
18@_ZN3fooC1Ev = alias void (ptr), ptr addrspace(1) @_ZN3fooC2Ev
19
20define void @_ZN3fooC2Ev(ptr dereferenceable(1) %this) {
21; CHECK-LABEL: _ZN3fooC2Ev:
22; CHECK:       ; %bb.0: ; %entry
23; CHECK-NEXT:    push r28
24; CHECK-NEXT:    push r29
25; CHECK-NEXT:    in r28, 61
26; CHECK-NEXT:    in r29, 62
27; CHECK-NEXT:    sbiw r28, 2
28; CHECK-NEXT:    in r0, 63
29; CHECK-NEXT:    cli
30; CHECK-NEXT:    out 62, r29
31; CHECK-NEXT:    out 63, r0
32; CHECK-NEXT:    out 61, r28
33; CHECK-NEXT:    std Y+2, r25
34; CHECK-NEXT:    std Y+1, r24
35; CHECK-NEXT:    adiw r28, 2
36; CHECK-NEXT:    in r0, 63
37; CHECK-NEXT:    cli
38; CHECK-NEXT:    out 62, r29
39; CHECK-NEXT:    out 63, r0
40; CHECK-NEXT:    out 61, r28
41; CHECK-NEXT:    pop r29
42; CHECK-NEXT:    pop r28
43; CHECK-NEXT:    ret
44entry:
45  %this.addr = alloca ptr
46  store ptr %this, ptr %this.addr
47  %this1 = load ptr, ptr %this.addr
48  ret void
49}
50
51define internal void @__cxx_global_var_init() addrspace(1) {
52; CHECK-LABEL: __cxx_global_var_init:
53; CHECK:       ; %bb.0: ; %entry
54; CHECK-NEXT:    ldi r24, lo8(f2)
55; CHECK-NEXT:    ldi r25, hi8(f2)
56; CHECK-NEXT:    call _ZN3fooC1Ev
57; CHECK-NEXT:    ret
58entry:
59  call addrspace(1) void @_ZN3fooC1Ev(ptr dereferenceable(1) @f2)
60  ret void
61}
62
63define internal void @_GLOBAL__sub_I_failed.cc() addrspace(1) {
64; CHECK-LABEL: _GLOBAL__sub_I_failed.cc:
65; CHECK:       ; %bb.0: ; %entry
66; CHECK-NEXT:    call __cxx_global_var_init
67; CHECK-NEXT:    ret
68entry:
69  call addrspace(1) void @__cxx_global_var_init()
70  ret void
71}
72