Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit b4524ab

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 5c84886 commit b4524ab

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
@@ -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

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)