[llvm] [ARM] Add instruction selection for strict FP (PR #160696)
David Green via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 21 07:21:39 PDT 2025
================
@@ -0,0 +1,144 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc -mtriple arm-- -mattr=+vfp4 -O0 -o - %s | FileCheck %s
+; RUN: llc -mtriple arm-- -mattr=+vfp4 -O3 -o - %s | FileCheck %s --check-prefix=SUBOPTIMAL
+
+
+declare float @llvm.experimental.constrained.sitofp.f32.i32(i32, metadata, metadata)
+declare float @llvm.experimental.constrained.sitofp.f32.i16(i16, metadata, metadata)
+declare i1 @llvm.experimental.constrained.fcmp.f32(float, float, metadata, metadata)
+declare float @llvm.experimental.constrained.uitofp.f32.i16(i16, metadata, metadata)
+
+define i32 @test() #0 {
+; CHECK-LABEL: test:
+; CHECK: @ %bb.0: @ %entry
+; CHECK-NEXT: sub sp, sp, #8
+; CHECK-NEXT: mov r0, #53477376
+; CHECK-NEXT: orr r0, r0, #1073741824
+; CHECK-NEXT: str r0, [sp, #4]
+; CHECK-NEXT: mov r0, #-2147483647
+; CHECK-NEXT: str r0, [sp]
+; CHECK-NEXT: vldr d16, [sp]
+; CHECK-NEXT: vldr d17, .LCPI0_0
+; CHECK-NEXT: vsub.f64 d16, d16, d17
+; CHECK-NEXT: vcvt.f32.f64 s0, d16
+; CHECK-NEXT: vcmp.f32 s0, s0
+; CHECK-NEXT: vmrs APSR_nzcv, fpscr
+; CHECK-NEXT: mov r0, #0
+; CHECK-NEXT: moveq r0, #1
+; CHECK-NEXT: add sp, sp, #8
+; CHECK-NEXT: mov pc, lr
+; CHECK-NEXT: .p2align 3
+; CHECK-NEXT: @ %bb.1:
+; CHECK-NEXT: .LCPI0_0:
+; CHECK-NEXT: .long 2147483648 @ double 4503601774854144
+; CHECK-NEXT: .long 1127219200
+;
+; SUBOPTIMAL-LABEL: test:
+; SUBOPTIMAL: @ %bb.0: @ %entry
+; SUBOPTIMAL-NEXT: sub sp, sp, #8
+; SUBOPTIMAL-NEXT: mov r0, #53477376
+; SUBOPTIMAL-NEXT: orr r0, r0, #1073741824
+; SUBOPTIMAL-NEXT: str r0, [sp, #4]
+; SUBOPTIMAL-NEXT: mov r0, #-2147483647
+; SUBOPTIMAL-NEXT: str r0, [sp]
+; SUBOPTIMAL-NEXT: vldr d16, [sp]
+; SUBOPTIMAL-NEXT: vldr d17, .LCPI0_0
+; SUBOPTIMAL-NEXT: vsub.f64 d16, d16, d17
+; SUBOPTIMAL-NEXT: vcvt.f32.f64 s0, d16
+; SUBOPTIMAL-NEXT: vcmp.f32 s0, s0
+; SUBOPTIMAL-NEXT: vmrs APSR_nzcv, fpscr
+; SUBOPTIMAL-NEXT: mov r0, #0
+; SUBOPTIMAL-NEXT: moveq r0, #1
+; SUBOPTIMAL-NEXT: add sp, sp, #8
+; SUBOPTIMAL-NEXT: mov pc, lr
+; SUBOPTIMAL-NEXT: .p2align 3
+; SUBOPTIMAL-NEXT: @ %bb.1:
+; SUBOPTIMAL-NEXT: .LCPI0_0:
+; SUBOPTIMAL-NEXT: .long 2147483648 @ double 4503601774854144
+; SUBOPTIMAL-NEXT: .long 1127219200
+entry:
+ %conv = call float @llvm.experimental.constrained.sitofp.f32.i32(i32 1, metadata !"round.tonearest", metadata !"fpexcept.strict") #1
----------------
davemgreen wrote:
Should these have argument inputs to make sure they do not fold away, or is the intent to test constants?
https://github.com/llvm/llvm-project/pull/160696
More information about the llvm-commits
mailing list