| Issue |
169991
|
| Summary |
[X86][Clang] VectorExprEvaluator::VisitCallExpr / InterpretBuiltin - allow SSE/AVX FP MAX/MIN intrinsics to be used in constexpr
|
| Labels |
good first issue,
backend:X86,
clang:frontend,
clang:headers,
constexpr,
clang:bytecode
|
| Assignees |
|
| Reporter |
RKSimon
|
There are a lot of x86-specific behaviours to handle here, so this initial patch should ONLY handle normal FP values (DENORMAL/INF/NAN/etc. should fail).
However the +/-0.0 special case must be handled straight away - if both operands are zero (any sign) then the second operand 'b' is returned.
We should probably introduce a interp__builtin_elementwise_fp_binop / EvaluateFpBinOpExpr callback handler mechanism for these to InterpretBuiltin / VisitCallExpr respectively.
```
__m128 _mm_max_ss (__m128 a, __m128 b)
__m128 _mm_mask_max_ss (__m128 src, __mmask8 k, __m128 a, __m128 b)
__m128 _mm_maskz_max_ss (__mmask8 k, __m128 a, __m128 b)
__m128 _mm_min_ss (__m128 a, __m128 b)
__m128 _mm_mask_min_ss (__m128 src, __mmask8 k, __m128 a, __m128 b)
__m128 _mm_maskz_min_ss (__mmask8 k, __m128 a, __m128 b)
__m128d _mm_max_sd (__m128d a, __m128d b)
__m128d _mm_mask_max_sd (__m128d src, __mmask8 k, __m128d a, __m128d b)
__m128d _mm_maskz_max_sd (__mmask8 k, __m128d a, __m128d b)
__m128d _mm_min_sd (__m128d a, __m128d b)
__m128d _mm_mask_min_sd (__m128d src, __mmask8 k, __m128d a, __m128d b)
__m128d _mm_maskz_min_sd (__mmask8 k, __m128d a, __m128d b)
__m128h _mm_max_sh (__m128h a, __m128h b)
__m128h _mm_mask_max_sh (__m128h src, __mmask8 k, __m128h a, __m128h b)
__m128h _mm_maskz_max_sh (__mmask8 k, __m128h a, __m128h b)
__m128h _mm_min_sh (__m128h a, __m128h b)
__m128h _mm_mask_min_sh (__m128h src, __mmask8 k, __m128h a, __m128h b)
__m128h _mm_maskz_min_sh (__mmask8 k, __m128h a, __m128h b)
__m128 _mm_max_ps (__m128 a, __m128 b)
__m128 _mm_mask_max_ps (__m128 src, __mmask8 k, __m128 a, __m128 b)
__m128 _mm_maskz_max_ps (__mmask8 k, __m128 a, __m128 b)
__m128 _mm_min_ps (__m128 a, __m128 b)
__m128 _mm_mask_min_ps (__m128 src, __mmask8 k, __m128 a, __m128 b)
__m128 _mm_maskz_min_ps (__mmask8 k, __m128 a, __m128 b)
__m256 _mm256_max_ps (__m256 a, __m256 b)
__m256 _mm256_mask_max_ps (__m256 src, __mmask8 k, __m256 a, __m256 b)
__m256 _mm256_maskz_max_ps (__mmask8 k, __m256 a, __m256 b)
__m256 _mm256_min_ps (__m256 a, __m256 b)
__m256 _mm256_mask_min_ps (__m256 src, __mmask8 k, __m256 a, __m256 b)
__m256 _mm256_maskz_min_ps (__mmask8 k, __m256 a, __m256 b)
__m512 _mm512_max_ps (__m512 a, __m512 b)
__m512 _mm512_mask_max_ps (__m512 src, __mmask16 k, __m512 a, __m512 b)
__m512 _mm512_maskz_max_ps (__mmask16 k, __m512 a, __m512 b)
__m512 _mm512_min_ps (__m512 a, __m512 b)
__m512 _mm512_mask_min_ps (__m512 src, __mmask16 k, __m512 a, __m512 b)
__m512 _mm512_maskz_min_ps (__mmask16 k, __m512 a, __m512 b)
__m128 _mm_max_pd (__m128 a, __m128 b)
__m128 _mm_mask_max_pd (__m128 src, __mmask8 k, __m128 a, __m128 b)
__m128 _mm_maskz_max_pd (__mmask8 k, __m128 a, __m128 b)
__m128 _mm_min_pd (__m128 a, __m128 b)
__m128 _mm_mask_min_pd (__m128 src, __mmask8 k, __m128 a, __m128 b)
__m128 _mm_maskz_min_pd (__mmask8 k, __m128 a, __m128 b)
__m256 _mm256_max_pd (__m256 a, __m256 b)
__m256 _mm256_mask_max_pd (__m256 src, __mmask8 k, __m256 a, __m256 b)
__m256 _mm256_maskz_max_pd (__mmask8 k, __m256 a, __m256 b)
__m256 _mm256_min_pd (__m256 a, __m256 b)
__m256 _mm256_mask_min_pd (__m256 src, __mmask8 k, __m256 a, __m256 b)
__m256 _mm256_maskz_min_pd (__mmask8 k, __m256 a, __m256 b)
__m512 _mm512_max_pd (__m512 a, __m512 b)
__m512 _mm512_mask_max_pd (__m512 src, __mmask16 k, __m512 a, __m512 b)
__m512 _mm512_maskz_max_pd (__mmask16 k, __m512 a, __m512 b)
__m512 _mm512_min_pd (__m512 a, __m512 b)
__m512 _mm512_mask_min_pd (__m512 src, __mmask16 k, __m512 a, __m512 b)
__m512 _mm512_maskz_min_pd (__mmask16 k, __m512 a, __m512 b)
__m128 _mm_max_ph (__m128 a, __m128 b)
__m128 _mm_mask_max_ph (__m128 src, __mmask8 k, __m128 a, __m128 b)
__m128 _mm_maskz_max_ph (__mmask8 k, __m128 a, __m128 b)
__m128 _mm_min_ph (__m128 a, __m128 b)
__m128 _mm_mask_min_ph (__m128 src, __mmask8 k, __m128 a, __m128 b)
__m128 _mm_maskz_min_ph (__mmask8 k, __m128 a, __m128 b)
__m256 _mm256_max_ph (__m256 a, __m256 b)
__m256 _mm256_mask_max_ph (__m256 src, __mmask8 k, __m256 a, __m256 b)
__m256 _mm256_maskz_max_ph (__mmask8 k, __m256 a, __m256 b)
__m256 _mm256_min_ph (__m256 a, __m256 b)
__m256 _mm256_mask_min_ph (__m256 src, __mmask8 k, __m256 a, __m256 b)
__m256 _mm256_maskz_min_ph (__mmask8 k, __m256 a, __m256 b)
__m512 _mm512_max_ph (__m512 a, __m512 b)
__m512 _mm512_mask_max_ph (__m512 src, __mmask16 k, __m512 a, __m512 b)
__m512 _mm512_maskz_max_ph (__mmask16 k, __m512 a, __m512 b)
__m512 _mm512_min_ph (__m512 a, __m512 b)
__m512 _mm512_mask_min_ph (__m512 src, __mmask16 k, __m512 a, __m512 b)
__m512 _mm512_maskz_min_ph (__mmask16 k, __m512 a, __m512 b)
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs