[X86] Ensure the _mm_test_all_ones macro does not reuse argument (PR60006)
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Wed, 25 Jan 2023 10:55:56 +0000 (10:55 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Wed, 25 Jan 2023 10:56:01 +0000 (10:56 +0000)
commitc9b28233599a753506687f2f8a4f96331cd5dbb2
tree6a9ceb3f26bd733c0242f52bd4620dbfb54ea82d
parent03aed959386a4dac4b5ce8c5d240096ce18aef33
[X86] Ensure the _mm_test_all_ones macro does not reuse argument (PR60006)

The macro _mm_test_all_ones(V) was defined as _mm_testc_si128((V), _mm_cmpeq_epi32((V), (V))) - which could cause side effects depending on the source of the V value.

The _mm_cmpeq_epi32((V), (V)) trick was just to materialize an all-ones value, which can be more safely generated with _mm_set1_epi32(-1) .

Fixes #60006

Differential Revision: https://reviews.llvm.org/D142477
clang/lib/Headers/smmintrin.h
clang/test/CodeGen/X86/sse41-builtins.c