Re: Configure checks and optimizations/crc32 tests

From: Andres Freund <andres(at)anarazel(dot)de>
To: pgsql-hackers(at)postgresql(dot)org, Heikki Linnakangas <hlinnaka(at)iki(dot)fi>, Abhijit Menon-Sen <ams(at)2ndQuadrant(dot)com>
Subject: Re: Configure checks and optimizations/crc32 tests
Date: 2015-08-14 16:42:22
Message-ID: 20150814164222.GJ4955@awork2.anarazel.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2015-08-14 16:42:47 Management of simple_eval_estate for plpgsql DO blocks
Previous Message jacques klein 2015-08-14 16:38:36 How to compile, link and use a C++ extension