Skip to content

Commit 60a2689

Browse files
committed
remove simd_fpow and simd_fpowi
1 parent f04bbc6 commit 60a2689

File tree

8 files changed

+13
-280
lines changed

8 files changed

+13
-280
lines changed

compiler/rustc_codegen_cranelift/src/intrinsics/simd.rs

-58
Original file line numberDiff line numberDiff line change
@@ -460,64 +460,6 @@ pub(super) fn codegen_simd_intrinsic_call<'tcx>(
460460
});
461461
}
462462

463-
sym::simd_fpow => {
464-
intrinsic_args!(fx, args => (a, b); intrinsic);
465-
466-
if !a.layout().ty.is_simd() {
467-
report_simd_type_validation_error(fx, intrinsic, span, a.layout().ty);
468-
return;
469-
}
470-
471-
simd_pair_for_each_lane(fx, a, b, ret, &|fx, lane_ty, _ret_lane_ty, a_lane, b_lane| {
472-
match lane_ty.kind() {
473-
ty::Float(FloatTy::F32) => fx.lib_call(
474-
"powf",
475-
vec![AbiParam::new(types::F32), AbiParam::new(types::F32)],
476-
vec![AbiParam::new(types::F32)],
477-
&[a_lane, b_lane],
478-
)[0],
479-
ty::Float(FloatTy::F64) => fx.lib_call(
480-
"pow",
481-
vec![AbiParam::new(types::F64), AbiParam::new(types::F64)],
482-
vec![AbiParam::new(types::F64)],
483-
&[a_lane, b_lane],
484-
)[0],
485-
_ => unreachable!("{:?}", lane_ty),
486-
}
487-
});
488-
}
489-
490-
sym::simd_fpowi => {
491-
intrinsic_args!(fx, args => (a, exp); intrinsic);
492-
let exp = exp.load_scalar(fx);
493-
494-
if !a.layout().ty.is_simd() {
495-
report_simd_type_validation_error(fx, intrinsic, span, a.layout().ty);
496-
return;
497-
}
498-
499-
simd_for_each_lane(
500-
fx,
501-
a,
502-
ret,
503-
&|fx, lane_ty, _ret_lane_ty, lane| match lane_ty.kind() {
504-
ty::Float(FloatTy::F32) => fx.lib_call(
505-
"__powisf2", // compiler-builtins
506-
vec![AbiParam::new(types::F32), AbiParam::new(types::I32)],
507-
vec![AbiParam::new(types::F32)],
508-
&[lane, exp],
509-
)[0],
510-
ty::Float(FloatTy::F64) => fx.lib_call(
511-
"__powidf2", // compiler-builtins
512-
vec![AbiParam::new(types::F64), AbiParam::new(types::I32)],
513-
vec![AbiParam::new(types::F64)],
514-
&[lane, exp],
515-
)[0],
516-
_ => unreachable!("{:?}", lane_ty),
517-
},
518-
);
519-
}
520-
521463
sym::simd_fsin
522464
| sym::simd_fcos
523465
| sym::simd_fexp

compiler/rustc_codegen_gcc/src/intrinsic/simd.rs

