Clean up F32x4DemoteF64x2Zero op in compiler llvm

This commit is contained in:
Mark McCaskey
2021-05-13 08:20:00 -07:00
parent f8b67c743a
commit 37be884403

View File

@ -6964,9 +6964,20 @@ impl<'ctx, 'a> LLVMFunctionCodeGenerator<'ctx, 'a> {
Operator::F32x4DemoteF64x2Zero => {
let (v, i) = self.state.pop1_extra()?;
let (v, _) = self.v128_into_f64x2(v, i);
let res = self
.builder
.build_float_trunc(v, self.intrinsics.f32x4_ty, "");
let f32x2_ty = self.intrinsics.f32_ty.vec_type(2);
let res = self.builder.build_float_trunc(v, f32x2_ty, "");
let zeros = f32x2_ty.const_zero();
let res = self.builder.build_shuffle_vector(
res,
zeros,
VectorType::const_vector(&[
self.intrinsics.i32_consts[0],
self.intrinsics.i32_consts[1],
self.intrinsics.i32_consts[2],
self.intrinsics.i32_consts[3],
]),
"",
);
let res = self.builder.build_bitcast(res, self.intrinsics.i128_ty, "");
self.state.push1_extra(res, ExtraInfo::pending_f32_nan());
}