parent
1c724ee6d0
commit
dffa6acf73
@ -240,10 +240,9 @@ pub(crate) fn codegen_intrinsic_call<'tcx>(
|
|||||||
substs,
|
substs,
|
||||||
args,
|
args,
|
||||||
destination,
|
destination,
|
||||||
|
target,
|
||||||
source_info.span,
|
source_info.span,
|
||||||
);
|
);
|
||||||
let ret_block = fx.get_block(target);
|
|
||||||
fx.bcx.ins().jump(ret_block, &[]);
|
|
||||||
} else if codegen_float_intrinsic_call(fx, intrinsic, args, destination) {
|
} else if codegen_float_intrinsic_call(fx, intrinsic, args, destination) {
|
||||||
let ret_block = fx.get_block(target);
|
let ret_block = fx.get_block(target);
|
||||||
fx.bcx.ins().jump(ret_block, &[]);
|
fx.bcx.ins().jump(ret_block, &[]);
|
||||||
|
@ -24,6 +24,7 @@ pub(super) fn codegen_simd_intrinsic_call<'tcx>(
|
|||||||
_substs: SubstsRef<'tcx>,
|
_substs: SubstsRef<'tcx>,
|
||||||
args: &[mir::Operand<'tcx>],
|
args: &[mir::Operand<'tcx>],
|
||||||
ret: CPlace<'tcx>,
|
ret: CPlace<'tcx>,
|
||||||
|
target: BasicBlock,
|
||||||
span: Span,
|
span: Span,
|
||||||
) {
|
) {
|
||||||
match intrinsic {
|
match intrinsic {
|
||||||
@ -277,16 +278,15 @@ pub(super) fn codegen_simd_intrinsic_call<'tcx>(
|
|||||||
} else {
|
} else {
|
||||||
fx.tcx.sess.span_warn(span, "Index argument for `simd_extract` is not a constant");
|
fx.tcx.sess.span_warn(span, "Index argument for `simd_extract` is not a constant");
|
||||||
let trap_block = fx.bcx.create_block();
|
let trap_block = fx.bcx.create_block();
|
||||||
let dummy_block = fx.bcx.create_block();
|
|
||||||
let true_ = fx.bcx.ins().iconst(types::I8, 1);
|
let true_ = fx.bcx.ins().iconst(types::I8, 1);
|
||||||
fx.bcx.ins().brnz(true_, trap_block, &[]);
|
fx.bcx.ins().brnz(true_, trap_block, &[]);
|
||||||
fx.bcx.ins().jump(dummy_block, &[]);
|
let ret_block = fx.get_block(target);
|
||||||
|
fx.bcx.ins().jump(ret_block, &[]);
|
||||||
fx.bcx.switch_to_block(trap_block);
|
fx.bcx.switch_to_block(trap_block);
|
||||||
crate::trap::trap_unimplemented(
|
crate::trap::trap_unimplemented(
|
||||||
fx,
|
fx,
|
||||||
"Index argument for `simd_extract` is not a constant",
|
"Index argument for `simd_extract` is not a constant",
|
||||||
);
|
);
|
||||||
fx.bcx.switch_to_block(dummy_block);
|
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -876,7 +876,11 @@ pub(super) fn codegen_simd_intrinsic_call<'tcx>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
_ => {
|
_ => {
|
||||||
fx.tcx.sess.span_fatal(span, &format!("Unknown SIMD intrinsic {}", intrinsic));
|
fx.tcx.sess.span_err(span, &format!("Unknown SIMD intrinsic {}", intrinsic));
|
||||||
|
// Prevent verifier error
|
||||||
|
fx.bcx.ins().trap(TrapCode::UnreachableCodeReached);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
let ret_block = fx.get_block(target);
|
||||||
|
fx.bcx.ins().jump(ret_block, &[]);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user