[Bug c++/96480] New: missed optimisation: unnecessary compare in standard algorithms
kurkindmit at gmail dot com
gcc-bugzilla@gcc.gnu.org
Wed Aug 5 08:53:43 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96480
Bug ID: 96480
Summary: missed optimisation: unnecessary compare in standard
algorithms
Product: gcc
Version: 10.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: kurkindmit at gmail dot com
Target Milestone: ---
Consider the C++ code:
#include <algorithm>
#include <array>
enum ENUM { A, B, C, D, E, F, G, };
const std::array<ENUM, 4> foo{A, B, C, D};
bool is_foo(ENUM e) {
return std::any_of(foo.begin(), foo.end(),
[e] (auto ee) { return e == ee; });
}
GCC 7.4 optimizes if_foo to a single compare operation e <= 3,
but newer GCC versions do two comare operations e <= 2 || e == 3.
see https://godbolt.org/z/5a6aPa
More information about the Gcc-bugs
mailing list