Re: Configure checks and optimizations/crc32 tests - Mailing list pgsql-hackers

From Andres Freund
Subject Re: Configure checks and optimizations/crc32 tests
Date
Msg-id 20150814164222.GJ4955@awork2.anarazel.de
Whole thread Raw
In response to Configure checks and optimizations/crc32 tests  (Andres Freund <andres@anarazel.de>)
List pgsql-hackers
Hi,

On 2015-08-14 11:20:39 +0200, Andres Freund wrote:
> 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...
> 
> 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.

Going over my vpaths I noticed another problem with the test. With gcc I
get slice-by-8 instead of the runtime variant:

checking for builtin __atomic int64 atomic operations... yes
checking for __get_cpuid... yes
checking for __cpuid... no
checking for _mm_crc32_u8 and _mm_crc32_u32 with CFLAGS=... no
checking for _mm_crc32_u8 and _mm_crc32_u32 with CFLAGS=-msse4.2... no
checking which CRC-32C implementation to use... slicing-by-8

That's because I get a warning
conftest.c:179:1: warning: old-style function definition [-Wold-style-definition]main ()^
and PGAC_SSE42_CRC32_INTRINSICS turns on ac_c_werror_flag. Now I can
work around this by , but I don't really see why that test needs to turn on
-Werror? Isn't the point of using a linker test that we'd get a proper
linker failure if the functions don't exist?

Greetings,

Andres Freund



pgsql-hackers by date:

Previous
From: Andres Freund
Date:
Subject: Re: Configure checks and optimizations/crc32 tests
Next
From: Tom Lane
Date:
Subject: Management of simple_eval_estate for plpgsql DO blocks