Skip to content

Commit c586eb6

Browse files
committed
Specify the integer type of the powi LLVM intrinsic
Since LLVM <https://reviews.llvm.org/D99439> (4c7f820, "Update @llvm.powi to handle different int sizes for the exponent"), the size of the integer can be specified for the `powi` intrinsic. Make use of this so it is more obvious that integer size is consistent across all float types. This feature is available since LLVM 13 (October 2021). Based on bootstrap we currently support >= 17.0, so there should be no support problems.
1 parent f8060d2 commit c586eb6

File tree

2 files changed

+8
-8
lines changed

2 files changed

+8
-8
lines changed

compiler/rustc_codegen_llvm/src/context.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -775,10 +775,10 @@ impl<'ll> CodegenCx<'ll, '_> {
775775
ifn!("llvm.debugtrap", fn() -> void);
776776
ifn!("llvm.frameaddress", fn(t_i32) -> ptr);
777777

778-
ifn!("llvm.powi.f16", fn(t_f16, t_i32) -> t_f16);
779-
ifn!("llvm.powi.f32", fn(t_f32, t_i32) -> t_f32);
780-
ifn!("llvm.powi.f64", fn(t_f64, t_i32) -> t_f64);
781-
ifn!("llvm.powi.f128", fn(t_f128, t_i32) -> t_f128);
778+
ifn!("llvm.powi.f16.i32", fn(t_f16, t_i32) -> t_f16);
779+
ifn!("llvm.powi.f32.i32", fn(t_f32, t_i32) -> t_f32);
780+
ifn!("llvm.powi.f64.i32", fn(t_f64, t_i32) -> t_f64);
781+
ifn!("llvm.powi.f128.i32", fn(t_f128, t_i32) -> t_f128);
782782

783783
ifn!("llvm.pow.f16", fn(t_f16, t_f16) -> t_f16);
784784
ifn!("llvm.pow.f32", fn(t_f32, t_f32) -> t_f32);

compiler/rustc_codegen_llvm/src/intrinsic.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@ fn get_simple_intrinsic<'ll>(
3535
sym::sqrtf64 => "llvm.sqrt.f64",
3636
sym::sqrtf128 => "llvm.sqrt.f128",
3737

38-
sym::powif16 => "llvm.powi.f16",
39-
sym::powif32 => "llvm.powi.f32",
40-
sym::powif64 => "llvm.powi.f64",
41-
sym::powif128 => "llvm.powi.f128",
38+
sym::powif16 => "llvm.powi.f16.i32",
39+
sym::powif32 => "llvm.powi.f32.i32",
40+
sym::powif64 => "llvm.powi.f64.i32",
41+
sym::powif128 => "llvm.powi.f128.i32",
4242

4343
sym::sinf16 => "llvm.sin.f16",
4444
sym::sinf32 => "llvm.sin.f32",

0 commit comments

Comments
 (0)