Skip to content

[X86][NFC] Added POWI function testcases #134276

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Apr 4, 2025
Merged

Conversation

JaydeepChauhan14
Copy link
Contributor

@JaydeepChauhan14 JaydeepChauhan14 commented Apr 3, 2025

  • Moved existing llvm/test/CodeGen/X86/powi.ll file to llvm/test/CodeGen/X86/powi-const.ll.
  • Added new testcases for powi into llvm/test/CodeGen/X86/powi.ll.

@llvmbot
Copy link
Member

llvmbot commented Apr 3, 2025

@llvm/pr-subscribers-backend-x86

Author: None (JaydeepChauhan14)

Changes

Patch is 26.15 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/134276.diff

2 Files Affected:

  • (added) llvm/test/CodeGen/X86/powi-const.ll (+268)
  • (modified) llvm/test/CodeGen/X86/powi.ll (+159-252)
diff --git a/llvm/test/CodeGen/X86/powi-const.ll b/llvm/test/CodeGen/X86/powi-const.ll
new file mode 100644
index 0000000000000..7dc6564e62a85
--- /dev/null
+++ b/llvm/test/CodeGen/X86/powi-const.ll
@@ -0,0 +1,268 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc < %s -mtriple=i686-unknown-unknown | FileCheck %s --check-prefix=X86-X87
+; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=X86-SSE
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=X64
+
+; Ideally this would compile to 5 multiplies.
+
+define double @pow_wrapper(double %a) nounwind readonly ssp noredzone {
+; X86-X87-LABEL: pow_wrapper:
+; X86-X87:       # %bb.0:
+; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-X87-NEXT:    fld %st(0)
+; X86-X87-NEXT:    fmul %st(1), %st
+; X86-X87-NEXT:    fmul %st, %st(1)
+; X86-X87-NEXT:    fmul %st, %st(0)
+; X86-X87-NEXT:    fmul %st, %st(1)
+; X86-X87-NEXT:    fmul %st, %st(0)
+; X86-X87-NEXT:    fmulp %st, %st(1)
+; X86-X87-NEXT:    retl
+;
+; X86-SSE-LABEL: pow_wrapper:
+; X86-SSE:       # %bb.0:
+; X86-SSE-NEXT:    pushl %ebp
+; X86-SSE-NEXT:    movl %esp, %ebp
+; X86-SSE-NEXT:    andl $-8, %esp
+; X86-SSE-NEXT:    subl $8, %esp
+; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; X86-SSE-NEXT:    movapd %xmm0, %xmm1
+; X86-SSE-NEXT:    mulsd %xmm0, %xmm1
+; X86-SSE-NEXT:    mulsd %xmm1, %xmm0
+; X86-SSE-NEXT:    mulsd %xmm1, %xmm1
+; X86-SSE-NEXT:    mulsd %xmm1, %xmm0
+; X86-SSE-NEXT:    mulsd %xmm1, %xmm1
+; X86-SSE-NEXT:    mulsd %xmm0, %xmm1
+; X86-SSE-NEXT:    movsd %xmm1, (%esp)
+; X86-SSE-NEXT:    fldl (%esp)
+; X86-SSE-NEXT:    movl %ebp, %esp
+; X86-SSE-NEXT:    popl %ebp
+; X86-SSE-NEXT:    retl
+;
+; X64-LABEL: pow_wrapper:
+; X64:       # %bb.0:
+; X64-NEXT:    movapd %xmm0, %xmm1
+; X64-NEXT:    mulsd %xmm0, %xmm1
+; X64-NEXT:    mulsd %xmm1, %xmm0
+; X64-NEXT:    mulsd %xmm1, %xmm1
+; X64-NEXT:    mulsd %xmm1, %xmm0
+; X64-NEXT:    mulsd %xmm1, %xmm1
+; X64-NEXT:    mulsd %xmm1, %xmm0
+; X64-NEXT:    retq
+  %ret = tail call double @llvm.powi.f64.i32(double %a, i32 15) nounwind ; <double> [#uses=1]
+  ret double %ret
+}
+
+define double @pow_wrapper_optsize(double %a) optsize {
+; X86-X87-LABEL: pow_wrapper_optsize:
+; X86-X87:       # %bb.0:
+; X86-X87-NEXT:    subl $12, %esp
+; X86-X87-NEXT:    .cfi_def_cfa_offset 16
+; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-X87-NEXT:    fstpl (%esp)
+; X86-X87-NEXT:    movl $15, {{[0-9]+}}(%esp)
+; X86-X87-NEXT:    calll __powidf2
+; X86-X87-NEXT:    addl $12, %esp
+; X86-X87-NEXT:    .cfi_def_cfa_offset 4
+; X86-X87-NEXT:    retl
+;
+; X86-SSE-LABEL: pow_wrapper_optsize:
+; X86-SSE:       # %bb.0:
+; X86-SSE-NEXT:    subl $12, %esp
+; X86-SSE-NEXT:    .cfi_def_cfa_offset 16
+; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; X86-SSE-NEXT:    movsd %xmm0, (%esp)
+; X86-SSE-NEXT:    movl $15, {{[0-9]+}}(%esp)
+; X86-SSE-NEXT:    calll __powidf2
+; X86-SSE-NEXT:    addl $12, %esp
+; X86-SSE-NEXT:    .cfi_def_cfa_offset 4
+; X86-SSE-NEXT:    retl
+;
+; X64-LABEL: pow_wrapper_optsize:
+; X64:       # %bb.0:
+; X64-NEXT:    movl $15, %edi
+; X64-NEXT:    jmp __powidf2@PLT # TAILCALL
+  %ret = tail call double @llvm.powi.f64.i32(double %a, i32 15) nounwind ; <double> [#uses=1]
+  ret double %ret
+}
+
+define double @pow_wrapper_pgso(double %a) !prof !14 {
+; X86-X87-LABEL: pow_wrapper_pgso:
+; X86-X87:       # %bb.0:
+; X86-X87-NEXT:    subl $12, %esp
+; X86-X87-NEXT:    .cfi_def_cfa_offset 16
+; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-X87-NEXT:    fstpl (%esp)
+; X86-X87-NEXT:    movl $15, {{[0-9]+}}(%esp)
+; X86-X87-NEXT:    calll __powidf2
+; X86-X87-NEXT:    addl $12, %esp
+; X86-X87-NEXT:    .cfi_def_cfa_offset 4
+; X86-X87-NEXT:    retl
+;
+; X86-SSE-LABEL: pow_wrapper_pgso:
+; X86-SSE:       # %bb.0:
+; X86-SSE-NEXT:    subl $12, %esp
+; X86-SSE-NEXT:    .cfi_def_cfa_offset 16
+; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; X86-SSE-NEXT:    movsd %xmm0, (%esp)
+; X86-SSE-NEXT:    movl $15, {{[0-9]+}}(%esp)
+; X86-SSE-NEXT:    calll __powidf2
+; X86-SSE-NEXT:    addl $12, %esp
+; X86-SSE-NEXT:    .cfi_def_cfa_offset 4
+; X86-SSE-NEXT:    retl
+;
+; X64-LABEL: pow_wrapper_pgso:
+; X64:       # %bb.0:
+; X64-NEXT:    movl $15, %edi
+; X64-NEXT:    jmp __powidf2@PLT # TAILCALL
+  %ret = tail call double @llvm.powi.f64.i32(double %a, i32 15) nounwind ; <double> [#uses=1]
+  ret double %ret
+}
+
+define double @pow_wrapper_minsize(double %a) minsize {
+; X86-X87-LABEL: pow_wrapper_minsize:
+; X86-X87:       # %bb.0:
+; X86-X87-NEXT:    subl $12, %esp
+; X86-X87-NEXT:    .cfi_def_cfa_offset 16
+; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-X87-NEXT:    fstpl (%esp)
+; X86-X87-NEXT:    movl $15, {{[0-9]+}}(%esp)
+; X86-X87-NEXT:    calll __powidf2
+; X86-X87-NEXT:    addl $12, %esp
+; X86-X87-NEXT:    .cfi_def_cfa_offset 4
+; X86-X87-NEXT:    retl
+;
+; X86-SSE-LABEL: pow_wrapper_minsize:
+; X86-SSE:       # %bb.0:
+; X86-SSE-NEXT:    subl $12, %esp
+; X86-SSE-NEXT:    .cfi_def_cfa_offset 16
+; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; X86-SSE-NEXT:    movsd %xmm0, (%esp)
+; X86-SSE-NEXT:    movl $15, {{[0-9]+}}(%esp)
+; X86-SSE-NEXT:    calll __powidf2
+; X86-SSE-NEXT:    addl $12, %esp
+; X86-SSE-NEXT:    .cfi_def_cfa_offset 4
+; X86-SSE-NEXT:    retl
+;
+; X64-LABEL: pow_wrapper_minsize:
+; X64:       # %bb.0:
+; X64-NEXT:    pushq $15
+; X64-NEXT:    .cfi_adjust_cfa_offset 8
+; X64-NEXT:    popq %rdi
+; X64-NEXT:    .cfi_adjust_cfa_offset -8
+; X64-NEXT:    jmp __powidf2@PLT # TAILCALL
+  %ret = tail call double @llvm.powi.f64.i32(double %a, i32 15) nounwind ; <double> [#uses=1]
+  ret double %ret
+}
+
+define <2 x float> @powi_v2f32(<2 x float> %a) minsize {
+; X86-X87-LABEL: powi_v2f32:
+; X86-X87:       # %bb.0:
+; X86-X87-NEXT:    pushl %esi
+; X86-X87-NEXT:    .cfi_def_cfa_offset 8
+; X86-X87-NEXT:    subl $16, %esp
+; X86-X87-NEXT:    .cfi_def_cfa_offset 24
+; X86-X87-NEXT:    .cfi_offset %esi, -8
+; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-X87-NEXT:    fstps {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
+; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-X87-NEXT:    pushl $15
+; X86-X87-NEXT:    .cfi_adjust_cfa_offset 4
+; X86-X87-NEXT:    popl %esi
+; X86-X87-NEXT:    .cfi_adjust_cfa_offset -4
+; X86-X87-NEXT:    movl %esi, {{[0-9]+}}(%esp)
+; X86-X87-NEXT:    fstps (%esp)
+; X86-X87-NEXT:    calll __powisf2
+; X86-X87-NEXT:    fstps {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
+; X86-X87-NEXT:    movl %esi, {{[0-9]+}}(%esp)
+; X86-X87-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload
+; X86-X87-NEXT:    fstps (%esp)
+; X86-X87-NEXT:    calll __powisf2
+; X86-X87-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload
+; X86-X87-NEXT:    fxch %st(1)
+; X86-X87-NEXT:    addl $16, %esp
+; X86-X87-NEXT:    .cfi_def_cfa_offset 8
+; X86-X87-NEXT:    popl %esi
+; X86-X87-NEXT:    .cfi_def_cfa_offset 4
+; X86-X87-NEXT:    retl
+;
+; X86-SSE-LABEL: powi_v2f32:
+; X86-SSE:       # %bb.0:
+; X86-SSE-NEXT:    pushl %esi
+; X86-SSE-NEXT:    .cfi_def_cfa_offset 8
+; X86-SSE-NEXT:    subl $32, %esp
+; X86-SSE-NEXT:    .cfi_def_cfa_offset 40
+; X86-SSE-NEXT:    .cfi_offset %esi, -8
+; X86-SSE-NEXT:    movups %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill
+; X86-SSE-NEXT:    pushl $15
+; X86-SSE-NEXT:    .cfi_adjust_cfa_offset 4
+; X86-SSE-NEXT:    popl %esi
+; X86-SSE-NEXT:    .cfi_adjust_cfa_offset -4
+; X86-SSE-NEXT:    movl %esi, {{[0-9]+}}(%esp)
+; X86-SSE-NEXT:    movss %xmm0, (%esp)
+; X86-SSE-NEXT:    calll __powisf2
+; X86-SSE-NEXT:    movl %esi, {{[0-9]+}}(%esp)
+; X86-SSE-NEXT:    movups {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload
+; X86-SSE-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]
+; X86-SSE-NEXT:    movss %xmm0, (%esp)
+; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)
+; X86-SSE-NEXT:    calll __powisf2
+; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)
+; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; X86-SSE-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
+; X86-SSE-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
+; X86-SSE-NEXT:    addl $32, %esp
+; X86-SSE-NEXT:    .cfi_def_cfa_offset 8
+; X86-SSE-NEXT:    popl %esi
+; X86-SSE-NEXT:    .cfi_def_cfa_offset 4
+; X86-SSE-NEXT:    retl
+;
+; X64-LABEL: powi_v2f32:
+; X64:       # %bb.0:
+; X64-NEXT:    pushq %rbx
+; X64-NEXT:    .cfi_def_cfa_offset 16
+; X64-NEXT:    subq $32, %rsp
+; X64-NEXT:    .cfi_def_cfa_offset 48
+; X64-NEXT:    .cfi_offset %rbx, -16
+; X64-NEXT:    movaps %xmm0, (%rsp) # 16-byte Spill
+; X64-NEXT:    pushq $15
+; X64-NEXT:    .cfi_adjust_cfa_offset 8
+; X64-NEXT:    popq %rbx
+; X64-NEXT:    .cfi_adjust_cfa_offset -8
+; X64-NEXT:    movl %ebx, %edi
+; X64-NEXT:    callq __powisf2@PLT
+; X64-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
+; X64-NEXT:    movaps (%rsp), %xmm0 # 16-byte Reload
+; X64-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]
+; X64-NEXT:    movl %ebx, %edi
+; X64-NEXT:    callq __powisf2@PLT
+; X64-NEXT:    movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
+; X64-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
+; X64-NEXT:    movaps %xmm1, %xmm0
+; X64-NEXT:    addq $32, %rsp
+; X64-NEXT:    .cfi_def_cfa_offset 16
+; X64-NEXT:    popq %rbx
+; X64-NEXT:    .cfi_def_cfa_offset 8
+; X64-NEXT:    retq
+  %ret = tail call < 2 x float> @llvm.powi.v2f32.i32(<2 x float> %a, i32 15) nounwind ;
+  ret <2 x float> %ret
+}
+
+declare double @llvm.powi.f64.i32(double, i32) nounwind readonly
+declare < 2 x float> @llvm.powi.v2f32.i32(<2 x float>, i32) nounwind readonly
+
+!llvm.module.flags = !{!0}
+!0 = !{i32 1, !"ProfileSummary", !1}
+!1 = !{!2, !3, !4, !5, !6, !7, !8, !9}
+!2 = !{!"ProfileFormat", !"InstrProf"}
+!3 = !{!"TotalCount", i64 10000}
+!4 = !{!"MaxCount", i64 10}
+!5 = !{!"MaxInternalCount", i64 1}
+!6 = !{!"MaxFunctionCount", i64 1000}
+!7 = !{!"NumCounts", i64 3}
+!8 = !{!"NumFunctions", i64 3}
+!9 = !{!"DetailedSummary", !10}
+!10 = !{!11, !12, !13}
+!11 = !{i32 10000, i64 100, i32 1}
+!12 = !{i32 999000, i64 100, i32 1}
+!13 = !{i32 999999, i64 1, i32 2}
+!14 = !{!"function_entry_count", i64 0}
diff --git a/llvm/test/CodeGen/X86/powi.ll b/llvm/test/CodeGen/X86/powi.ll
index 7dc6564e62a85..6a1a9e3ad7118 100644
--- a/llvm/test/CodeGen/X86/powi.ll
+++ b/llvm/test/CodeGen/X86/powi.ll
@@ -1,268 +1,175 @@
-; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc < %s -mtriple=i686-unknown-unknown | FileCheck %s --check-prefix=X86-X87
-; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=X86-SSE
-; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=X64
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
+; RUN: llc < %s -mtriple=i686-linux-gnu -fast-isel | FileCheck %s --check-prefixes=FAST-X86
+; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel=0 -fast-isel=0 | FileCheck %s --check-prefixes=SDAG-X86
+; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=GISEL-X86
+; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -fast-isel | FileCheck %s --check-prefixes=FAST-X64
+; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -global-isel=0 -fast-isel=0 | FileCheck %s --check-prefixes=SDAG-X64
+; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=GISEL-X64
 
-; Ideally this would compile to 5 multiplies.
-
-define double @pow_wrapper(double %a) nounwind readonly ssp noredzone {
-; X86-X87-LABEL: pow_wrapper:
-; X86-X87:       # %bb.0:
-; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
-; X86-X87-NEXT:    fld %st(0)
-; X86-X87-NEXT:    fmul %st(1), %st
-; X86-X87-NEXT:    fmul %st, %st(1)
-; X86-X87-NEXT:    fmul %st, %st(0)
-; X86-X87-NEXT:    fmul %st, %st(1)
-; X86-X87-NEXT:    fmul %st, %st(0)
-; X86-X87-NEXT:    fmulp %st, %st(1)
-; X86-X87-NEXT:    retl
+define float @test_powi_f32_i32(float %Val, i32 %x) nounwind {
+; FAST-X86-LABEL: test_powi_f32_i32:
+; FAST-X86:       # %bb.0:
+; FAST-X86-NEXT:    subl $12, %esp
+; FAST-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; FAST-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fstps (%esp)
+; FAST-X86-NEXT:    calll __powisf2
+; FAST-X86-NEXT:    addl $12, %esp
+; FAST-X86-NEXT:    retl
 ;
-; X86-SSE-LABEL: pow_wrapper:
-; X86-SSE:       # %bb.0:
-; X86-SSE-NEXT:    pushl %ebp
-; X86-SSE-NEXT:    movl %esp, %ebp
-; X86-SSE-NEXT:    andl $-8, %esp
-; X86-SSE-NEXT:    subl $8, %esp
-; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
-; X86-SSE-NEXT:    movapd %xmm0, %xmm1
-; X86-SSE-NEXT:    mulsd %xmm0, %xmm1
-; X86-SSE-NEXT:    mulsd %xmm1, %xmm0
-; X86-SSE-NEXT:    mulsd %xmm1, %xmm1
-; X86-SSE-NEXT:    mulsd %xmm1, %xmm0
-; X86-SSE-NEXT:    mulsd %xmm1, %xmm1
-; X86-SSE-NEXT:    mulsd %xmm0, %xmm1
-; X86-SSE-NEXT:    movsd %xmm1, (%esp)
-; X86-SSE-NEXT:    fldl (%esp)
-; X86-SSE-NEXT:    movl %ebp, %esp
-; X86-SSE-NEXT:    popl %ebp
-; X86-SSE-NEXT:    retl
+; SDAG-X86-LABEL: test_powi_f32_i32:
+; SDAG-X86:       # %bb.0:
+; SDAG-X86-NEXT:    subl $12, %esp
+; SDAG-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; SDAG-X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fstps (%esp)
+; SDAG-X86-NEXT:    calll __powisf2
+; SDAG-X86-NEXT:    addl $12, %esp
+; SDAG-X86-NEXT:    retl
 ;
-; X64-LABEL: pow_wrapper:
-; X64:       # %bb.0:
-; X64-NEXT:    movapd %xmm0, %xmm1
-; X64-NEXT:    mulsd %xmm0, %xmm1
-; X64-NEXT:    mulsd %xmm1, %xmm0
-; X64-NEXT:    mulsd %xmm1, %xmm1
-; X64-NEXT:    mulsd %xmm1, %xmm0
-; X64-NEXT:    mulsd %xmm1, %xmm1
-; X64-NEXT:    mulsd %xmm1, %xmm0
-; X64-NEXT:    retq
-  %ret = tail call double @llvm.powi.f64.i32(double %a, i32 15) nounwind ; <double> [#uses=1]
-  ret double %ret
-}
-
-define double @pow_wrapper_optsize(double %a) optsize {
-; X86-X87-LABEL: pow_wrapper_optsize:
-; X86-X87:       # %bb.0:
-; X86-X87-NEXT:    subl $12, %esp
-; X86-X87-NEXT:    .cfi_def_cfa_offset 16
-; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
-; X86-X87-NEXT:    fstpl (%esp)
-; X86-X87-NEXT:    movl $15, {{[0-9]+}}(%esp)
-; X86-X87-NEXT:    calll __powidf2
-; X86-X87-NEXT:    addl $12, %esp
-; X86-X87-NEXT:    .cfi_def_cfa_offset 4
-; X86-X87-NEXT:    retl
+; GISEL-X86-LABEL: test_powi_f32_i32:
+; GISEL-X86:       # %bb.0:
+; GISEL-X86-NEXT:    subl $12, %esp
+; GISEL-X86-NEXT:    flds {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; GISEL-X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fstps (%esp)
+; GISEL-X86-NEXT:    calll __powisf2
+; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    retl
 ;
-; X86-SSE-LABEL: pow_wrapper_optsize:
-; X86-SSE:       # %bb.0:
-; X86-SSE-NEXT:    subl $12, %esp
-; X86-SSE-NEXT:    .cfi_def_cfa_offset 16
-; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
-; X86-SSE-NEXT:    movsd %xmm0, (%esp)
-; X86-SSE-NEXT:    movl $15, {{[0-9]+}}(%esp)
-; X86-SSE-NEXT:    calll __powidf2
-; X86-SSE-NEXT:    addl $12, %esp
-; X86-SSE-NEXT:    .cfi_def_cfa_offset 4
-; X86-SSE-NEXT:    retl
+; FAST-X64-LABEL: test_powi_f32_i32:
+; FAST-X64:       # %bb.0:
+; FAST-X64-NEXT:    pushq %rax
+; FAST-X64-NEXT:    callq __powisf2@PLT
+; FAST-X64-NEXT:    popq %rax
+; FAST-X64-NEXT:    retq
 ;
-; X64-LABEL: pow_wrapper_optsize:
-; X64:       # %bb.0:
-; X64-NEXT:    movl $15, %edi
-; X64-NEXT:    jmp __powidf2@PLT # TAILCALL
-  %ret = tail call double @llvm.powi.f64.i32(double %a, i32 15) nounwind ; <double> [#uses=1]
-  ret double %ret
+; SDAG-X64-LABEL: test_powi_f32_i32:
+; SDAG-X64:       # %bb.0:
+; SDAG-X64-NEXT:    jmp __powisf2@PLT # TAILCALL
+;
+; GISEL-X64-LABEL: test_powi_f32_i32:
+; GISEL-X64:       # %bb.0:
+; GISEL-X64-NEXT:    jmp __powisf2@PLT # TAILCALL
+  %res = call float @llvm.powi.f32.i32(float %Val, i32 %x)
+  ret float %res
 }
 
-define double @pow_wrapper_pgso(double %a) !prof !14 {
-; X86-X87-LABEL: pow_wrapper_pgso:
-; X86-X87:       # %bb.0:
-; X86-X87-NEXT:    subl $12, %esp
-; X86-X87-NEXT:    .cfi_def_cfa_offset 16
-; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
-; X86-X87-NEXT:    fstpl (%esp)
-; X86-X87-NEXT:    movl $15, {{[0-9]+}}(%esp)
-; X86-X87-NEXT:    calll __powidf2
-; X86-X87-NEXT:    addl $12, %esp
-; X86-X87-NEXT:    .cfi_def_cfa_offset 4
-; X86-X87-NEXT:    retl
+define double @test_powi_f64_i132(double %Val, i32 %x) nounwind {
+; FAST-X86-LABEL: test_powi_f64_i132:
+; FAST-X86:       # %bb.0:
+; FAST-X86-NEXT:    subl $12, %esp
+; FAST-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; FAST-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)
+; FAST-X86-NEXT:    fstpl (%esp)
+; FAST-X86-NEXT:    calll __powidf2
+; FAST-X86-NEXT:    addl $12, %esp
+; FAST-X86-NEXT:    retl
 ;
-; X86-SSE-LABEL: pow_wrapper_pgso:
-; X86-SSE:       # %bb.0:
-; X86-SSE-NEXT:    subl $12, %esp
-; X86-SSE-NEXT:    .cfi_def_cfa_offset 16
-; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
-; X86-SSE-NEXT:    movsd %xmm0, (%esp)
-; X86-SSE-NEXT:    movl $15, {{[0-9]+}}(%esp)
-; X86-SSE-NEXT:    calll __powidf2
-; X86-SSE-NEXT:    addl $12, %esp
-; X86-SSE-NEXT:    .cfi_def_cfa_offset 4
-; X86-SSE-NEXT:    retl
+; SDAG-X86-LABEL: test_powi_f64_i132:
+; SDAG-X86:       # %bb.0:
+; SDAG-X86-NEXT:    subl $12, %esp
+; SDAG-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; SDAG-X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)
+; SDAG-X86-NEXT:    fstpl (%esp)
+; SDAG-X86-NEXT:    calll __powidf2
+; SDAG-X86-NEXT:    addl $12, %esp
+; SDAG-X86-NEXT:    retl
 ;
-; X64-LABEL: pow_wrapper_pgso:
-; X64:       # %bb.0:
-; X64-NEXT:    movl $15, %edi
-; X64-NEXT:    jmp __powidf2@PLT # TAILCALL
-  %ret = tail call double @llvm.powi.f64.i32(double %a, i32 15) nounwind ; <double> [#uses=1]
-  ret double %ret
-}
-
-define double @pow_wrapper_minsize(double %a) minsize {
-; X86-X87-LABEL: pow_wrapper_minsize:
-; X86-X87:       # %bb.0:
-; X86-X87-NEXT:    subl $12, %esp
-; X86-X87-NEXT:    .cfi_def_cfa_offset 16
-; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
-; X86-X87-NEXT:    fstpl (%esp)
-; X86-X87-NEXT:    movl $15, {{[0-9]+}}(%esp)
-; X86-X87-NEXT:    calll __powidf2
-; X86-X87-NEXT:    addl $12, %esp
-; X86-X87-NEXT:    .cfi_def_cfa_offset 4
-; X86-X87-NEXT:    retl
+; GISEL-X86-LABEL: test_powi_f64_i132:
+; GISEL-X86:       # %bb.0:
+; GISEL-X86-NEXT:    subl $12, %esp
+; GISEL-X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; GISEL-X86-NEXT:    movl %eax, {{[0-9]+}}(%esp)
+; GISEL-X86-NEXT:    fstpl (%esp)
+; GISEL-X86-NEXT:    calll __powidf2
+; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    retl
 ;
-; X86-SSE-LABEL: pow_wrapper_minsize:
-; X86-SSE:       # %bb.0:
-; X86-SSE-NEXT:    subl $12, %esp
-; X86-SSE-NEXT:    .cfi_def_cfa_offset 16
-; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
-; X86-SSE-NEXT:    movsd %xmm0, (%esp)
-; X86-SSE-NEXT:    movl $15, {{[0-9]+}}(%esp)
-; X86-SSE-NEXT:    calll __powidf2
-; X86-SSE-NEXT:    addl $12, %esp
-; X86-SSE-NEXT:    .cfi_def_cfa_offset 4
-; X86-SSE-NEXT:    retl
+; FAST-X64-LABEL: test_powi_f64_i132:
+; FAST-X64:       # %bb.0:
+; FAST-X64-NEXT:    pushq %rax
+; FAST-X64-NEXT:    callq __powidf2@PLT
+; FAST-X64-NEXT:    popq %rax
+; FAST-X64-NEXT:    retq
 ;
-; X64-LABEL: pow_wrapper_minsize:
-; X64:       # %bb.0:
-; X64-NEXT:    pushq $15
-; X64-NEXT:    .cfi_adjust_cfa_offset 8
-; X64-NEXT:    popq %rdi
-; X64-NEXT:    .cfi_adjust_cfa_offset -8
-; X64-NEXT:    jmp __powidf2@PLT # TAILCALL
-  %ret = tail call double @llvm.powi.f64.i32(double %a, i32 15) nounwind ; <double> [#uses=1]
-  ret double %ret
+; SDAG-X64-LABEL: test_powi_f64_i132:
+; SDAG-X64:       # %bb.0:
+; SDAG-X64-NEXT:    jmp __powidf2@PLT # TAILCALL
+;
+; GISEL-X64-LABEL: test_powi_f64_i132:
+; GISEL-X64:       # %bb.0:
+; GISEL-X64-NEXT:    jmp __powidf2@PLT # TAILCALL
+  %res = call double @llvm.powi.f64.i32(double %Val, i32 %x)
+  ret double %res
 }
 
-define <2 x float> @powi_v2f32(<2 x float> %a) minsize {
-; X86-X87-LABEL: powi_v2f32:
-; X86-X87:       # %bb.0:
-; X86-X87-NEXT:    pushl %esi
-; X86-X87-NEXT:    .cfi_def_cfa_offset 8
-; X86-X87-NEXT:    subl $16, %esp
-; X86-X87-NEXT:    .cfi_def_cfa_offset 24
-; X86-X87-NEXT:    .cfi_offset %esi, -8
-; X86-X87-NEXT:    flds {{[0-9]+}}(...
[truncated]

@e-kud e-kud requested review from RKSimon and e-kud April 3, 2025 17:12
Copy link
Contributor

@e-kud e-kud left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Probably we may add nounwind to powi-const.ll, I think it shouldn't hurt.

Copy link
Collaborator

@RKSimon RKSimon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@e-kud e-kud merged commit 0d17547 into llvm:main Apr 4, 2025
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants