<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/80032>80032</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
IPO const prop effectively inlines noinline functions
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
rscottmanley
</td>
</tr>
</table>
<pre>
The following example shows that IPSCCP is effectively inlining functions marked with noinline at optimization levels -O1 and above.
```
#include <stdio.h>
__attribute__((noinline))
float value() {
return 3.14159f;
}
int main() {
printf("%f", value());
return 0;
}
```
the assembly output from clang at -O1:
```
$ clang -O1 -S noinline.c
$ grep -A12 "^main" noinline.s
main: # @main
.cfi_startproc
# %bb.0:
pushq %rax
.cfi_def_cfa_offset 16
leaq .L.str(%rip), %rdi
movsd .LCPI1_0(%rip), %xmm0 # xmm0 = mem[0],zero
movb $1, %al
callq printf@PLT
xorl %eax, %eax
popq %rcx
.cfi_def_cfa_offset 8
retq
```
This can also be seen in LLVM IR with just running the ipsccp pass where the functions are annotated with noinline here: https://godbolt.org/z/4jveedYoP
By contrast, gcc does not inline `value()` even at -O3 or -Ofast
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMVFtvqzgQ_jXOyyjIGMjlgYc2OZEqddVoz9FK-xQZMwR3jU3tIb38-pUJ26QXHS2yQNjffDPzeWZkCPpoEUtW3LJiO5MDtc6XPihH1Elr8HVWufq1_NUiNM4Y96ztEfBFdr1BCK17DkCtJLjb_9xs9qADYNOgIn1C8wraGm2jRTNYRdrZAJ30_2ANz5pasG4EIEgC15Pu9JuMKDB4QhNg_pCCtDXIyp0wAca3jN9M7wWf1vlXZNoqM9QILNsEqrVLWpb9uDY5HCSR19VAeDgwsWJi9V8ATKzjGmGNcZLgJM2AI2gNbHl7PgLwSIO3kCVpnhbrhmXTCVtur11pS9BJbb8S9F5basZ9wUTRjJ_Ntbu4ss8O-TeePikwvqlFkCFgV5lXcAP1A0HjXQfKSHuMOs8fUpbd_FbKfEJH-ec_328pURfA0WMP85tUQEyg-HFOVlyw4Ywd97MbYCIDlvPxd8rs_CSq0YdA0lPv3buDDJgoqirh76FCP4T2CSAeePnyDUmNzUE18uCaJiBBuviIMSifILlPAvlR58LrflR7M1LW-iO8c6dQR-r7zf4uPfBvbF66jsPliVGPWyzbQocdK245K7ZMbN7Quy_s1dkmTyc2aT5ClDQm5jsVTM73978mxIvz5mxdoHyZ7PGzKL3rnyaUV_9DsNVHiEd6-k2h_Wp1ACUtSBMcVAgB0YK2cH__1x9w9-e5wR-HQOAHO86AWJu6D0r10MsQ4LlFj-PuZTpIjyCtdSTpy5CI8FhLLVEfYmGIHRO7o6srZyhx_sjE7o2JXf54Qqz_dvvreG9fQTlLXgaKgh2VgtphAOsIJn624NdtuOCAJ7TnnsnAeZg_NNH8inVWl1m9ztZyhmW65ItFluViPWtLsVxnS8SqQKWaRhWIizTPeNUUOS-K9WqmS8FFztOMp4uCi1WCxUqu61W-TLGqinrBco6d1CYx5tTF7GY6hAHLFeeZmBlZoQnj2BbC4jOMh2Mvbme-jDbzajgGlnOjA4ULC2kyWN7tH6IegaD3rv86s0dlJl3eb2c2eFN-Ul9TO1SJch0Tu-hj-sx77x5RERO7MbLAxG6M_N8AAAD__73b454">