Looks like I was able to appease GCC by writing my own version of the ternary operator.
Replacing
float x = p ? t : f;
with the cruder
#pragma omp declare simd
static inline float ternary(bool p, const float t, const float f) {
return p * t + (!p) * f;
}