1
+ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
1
2
; RUN: llc -relocation-model=static -verify-machineinstrs < %s --enable-shrink-wrap=false -mtriple=powerpc64le-unknown-linux-gnu | FileCheck %s
2
3
%struct.S = type { i8 }
3
4
@@ -10,33 +11,102 @@ declare void @_ZN1SC1Ev(%struct.S*)
10
11
declare void @_ZN1SD1Ev (%struct.S* )
11
12
declare i32 @_tlv_atexit (void (i8* )*, i8* , i8* )
12
13
13
- ; CHECK-LABEL: _ZTW2sg
14
14
define cxx_fast_tlscc nonnull %struct.S* @_ZTW2sg () nounwind {
15
+ ; CHECK-LABEL: _ZTW2sg:
16
+ ; CHECK: # %bb.0:
17
+ ; CHECK-NEXT: mflr 0
18
+ ; CHECK-NEXT: std 0, 16(1)
19
+ ; CHECK-NEXT: stdu 1, -48(1)
20
+ ; CHECK-NEXT: addis 3, 13, __tls_guard@tprel@ha
21
+ ; CHECK-NEXT: lbz 4, __tls_guard@tprel@l(3)
22
+ ; CHECK-NEXT: andi. 4, 4, 1
23
+ ; CHECK-NEXT: bc 12, 1, .LBB0_2
24
+ ; CHECK-NEXT: # %bb.1: # %init.i
25
+ ; CHECK-NEXT: li 4, 1
26
+ ; CHECK-NEXT: std 31, 40(1) # 8-byte Folded Spill
27
+ ; CHECK-NEXT: mr 31, 14
28
+ ; CHECK-NEXT: mr 14, 15
29
+ ; CHECK-NEXT: mr 15, 16
30
+ ; CHECK-NEXT: mr 16, 17
31
+ ; CHECK-NEXT: stb 4, __tls_guard@tprel@l(3)
32
+ ; CHECK-NEXT: addis 3, 13, sg@tprel@ha
33
+ ; CHECK-NEXT: mr 17, 18
34
+ ; CHECK-NEXT: mr 18, 19
35
+ ; CHECK-NEXT: mr 19, 20
36
+ ; CHECK-NEXT: mr 20, 21
37
+ ; CHECK-NEXT: mr 21, 22
38
+ ; CHECK-NEXT: mr 22, 23
39
+ ; CHECK-NEXT: mr 23, 24
40
+ ; CHECK-NEXT: mr 24, 25
41
+ ; CHECK-NEXT: mr 25, 26
42
+ ; CHECK-NEXT: mr 26, 27
43
+ ; CHECK-NEXT: mr 27, 28
44
+ ; CHECK-NEXT: mr 28, 29
45
+ ; CHECK-NEXT: mr 29, 30
46
+ ; CHECK-NEXT: addi 30, 3, sg@tprel@l
47
+ ; CHECK-NEXT: mr 3, 30
48
+ ; CHECK-NEXT: bl _ZN1SC1Ev
49
+ ; CHECK-NEXT: nop
50
+ ; CHECK-NEXT: addis 3, 2, .LC0@toc@ha
51
+ ; CHECK-NEXT: addis 4, 2, .LC1@toc@ha
52
+ ; CHECK-NEXT: ld 3, .LC0@toc@l(3)
53
+ ; CHECK-NEXT: ld 5, .LC1@toc@l(4)
54
+ ; CHECK-NEXT: mr 4, 30
55
+ ; CHECK-NEXT: mr 30, 29
56
+ ; CHECK-NEXT: mr 29, 28
57
+ ; CHECK-NEXT: mr 28, 27
58
+ ; CHECK-NEXT: mr 27, 26
59
+ ; CHECK-NEXT: mr 26, 25
60
+ ; CHECK-NEXT: mr 25, 24
61
+ ; CHECK-NEXT: mr 24, 23
62
+ ; CHECK-NEXT: mr 23, 22
63
+ ; CHECK-NEXT: mr 22, 21
64
+ ; CHECK-NEXT: mr 21, 20
65
+ ; CHECK-NEXT: mr 20, 19
66
+ ; CHECK-NEXT: mr 19, 18
67
+ ; CHECK-NEXT: mr 18, 17
68
+ ; CHECK-NEXT: mr 17, 16
69
+ ; CHECK-NEXT: mr 16, 15
70
+ ; CHECK-NEXT: mr 15, 14
71
+ ; CHECK-NEXT: mr 14, 31
72
+ ; CHECK-NEXT: ld 31, 40(1) # 8-byte Folded Reload
73
+ ; CHECK-NEXT: bl _tlv_atexit
74
+ ; CHECK-NEXT: nop
75
+ ; CHECK-NEXT: .LBB0_2: # %__tls_init.exit
76
+ ; CHECK-NEXT: addis 3, 13, sg@tprel@ha
77
+ ; CHECK-NEXT: addi 3, 3, sg@tprel@l
78
+ ; CHECK-NEXT: addi 1, 1, 48
79
+ ; CHECK-NEXT: ld 0, 16(1)
80
+ ; CHECK-NEXT: mtlr 0
81
+ ; CHECK-NEXT: blr
15
82
%.b.i = load i1 , i1* @__tls_guard , align 1
16
- ; CHECK: bc 12, 1, [[BB_end:.?LBB0_[0-9]+]]
17
83
br i1 %.b.i , label %__tls_init.exit , label %init.i
18
84
19
85
init.i:
20
- ; CHECK: Folded Spill
21
86
store i1 true , i1* @__tls_guard , align 1
22
87
tail call void @_ZN1SC1Ev (%struct.S* nonnull @sg ) #2
23
- ; CHECK: bl _ZN1SC1Ev
24
88
%1 = tail call i32 @_tlv_atexit (void (i8* )* nonnull bitcast (void (%struct.S* )* @_ZN1SD1Ev to void (i8* )*), i8* nonnull getelementptr inbounds (%struct.S , %struct.S* @sg , i64 0 , i32 0 ), i8* nonnull @__dso_handle ) #2
25
- ; CHECK: Folded Reload
26
- ; CHECK: _tlv_atexit
27
89
br label %__tls_init.exit
28
90
29
- ; CHECK: [[BB_end]]:
30
91
__tls_init.exit:
31
92
ret %struct.S* @sg
32
93
}
33
94
34
- ; CHECK-LABEL: _ZTW4sum1
35
95
define cxx_fast_tlscc nonnull i32* @_ZTW4sum1 () nounwind {
96
+ ; CHECK-LABEL: _ZTW4sum1:
97
+ ; CHECK: # %bb.0:
98
+ ; CHECK-NEXT: addis 3, 13, sum1@tprel@ha
99
+ ; CHECK-NEXT: addi 3, 3, sum1@tprel@l
100
+ ; CHECK-NEXT: blr
36
101
ret i32* @sum1
37
102
}
38
103
39
104
define cxx_fast_tlscc i32* @_ZTW4sum2 () #0 {
105
+ ; CHECK-LABEL: _ZTW4sum2:
106
+ ; CHECK: # %bb.0:
107
+ ; CHECK-NEXT: addis 3, 13, sum1@tprel@ha
108
+ ; CHECK-NEXT: addi 3, 3, sum1@tprel@l
109
+ ; CHECK-NEXT: blr
40
110
ret i32* @sum1
41
111
}
42
112
0 commit comments