<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/73992>73992</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [BOLT] ananicy-cpp binary broken with BOLT optimizations applied
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            BOLT
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          ms178
      </td>
    </tr>
</table>

<pre>
    I've been experimenting with the BOLT script in ananicy-cpp for some time with clang-git, I've noticed only recently that the binary is actually broken when using BOLT (ddc6ef46418cc419041d0bd85de40d0eb9396848) on my Haswell-EP system.

For details, either take a look at the [PKGBUILD_BOLT](https://github.com/ms178/archpkgbuilds/blob/main/packages/ananicy-cpp/PKGBUILD_BOLT) in my repo, I will attach it here as well. I've tried some extra BOLT optimizations and apply them via the [patch.patch](https://github.com/ms178/archpkgbuilds/blob/main/packages/ananicy-cpp/patch.patch), but in my tests the binary was also broken with the out-of-the box options.

[PKGBUILD_BOLT.txt](https://github.com/llvm/llvm-project/files/13518068/PKGBUILD_BOLT.txt)

The compilation process itself went fine with the first set of flags, but a `sudo systemctl status ananicy-cpp.service` reveals that the service fails to run.

These flags in /etc/makepkg.conf compile fine but should reproduce the broken binary on any Arch-based distro:

```
export CC=clang
export CXX=clang++
export CC_LD=lld
export CXX_LD=lld
export AR=llvm-ar
export NM=llvm-nm
export STRIP=llvm-strip
export OBJCOPY=llvm-objcopy
export OBJDUMP=llvm-objdump
export READELF=llvm-readelf
export RANLIB=llvm-ranlib
export HOSTCC=clang
export HOSTCXX=clang++
export HOSTAR=llvm-ar
export CPPFLAGS="-D_FORTIFY_SOURCE=0"
export CFLAGS="-O3 -march=native -mtune=native -maes -mllvm -inline-threshold=1000 -mllvm -extra-vectorizer-passes -mllvm -enable-cond-stores-vec -mllvm -slp-vectorize-hor-store -mllvm -enable-loopinterchange -mllvm -enable-loop-distribute -mllvm -enable-unroll-and-jam -mllvm -enable-loop-flatten -mllvm -interleave-small-loop-scalar-reduction -mllvm -unroll-runtime-multi-exit -mllvm -aggressive-ext-opt -fno-math-errno -fno-trapping-math -falign-functions=32 -funroll-loops -fno-semantic-interposition -fcf-protection=none -mharden-sls=none -fomit-frame-pointer -mprefer-vector-width=256 -flto -freroll-loops -mllvm -adce-remove-loops -mllvm -enable-ext-tsp-block-placement=1 -mllvm -enable-gvn-hoist -mllvm -vp-counters-per-site=6 -fgnuc-version=6.5.0"
export CXXFLAGS="${CFLAGS}"
export LDFLAGS="-Wl,--lto-O3,-O3,-Bsymbolic-functions,--as-needed -march=native -maes -flto -fuse-ld=lld -Wl,-zmax-page-size=0x200000 -freroll-loops"
CCLDFLAGS="$LDFLAGS"
CXXLDFLAGS="$LDFLAGS"
export ASFLAGS="-D__AVX__=1 -D__AVX2__=1 -msse2avx -D__FMA__=1"
```

When using the following flags, BOLT even crashs:

```
export CC=clang
export CXX=clang++
export CC_LD=lld
export CXX_LD=lld
export AR=llvm-ar
export NM=llvm-nm
export STRIP=llvm-strip
export OBJCOPY=llvm-objcopy
export OBJDUMP=llvm-objdump
export READELF=llvm-readelf
export RANLIB=llvm-ranlib
export HOSTCC=clang
export HOSTCXX=clang++
export HOSTAR=llvm-ar
export CPPFLAGS="-D_FORTIFY_SOURCE=0"
export CFLAGS="-O3 -march=native -mtune=native -maes -mbmi2 -mpclmul -mllvm -inline-threshold=1000 -mllvm -polly -mllvm -polly-position=early -mllvm -polly-dependences-computeout=900000000 -mllvm -polly-detect-profitability-min-per-loop-insts=40 -mllvm -polly-tiling=true -mllvm -polly-prevect-width=256 -mllvm -polly-vectorizer=stripmine -mllvm -polly-invariant-load-hoisting -mllvm -polly-loopfusion-greedy -mllvm -polly-run-inliner -mllvm -polly-run-dce -mllvm -polly-enable-delicm=true -mllvm -polly -fmerge-all-constants -mllvm -extra-vectorizer-passes -mllvm -enable-cond-stores-vec -mllvm -slp-vectorize-hor-store -mllvm -enable-loopinterchange -mllvm -enable-loop-distribute -mllvm -enable-unroll-and-jam -mllvm -enable-loop-flatten -mllvm -interleave-small-loop-scalar-reduction -mllvm -unroll-runtime-multi-exit -mllvm -aggressive-ext-opt -fno-math-errno -fno-trapping-math -falign-functions=32 -funroll-loops -fno-semantic-interposition -fcf-protection=none -mharden-sls=none -fomit-frame-pointer -mprefer-vector-width=256 -flto -fwhole-program-vtables -fsplit-lto-unit -mllvm -adce-remove-loops -mllvm -enable-ext-tsp-block-placement=1 -mllvm -enable-gvn-hoist -mllvm -enable-dfa-jump-thread -Wno-error -fgnuc-version=13.2.1 -ffp-contract=fast -fdata-sections -ffunction-sections -fno-unique-section-names -fsplit-machine-functions -freroll-loops -w"
export CXXFLAGS="${CFLAGS} -Wp,-U_GLIBCXX_ASSERTIONS"
export LDFLAGS="-Wl,--lto-CGO3 -Wl,--gc-sections -Wl,--icf=all -Wl,--lto-O3,-O3,-Bsymbolic-functions,--as-needed -fcf-protection=none -mharden-sls=none -Wl,-mllvm,-polly -Wl,-mllvm,-polly-invariant-load-hoisting -Wl,-mllvm -Wl,-polly-loopfusion-greedy -Wl,-mllvm -Wl,-polly-run-inliner -Wl,-mllvm -Wl,-polly-run-dce -Wl,-mllvm -Wl,-polly-enable-delicm=true -Wl,-mllvm -Wl,-extra-vectorizer-passes -Wl,-mllvm -Wl,-enable-cond-stores-vec -Wl,-mllvm -Wl,-slp-vectorize-hor-store -Wl,-mllvm -Wl,-enable-loopinterchange -Wl,-mllvm -Wl,-enable-loop-distribute -Wl,-mllvm -Wl,-enable-unroll-and-jam -Wl,-mllvm -Wl,-enable-loop-flatten -Wl,-mllvm -Wl,-interleave-small-loop-scalar-reduction -Wl,-mllvm -Wl,-unroll-runtime-multi-exit -Wl,-mllvm -Wl,-aggressive-ext-opt -Wl,-mllvm -Wl,-enable-interleaved-mem-accesses -Wl,-mllvm -Wl,-enable-masked-interleaved-mem-accesses -march=native -maes -mbmi2 -mpclmul -flto -fwhole-program-vtables -fuse-ld=lld -Wl,-zmax-page-size=0x200000 -freroll-loops -Wl,-mllvm -Wl,-adce-remove-loops -Wl,-mllvm -Wl,-enable-ext-tsp-block-placement=1 -Wl,-mllvm -Wl,-enable-gvn-hoist -Wl,-mllvm -Wl,-enable-dfa-jump-thread -Wl,--push-state -Wl,-whole-archive -ljemalloc_pic -Wl,--pop-state -lpthread -lstdc++ -lm -ldl -Wl,--undefined-version"
export CCLDFLAGS="$LDFLAGS"
export CXXLDFLAGS="$LDFLAGS"
export ASFLAGS="-D__AVX__=1 -D__AVX2__=1 -msse2avx -D__FMA__=1"
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWVtT4zoS_jXmRaWUIyckeeAByGQOu5yBAmaH80TJUtvWoItXagcyv35Ldu4kMFOnTu3LTKUySP211Bfp63bMQ1ClBThLhhfJcHrCG6ycPzOhPxqf5E4uzq4SNpoDyQEsgdcavDJgUdmSvCisCFZALm6uH0gQXtVIlCXccqvEgoq6JoXzJDgDBJWBTkNobktaKkzYJVmubh0qAZI4qxfEgwCLekGw4thukCvL_YKoQLjAhmu9ILl3z2DJSwWWNCGa01qRsLGU4hSKwemgPxZi0J-kg75MczkeShikMoV8kk1Ox4NxwibEWWIW5A8eXkBr-umWhEVAML0knSbpefc9c55IQK50iBaDwgo8Qf4MhBPt3DNZWpkML27__fni69X19CkakwynCRtXiHVIsvOEzRI2KxVWTd4TziRs1kY5YTPuRVU_l3mjtAwJm-Xa5VHMlU3YrObimZcQBVuRTdhsdzM2ibE3MXy1a0NLXpTWhCNyURGFpAIPhAcSfe2tIo9egexSBK_oeRdGV6My6gdH5Wwg3ErC67rNCBgyV3zlb81RVL32-5_2dnsrNokO5g0uXUYIGLZPygsPhOvg1sdkdVRdg9QVtIW619ZPZ8NOvvfT2MNX_NA5reer_2jt3XcQmLBZoXTrST8b9sfp6Xg_ae3SbLK9-0MFRDhTK90Gn9TeCQiBKAygC_ICFkmhLGxcKpQPSAIgcQUpNC_DKjicJKdpaKRbHmuBmgTk2ITtO9oL4OdKQHKaEg9z4Dpsbt5SRop4_Ak64hvb27M3QLdtTEbCZoCiTecz1M9lTzhbLB2CzvBoWahco2U8qt7JRkCXuy5XyxS6SCQLcu5FRXMeQBKpAnoX47-drdN0-WmH8Fo7j-TyMsmmLdHsTj8-rufZRfzsKj1dT5NsqrXc1zosOL9rJ-eGcr8j-PLnSmDNjuD-4e7qdiUL6FW9I765-Nflze1fK4DLvwtXL_Yh069_3m5BZGN2V7n7dD79dD1bQTxwCbrYhZx_ub66WCO41SrfAfxxc_9wJIit6N1ARsTR2Fze3s6uzz_fJ9k0YYxOn2Y3dw9Xs7-e7m--3l1-SrJpmjC2q7KtcJMRaiKHJNnUclRzINRgY2F7zCEQauL2hCqrlQWKlYdQOS2TbNpP03Qtb2mPzkGg8-oHeFrzELb0wfJcAxXOShrQeQgRvBYHXW-UaeV8B9pX187VyiJ4UXFbHhTT9oCrvME34sZ6pzXlVtLv3BxULjRHBLvlNoLXwOdAg-Fad6gguOaeepCNaPllBV_u4BsbKzU1jUZF4VXhGsHL0kMIag4xZNTVSGhhHTUcKwreW9eN0fO6VrZsBYQWXKvS0qKx7YYhyaYZI3HcbhitCp1iAMMtKtGZXrugOgsLUURORWgXiGl2Nkao4l6CpUGH9VzhjEJaeG6A1q5dh1BTeyjAL7NEX5TEeHjY8JTQQmM028O2MSuHpQDqwbg57EmWcY9hwFDTXDvxTGvNBcTeKB6wfWg5t7RyKmzCOa-pcE20MNAaPA0K4xGONpW2EXQOPnTunvaGvbd34vFx61YkbJCMLpb3ZDTdB19Pt2_QN52wS0o1OnqTxT-774uwMLnTSmzlKuJ4oBZAgjxw79p7toxhE4C2t0trSZab_DD8lda8BBrUj-he-srStL19OzFfG3x5uWNrwgar8Rrx-PgRZEXP97tE83T-n8enpy473YithiYEYHz-2gpmf5538-sF94pM9_1t03q2Zdhp7V7iaF2D21YK5mCJ8DxU4Xfp-l26frJ05UaxyFxCm0b_dCmrXXw02hnRFY8m2RS4fyOWUIOVYAUEGtu0BsE1kcIm6fLfG4VIxJGQC4U8V1rhghplWxJra4yyASMlD_ZVUWllyySbom9g38zYegrcZecdxKZCJ9m0PYBG2f1llJ1zr7hFqh2XHeXGO7mLimYWTaRXWnoAuR8U39hlrP0BiRT7uy5JXoJWwhz0j9DCgC-BxkosnA3ILYbfPcjvHmRdP18qpyFuUnpu6BxjWKNVodYK22rd2O1Q_KPdyepEF5x-b0zdUg6PZd26GGfn37Yp_azHen1CiyJ2NhY9F3GzgsdlC8mR09CFL3q1ysX2nG1d_G8Dq0lqudmKgeGiivy3zuObzu3ll9okQr_VsUv5-vT5-uoi1srz-_tPdw9XN1_eNBNHW6jLz5HWlxOl2PJnOadEkWRTrjX5G53XL5y_bhPT_SJxuaKfQ7PH2XILvRocZc6j2B0WfRfVMupRxGF2PQA_yqKHsEcY9QD0KLseX_YN074P3WHd49B9Bv5g0TUbH8D9LDMfUH2HpQ-gDzH2cbs3ZklqwFAuBHyUQsPDM8h3VA8_tey3WB-w8N95ujkcmLf8fdzHd7n8uNoWrx8HveX4jqXqJlQ0IN-cyS42MZptHPV3iEfHiadaiY1aPEedlq5XS-qAUnTtNqHaEKrlhg4bK6FQFuS6mOyT-IcPhRu2_38_G57Is0xOsgk_gbP-KO1n4_4oZSfV2TiXaTEWfSazYT7K89FgMhoXAzYaw3AwHvETdcZSlvX7WcpY2s9OexmkIzFhozGT6ZDJSTJIwXClezGJPefLExVCA2ejbDJhJ5rnoEP7Hoex7o0AS4bTE3_WPsrkTRmSQapVwLBZABXq9t3P8n3Fzrub5Q-x2z-hH3o5UNdagTxpvD775R_IWwdCwmatD_8LAAD__2kh0OU">