llvm-project/llvm/test/CodeGen/Mips/inlineasm-constraints-softfloat.ll
YunQiang Su 461274b81d MIPS: Fix asm constraints "f" and "r" for softfloat (#79116)
This include 2 fixes:
        1. Disallow 'f' for softfloat.
        2. Allow 'r' for softfloat.

Currently, 'f' is accpeted by clang, then LLVM meets an internal error.

'r' is rejected by LLVM by: couldn't allocate input reg for constraint
'r'.

Fixes: #64241, #63632

---------

Co-authored-by: Fangrui Song <i@maskray.me>
(cherry picked from commit c88beb4112d5bbf07d76a615ab7f13ba2ba023e6)
2024-02-27 09:18:54 -08:00

49 lines
1.4 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
; RUN: llc -march=mips < %s | FileCheck %s --check-prefix=MIPS32
; RUN: llc -march=mips64 < %s | FileCheck %s --check-prefix=MIPS64
define dso_local void @read_double(ptr nocapture noundef readonly %0) local_unnamed_addr #0 {
; MIPS32-LABEL: read_double:
; MIPS32: # %bb.0:
; MIPS32-NEXT: lw $2, 4($4)
; MIPS32-NEXT: lw $3, 0($4)
; MIPS32-NEXT: #APP
; MIPS32-NEXT: #NO_APP
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
;
; MIPS64-LABEL: read_double:
; MIPS64: # %bb.0:
; MIPS64-NEXT: ld $2, 0($4)
; MIPS64-NEXT: #APP
; MIPS64-NEXT: #NO_APP
; MIPS64-NEXT: jr $ra
; MIPS64-NEXT: nop
%2 = load double, ptr %0, align 8
tail call void asm sideeffect "", "r,~{$1}"(double %2)
ret void
}
define dso_local void @read_float(ptr nocapture noundef readonly %0) local_unnamed_addr #0 {
; MIPS32-LABEL: read_float:
; MIPS32: # %bb.0:
; MIPS32-NEXT: lw $2, 0($4)
; MIPS32-NEXT: #APP
; MIPS32-NEXT: #NO_APP
; MIPS32-NEXT: jr $ra
; MIPS32-NEXT: nop
;
; MIPS64-LABEL: read_float:
; MIPS64: # %bb.0:
; MIPS64-NEXT: lw $2, 0($4)
; MIPS64-NEXT: #APP
; MIPS64-NEXT: #NO_APP
; MIPS64-NEXT: jr $ra
; MIPS64-NEXT: nop
%2 = load float, ptr %0, align 8
tail call void asm sideeffect "", "r,~{$1}"(float %2)
ret void
}
attributes #0 = { "target-features"="+soft-float" "use-soft-float"="true" }