[llvm] [CodeGenPrepare] Invert select predicates when profitable (PR #218296)

via llvm-commits llvm-commits at lists.llvm.org
Sun Aug 23 20:44:19 PDT 2026


github-actions[bot] wrote:

<!--PREMERGE ADVISOR COMMENT: Windows-->
# :window: Windows x64 Test Results

* 87325 tests passed
* 2235 tests skipped

All executed tests passed, but another part of the build **failed**. Click on a failure below to see the details.

<details>
<summary>[code=4294967295] bin/clang-linker-wrapper.exe</summary>

```
FAILED: [code=4294967295] bin/clang-linker-wrapper.exe
C:\Windows\system32\cmd.exe /C "cd . && C:\BuildTools\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe -E vs_link_exe --msvc-ver=1944 --intdir=tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir --rc="C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\rc.exe" --mt="C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\mt.exe" --manifests  -- C:\clang\clang-msvc\bin\lld-link.exe /nologo @CMakeFiles\clang-linker-wrapper.rsp  /out:bin\clang-linker-wrapper.exe /implib:lib\clang-linker-wrapper.lib /pdb:bin\clang-linker-wrapper.pdb /version:0.0 /MANIFEST:NO /Brepro /INCREMENTAL:NO /subsystem:console  /STACK:10000000 && cd ."
LINK: command "C:\clang\clang-msvc\bin\lld-link.exe /nologo @CMakeFiles\clang-linker-wrapper.rsp /out:bin\clang-linker-wrapper.exe /implib:lib\clang-linker-wrapper.lib /pdb:bin\clang-linker-wrapper.pdb /version:0.0 /MANIFEST:NO /Brepro /INCREMENTAL:NO /subsystem:console /STACK:10000000" failed (exit code 1) with the following output:
lld-link: error: undefined symbol: public: class llvm::opt::InputArgList __cdecl llvm::opt::OptTable::parseArgs(int, char *const *, class llvm::opt::OptSpecifier, class llvm::StringSaver &, class std::function<void __cdecl(class llvm::StringRef)>) const
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(main)
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(public: __cdecl `class llvm::Expected<class llvm::SmallVector<class llvm::StringRef, 3>> __cdecl `anonymous namespace'::linkAndWrapDeviceFiles(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::ArrayRef<class llvm::SmallVector<class llvm::object::OffloadFile, 3>>, class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::opt::InputArgList const &, char **, int, bool)'::`1'::<lambda_6>::operator()<class llvm::SmallVector<class llvm::object::OffloadFile, 3> const>(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::SmallVector<class llvm::object::OffloadFile, 3> const &) const)

lld-link: error: undefined symbol: public: void __cdecl llvm::opt::OptTable::printHelp(class llvm::raw_ostream &, char const *, char const *, bool, bool, class llvm::opt::Visibility, class llvm::StringRef) const
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(main)

lld-link: error: undefined symbol: private: struct std::pair<unsigned int, unsigned int> __cdecl llvm::opt::ArgList::getRange(class std::initializer_list<class llvm::opt::OptSpecifier>) const
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(main)
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(main)
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(public: class llvm::opt::Arg * __cdecl llvm::opt::ArgList::getLastArg<enum `anonymous namespace'::ID>(enum `anonymous namespace'::ID) const)
>>> referenced 6 more times

lld-link: error: undefined symbol: public: bool __cdecl llvm::opt::Option::matches(class llvm::opt::OptSpecifier) const
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(main)
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(main)
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(main)
>>> referenced 37 more times

lld-link: error: undefined symbol: public: class llvm::StringRef __cdecl llvm::opt::ArgList::getLastArgValue(class llvm::opt::OptSpecifier, class llvm::StringRef) const
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(main)
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(main)
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(main)
>>> referenced 18 more times

lld-link: error: undefined symbol: public: void __cdecl llvm::opt::Arg::render(class llvm::opt::ArgList const &, class llvm::SmallVector<char const *, 16> &) const
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(main)
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(public: __cdecl `class llvm::Expected<class llvm::SmallVector<class llvm::StringRef, 3>> __cdecl `anonymous namespace'::linkAndWrapDeviceFiles(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::ArrayRef<class llvm::SmallVector<class llvm::object::OffloadFile, 3>>, class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::opt::InputArgList const &, char **, int, bool)'::`1'::<lambda_6>::operator()<class llvm::SmallVector<class llvm::object::OffloadFile, 3> const>(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::SmallVector<class llvm::object::OffloadFile, 3> const &) const)

lld-link: error: undefined symbol: public: class std::vector<class std::basic_string<char, struct std::char_traits<char>, class std::allocator<char>>, class std::allocator<class std::basic_string<char, struct std::char_traits<char>, class std::allocator<char>>>> __cdecl llvm::opt::ArgList::getAllArgValues(class llvm::opt::OptSpecifier) const
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(class llvm::Expected<class llvm::SmallVector<class llvm::SmallVector<class llvm::object::OffloadFile, 3>, 1>> __cdecl `anonymous namespace'::getDeviceInput(class Expected<class llvm::SmallVector<class llvm::SmallVector<class llvm::object::OffloadFile, 3>, 1>>::opt::ArgList const &))
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(class llvm::Expected<class llvm::SmallVector<class llvm::StringRef, 3>> __cdecl `anonymous namespace'::linkAndWrapDeviceFiles(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::ArrayRef<class llvm::SmallVector<class llvm::object::OffloadFile, 3>>, class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::opt::InputArgList const &, char **, int, bool))
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(public: __cdecl `class llvm::Expected<class llvm::SmallVector<class llvm::StringRef, 3>> __cdecl `anonymous namespace'::linkAndWrapDeviceFiles(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::ArrayRef<class llvm::SmallVector<class llvm::object::OffloadFile, 3>>, class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::opt::InputArgList const &, char **, int, bool)'::`1'::<lambda_6>::operator()<class llvm::SmallVector<class llvm::object::OffloadFile, 3> const>(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::SmallVector<class llvm::object::OffloadFile, 3> const &) const)
>>> referenced 3 more times

lld-link: error: undefined symbol: private: void __cdecl llvm::opt::InputArgList::releaseMemory(void)
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(public: __cdecl llvm::opt::InputArgList::~InputArgList(void))

lld-link: error: undefined symbol: protected: __cdecl llvm::opt::GenericOptTable::GenericOptTable(class llvm::StringTable const &, class llvm::ArrayRef<class llvm::StringTable::Offset>, class llvm::ArrayRef<struct llvm::opt::OptTable::Info>, bool, class llvm::ArrayRef<struct llvm::opt::OptTable::SubCommand>, class llvm::ArrayRef<unsigned int>)
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(public: __cdecl `anonymous namespace'::WrapperOptTable::WrapperOptTable(void))

lld-link: error: undefined symbol: public: virtual __cdecl llvm::opt::OptTable::~OptTable(void)
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(void __cdecl `dynamic atexit destructor for '`class llvm::opt::OptTable const & __cdecl `anonymous namespace'::getOptTable(void)'::`2'::Table''(void))
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(public: virtual void * __cdecl `anonymous namespace'::WrapperOptTable::`scalar deleting dtor'(unsigned int))

lld-link: error: undefined symbol: public: __cdecl llvm::opt::DerivedArgList::DerivedArgList(class llvm::opt::InputArgList const &)
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(public: __cdecl `class llvm::Expected<class llvm::SmallVector<class llvm::StringRef, 3>> __cdecl `anonymous namespace'::linkAndWrapDeviceFiles(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::ArrayRef<class llvm::SmallVector<class llvm::object::OffloadFile, 3>>, class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::opt::InputArgList const &, char **, int, bool)'::`1'::<lambda_6>::operator()<class llvm::SmallVector<class llvm::object::OffloadFile, 3> const>(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::SmallVector<class llvm::object::OffloadFile, 3> const &) const)

lld-link: error: undefined symbol: public: void __cdecl llvm::opt::ArgList::append(class llvm::opt::Arg *)
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(public: __cdecl `class llvm::Expected<class llvm::SmallVector<class llvm::StringRef, 3>> __cdecl `anonymous namespace'::linkAndWrapDeviceFiles(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::ArrayRef<class llvm::SmallVector<class llvm::object::OffloadFile, 3>>, class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::opt::InputArgList const &, char **, int, bool)'::`1'::<lambda_6>::operator()<class llvm::SmallVector<class llvm::object::OffloadFile, 3> const>(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::SmallVector<class llvm::object::OffloadFile, 3> const &) const)
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(public: __cdecl `class llvm::Expected<class llvm::SmallVector<class llvm::StringRef, 3>> __cdecl `anonymous namespace'::linkAndWrapDeviceFiles(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::ArrayRef<class llvm::SmallVector<class llvm::object::OffloadFile, 3>>, class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::opt::InputArgList const &, char **, int, bool)'::`1'::<lambda_6>::operator()<class llvm::SmallVector<class llvm::object::OffloadFile, 3> const>(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::SmallVector<class llvm::object::OffloadFile, 3> const &) const)
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(public: __cdecl `class llvm::Expected<class llvm::SmallVector<class llvm::StringRef, 3>> __cdecl `anonymous namespace'::linkAndWrapDeviceFiles(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::ArrayRef<class llvm::SmallVector<class llvm::object::OffloadFile, 3>>, class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::opt::InputArgList const &, char **, int, bool)'::`1'::<lambda_6>::operator()<class llvm::SmallVector<class llvm::object::OffloadFile, 3> const>(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::SmallVector<class llvm::object::OffloadFile, 3> const &) const)
>>> referenced 3 more times

lld-link: error: undefined symbol: public: class llvm::opt::Option const __cdecl llvm::opt::OptTable::getOption(class llvm::opt::OptSpecifier) const
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(public: __cdecl `class llvm::Expected<class llvm::SmallVector<class llvm::StringRef, 3>> __cdecl `anonymous namespace'::linkAndWrapDeviceFiles(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::ArrayRef<class llvm::SmallVector<class llvm::object::OffloadFile, 3>>, class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::opt::InputArgList const &, char **, int, bool)'::`1'::<lambda_6>::operator()<class llvm::SmallVector<class llvm::object::OffloadFile, 3> const>(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::SmallVector<class llvm::object::OffloadFile, 3> const &) const)
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(public: __cdecl `class llvm::Expected<class llvm::SmallVector<class llvm::StringRef, 3>> __cdecl `anonymous namespace'::linkAndWrapDeviceFiles(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::ArrayRef<class llvm::SmallVector<class llvm::object::OffloadFile, 3>>, class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::opt::InputArgList const &, char **, int, bool)'::`1'::<lambda_6>::operator()<class llvm::SmallVector<class llvm::object::OffloadFile, 3> const>(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::SmallVector<class llvm::object::OffloadFile, 3> const &) const)
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(public: __cdecl `class llvm::Expected<class llvm::SmallVector<class llvm::StringRef, 3>> __cdecl `anonymous namespace'::linkAndWrapDeviceFiles(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::ArrayRef<class llvm::SmallVector<class llvm::object::OffloadFile, 3>>, class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::opt::InputArgList const &, char **, int, bool)'::`1'::<lambda_6>::operator()<class llvm::SmallVector<class llvm::object::OffloadFile, 3> const>(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::SmallVector<class llvm::object::OffloadFile, 3> const &) const)
>>> referenced 6 more times

lld-link: error: undefined symbol: public: class llvm::opt::Arg * __cdecl llvm::opt::DerivedArgList::MakeJoinedArg(class llvm::opt::Arg const *, class llvm::opt::Option, class llvm::StringRef) const
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(public: __cdecl `class llvm::Expected<class llvm::SmallVector<class llvm::StringRef, 3>> __cdecl `anonymous namespace'::linkAndWrapDeviceFiles(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::ArrayRef<class llvm::SmallVector<class llvm::object::OffloadFile, 3>>, class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::opt::InputArgList const &, char **, int, bool)'::`1'::<lambda_6>::operator()<class llvm::SmallVector<class llvm::object::OffloadFile, 3> const>(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::SmallVector<class llvm::object::OffloadFile, 3> const &) const)
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(public: __cdecl `class llvm::Expected<class llvm::SmallVector<class llvm::StringRef, 3>> __cdecl `anonymous namespace'::linkAndWrapDeviceFiles(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::ArrayRef<class llvm::SmallVector<class llvm::object::OffloadFile, 3>>, class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::opt::InputArgList const &, char **, int, bool)'::`1'::<lambda_6>::operator()<class llvm::SmallVector<class llvm::object::OffloadFile, 3> const>(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::SmallVector<class llvm::object::OffloadFile, 3> const &) const)
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(public: __cdecl `class llvm::Expected<class llvm::SmallVector<class llvm::StringRef, 3>> __cdecl `anonymous namespace'::linkAndWrapDeviceFiles(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::ArrayRef<class llvm::SmallVector<class llvm::object::OffloadFile, 3>>, class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::opt::InputArgList const &, char **, int, bool)'::`1'::<lambda_6>::operator()<class llvm::SmallVector<class llvm::object::OffloadFile, 3> const>(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::SmallVector<class llvm::object::OffloadFile, 3> const &) const)
>>> referenced 1 more times

lld-link: error: undefined symbol: public: class llvm::opt::Arg * __cdecl llvm::opt::DerivedArgList::MakeFlagArg(class llvm::opt::Arg const *, class llvm::opt::Option) const
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(public: __cdecl `class llvm::Expected<class llvm::SmallVector<class llvm::StringRef, 3>> __cdecl `anonymous namespace'::linkAndWrapDeviceFiles(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::ArrayRef<class llvm::SmallVector<class llvm::object::OffloadFile, 3>>, class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::opt::InputArgList const &, char **, int, bool)'::`1'::<lambda_6>::operator()<class llvm::SmallVector<class llvm::object::OffloadFile, 3> const>(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::SmallVector<class llvm::object::OffloadFile, 3> const &) const)

lld-link: error: undefined symbol: public: __cdecl llvm::opt::Arg::~Arg(void)
>>> referenced by tools\clang\tools\clang-linker-wrapper\CMakeFiles\clang-linker-wrapper.dir\ClangLinkerWrapper.cpp.obj:(public: __cdecl `class llvm::Expected<class llvm::SmallVector<class llvm::StringRef, 3>> __cdecl `anonymous namespace'::linkAndWrapDeviceFiles(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::ArrayRef<class llvm::SmallVector<class llvm::object::OffloadFile, 3>>, class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::opt::InputArgList const &, char **, int, bool)'::`1'::<lambda_6>::operator()<class llvm::SmallVector<class llvm::object::OffloadFile, 3> const>(class Expected<class llvm::SmallVector<class llvm::StringRef, 3>>::SmallVector<class llvm::object::OffloadFile, 3> const &) const)
```
</details>

If these failures are unrelated to your changes (for example tests are broken or flaky at HEAD), please open an issue at https://github.com/llvm/llvm-project/issues and add the `infrastructure` label.

https://github.com/llvm/llvm-project/pull/218296


More information about the llvm-commits mailing list