mirror of
https://github.com/fluencelabs/wasmer
synced 2024-12-13 06:15:33 +00:00
Fix inkwell assertion due to treating vector as float. Fix llvm backend fatal error due to missing support for fminimum/fmaximum.
This commit is contained in:
parent
3e7545a278
commit
bdb1c4c44e
@ -2129,7 +2129,7 @@ impl FunctionCodeGenerator<CodegenError> for LLVMFunctionCodeGenerator {
|
|||||||
let v2 = builder.build_bitcast(v2, intrinsics.f32x4_ty, "");
|
let v2 = builder.build_bitcast(v2, intrinsics.f32x4_ty, "");
|
||||||
let v1 = canonicalize_nans(builder, intrinsics, v1);
|
let v1 = canonicalize_nans(builder, intrinsics, v1);
|
||||||
let v2 = canonicalize_nans(builder, intrinsics, v2);
|
let v2 = canonicalize_nans(builder, intrinsics, v2);
|
||||||
let (v1, v2) = (v1.into_float_value(), v2.into_float_value());
|
let (v1, v2) = (v1.into_vector_value(), v2.into_vector_value());
|
||||||
let res = builder.build_float_add(v1, v2, &state.var_name());
|
let res = builder.build_float_add(v1, v2, &state.var_name());
|
||||||
let res = builder.build_bitcast(res, intrinsics.i128_ty, "");
|
let res = builder.build_bitcast(res, intrinsics.i128_ty, "");
|
||||||
state.push1(res);
|
state.push1(res);
|
||||||
@ -2140,7 +2140,7 @@ impl FunctionCodeGenerator<CodegenError> for LLVMFunctionCodeGenerator {
|
|||||||
let v2 = builder.build_bitcast(v2, intrinsics.f64x2_ty, "");
|
let v2 = builder.build_bitcast(v2, intrinsics.f64x2_ty, "");
|
||||||
let v1 = canonicalize_nans(builder, intrinsics, v1);
|
let v1 = canonicalize_nans(builder, intrinsics, v1);
|
||||||
let v2 = canonicalize_nans(builder, intrinsics, v2);
|
let v2 = canonicalize_nans(builder, intrinsics, v2);
|
||||||
let (v1, v2) = (v1.into_float_value(), v2.into_float_value());
|
let (v1, v2) = (v1.into_vector_value(), v2.into_vector_value());
|
||||||
let res = builder.build_float_add(v1, v2, &state.var_name());
|
let res = builder.build_float_add(v1, v2, &state.var_name());
|
||||||
let res = builder.build_bitcast(res, intrinsics.i128_ty, "");
|
let res = builder.build_bitcast(res, intrinsics.i128_ty, "");
|
||||||
state.push1(res);
|
state.push1(res);
|
||||||
@ -2159,7 +2159,7 @@ impl FunctionCodeGenerator<CodegenError> for LLVMFunctionCodeGenerator {
|
|||||||
let v2 = builder.build_bitcast(v2, intrinsics.f32x4_ty, "");
|
let v2 = builder.build_bitcast(v2, intrinsics.f32x4_ty, "");
|
||||||
let v1 = canonicalize_nans(builder, intrinsics, v1);
|
let v1 = canonicalize_nans(builder, intrinsics, v1);
|
||||||
let v2 = canonicalize_nans(builder, intrinsics, v2);
|
let v2 = canonicalize_nans(builder, intrinsics, v2);
|
||||||
let (v1, v2) = (v1.into_float_value(), v2.into_float_value());
|
let (v1, v2) = (v1.into_vector_value(), v2.into_vector_value());
|
||||||
let res = builder.build_float_sub(v1, v2, &state.var_name());
|
let res = builder.build_float_sub(v1, v2, &state.var_name());
|
||||||
let res = builder.build_bitcast(res, intrinsics.i128_ty, "");
|
let res = builder.build_bitcast(res, intrinsics.i128_ty, "");
|
||||||
state.push1(res);
|
state.push1(res);
|
||||||
@ -2170,7 +2170,7 @@ impl FunctionCodeGenerator<CodegenError> for LLVMFunctionCodeGenerator {
|
|||||||
let v2 = builder.build_bitcast(v2, intrinsics.f64x2_ty, "");
|
let v2 = builder.build_bitcast(v2, intrinsics.f64x2_ty, "");
|
||||||
let v1 = canonicalize_nans(builder, intrinsics, v1);
|
let v1 = canonicalize_nans(builder, intrinsics, v1);
|
||||||
let v2 = canonicalize_nans(builder, intrinsics, v2);
|
let v2 = canonicalize_nans(builder, intrinsics, v2);
|
||||||
let (v1, v2) = (v1.into_float_value(), v2.into_float_value());
|
let (v1, v2) = (v1.into_vector_value(), v2.into_vector_value());
|
||||||
let res = builder.build_float_sub(v1, v2, &state.var_name());
|
let res = builder.build_float_sub(v1, v2, &state.var_name());
|
||||||
let res = builder.build_bitcast(res, intrinsics.i128_ty, "");
|
let res = builder.build_bitcast(res, intrinsics.i128_ty, "");
|
||||||
state.push1(res);
|
state.push1(res);
|
||||||
@ -2219,7 +2219,7 @@ impl FunctionCodeGenerator<CodegenError> for LLVMFunctionCodeGenerator {
|
|||||||
let v2 = builder.build_bitcast(v2, intrinsics.f32x4_ty, "");
|
let v2 = builder.build_bitcast(v2, intrinsics.f32x4_ty, "");
|
||||||
let v1 = canonicalize_nans(builder, intrinsics, v1);
|
let v1 = canonicalize_nans(builder, intrinsics, v1);
|
||||||
let v2 = canonicalize_nans(builder, intrinsics, v2);
|
let v2 = canonicalize_nans(builder, intrinsics, v2);
|
||||||
let (v1, v2) = (v1.into_float_value(), v2.into_float_value());
|
let (v1, v2) = (v1.into_vector_value(), v2.into_vector_value());
|
||||||
let res = builder.build_float_div(v1, v2, &state.var_name());
|
let res = builder.build_float_div(v1, v2, &state.var_name());
|
||||||
let res = builder.build_bitcast(res, intrinsics.i128_ty, "");
|
let res = builder.build_bitcast(res, intrinsics.i128_ty, "");
|
||||||
state.push1(res);
|
state.push1(res);
|
||||||
@ -2230,7 +2230,7 @@ impl FunctionCodeGenerator<CodegenError> for LLVMFunctionCodeGenerator {
|
|||||||
let v2 = builder.build_bitcast(v2, intrinsics.f64x2_ty, "");
|
let v2 = builder.build_bitcast(v2, intrinsics.f64x2_ty, "");
|
||||||
let v1 = canonicalize_nans(builder, intrinsics, v1);
|
let v1 = canonicalize_nans(builder, intrinsics, v1);
|
||||||
let v2 = canonicalize_nans(builder, intrinsics, v2);
|
let v2 = canonicalize_nans(builder, intrinsics, v2);
|
||||||
let (v1, v2) = (v1.into_float_value(), v2.into_float_value());
|
let (v1, v2) = (v1.into_vector_value(), v2.into_vector_value());
|
||||||
let res = builder.build_float_div(v1, v2, &state.var_name());
|
let res = builder.build_float_div(v1, v2, &state.var_name());
|
||||||
let res = builder.build_bitcast(res, intrinsics.i128_ty, "");
|
let res = builder.build_bitcast(res, intrinsics.i128_ty, "");
|
||||||
state.push1(res);
|
state.push1(res);
|
||||||
|
@ -328,12 +328,12 @@ impl Intrinsics {
|
|||||||
minimum_f32: module.add_function("llvm.minnum.f32", ret_f32_take_f32_f32, None),
|
minimum_f32: module.add_function("llvm.minnum.f32", ret_f32_take_f32_f32, None),
|
||||||
minimum_f64: module.add_function("llvm.minnum.f64", ret_f64_take_f64_f64, None),
|
minimum_f64: module.add_function("llvm.minnum.f64", ret_f64_take_f64_f64, None),
|
||||||
minimum_f32x4: module.add_function(
|
minimum_f32x4: module.add_function(
|
||||||
"llvm.minimum.v4f32",
|
"llvm.minnum.v4f32",
|
||||||
ret_f32x4_take_f32x4_f32x4,
|
ret_f32x4_take_f32x4_f32x4,
|
||||||
None,
|
None,
|
||||||
),
|
),
|
||||||
minimum_f64x2: module.add_function(
|
minimum_f64x2: module.add_function(
|
||||||
"llvm.minimum.v2f64",
|
"llvm.minnum.v2f64",
|
||||||
ret_f64x2_take_f64x2_f64x2,
|
ret_f64x2_take_f64x2_f64x2,
|
||||||
None,
|
None,
|
||||||
),
|
),
|
||||||
@ -341,12 +341,12 @@ impl Intrinsics {
|
|||||||
maximum_f32: module.add_function("llvm.maxnum.f32", ret_f32_take_f32_f32, None),
|
maximum_f32: module.add_function("llvm.maxnum.f32", ret_f32_take_f32_f32, None),
|
||||||
maximum_f64: module.add_function("llvm.maxnum.f64", ret_f64_take_f64_f64, None),
|
maximum_f64: module.add_function("llvm.maxnum.f64", ret_f64_take_f64_f64, None),
|
||||||
maximum_f32x4: module.add_function(
|
maximum_f32x4: module.add_function(
|
||||||
"llvm.maximum.v4f32",
|
"llvm.maxnum.v4f32",
|
||||||
ret_f32x4_take_f32x4_f32x4,
|
ret_f32x4_take_f32x4_f32x4,
|
||||||
None,
|
None,
|
||||||
),
|
),
|
||||||
maximum_f64x2: module.add_function(
|
maximum_f64x2: module.add_function(
|
||||||
"llvm.maximum.v2f64",
|
"llvm.maxnum.v2f64",
|
||||||
ret_f64x2_take_f64x2_f64x2,
|
ret_f64x2_take_f64x2_f64x2,
|
||||||
None,
|
None,
|
||||||
),
|
),
|
||||||
|
Loading…
Reference in New Issue
Block a user