1- ## Check that BOLT handles correctly folding functions with --icf=safe that can be referenced.
2- ## The compare is generated by the ICP path with instrumentation profiling.
1+ ## Check that BOLT handles correctly folding functions with --icf=safe
2+ ## that can be referenced through a non control flow instruction when ICP optimization is enabled.
3+ ## This tests also checks that destructors are not folded.
34
45# REQUIRES: system-linux
56# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-linux %s -o %t1.o
89# RUN: llvm-bolt --no-threads %t.exe --icf=safe -debug -debug-only=bolt-icf -o %t.bolt 2>&1 | FileCheck --check-prefix=SAFEICFCHECK %s
910
1011# ICFCHECK: ICF iteration 1
11- # ICFCHECK-NEXT: folding _ZNK8Derived34funcEii into _ZNK8Derived24funcEii
1212# ICFCHECK-NEXT: folding _ZN8Derived3D0Ev into _ZN8Derived2D0Ev
13+ # ICFCHECK-NEXT: folding _ZNK8Derived34funcEii into _ZNK8Derived24funcEii
1314
14- # SAFEICFCHECK: skipping function _ZNK8Derived24funcEii
15- # SAFEICFCHECK-NEXT: skipping function _ZNK8Derived34funcEii
15+ # SAFEICFCHECK: skipping function _ZNK8Derived34funcEii
1616# SAFEICFCHECK-NEXT: ICF iteration 1
1717# SAFEICFCHECK-NEXT: folding _ZN8Derived3D0Ev into _ZN8Derived2D0Ev
1818# SAFEICFCHECK-NEXT: ===---------
8888## return 5;
8989## }
9090## Manually modified to remove "extra" assembly.
91- .section .text.hot.,"ax",@progbits
92- .globl _Z10createTypei
93- .type _Z10createTypei,@function
94- _Z10createTypei:
95- callq _Znwm@PLT
96- leaq _ZTV8Derived2+16(%rip), %rcx
97- leaq _ZTV8Derived3+16(%rip), %rdx
98- cmoveq %rcx, %rdx
99- retq
100- .size _Z10createTypei, .-_Z10createTypei
101-
102- .globl _Z10returnFivev
103- .type _Z10returnFivev,@function
104- _Z10returnFivev:
105- movl $5, %eax
106- retq
107- .size _Z10returnFivev, .-_Z10returnFivev
108-
109- .globl returnFourOrFiveFunc
110- .type returnFourOrFiveFunc,@function
111- returnFourOrFiveFunc:
112- xorl %eax, %eax
113- cmpl $1, %edi
114- sete %al
115- xorl $5, %eax
116- retq
117- .size returnFourOrFiveFunc, .-returnFourOrFiveFunc
118-
11991 .globl main
12092 .type main,@function
12193main:
122- callq returnFourOrFiveFunc@PLT
123- callq _Z10returnFivev@PLT
124- callq _Z10createTypei
125- callq _Z10createTypei
126- leaq _ZNK8Derived24funcEii(%rip), %rcx
127- callq _ZNK8Derived24funcEii
12894 leaq _ZNK8Derived34funcEii(%rip), %rcx
12995 callq _ZNK8Derived34funcEii
13096 .size main, .-main
13197
13298 .section .text.hot._ZNK8Derived24funcEii,"axG",@progbits,_ZNK8Derived24funcEii,comdat
13399 .weak _ZNK8Derived24funcEii
134100 .type _ZNK8Derived24funcEii,@function
135- _ZNK8Derived24funcEii: #
101+ _ZNK8Derived24funcEii:
136102 imull %esi, %eax
137103 retq
138104 .size _ZNK8Derived24funcEii, .-_ZNK8Derived24funcEii
@@ -141,7 +107,6 @@ _ZNK8Derived24funcEii: #
141107 .weak _ZN8Derived2D0Ev
142108 .type _ZN8Derived2D0Ev,@function
143109_ZN8Derived2D0Ev:
144- movl $16, %esi
145110 jmp _ZdlPvm@PLT
146111 .size _ZN8Derived2D0Ev, .-_ZN8Derived2D0Ev
147112
@@ -164,7 +129,6 @@ _ZN4BaseD2Ev:
164129 .weak _ZN8Derived3D0Ev
165130 .type _ZN8Derived3D0Ev,@function
166131_ZN8Derived3D0Ev:
167- movl $16, %esi
168132 jmp _ZdlPvm@PLT
169133 .size _ZN8Derived3D0Ev, .-_ZN8Derived3D0Ev
170134
@@ -179,37 +143,6 @@ _ZTV8Derived2:
179143 .quad _ZN8Derived2D0Ev
180144 .size _ZTV8Derived2, 40
181145
182- .type _ZTS8Derived2,@object
183- .section .rodata._ZTS8Derived2,"aG",@progbits,_ZTS8Derived2,comdat
184- .weak _ZTS8Derived2
185- _ZTS8Derived2:
186- .asciz "8Derived2"
187- .size _ZTS8Derived2, 10
188-
189- .type _ZTS4Base,@object
190- .section .rodata._ZTS4Base,"aG",@progbits,_ZTS4Base,comdat
191- .weak _ZTS4Base
192- _ZTS4Base:
193- .asciz "4Base"
194- .size _ZTS4Base, 6
195-
196- .type _ZTI4Base,@object
197- .section .data.rel.ro._ZTI4Base,"awG",@progbits,_ZTI4Base,comdat
198- .weak _ZTI4Base
199- _ZTI4Base:
200- .quad _ZTVN10__cxxabiv117__class_type_infoE+16
201- .quad _ZTS4Base
202- .size _ZTI4Base, 16
203-
204- .type _ZTI8Derived2,@object
205- .section .data.rel.ro._ZTI8Derived2,"awG",@progbits,_ZTI8Derived2,comdat
206- .weak _ZTI8Derived2
207- _ZTI8Derived2:
208- .quad _ZTVN10__cxxabiv120__si_class_type_infoE+16
209- .quad _ZTS8Derived2
210- .quad _ZTI4Base
211- .size _ZTI8Derived2, 24
212-
213146 .type _ZTV8Derived3,@object
214147 .section .data.rel.ro._ZTV8Derived3,"awG",@progbits,_ZTV8Derived3,comdat
215148 .weak _ZTV8Derived3
@@ -220,19 +153,3 @@ _ZTV8Derived3:
220153 .quad _ZN4BaseD2Ev
221154 .quad _ZN8Derived3D0Ev
222155 .size _ZTV8Derived3, 40
223-
224- .type _ZTS8Derived3,@object
225- .section .rodata._ZTS8Derived3,"aG",@progbits,_ZTS8Derived3,comdat
226- .weak _ZTS8Derived3
227- _ZTS8Derived3:
228- .asciz "8Derived3"
229- .size _ZTS8Derived3, 10
230-
231- .type _ZTI8Derived3,@object
232- .section .data.rel.ro._ZTI8Derived3,"awG",@progbits,_ZTI8Derived3,comdat
233- .weak _ZTI8Derived3
234- _ZTI8Derived3:
235- .quad _ZTVN10__cxxabiv120__si_class_type_infoE+16
236- .quad _ZTS8Derived3
237- .quad _ZTI4Base
238- .size _ZTI8Derived3, 24
0 commit comments