Files
clang-p2996/llvm/test/CodeGen/AArch64/fpmode.ll
David Green d659bd1635 [GlobalISel][AArch64] Tail call libcalls. (#74929)
This tries to allow libcalls to be tail called, using a similar method
to DAG where the type is checked to make sure they match, and if so the
backend, through lowerCall checks that the tailcall is valid for all
arguments.
2024-01-03 07:59:36 +00:00

74 lines
2.3 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
; RUN: llc -mtriple=aarch64-none-linux-gnu %s -o - | FileCheck --check-prefix=DAG %s
; RUN: llc -mtriple=aarch64-none-linux-gnu -global-isel %s -o - | FileCheck --check-prefix=GIS %s
declare i32 @llvm.get.fpmode.i32()
declare void @llvm.set.fpmode.i32(i32 %fpmode)
declare void @llvm.reset.fpmode()
define i32 @func_get_fpmode_soft() #0 {
; DAG-LABEL: func_get_fpmode_soft:
; DAG: // %bb.0: // %entry
; DAG-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; DAG-NEXT: add x0, sp, #12
; DAG-NEXT: bl fegetmode
; DAG-NEXT: ldr w0, [sp, #12]
; DAG-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
; DAG-NEXT: ret
;
; GIS-LABEL: func_get_fpmode_soft:
; GIS: // %bb.0: // %entry
; GIS-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; GIS-NEXT: add x0, sp, #12
; GIS-NEXT: bl fegetmode
; GIS-NEXT: ldr w0, [sp, #12]
; GIS-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
; GIS-NEXT: ret
entry:
%fpmode = call i32 @llvm.get.fpmode.i32()
ret i32 %fpmode
}
define void @func_set_fpmode_soft(i32 %fpmode) #0 {
; DAG-LABEL: func_set_fpmode_soft:
; DAG: // %bb.0: // %entry
; DAG-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; DAG-NEXT: str w0, [sp, #12]
; DAG-NEXT: add x0, sp, #12
; DAG-NEXT: bl fesetmode
; DAG-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
; DAG-NEXT: ret
;
; GIS-LABEL: func_set_fpmode_soft:
; GIS: // %bb.0: // %entry
; GIS-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; GIS-NEXT: str w0, [sp, #12]
; GIS-NEXT: add x0, sp, #12
; GIS-NEXT: bl fesetmode
; GIS-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
; GIS-NEXT: ret
entry:
call void @llvm.set.fpmode.i32(i32 %fpmode)
ret void
}
define void @func_reset_fpmode_soft() #0 {
; DAG-LABEL: func_reset_fpmode_soft:
; DAG: // %bb.0: // %entry
; DAG-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; DAG-NEXT: mov x0, #-1 // =0xffffffffffffffff
; DAG-NEXT: bl fesetmode
; DAG-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
; DAG-NEXT: ret
;
; GIS-LABEL: func_reset_fpmode_soft:
; GIS: // %bb.0: // %entry
; GIS-NEXT: mov x0, #-1 // =0xffffffffffffffff
; GIS-NEXT: b fesetmode
entry:
call void @llvm.reset.fpmode()
ret void
}
attributes #0 = { nounwind "use-soft-float"="true" }