https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110921
Bug ID: 110921 Summary: Relax _tzcnt_u32 support x86, all x86 arch support for this instrunction Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: luoyonggang at gmail dot com Target Milestone: --- Created attachment 55695 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=55695&action=edit A patch for fixes this issue in a brute way, just for demo The compiling error: In file included from C:/CI-Tools/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/x86gprintrin.h:41, from C:/CI-Tools/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/x86intrin.h:27, from C:/CI-Tools/msys64/mingw64/include/intrin.h:69, from ../../src/amd/addrlib/src/core/addrcommon.h:33, from ../../src/amd/addrlib/src/core/addrobject.h:21, from ../../src/amd/addrlib/src/core/addrlib.h:21, from ../../src/amd/addrlib/src/core/addrlib2.h:20, from ../../src/amd/addrlib/src/gfx10/gfx10addrlib.h:19, from ../../src/amd/addrlib/src/gfx10/gfx10addrlib.cpp:16: C:/CI-Tools/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/bmiintrin.h: In function 'unsigned int Addr::BitScanForward(unsigned int)': C:/CI-Tools/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/13.1.0/include/bmiintrin.h:116:1: error: inlining failed in call to 'always_inline' 'unsigned int _tzcnt_u32(unsigned int)': target specific option mismatch 116 | _tzcnt_u32 (unsigned int __X) | ^~~~~~~~~~ ../../src/amd/addrlib/src/core/addrcommon.h:343:23: note: called from here 343 | out = ::_tzcnt_u32(mask); | ~~~~~~~~~~~~^~~~~~ [113/1111] Compiling C++ object src/amd/compiler/libaco.a.p/aco_insert_NOPs.cpp.obj This code can be compiled with MSVC and Clang. Reason: Since the TZCNT instruction behaves as BSF on non-BMI targets, there is code that expects to use it as a potentially faster version of BSF. This is for alignment with Clang and MSVC. Also the _mm_tzcnt_32 and _mm_tzcnt_64 are added for consistence with Clang and MSVC