[llvm] [llvm] Ensure that soft float targets don't use float/vector code for memops. (PR #107022)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Mon May 5 03:32:55 PDT 2025


================
@@ -0,0 +1,128 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc -mtriple=arm < %s | FileCheck %s -check-prefix ARM
+; RUN: llc -mtriple=arm -mattr +neon < %s | FileCheck %s -check-prefix ARM-NEON
+
+define void @memop_soft_float() "use-soft-float"="true" {
+; ARM-LABEL: memop_soft_float:
+; ARM:       @ %bb.0:
+; ARM-NEXT:    push {r4, lr}
+; ARM-NEXT:    mov r2, #0
+; ARM-NEXT:    mov lr, #0
+; ARM-NEXT:    ldm r2!, {r0, r1, r3, r4}
+; ARM-NEXT:    mov r12, #0
+; ARM-NEXT:    stm lr!, {r0, r1, r3, r4}
+; ARM-NEXT:    ldm r2, {r0, r1, r3, r4}
+; ARM-NEXT:    stm lr, {r0, r1, r3, r4}
+; ARM-NEXT:    mov r0, #28
+; ARM-NEXT:    str r12, [r0]
+; ARM-NEXT:    mov r0, #24
+; ARM-NEXT:    str r12, [r0]
+; ARM-NEXT:    mov r0, #20
+; ARM-NEXT:    str r12, [r0]
+; ARM-NEXT:    mov r0, #16
+; ARM-NEXT:    str r12, [r0]
+; ARM-NEXT:    mov r0, #12
+; ARM-NEXT:    str r12, [r0]
+; ARM-NEXT:    mov r0, #8
+; ARM-NEXT:    str r12, [r0]
+; ARM-NEXT:    mov r0, #4
+; ARM-NEXT:    str r12, [r0]
+; ARM-NEXT:    str r12, [r12]
+; ARM-NEXT:    pop {r4, lr}
+; ARM-NEXT:    mov pc, lr
+;
+; ARM-NEON-LABEL: memop_soft_float:
+; ARM-NEON:       @ %bb.0:
+; ARM-NEON-NEXT:    push {r4, lr}
+; ARM-NEON-NEXT:    mov r2, #0
+; ARM-NEON-NEXT:    mov lr, #0
+; ARM-NEON-NEXT:    ldm r2!, {r0, r1, r3, r4}
+; ARM-NEON-NEXT:    mov r12, #0
+; ARM-NEON-NEXT:    stm lr!, {r0, r1, r3, r4}
+; ARM-NEON-NEXT:    ldm r2, {r0, r1, r3, r4}
+; ARM-NEON-NEXT:    stm lr, {r0, r1, r3, r4}
+; ARM-NEON-NEXT:    mov r0, #28
+; ARM-NEON-NEXT:    str r12, [r0]
+; ARM-NEON-NEXT:    mov r0, #24
+; ARM-NEON-NEXT:    str r12, [r0]
+; ARM-NEON-NEXT:    mov r0, #20
+; ARM-NEON-NEXT:    str r12, [r0]
+; ARM-NEON-NEXT:    mov r0, #16
+; ARM-NEON-NEXT:    str r12, [r0]
+; ARM-NEON-NEXT:    mov r0, #12
+; ARM-NEON-NEXT:    str r12, [r0]
+; ARM-NEON-NEXT:    mov r0, #8
+; ARM-NEON-NEXT:    str r12, [r0]
+; ARM-NEON-NEXT:    mov r0, #4
+; ARM-NEON-NEXT:    str r12, [r0]
+; ARM-NEON-NEXT:    str r12, [r12]
+; ARM-NEON-NEXT:    pop {r4, lr}
+; ARM-NEON-NEXT:    mov pc, lr
+    call void @llvm.memcpy.p0.p0.i32(ptr null, ptr null, i32 32, i1 true)
+    call void @llvm.memset.p0.i32(ptr null, i8 0, i32 32, i1 true)
+    ret void
----------------
arsenm wrote:

2 space indent. Also avoid the UB null accesses? 

https://github.com/llvm/llvm-project/pull/107022


More information about the llvm-commits mailing list