Skip to content

Commit 0f373a5

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 a6f7ac8 commit 0f373a5

File tree

2 files changed

+8
-8
lines changed

2 files changed

+8
-8
lines changed

compiler/rustc_codegen_llvm/src/context.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -739,10 +739,10 @@ impl<'ll> CodegenCx<'ll, '_> {
739739
ifn!("llvm.debugtrap", fn() -> void);
740740
ifn!("llvm.frameaddress", fn(t_i32) -> ptr);
741741

742-
ifn!("llvm.powi.f16", fn(t_f16, t_i32) -> t_f16);
743-
ifn!("llvm.powi.f32", fn(t_f32, t_i32) -> t_f32);
744-
ifn!("llvm.powi.f64", fn(t_f64, t_i32) -> t_f64);
745-
ifn!("llvm.powi.f128", fn(t_f128, t_i32) -> t_f128);
742+
ifn!("llvm.powi.f16.i32", fn(t_f16, t_i32) -> t_f16);
743+
ifn!("llvm.powi.f32.i32", fn(t_f32, t_i32) -> t_f32);
744+
ifn!("llvm.powi.f64.i32", fn(t_f64, t_i32) -> t_f64);
745+
ifn!("llvm.powi.f128.i32", fn(t_f128, t_i32) -> t_f128);
746746

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

compiler/rustc_codegen_llvm/src/intrinsic.rs

+4-4
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)