+8-20
Original file line numberDiff line numberDiff line change
@@ -772,8 +772,6 @@ pub fn generic_simd_intrinsic<'a, 'gcc, 'tcx>(
772772
sym::simd_floor => "floor",
773773
sym::simd_fma => "fma",
774774
sym::simd_relaxed_fma => "fma", // FIXME: this should relax to non-fused multiply-add when necessary
775-
sym::simd_fpowi => "__builtin_powi",
776-
sym::simd_fpow => "pow",
777775
sym::simd_fsin => "sin",
778776
sym::simd_fsqrt => "sqrt",
779777
sym::simd_round => "round",
@@ -788,24 +786,16 @@ pub fn generic_simd_intrinsic<'a, 'gcc, 'tcx>(
788786
let mut vector_elements = vec![];
789787
for i in 0..in_len {
790788
let index = bx.context.new_rvalue_from_long(bx.ulong_type, i as i64);
791-
// we have to treat fpowi specially, since fpowi's second argument is always an i32
792789
let mut arguments = vec![];
793-
if name == sym::simd_fpowi {
794-
arguments = vec![
795-
bx.extract_element(args[0].immediate(), index).to_rvalue(),
796-
args[1].immediate(),
797-
];
798-
} else {
799-
for arg in args {
800-
let mut element = bx.extract_element(arg.immediate(), index).to_rvalue();
801-
// FIXME: it would probably be better to not have casts here and use the proper
802-
// instructions.
803-
if let Some(typ) = cast_type {
804-
element = bx.context.new_cast(None, element, typ);
805-
}
806-
arguments.push(element);
790+
for arg in args {
791+
let mut element = bx.extract_element(arg.immediate(), index).to_rvalue();
792+
// FIXME: it would probably be better to not have casts here and use the proper
793+
// instructions.
794+
if let Some(typ) = cast_type {
795+
element = bx.context.new_cast(None, element, typ);
807796
}
808-
};
797+
arguments.push(element);
798+
}
809799
let mut result = bx.context.new_call(None, function, &arguments);
810800
if cast_type.is_some() {
811801
result = bx.context.new_cast(None, result, elem_ty);
@@ -829,8 +819,6 @@ pub fn generic_simd_intrinsic<'a, 'gcc, 'tcx>(
829819
| sym::simd_floor
830820
| sym::simd_fma
831821
| sym::simd_relaxed_fma
832-
| sym::simd_fpow
833-
| sym::simd_fpowi
834822
| sym::simd_fsin
835823
| sym::simd_fsqrt
836824
| sym::simd_round

compiler/rustc_codegen_llvm/src/intrinsic.rs

-4
Original file line numberDiff line numberDiff line change
@@ -1587,8 +1587,6 @@ fn generic_simd_intrinsic<'ll, 'tcx>(
15871587
sym::simd_floor => ("floor", bx.type_func(&[vec_ty], vec_ty)),
15881588
sym::simd_fma => ("fma", bx.type_func(&[vec_ty, vec_ty, vec_ty], vec_ty)),
15891589
sym::simd_relaxed_fma => ("fmuladd", bx.type_func(&[vec_ty, vec_ty, vec_ty], vec_ty)),
1590-
sym::simd_fpowi => ("powi", bx.type_func(&[vec_ty, bx.type_i32()], vec_ty)),
1591-
sym::simd_fpow => ("pow", bx.type_func(&[vec_ty, vec_ty], vec_ty)),
15921590
sym::simd_fsin => ("sin", bx.type_func(&[vec_ty], vec_ty)),
15931591
sym::simd_fsqrt => ("sqrt", bx.type_func(&[vec_ty], vec_ty)),
15941592
sym::simd_round => ("round", bx.type_func(&[vec_ty], vec_ty)),
@@ -1621,8 +1619,6 @@ fn generic_simd_intrinsic<'ll, 'tcx>(
16211619
| sym::simd_flog
16221620
| sym::simd_floor
16231621
| sym::simd_fma
1624-
| sym::simd_fpow
1625-
| sym::simd_fpowi
16261622
| sym::simd_fsin
16271623
| sym::simd_fsqrt
16281624
| sym::simd_relaxed_fma

compiler/rustc_hir_analysis/src/check/intrinsic.rs

-2
Original file line numberDiff line numberDiff line change
@@ -651,7 +651,6 @@ pub fn check_intrinsic_type(
651651
| sym::simd_xor
652652
| sym::simd_fmin
653653
| sym::simd_fmax
654-
| sym::simd_fpow
655654
| sym::simd_saturating_add
656655
| sym::simd_saturating_sub => (1, 0, vec![param(0), param(0)], param(0)),
657656
sym::simd_arith_offset => (2, 0, vec![param(0), param(1)], param(0)),
@@ -674,7 +673,6 @@ pub fn check_intrinsic_type(
674673
| sym::simd_floor
675674
| sym::simd_round
676675
| sym::simd_trunc => (1, 0, vec![param(0)], param(0)),
677-
sym::simd_fpowi => (1, 0, vec![param(0), tcx.types.i32], param(0)),
678676
sym::simd_fma | sym::simd_relaxed_fma => {
679677
(1, 0, vec![param(0), param(0), param(0)], param(0))
680678
}

compiler/rustc_span/src/symbol.rs

-2
Original file line numberDiff line numberDiff line change
@@ -1886,8 +1886,6 @@ symbols! {
18861886
simd_fma,
18871887
simd_fmax,
18881888
simd_fmin,
1889-
simd_fpow,
1890-
simd_fpowi,
18911889
simd_fsin,
18921890
simd_fsqrt,
18931891
simd_gather,

tests/codegen/simd-intrinsic/simd-intrinsic-float-pow.rs

-87
This file was deleted.

tests/codegen/simd-intrinsic/simd-intrinsic-float-powi.rs

-87
This file was deleted.

tests/ui/simd/intrinsic/float-math-pass.rs

+5-20
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,6 @@ unsafe fn simd_flog10<T>(x: T) -> T;
4848
#[rustc_intrinsic]
4949
unsafe fn simd_flog2<T>(x: T) -> T;
5050

51-
#[rustc_intrinsic]
52-
unsafe fn simd_fpow<T>(x: T, y: T) -> T;
53-
54-
#[rustc_intrinsic]
55-
unsafe fn simd_fpowi<T>(x: T, y: i32) -> T;
56-
57-
5851
// rounding functions
5952
#[rustc_intrinsic]
6053
unsafe fn simd_ceil<T>(x: T) -> T;
@@ -68,23 +61,21 @@ unsafe fn simd_round<T>(x: T) -> T;
6861
#[rustc_intrinsic]
6962
unsafe fn simd_trunc<T>(x: T) -> T;
7063

71-
7264
macro_rules! assert_approx_eq_f32 {
73-
($a:expr, $b:expr) => ({
65+
($a:expr, $b:expr) => {{
7466
let (a, b) = (&$a, &$b);
75-
assert!((*a - *b).abs() < 1.0e-6,
76-
"{} is not approximately equal to {}", *a, *b);
77-
})
67+
assert!((*a - *b).abs() < 1.0e-6, "{} is not approximately equal to {}", *a, *b);
68+
}};
7869
}
7970
macro_rules! assert_approx_eq {
80-
($a:expr, $b:expr) => ({
71+
($a:expr, $b:expr) => {{
8172
let a = $a;
8273
let b = $b;
8374
assert_approx_eq_f32!(a.0[0], b.0[0]);
8475
assert_approx_eq_f32!(a.0[1], b.0[1]);
8576
assert_approx_eq_f32!(a.0[2], b.0[2]);
8677
assert_approx_eq_f32!(a.0[3], b.0[3]);
87-
})
78+
}};
8879
}
8980

9081
fn main() {
@@ -125,12 +116,6 @@ fn main() {
125116
let r = simd_flog10(x);
126117
assert_approx_eq!(z, r);
127118

128-
let r = simd_fpow(h, x);
129-
assert_approx_eq!(h, r);
130-
131-
let r = simd_fpowi(h, 1);
132-
assert_approx_eq!(h, r);
133-
134119
let r = simd_fsin(z);
135120
assert_approx_eq!(z, r);
136121

0 commit comments

Comments
 (0)