Skip to content

Commit 993b847

Browse files
authored
Disable SIMD intrinsics (rust-lang#1143)
* Disable SIMD intrinsics * Disable positive SIMD tests
1 parent 11ff580 commit 993b847

File tree

5 files changed

+35
-27
lines changed

5 files changed

+35
-27
lines changed

kani-compiler/src/codegen_cprover_gotoc/codegen/intrinsic.rs

Lines changed: 35 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ impl<'tcx> GotocCtx<'tcx> {
210210
// Intrinsics which encode a SIMD arithmetic operation with overflow check.
211211
// We expand the overflow check because CBMC overflow operations don't accept array as
212212
// argument.
213-
macro_rules! codegen_simd_with_overflow_check {
213+
macro_rules! _codegen_simd_with_overflow_check {
214214
($op:ident, $overflow:ident) => {{
215215
let a = fargs.remove(0);
216216
let b = fargs.remove(0);
@@ -352,8 +352,13 @@ impl<'tcx> GotocCtx<'tcx> {
352352
}
353353

354354
if let Some(stripped) = intrinsic.strip_prefix("simd_shuffle") {
355-
let n: u64 = stripped.parse().unwrap();
356-
return self.codegen_intrinsic_simd_shuffle(fargs, p, cbmc_ret_ty, n);
355+
let _n: u64 = stripped.parse().unwrap();
356+
return unstable_codegen!(self.codegen_intrinsic_simd_shuffle(
357+
fargs,
358+
p,
359+
cbmc_ret_ty,
360+
n
361+
));
357362
}
358363

359364
match intrinsic {
@@ -543,36 +548,40 @@ impl<'tcx> GotocCtx<'tcx> {
543548
"saturating_sub" => codegen_intrinsic_binop_with_mm!(saturating_sub),
544549
"sinf32" => codegen_simple_intrinsic!(Sinf),
545550
"sinf64" => codegen_simple_intrinsic!(Sin),
546-
"simd_add" => codegen_simd_with_overflow_check!(plus, add_overflow_p),
547-
"simd_and" => codegen_intrinsic_binop!(bitand),
548-
"simd_div" => codegen_intrinsic_binop!(div),
549-
"simd_eq" => codegen_intrinsic_binop!(eq),
551+
"simd_add" => {
552+
unstable_codegen!(codegen_simd_with_overflow_check!(plus, add_overflow_p))
553+
}
554+
"simd_and" => unstable_codegen!(codegen_intrinsic_binop!(bitand)),
555+
"simd_div" => unstable_codegen!(codegen_intrinsic_binop!(div)),
556+
"simd_eq" => unstable_codegen!(codegen_intrinsic_binop!(eq)),
550557
"simd_extract" => {
551-
let vec = fargs.remove(0);
552-
let index = fargs.remove(0);
553-
self.codegen_expr_to_place(p, vec.index_array(index))
558+
let _vec = fargs.remove(0);
559+
let _index = fargs.remove(0);
560+
unstable_codegen!(self.codegen_expr_to_place(p, vec.index_array(index)))
561+
}
562+
"simd_ge" => unstable_codegen!(codegen_intrinsic_binop!(ge)),
563+
"simd_gt" => unstable_codegen!(codegen_intrinsic_binop!(gt)),
564+
"simd_insert" => {
565+
unstable_codegen!(self.codegen_intrinsic_simd_insert(fargs, p, cbmc_ret_ty, loc))
554566
}
555-
"simd_ge" => codegen_intrinsic_binop!(ge),
556-
"simd_gt" => codegen_intrinsic_binop!(gt),
557-
"simd_insert" => self.codegen_intrinsic_simd_insert(fargs, p, cbmc_ret_ty, loc),
558-
"simd_le" => codegen_intrinsic_binop!(le),
559-
"simd_lt" => codegen_intrinsic_binop!(lt),
560-
"simd_mul" => codegen_simd_with_overflow_check!(mul, mul_overflow_p),
561-
"simd_ne" => codegen_intrinsic_binop!(neq),
562-
"simd_or" => codegen_intrinsic_binop!(bitor),
563-
"simd_rem" => codegen_intrinsic_binop!(rem),
564-
"simd_shl" => codegen_intrinsic_binop!(shl),
567+
"simd_le" => unstable_codegen!(codegen_intrinsic_binop!(le)),
568+
"simd_lt" => unstable_codegen!(codegen_intrinsic_binop!(lt)),
569+
"simd_mul" => unstable_codegen!(codegen_simd_with_overflow_check!(mul, mul_overflow_p)),
570+
"simd_ne" => unstable_codegen!(codegen_intrinsic_binop!(neq)),
571+
"simd_or" => unstable_codegen!(codegen_intrinsic_binop!(bitor)),
572+
"simd_rem" => unstable_codegen!(codegen_intrinsic_binop!(rem)),
573+
"simd_shl" => unstable_codegen!(codegen_intrinsic_binop!(shl)),
565574
"simd_shr" => {
566575
if fargs[0].typ().base_type().unwrap().is_signed(self.symbol_table.machine_model())
567576
{
568-
codegen_intrinsic_binop!(ashr)
577+
unstable_codegen!(codegen_intrinsic_binop!(ashr))
569578
} else {
570-
codegen_intrinsic_binop!(lshr)
579+
unstable_codegen!(codegen_intrinsic_binop!(lshr))
571580
}
572581
}
573582
// "simd_shuffle#" => handled in an `if` preceding this match
574-
"simd_sub" => codegen_simd_with_overflow_check!(sub, sub_overflow_p),
575-
"simd_xor" => codegen_intrinsic_binop!(bitxor),
583+
"simd_sub" => unstable_codegen!(codegen_simd_with_overflow_check!(sub, sub_overflow_p)),
584+
"simd_xor" => unstable_codegen!(codegen_intrinsic_binop!(bitxor)),
576585
"size_of" => codegen_intrinsic_const!(),
577586
"size_of_val" => codegen_size_align!(size),
578587
"sqrtf32" => unstable_codegen!(codegen_simple_intrinsic!(Sqrtf)),
@@ -1105,7 +1114,7 @@ impl<'tcx> GotocCtx<'tcx> {
11051114
///
11061115
/// CBMC does not currently seem to implement intrinsics like insert e.g.:
11071116
/// `**** WARNING: no body for function __builtin_ia32_vec_set_v4si`
1108-
pub fn codegen_intrinsic_simd_insert(
1117+
pub fn _codegen_intrinsic_simd_insert(
11091118
&mut self,
11101119
mut fargs: Vec<Expr>,
11111120
p: &Place<'tcx>,
@@ -1138,7 +1147,7 @@ impl<'tcx> GotocCtx<'tcx> {
11381147
/// We can't use shuffle_vector_exprt because it's not understood by the CBMC backend,
11391148
/// it's immediately lowered by the C frontend.
11401149
/// Issue: https://github.com/diffblue/cbmc/issues/6297
1141-
pub fn codegen_intrinsic_simd_shuffle(
1150+
pub fn _codegen_intrinsic_simd_shuffle(
11421151
&mut self,
11431152
mut fargs: Vec<Expr>,
11441153
p: &Place<'tcx>,

tests/kani/SIMD/Compare/main.rs renamed to tests/kani/SIMD/Compare/main_fixme.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
// Copyright Kani Contributors
22
// SPDX-License-Identifier: Apache-2.0 OR MIT
3-
// kani-verify-fail
43

54
#![feature(repr_simd, platform_intrinsics)]
65

0 commit comments

Comments
 (0)