[llvm] [X86][GlobalIsel] Add ceil/trunc/floor cpp intrinsic test (PR #156281)

via llvm-commits llvm-commits at lists.llvm.org
Sun Aug 31 23:42:20 PDT 2025


https://github.com/mahesh-attarde updated https://github.com/llvm/llvm-project/pull/156281

>From 03b45d170cacc892774ecfd1b9a4220725f926db Mon Sep 17 00:00:00 2001
From: mattarde <mattarde at intel.com>
Date: Sun, 31 Aug 2025 22:51:53 -0700
Subject: [PATCH 1/3] add ceil/trunc/floor cpp intrinsic test

---
 llvm/test/CodeGen/X86/isel-llvm-ceil.ll  | 75 ++++++++++++++++++++++++
 llvm/test/CodeGen/X86/isel-llvm-floor.ll | 75 ++++++++++++++++++++++++
 llvm/test/CodeGen/X86/isel-llvm-trunc.ll | 75 ++++++++++++++++++++++++
 3 files changed, 225 insertions(+)
 create mode 100644 llvm/test/CodeGen/X86/isel-llvm-ceil.ll
 create mode 100644 llvm/test/CodeGen/X86/isel-llvm-floor.ll
 create mode 100644 llvm/test/CodeGen/X86/isel-llvm-trunc.ll

diff --git a/llvm/test/CodeGen/X86/isel-llvm-ceil.ll b/llvm/test/CodeGen/X86/isel-llvm-ceil.ll
new file mode 100644
index 0000000000000..cdd6b9c6cc713
--- /dev/null
+++ b/llvm/test/CodeGen/X86/isel-llvm-ceil.ll
@@ -0,0 +1,75 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc < %s -mtriple=x86_64-linux-gnu | FileCheck %s --check-prefixes=X64,DAG-X64
+; RUN: llc < %s -mtriple=x86_64-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X64,FASTISEL-X64
+; RUN: llc < %s -mtriple=i686-linux-gnu | FileCheck %s --check-prefixes=X86
+; RUN: llc < %s -mtriple=i686-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X86
+
+define float @ceil_f32(float %a) nounwind readnone {
+; DAG-X64-LABEL: ceil_f32:
+; DAG-X64:       # %bb.0:
+; DAG-X64-NEXT:    jmp ceilf at PLT # TAILCALL
+;
+; FASTISEL-X64-LABEL: ceil_f32:
+; FASTISEL-X64:       # %bb.0:
+; FASTISEL-X64-NEXT:    pushq %rax
+; FASTISEL-X64-NEXT:    callq ceilf at PLT
+; FASTISEL-X64-NEXT:    popq %rax
+; FASTISEL-X64-NEXT:    retq
+;
+; X86-LABEL: ceil_f32:
+; X86:       # %bb.0:
+; X86-NEXT:    subl $12, %esp
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fstps (%esp)
+; X86-NEXT:    calll ceilf
+; X86-NEXT:    addl $12, %esp
+; X86-NEXT:    retl
+  %c = call float @llvm.ceil.f32(float %a)
+  ret float %c
+}
+
+define double @ceil_f64(double %a) nounwind readnone {
+; DAG-X64-LABEL: ceil_f64:
+; DAG-X64:       # %bb.0:
+; DAG-X64-NEXT:    jmp ceil at PLT # TAILCALL
+;
+; FASTISEL-X64-LABEL: ceil_f64:
+; FASTISEL-X64:       # %bb.0:
+; FASTISEL-X64-NEXT:    pushq %rax
+; FASTISEL-X64-NEXT:    callq ceil at PLT
+; FASTISEL-X64-NEXT:    popq %rax
+; FASTISEL-X64-NEXT:    retq
+;
+; X86-LABEL: ceil_f64:
+; X86:       # %bb.0:
+; X86-NEXT:    subl $12, %esp
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fstpl (%esp)
+; X86-NEXT:    calll ceil
+; X86-NEXT:    addl $12, %esp
+; X86-NEXT:    retl
+  %c = call double @llvm.ceil.f64(double %a)
+  ret double %c
+}
+
+define x86_fp80 @ceil_f80(x86_fp80 %a) nounwind readnone {
+; X64-LABEL: ceil_f80:
+; X64:       # %bb.0:
+; X64-NEXT:    subq $24, %rsp
+; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-NEXT:    fstpt (%rsp)
+; X64-NEXT:    callq ceill at PLT
+; X64-NEXT:    addq $24, %rsp
+; X64-NEXT:    retq
+;
+; X86-LABEL: ceil_f80:
+; X86:       # %bb.0:
+; X86-NEXT:    subl $12, %esp
+; X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-NEXT:    fstpt (%esp)
+; X86-NEXT:    calll ceill
+; X86-NEXT:    addl $12, %esp
+; X86-NEXT:    retl
+  %c = call x86_fp80 @llvm.ceil.f80(x86_fp80 %a)
+  ret x86_fp80 %c
+}
diff --git a/llvm/test/CodeGen/X86/isel-llvm-floor.ll b/llvm/test/CodeGen/X86/isel-llvm-floor.ll
new file mode 100644
index 0000000000000..63b4d6dc4ded6
--- /dev/null
+++ b/llvm/test/CodeGen/X86/isel-llvm-floor.ll
@@ -0,0 +1,75 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc < %s -mtriple=x86_64-linux-gnu | FileCheck %s --check-prefixes=X64,DAG-X64
+; RUN: llc < %s -mtriple=x86_64-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X64,FASTISEL-X64
+; RUN: llc < %s -mtriple=i686-linux-gnu | FileCheck %s --check-prefixes=X86
+; RUN: llc < %s -mtriple=i686-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X86
+
+define float @floor_f32(float %a) nounwind readnone {
+; DAG-X64-LABEL: floor_f32:
+; DAG-X64:       # %bb.0:
+; DAG-X64-NEXT:    jmp floorf at PLT # TAILCALL
+;
+; FASTISEL-X64-LABEL: floor_f32:
+; FASTISEL-X64:       # %bb.0:
+; FASTISEL-X64-NEXT:    pushq %rax
+; FASTISEL-X64-NEXT:    callq floorf at PLT
+; FASTISEL-X64-NEXT:    popq %rax
+; FASTISEL-X64-NEXT:    retq
+;
+; X86-LABEL: floor_f32:
+; X86:       # %bb.0:
+; X86-NEXT:    subl $12, %esp
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fstps (%esp)
+; X86-NEXT:    calll floorf
+; X86-NEXT:    addl $12, %esp
+; X86-NEXT:    retl
+  %c = call float @llvm.floor.f32(float %a)
+  ret float %c
+}
+
+define double @floor_f64(double %a) nounwind readnone {
+; DAG-X64-LABEL: floor_f64:
+; DAG-X64:       # %bb.0:
+; DAG-X64-NEXT:    jmp floor at PLT # TAILCALL
+;
+; FASTISEL-X64-LABEL: floor_f64:
+; FASTISEL-X64:       # %bb.0:
+; FASTISEL-X64-NEXT:    pushq %rax
+; FASTISEL-X64-NEXT:    callq floor at PLT
+; FASTISEL-X64-NEXT:    popq %rax
+; FASTISEL-X64-NEXT:    retq
+;
+; X86-LABEL: floor_f64:
+; X86:       # %bb.0:
+; X86-NEXT:    subl $12, %esp
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fstpl (%esp)
+; X86-NEXT:    calll floor
+; X86-NEXT:    addl $12, %esp
+; X86-NEXT:    retl
+  %c = call double @llvm.floor.f64(double %a)
+  ret double %c
+}
+
+define x86_fp80 @floor_f80(x86_fp80 %a) nounwind readnone {
+; X64-LABEL: floor_f80:
+; X64:       # %bb.0:
+; X64-NEXT:    subq $24, %rsp
+; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-NEXT:    fstpt (%rsp)
+; X64-NEXT:    callq floorl at PLT
+; X64-NEXT:    addq $24, %rsp
+; X64-NEXT:    retq
+;
+; X86-LABEL: floor_f80:
+; X86:       # %bb.0:
+; X86-NEXT:    subl $12, %esp
+; X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-NEXT:    fstpt (%esp)
+; X86-NEXT:    calll floorl
+; X86-NEXT:    addl $12, %esp
+; X86-NEXT:    retl
+  %c = call x86_fp80 @llvm.floor.f80(x86_fp80 %a)
+  ret x86_fp80 %c
+}
diff --git a/llvm/test/CodeGen/X86/isel-llvm-trunc.ll b/llvm/test/CodeGen/X86/isel-llvm-trunc.ll
new file mode 100644
index 0000000000000..303017f1e9411
--- /dev/null
+++ b/llvm/test/CodeGen/X86/isel-llvm-trunc.ll
@@ -0,0 +1,75 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc < %s -mtriple=x86_64-linux-gnu | FileCheck %s --check-prefixes=X64,DAG-X64
+; RUN: llc < %s -mtriple=x86_64-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X64,FASTISEL-X64
+; RUN: llc < %s -mtriple=i686-linux-gnu | FileCheck %s --check-prefixes=X86
+; RUN: llc < %s -mtriple=i686-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X86
+
+define float @trunc_f32(float %a) nounwind readnone {
+; DAG-X64-LABEL: trunc_f32:
+; DAG-X64:       # %bb.0:
+; DAG-X64-NEXT:    jmp truncf at PLT # TAILCALL
+;
+; FASTISEL-X64-LABEL: trunc_f32:
+; FASTISEL-X64:       # %bb.0:
+; FASTISEL-X64-NEXT:    pushq %rax
+; FASTISEL-X64-NEXT:    callq truncf at PLT
+; FASTISEL-X64-NEXT:    popq %rax
+; FASTISEL-X64-NEXT:    retq
+;
+; X86-LABEL: trunc_f32:
+; X86:       # %bb.0:
+; X86-NEXT:    subl $12, %esp
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fstps (%esp)
+; X86-NEXT:    calll truncf
+; X86-NEXT:    addl $12, %esp
+; X86-NEXT:    retl
+  %c = call float @llvm.trunc.f32(float %a)
+  ret float %c
+}
+
+define double @trunc_f64(double %a) nounwind readnone {
+; DAG-X64-LABEL: trunc_f64:
+; DAG-X64:       # %bb.0:
+; DAG-X64-NEXT:    jmp trunc at PLT # TAILCALL
+;
+; FASTISEL-X64-LABEL: trunc_f64:
+; FASTISEL-X64:       # %bb.0:
+; FASTISEL-X64-NEXT:    pushq %rax
+; FASTISEL-X64-NEXT:    callq trunc at PLT
+; FASTISEL-X64-NEXT:    popq %rax
+; FASTISEL-X64-NEXT:    retq
+;
+; X86-LABEL: trunc_f64:
+; X86:       # %bb.0:
+; X86-NEXT:    subl $12, %esp
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fstpl (%esp)
+; X86-NEXT:    calll trunc
+; X86-NEXT:    addl $12, %esp
+; X86-NEXT:    retl
+  %c = call double @llvm.trunc.f64(double %a)
+  ret double %c
+}
+
+define x86_fp80 @trunc_f80(x86_fp80   %a) nounwind readnone {
+; X64-LABEL: trunc_f80:
+; X64:       # %bb.0:
+; X64-NEXT:    subq $24, %rsp
+; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-NEXT:    fstpt (%rsp)
+; X64-NEXT:    callq truncl at PLT
+; X64-NEXT:    addq $24, %rsp
+; X64-NEXT:    retq
+;
+; X86-LABEL: trunc_f80:
+; X86:       # %bb.0:
+; X86-NEXT:    subl $12, %esp
+; X86-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-NEXT:    fstpt (%esp)
+; X86-NEXT:    calll truncl
+; X86-NEXT:    addl $12, %esp
+; X86-NEXT:    retl
+  %c = call x86_fp80   @llvm.trunc.f80(x86_fp80   %a)
+  ret x86_fp80   %c
+}

>From 6c2d14765a527464afb88cf23326e8e5f85c8558 Mon Sep 17 00:00:00 2001
From: mattarde <mattarde at intel.com>
Date: Sun, 31 Aug 2025 23:10:35 -0700
Subject: [PATCH 2/3] add gisel run

---
 llvm/test/CodeGen/X86/isel-llvm-ceil.ll  |  2 +
 llvm/test/CodeGen/X86/isel-llvm-floor.ll | 62 ++++++++++++++++++------
 llvm/test/CodeGen/X86/isel-llvm-trunc.ll | 62 ++++++++++++++++++------
 3 files changed, 94 insertions(+), 32 deletions(-)

diff --git a/llvm/test/CodeGen/X86/isel-llvm-ceil.ll b/llvm/test/CodeGen/X86/isel-llvm-ceil.ll
index cdd6b9c6cc713..55c37f71fedcb 100644
--- a/llvm/test/CodeGen/X86/isel-llvm-ceil.ll
+++ b/llvm/test/CodeGen/X86/isel-llvm-ceil.ll
@@ -3,6 +3,8 @@
 ; RUN: llc < %s -mtriple=x86_64-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X64,FASTISEL-X64
 ; RUN: llc < %s -mtriple=i686-linux-gnu | FileCheck %s --check-prefixes=X86
 ; RUN: llc < %s -mtriple=i686-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X86
+; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=GISEL-X64
+; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=X86,GISEL-X86
 
 define float @ceil_f32(float %a) nounwind readnone {
 ; DAG-X64-LABEL: ceil_f32:
diff --git a/llvm/test/CodeGen/X86/isel-llvm-floor.ll b/llvm/test/CodeGen/X86/isel-llvm-floor.ll
index 63b4d6dc4ded6..2e8799fb6e66f 100644
--- a/llvm/test/CodeGen/X86/isel-llvm-floor.ll
+++ b/llvm/test/CodeGen/X86/isel-llvm-floor.ll
@@ -3,6 +3,8 @@
 ; RUN: llc < %s -mtriple=x86_64-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X64,FASTISEL-X64
 ; RUN: llc < %s -mtriple=i686-linux-gnu | FileCheck %s --check-prefixes=X86
 ; RUN: llc < %s -mtriple=i686-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X86
+; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=GISEL-X64
+; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=X86,GISEL-X86
 
 define float @floor_f32(float %a) nounwind readnone {
 ; DAG-X64-LABEL: floor_f32:
@@ -16,14 +18,21 @@ define float @floor_f32(float %a) nounwind readnone {
 ; FASTISEL-X64-NEXT:    popq %rax
 ; FASTISEL-X64-NEXT:    retq
 ;
-; X86-LABEL: floor_f32:
-; X86:       # %bb.0:
-; X86-NEXT:    subl $12, %esp
-; X86-NEXT:    flds {{[0-9]+}}(%esp)
-; X86-NEXT:    fstps (%esp)
-; X86-NEXT:    calll floorf
-; X86-NEXT:    addl $12, %esp
-; X86-NEXT:    retl
+; GISEL-X64-LABEL: floor_f32:
+; GISEL-X64:       # %bb.0:
+; GISEL-X64-NEXT:    pushq %rax
+; GISEL-X64-NEXT:    callq floorf
+; GISEL-X64-NEXT:    popq %rax
+; GISEL-X64-NEXT:    retq
+;
+; GISEL-X86-LABEL: floor_f32:
+; GISEL-X86:       # %bb.0:
+; GISEL-X86-NEXT:    subl $12, %esp
+; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; GISEL-X86-NEXT:    movl %eax, (%esp)
+; GISEL-X86-NEXT:    calll floorf
+; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    retl
   %c = call float @llvm.floor.f32(float %a)
   ret float %c
 }
@@ -40,14 +49,26 @@ define double @floor_f64(double %a) nounwind readnone {
 ; FASTISEL-X64-NEXT:    popq %rax
 ; FASTISEL-X64-NEXT:    retq
 ;
-; X86-LABEL: floor_f64:
-; X86:       # %bb.0:
-; X86-NEXT:    subl $12, %esp
-; X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; X86-NEXT:    fstpl (%esp)
-; X86-NEXT:    calll floor
-; X86-NEXT:    addl $12, %esp
-; X86-NEXT:    retl
+; GISEL-X64-LABEL: floor_f64:
+; GISEL-X64:       # %bb.0:
+; GISEL-X64-NEXT:    pushq %rax
+; GISEL-X64-NEXT:    callq floor
+; GISEL-X64-NEXT:    popq %rax
+; GISEL-X64-NEXT:    retq
+;
+; GISEL-X86-LABEL: floor_f64:
+; GISEL-X86:       # %bb.0:
+; GISEL-X86-NEXT:    subl $12, %esp
+; GISEL-X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
+; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; GISEL-X86-NEXT:    movl 4(%eax), %eax
+; GISEL-X86-NEXT:    xorl %edx, %edx
+; GISEL-X86-NEXT:    addl %esp, %edx
+; GISEL-X86-NEXT:    movl %ecx, (%esp)
+; GISEL-X86-NEXT:    movl %eax, 4(%edx)
+; GISEL-X86-NEXT:    calll floor
+; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    retl
   %c = call double @llvm.floor.f64(double %a)
   ret double %c
 }
@@ -70,6 +91,15 @@ define x86_fp80 @floor_f80(x86_fp80 %a) nounwind readnone {
 ; X86-NEXT:    calll floorl
 ; X86-NEXT:    addl $12, %esp
 ; X86-NEXT:    retl
+;
+; GISEL-X64-LABEL: floor_f80:
+; GISEL-X64:       # %bb.0:
+; GISEL-X64-NEXT:    subq $24, %rsp
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fstpt (%rsp)
+; GISEL-X64-NEXT:    callq floorl
+; GISEL-X64-NEXT:    addq $24, %rsp
+; GISEL-X64-NEXT:    retq
   %c = call x86_fp80 @llvm.floor.f80(x86_fp80 %a)
   ret x86_fp80 %c
 }
diff --git a/llvm/test/CodeGen/X86/isel-llvm-trunc.ll b/llvm/test/CodeGen/X86/isel-llvm-trunc.ll
index 303017f1e9411..fe2bfd51a8891 100644
--- a/llvm/test/CodeGen/X86/isel-llvm-trunc.ll
+++ b/llvm/test/CodeGen/X86/isel-llvm-trunc.ll
@@ -3,6 +3,8 @@
 ; RUN: llc < %s -mtriple=x86_64-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X64,FASTISEL-X64
 ; RUN: llc < %s -mtriple=i686-linux-gnu | FileCheck %s --check-prefixes=X86
 ; RUN: llc < %s -mtriple=i686-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X86
+; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=GISEL-X64
+; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=X86,GISEL-X86
 
 define float @trunc_f32(float %a) nounwind readnone {
 ; DAG-X64-LABEL: trunc_f32:
@@ -16,14 +18,21 @@ define float @trunc_f32(float %a) nounwind readnone {
 ; FASTISEL-X64-NEXT:    popq %rax
 ; FASTISEL-X64-NEXT:    retq
 ;
-; X86-LABEL: trunc_f32:
-; X86:       # %bb.0:
-; X86-NEXT:    subl $12, %esp
-; X86-NEXT:    flds {{[0-9]+}}(%esp)
-; X86-NEXT:    fstps (%esp)
-; X86-NEXT:    calll truncf
-; X86-NEXT:    addl $12, %esp
-; X86-NEXT:    retl
+; GISEL-X64-LABEL: trunc_f32:
+; GISEL-X64:       # %bb.0:
+; GISEL-X64-NEXT:    pushq %rax
+; GISEL-X64-NEXT:    callq truncf
+; GISEL-X64-NEXT:    popq %rax
+; GISEL-X64-NEXT:    retq
+;
+; GISEL-X86-LABEL: trunc_f32:
+; GISEL-X86:       # %bb.0:
+; GISEL-X86-NEXT:    subl $12, %esp
+; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; GISEL-X86-NEXT:    movl %eax, (%esp)
+; GISEL-X86-NEXT:    calll truncf
+; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    retl
   %c = call float @llvm.trunc.f32(float %a)
   ret float %c
 }
@@ -40,14 +49,26 @@ define double @trunc_f64(double %a) nounwind readnone {
 ; FASTISEL-X64-NEXT:    popq %rax
 ; FASTISEL-X64-NEXT:    retq
 ;
-; X86-LABEL: trunc_f64:
-; X86:       # %bb.0:
-; X86-NEXT:    subl $12, %esp
-; X86-NEXT:    fldl {{[0-9]+}}(%esp)
-; X86-NEXT:    fstpl (%esp)
-; X86-NEXT:    calll trunc
-; X86-NEXT:    addl $12, %esp
-; X86-NEXT:    retl
+; GISEL-X64-LABEL: trunc_f64:
+; GISEL-X64:       # %bb.0:
+; GISEL-X64-NEXT:    pushq %rax
+; GISEL-X64-NEXT:    callq trunc
+; GISEL-X64-NEXT:    popq %rax
+; GISEL-X64-NEXT:    retq
+;
+; GISEL-X86-LABEL: trunc_f64:
+; GISEL-X86:       # %bb.0:
+; GISEL-X86-NEXT:    subl $12, %esp
+; GISEL-X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
+; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; GISEL-X86-NEXT:    movl 4(%eax), %eax
+; GISEL-X86-NEXT:    xorl %edx, %edx
+; GISEL-X86-NEXT:    addl %esp, %edx
+; GISEL-X86-NEXT:    movl %ecx, (%esp)
+; GISEL-X86-NEXT:    movl %eax, 4(%edx)
+; GISEL-X86-NEXT:    calll trunc
+; GISEL-X86-NEXT:    addl $12, %esp
+; GISEL-X86-NEXT:    retl
   %c = call double @llvm.trunc.f64(double %a)
   ret double %c
 }
@@ -70,6 +91,15 @@ define x86_fp80 @trunc_f80(x86_fp80   %a) nounwind readnone {
 ; X86-NEXT:    calll truncl
 ; X86-NEXT:    addl $12, %esp
 ; X86-NEXT:    retl
+;
+; GISEL-X64-LABEL: trunc_f80:
+; GISEL-X64:       # %bb.0:
+; GISEL-X64-NEXT:    subq $24, %rsp
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fstpt (%rsp)
+; GISEL-X64-NEXT:    callq truncl
+; GISEL-X64-NEXT:    addq $24, %rsp
+; GISEL-X64-NEXT:    retq
   %c = call x86_fp80   @llvm.trunc.f80(x86_fp80   %a)
   ret x86_fp80   %c
 }

>From 2f54a2a6770b85e66b43b87d32e79f02649ab65b Mon Sep 17 00:00:00 2001
From: mattarde <mattarde at intel.com>
Date: Sun, 31 Aug 2025 23:40:42 -0700
Subject: [PATCH 3/3] add review comments

---
 llvm/test/CodeGen/X86/isel-llvm-ceil.ll  | 20 ++++++++-
 llvm/test/CodeGen/X86/isel-llvm-floor.ll | 56 ++++++++++--------------
 llvm/test/CodeGen/X86/isel-llvm-trunc.ll | 56 ++++++++++--------------
 3 files changed, 65 insertions(+), 67 deletions(-)

diff --git a/llvm/test/CodeGen/X86/isel-llvm-ceil.ll b/llvm/test/CodeGen/X86/isel-llvm-ceil.ll
index 55c37f71fedcb..c82cfebd4814d 100644
--- a/llvm/test/CodeGen/X86/isel-llvm-ceil.ll
+++ b/llvm/test/CodeGen/X86/isel-llvm-ceil.ll
@@ -4,7 +4,7 @@
 ; RUN: llc < %s -mtriple=i686-linux-gnu | FileCheck %s --check-prefixes=X86
 ; RUN: llc < %s -mtriple=i686-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X86
 ; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=GISEL-X64
-; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=X86,GISEL-X86
+; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=X86
 
 define float @ceil_f32(float %a) nounwind readnone {
 ; DAG-X64-LABEL: ceil_f32:
@@ -26,6 +26,10 @@ define float @ceil_f32(float %a) nounwind readnone {
 ; X86-NEXT:    calll ceilf
 ; X86-NEXT:    addl $12, %esp
 ; X86-NEXT:    retl
+;
+; GISEL-X64-LABEL: ceil_f32:
+; GISEL-X64:       # %bb.0:
+; GISEL-X64-NEXT:    jmp ceilf at PLT # TAILCALL
   %c = call float @llvm.ceil.f32(float %a)
   ret float %c
 }
@@ -50,6 +54,10 @@ define double @ceil_f64(double %a) nounwind readnone {
 ; X86-NEXT:    calll ceil
 ; X86-NEXT:    addl $12, %esp
 ; X86-NEXT:    retl
+;
+; GISEL-X64-LABEL: ceil_f64:
+; GISEL-X64:       # %bb.0:
+; GISEL-X64-NEXT:    jmp ceil at PLT # TAILCALL
   %c = call double @llvm.ceil.f64(double %a)
   ret double %c
 }
@@ -72,6 +80,16 @@ define x86_fp80 @ceil_f80(x86_fp80 %a) nounwind readnone {
 ; X86-NEXT:    calll ceill
 ; X86-NEXT:    addl $12, %esp
 ; X86-NEXT:    retl
+;
+; GISEL-X64-LABEL: ceil_f80:
+; GISEL-X64:       # %bb.0:
+; GISEL-X64-NEXT:    subq $24, %rsp
+; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
+; GISEL-X64-NEXT:    fstpt (%rsp)
+; GISEL-X64-NEXT:    callq ceill at PLT
+; GISEL-X64-NEXT:    addq $24, %rsp
+; GISEL-X64-NEXT:    retq
   %c = call x86_fp80 @llvm.ceil.f80(x86_fp80 %a)
   ret x86_fp80 %c
 }
+
diff --git a/llvm/test/CodeGen/X86/isel-llvm-floor.ll b/llvm/test/CodeGen/X86/isel-llvm-floor.ll
index 2e8799fb6e66f..675925b611263 100644
--- a/llvm/test/CodeGen/X86/isel-llvm-floor.ll
+++ b/llvm/test/CodeGen/X86/isel-llvm-floor.ll
@@ -4,7 +4,7 @@
 ; RUN: llc < %s -mtriple=i686-linux-gnu | FileCheck %s --check-prefixes=X86
 ; RUN: llc < %s -mtriple=i686-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X86
 ; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=GISEL-X64
-; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=X86,GISEL-X86
+; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=X86
 
 define float @floor_f32(float %a) nounwind readnone {
 ; DAG-X64-LABEL: floor_f32:
@@ -18,21 +18,18 @@ define float @floor_f32(float %a) nounwind readnone {
 ; FASTISEL-X64-NEXT:    popq %rax
 ; FASTISEL-X64-NEXT:    retq
 ;
+; X86-LABEL: floor_f32:
+; X86:       # %bb.0:
+; X86-NEXT:    subl $12, %esp
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fstps (%esp)
+; X86-NEXT:    calll floorf
+; X86-NEXT:    addl $12, %esp
+; X86-NEXT:    retl
+;
 ; GISEL-X64-LABEL: floor_f32:
 ; GISEL-X64:       # %bb.0:
-; GISEL-X64-NEXT:    pushq %rax
-; GISEL-X64-NEXT:    callq floorf
-; GISEL-X64-NEXT:    popq %rax
-; GISEL-X64-NEXT:    retq
-;
-; GISEL-X86-LABEL: floor_f32:
-; GISEL-X86:       # %bb.0:
-; GISEL-X86-NEXT:    subl $12, %esp
-; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; GISEL-X86-NEXT:    movl %eax, (%esp)
-; GISEL-X86-NEXT:    calll floorf
-; GISEL-X86-NEXT:    addl $12, %esp
-; GISEL-X86-NEXT:    retl
+; GISEL-X64-NEXT:    jmp floorf at PLT # TAILCALL
   %c = call float @llvm.floor.f32(float %a)
   ret float %c
 }
@@ -49,26 +46,18 @@ define double @floor_f64(double %a) nounwind readnone {
 ; FASTISEL-X64-NEXT:    popq %rax
 ; FASTISEL-X64-NEXT:    retq
 ;
+; X86-LABEL: floor_f64:
+; X86:       # %bb.0:
+; X86-NEXT:    subl $12, %esp
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fstpl (%esp)
+; X86-NEXT:    calll floor
+; X86-NEXT:    addl $12, %esp
+; X86-NEXT:    retl
+;
 ; GISEL-X64-LABEL: floor_f64:
 ; GISEL-X64:       # %bb.0:
-; GISEL-X64-NEXT:    pushq %rax
-; GISEL-X64-NEXT:    callq floor
-; GISEL-X64-NEXT:    popq %rax
-; GISEL-X64-NEXT:    retq
-;
-; GISEL-X86-LABEL: floor_f64:
-; GISEL-X86:       # %bb.0:
-; GISEL-X86-NEXT:    subl $12, %esp
-; GISEL-X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
-; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; GISEL-X86-NEXT:    movl 4(%eax), %eax
-; GISEL-X86-NEXT:    xorl %edx, %edx
-; GISEL-X86-NEXT:    addl %esp, %edx
-; GISEL-X86-NEXT:    movl %ecx, (%esp)
-; GISEL-X86-NEXT:    movl %eax, 4(%edx)
-; GISEL-X86-NEXT:    calll floor
-; GISEL-X86-NEXT:    addl $12, %esp
-; GISEL-X86-NEXT:    retl
+; GISEL-X64-NEXT:    jmp floor at PLT # TAILCALL
   %c = call double @llvm.floor.f64(double %a)
   ret double %c
 }
@@ -97,9 +86,10 @@ define x86_fp80 @floor_f80(x86_fp80 %a) nounwind readnone {
 ; GISEL-X64-NEXT:    subq $24, %rsp
 ; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
 ; GISEL-X64-NEXT:    fstpt (%rsp)
-; GISEL-X64-NEXT:    callq floorl
+; GISEL-X64-NEXT:    callq floorl at PLT
 ; GISEL-X64-NEXT:    addq $24, %rsp
 ; GISEL-X64-NEXT:    retq
   %c = call x86_fp80 @llvm.floor.f80(x86_fp80 %a)
   ret x86_fp80 %c
 }
+
diff --git a/llvm/test/CodeGen/X86/isel-llvm-trunc.ll b/llvm/test/CodeGen/X86/isel-llvm-trunc.ll
index fe2bfd51a8891..9bf06193961a3 100644
--- a/llvm/test/CodeGen/X86/isel-llvm-trunc.ll
+++ b/llvm/test/CodeGen/X86/isel-llvm-trunc.ll
@@ -4,7 +4,7 @@
 ; RUN: llc < %s -mtriple=i686-linux-gnu | FileCheck %s --check-prefixes=X86
 ; RUN: llc < %s -mtriple=i686-linux-gnu -fast-isel | FileCheck %s --check-prefixes=X86
 ; RUN: llc < %s -mtriple=x86_64-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=GISEL-X64
-; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=X86,GISEL-X86
+; RUN: llc < %s -mtriple=i686-linux-gnu -global-isel -global-isel-abort=2 | FileCheck %s --check-prefixes=X86
 
 define float @trunc_f32(float %a) nounwind readnone {
 ; DAG-X64-LABEL: trunc_f32:
@@ -18,21 +18,18 @@ define float @trunc_f32(float %a) nounwind readnone {
 ; FASTISEL-X64-NEXT:    popq %rax
 ; FASTISEL-X64-NEXT:    retq
 ;
+; X86-LABEL: trunc_f32:
+; X86:       # %bb.0:
+; X86-NEXT:    subl $12, %esp
+; X86-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-NEXT:    fstps (%esp)
+; X86-NEXT:    calll truncf
+; X86-NEXT:    addl $12, %esp
+; X86-NEXT:    retl
+;
 ; GISEL-X64-LABEL: trunc_f32:
 ; GISEL-X64:       # %bb.0:
-; GISEL-X64-NEXT:    pushq %rax
-; GISEL-X64-NEXT:    callq truncf
-; GISEL-X64-NEXT:    popq %rax
-; GISEL-X64-NEXT:    retq
-;
-; GISEL-X86-LABEL: trunc_f32:
-; GISEL-X86:       # %bb.0:
-; GISEL-X86-NEXT:    subl $12, %esp
-; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; GISEL-X86-NEXT:    movl %eax, (%esp)
-; GISEL-X86-NEXT:    calll truncf
-; GISEL-X86-NEXT:    addl $12, %esp
-; GISEL-X86-NEXT:    retl
+; GISEL-X64-NEXT:    jmp truncf at PLT # TAILCALL
   %c = call float @llvm.trunc.f32(float %a)
   ret float %c
 }
@@ -49,26 +46,18 @@ define double @trunc_f64(double %a) nounwind readnone {
 ; FASTISEL-X64-NEXT:    popq %rax
 ; FASTISEL-X64-NEXT:    retq
 ;
+; X86-LABEL: trunc_f64:
+; X86:       # %bb.0:
+; X86-NEXT:    subl $12, %esp
+; X86-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-NEXT:    fstpl (%esp)
+; X86-NEXT:    calll trunc
+; X86-NEXT:    addl $12, %esp
+; X86-NEXT:    retl
+;
 ; GISEL-X64-LABEL: trunc_f64:
 ; GISEL-X64:       # %bb.0:
-; GISEL-X64-NEXT:    pushq %rax
-; GISEL-X64-NEXT:    callq trunc
-; GISEL-X64-NEXT:    popq %rax
-; GISEL-X64-NEXT:    retq
-;
-; GISEL-X86-LABEL: trunc_f64:
-; GISEL-X86:       # %bb.0:
-; GISEL-X86-NEXT:    subl $12, %esp
-; GISEL-X86-NEXT:    leal {{[0-9]+}}(%esp), %eax
-; GISEL-X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
-; GISEL-X86-NEXT:    movl 4(%eax), %eax
-; GISEL-X86-NEXT:    xorl %edx, %edx
-; GISEL-X86-NEXT:    addl %esp, %edx
-; GISEL-X86-NEXT:    movl %ecx, (%esp)
-; GISEL-X86-NEXT:    movl %eax, 4(%edx)
-; GISEL-X86-NEXT:    calll trunc
-; GISEL-X86-NEXT:    addl $12, %esp
-; GISEL-X86-NEXT:    retl
+; GISEL-X64-NEXT:    jmp trunc at PLT # TAILCALL
   %c = call double @llvm.trunc.f64(double %a)
   ret double %c
 }
@@ -97,9 +86,10 @@ define x86_fp80 @trunc_f80(x86_fp80   %a) nounwind readnone {
 ; GISEL-X64-NEXT:    subq $24, %rsp
 ; GISEL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
 ; GISEL-X64-NEXT:    fstpt (%rsp)
-; GISEL-X64-NEXT:    callq truncl
+; GISEL-X64-NEXT:    callq truncl at PLT
 ; GISEL-X64-NEXT:    addq $24, %rsp
 ; GISEL-X64-NEXT:    retq
   %c = call x86_fp80   @llvm.trunc.f80(x86_fp80   %a)
   ret x86_fp80   %c
 }
+



More information about the llvm-commits mailing list