On 08/14/2015 12:20 PM, Andres Freund wrote:
> Hi,
>
> when building with optimizations clang-3.7, probably some older
> compilers as well, fail with a funny error:
>
> fatal error: error in backend: Cannot select: intrinsic %llvm.x86.sse42.crc32.64.64
>
> turns out that is because configure chose to use the crc32 instruction,
> without the according compiler -msse4.2 flag. Why you ask? Because the
> whole configure test is optimized away. Nothing depends on it's
> output...
Oh, interesting.
> We can easily fix the issue by adding
> /* return values dependent on crc, to prevent optimizations */
> return crc == 0;
> or so to the end of PGAC_SSE42_CRC32_INTRINSICS.
Yeah, seems like a simple fix.
> But we've played that whack-a-mole game in a bunch of configure tests
> now, and it seems likely that more are coming with compilers getting
> better. I'd not be surprised if some tests actually always succeed, we
> just don't notice it because it's only on new compilers that have the
> tested feature anyway...
Yeah, wouldn't be surprised if the other similar tests for all __sync_*
family of functions had the same problem.
> One way trying to fix this would be to explicitly disable optimizations
> during tests. I'm not sure that's a good idea, but it's one.
I think adding the "return" is better.
- Heikki