forked from OSchip/llvm-project
[X86] Add range checking to the immediate arguments of many of the SSE/AVX builtins.
llvm-svn: 227674
This commit is contained in:
parent
9fd41316ad
commit
1601525f1c
|
@ -878,12 +878,18 @@ bool Sema::CheckX86BuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
|
|||
switch (BuiltinID) {
|
||||
default: return false;
|
||||
case X86::BI_mm_prefetch: i = 1; l = 0; u = 3; break;
|
||||
case X86::BI__builtin_ia32_cmpps:
|
||||
case X86::BI__builtin_ia32_cmpss:
|
||||
case X86::BI__builtin_ia32_cmppd:
|
||||
case X86::BI__builtin_ia32_cmpsd:
|
||||
case X86::BI__builtin_ia32_cmpps512_mask:
|
||||
case X86::BI__builtin_ia32_cmppd512_mask: i = 2; l = 0; u = 31; break;
|
||||
case X86::BI__builtin_ia32_vextractf128_pd256:
|
||||
case X86::BI__builtin_ia32_vextractf128_ps256:
|
||||
case X86::BI__builtin_ia32_vextractf128_si256:
|
||||
case X86::BI__builtin_ia32_extract128i256: i = 1, l = 0, u = 1; break;
|
||||
case X86::BI__builtin_ia32_vinsertf128_pd256:
|
||||
case X86::BI__builtin_ia32_vinsertf128_ps256:
|
||||
case X86::BI__builtin_ia32_vinsertf128_si256:
|
||||
case X86::BI__builtin_ia32_insert128i256:
|
||||
case X86::BI__builtin_ia32_blendpd: i = 2, l = 0; u = 1; break;
|
||||
case X86::BI__builtin_ia32_blendps:
|
||||
case X86::BI__builtin_ia32_blendpd256:
|
||||
case X86::BI__builtin_ia32_sha1rnds4: i = 2, l = 0; u = 3; break;
|
||||
case X86::BI__builtin_ia32_cmpb128_mask:
|
||||
case X86::BI__builtin_ia32_cmpw128_mask:
|
||||
case X86::BI__builtin_ia32_cmpd128_mask:
|
||||
|
@ -908,6 +914,20 @@ bool Sema::CheckX86BuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
|
|||
case X86::BI__builtin_ia32_ucmpw512_mask:
|
||||
case X86::BI__builtin_ia32_ucmpd512_mask:
|
||||
case X86::BI__builtin_ia32_ucmpq512_mask: i = 2; l = 0; u = 7; break;
|
||||
case X86::BI__builtin_ia32_roundps:
|
||||
case X86::BI__builtin_ia32_roundpd:
|
||||
case X86::BI__builtin_ia32_roundps256:
|
||||
case X86::BI__builtin_ia32_roundpd256: i = 1, l = 0; u = 15; break;
|
||||
case X86::BI__builtin_ia32_roundss:
|
||||
case X86::BI__builtin_ia32_roundsd: i = 2, l = 0; u = 15; break;
|
||||
case X86::BI__builtin_ia32_cmpps:
|
||||
case X86::BI__builtin_ia32_cmpss:
|
||||
case X86::BI__builtin_ia32_cmppd:
|
||||
case X86::BI__builtin_ia32_cmpsd:
|
||||
case X86::BI__builtin_ia32_cmpps256:
|
||||
case X86::BI__builtin_ia32_cmppd256:
|
||||
case X86::BI__builtin_ia32_cmpps512_mask:
|
||||
case X86::BI__builtin_ia32_cmppd512_mask: i = 2; l = 0; u = 31; break;
|
||||
}
|
||||
return SemaBuiltinConstantArgRange(TheCall, i, l, u);
|
||||
}
|
||||
|
|
|
@ -403,16 +403,16 @@ void f0() {
|
|||
tmp_V4f = __builtin_ia32_vpermilvarps(tmp_V4f, tmp_V4i);
|
||||
tmp_V4d = __builtin_ia32_vpermilvarpd256(tmp_V4d, tmp_V4LLi);
|
||||
tmp_V8f = __builtin_ia32_vpermilvarps256(tmp_V8f, tmp_V8i);
|
||||
tmp_V4d = __builtin_ia32_blendpd256(tmp_V4d, tmp_V4d, 0x7);
|
||||
tmp_V4d = __builtin_ia32_blendpd256(tmp_V4d, tmp_V4d, 0x1);
|
||||
tmp_V8f = __builtin_ia32_blendps256(tmp_V8f, tmp_V8f, 0x7);
|
||||
tmp_V4d = __builtin_ia32_blendvpd256(tmp_V4d, tmp_V4d, tmp_V4d);
|
||||
tmp_V8f = __builtin_ia32_blendvps256(tmp_V8f, tmp_V8f, tmp_V8f);
|
||||
tmp_V8f = __builtin_ia32_dpps256(tmp_V8f, tmp_V8f, 0x7);
|
||||
tmp_V4d = __builtin_ia32_cmppd256(tmp_V4d, tmp_V4d, 0);
|
||||
tmp_V8f = __builtin_ia32_cmpps256(tmp_V8f, tmp_V8f, 0);
|
||||
tmp_V2d = __builtin_ia32_vextractf128_pd256(tmp_V4d, 0x7);
|
||||
tmp_V4f = __builtin_ia32_vextractf128_ps256(tmp_V8f, 0x7);
|
||||
tmp_V4i = __builtin_ia32_vextractf128_si256(tmp_V8i, 0x7);
|
||||
tmp_V2d = __builtin_ia32_vextractf128_pd256(tmp_V4d, 0x1);
|
||||
tmp_V4f = __builtin_ia32_vextractf128_ps256(tmp_V8f, 0x1);
|
||||
tmp_V4i = __builtin_ia32_vextractf128_si256(tmp_V8i, 0x1);
|
||||
tmp_V4d = __builtin_ia32_cvtdq2pd256(tmp_V4i);
|
||||
tmp_V8f = __builtin_ia32_cvtdq2ps256(tmp_V8i);
|
||||
tmp_V4f = __builtin_ia32_cvtpd2ps256(tmp_V4d);
|
||||
|
@ -424,9 +424,9 @@ void f0() {
|
|||
tmp_V4d = __builtin_ia32_vperm2f128_pd256(tmp_V4d, tmp_V4d, 0x7);
|
||||
tmp_V8f = __builtin_ia32_vperm2f128_ps256(tmp_V8f, tmp_V8f, 0x7);
|
||||
tmp_V8i = __builtin_ia32_vperm2f128_si256(tmp_V8i, tmp_V8i, 0x7);
|
||||
tmp_V4d = __builtin_ia32_vinsertf128_pd256(tmp_V4d, tmp_V2d, 0x7);
|
||||
tmp_V8f = __builtin_ia32_vinsertf128_ps256(tmp_V8f, tmp_V4f, 0x7);
|
||||
tmp_V8i = __builtin_ia32_vinsertf128_si256(tmp_V8i, tmp_V4i, 0x7);
|
||||
tmp_V4d = __builtin_ia32_vinsertf128_pd256(tmp_V4d, tmp_V2d, 0x1);
|
||||
tmp_V8f = __builtin_ia32_vinsertf128_ps256(tmp_V8f, tmp_V4f, 0x1);
|
||||
tmp_V8i = __builtin_ia32_vinsertf128_si256(tmp_V8i, tmp_V4i, 0x1);
|
||||
tmp_V4d = __builtin_ia32_sqrtpd256(tmp_V4d);
|
||||
tmp_V8f = __builtin_ia32_sqrtps256(tmp_V8f);
|
||||
tmp_V8f = __builtin_ia32_rsqrtps256(tmp_V8f);
|
||||
|
@ -497,7 +497,7 @@ void f0() {
|
|||
tmp_V2f = __builtin_ia32_pswapdsf(tmp_V2f);
|
||||
tmp_V2i = __builtin_ia32_pswapdsi(tmp_V2i);
|
||||
|
||||
tmp_V4i = __builtin_ia32_sha1rnds4(tmp_V4i, tmp_V4i, imm_i);
|
||||
tmp_V4i = __builtin_ia32_sha1rnds4(tmp_V4i, tmp_V4i, imm_i_0_4);
|
||||
tmp_V4i = __builtin_ia32_sha1nexte(tmp_V4i, tmp_V4i);
|
||||
tmp_V4i = __builtin_ia32_sha1msg1(tmp_V4i, tmp_V4i);
|
||||
tmp_V4i = __builtin_ia32_sha1msg2(tmp_V4i, tmp_V4i);
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
__m128i test_sha1rnds4(__m128i a, __m128i b) {
|
||||
// CHECK: call <4 x i32> @llvm.x86.sha1rnds4
|
||||
return _mm_sha1rnds4_epu32(a, b, 8);
|
||||
return _mm_sha1rnds4_epu32(a, b, 3);
|
||||
}
|
||||
__m128i test_sha1nexte(__m128i a, __m128i b) {
|
||||
// CHECK: call <4 x i32> @llvm.x86.sha1nexte
|
||||
|
|
Loading…
Reference in New Issue