File: pr43443-ctor-alias.ll

package info (click to toggle)
llvm-toolchain-17 1%3A17.0.6-22
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,799,624 kB
  • sloc: cpp: 6,428,607; ansic: 1,383,196; asm: 793,408; python: 223,504; objc: 75,364; f90: 60,502; lisp: 33,869; pascal: 15,282; sh: 9,684; perl: 7,453; ml: 4,937; awk: 3,523; makefile: 2,889; javascript: 2,149; xml: 888; fortran: 619; cs: 573
file content (71 lines) | stat: -rw-r--r-- 2,194 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -mtriple=avr --mcpu=atmega328 -O0 -verify-machineinstrs | FileCheck %s

;; This .ll file is generated from the following cpp program:
;; struct foo {
;;   foo();
;; };
;; foo::foo() {}
;; foo f2;
;; Check https://github.com/llvm/llvm-project/issues/43443 for details.

%struct.foo = type { i8 }

@f2 = global %struct.foo zeroinitializer

@llvm.global_ctors = appending global [1 x { i32, void () addrspace(1)*, i8* }] [{ i32, void () addrspace(1)*, i8* } { i32 65535, void () addrspace(1)* @_GLOBAL__sub_I_failed.cc, i8* null }]

@_ZN3fooC1Ev = alias void (%struct.foo*), void (%struct.foo*) addrspace(1)* @_ZN3fooC2Ev

define void @_ZN3fooC2Ev(%struct.foo* dereferenceable(1) %this) {
; CHECK-LABEL: _ZN3fooC2Ev:
; CHECK:       ; %bb.0: ; %entry
; CHECK-NEXT:    push r28
; CHECK-NEXT:    push r29
; CHECK-NEXT:    in r28, 61
; CHECK-NEXT:    in r29, 62
; CHECK-NEXT:    sbiw r28, 2
; CHECK-NEXT:    in r0, 63
; CHECK-NEXT:    cli
; CHECK-NEXT:    out 62, r29
; CHECK-NEXT:    out 63, r0
; CHECK-NEXT:    out 61, r28
; CHECK-NEXT:    std Y+2, r25
; CHECK-NEXT:    std Y+1, r24
; CHECK-NEXT:    adiw r28, 2
; CHECK-NEXT:    in r0, 63
; CHECK-NEXT:    cli
; CHECK-NEXT:    out 62, r29
; CHECK-NEXT:    out 63, r0
; CHECK-NEXT:    out 61, r28
; CHECK-NEXT:    pop r29
; CHECK-NEXT:    pop r28
; CHECK-NEXT:    ret
entry:
  %this.addr = alloca %struct.foo*
  store %struct.foo* %this, %struct.foo** %this.addr
  %this1 = load %struct.foo*, %struct.foo** %this.addr
  ret void
}

define internal void @__cxx_global_var_init() addrspace(1) {
; CHECK-LABEL: __cxx_global_var_init:
; CHECK:       ; %bb.0: ; %entry
; CHECK-NEXT:    ldi r24, lo8(f2)
; CHECK-NEXT:    ldi r25, hi8(f2)
; CHECK-NEXT:    call _ZN3fooC1Ev
; CHECK-NEXT:    ret
entry:
  call addrspace(1) void @_ZN3fooC1Ev(%struct.foo* dereferenceable(1) @f2)
  ret void
}

define internal void @_GLOBAL__sub_I_failed.cc() addrspace(1) {
; CHECK-LABEL: _GLOBAL__sub_I_failed.cc:
; CHECK:       ; %bb.0: ; %entry
; CHECK-NEXT:    call __cxx_global_var_init
; CHECK-NEXT:    ret
entry:
  call addrspace(1) void @__cxx_global_var_init()
  ret void
}