mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
2fe8d357e6
This patch adds support for Darwin's libsystem math vector functions to TLI. Darwin's libsystem provides a range of vector functions for libm functions. This initial patch only adds the 2 x double and 4 x float versions, which are available on both X86 and ARM64. On X86, wider vector versions are supported as well. Reviewed By: jroelofs Differential Revision: https://reviews.llvm.org/D101856
65 lines
2.3 KiB
LLVM
65 lines
2.3 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-attributes
|
|
; RUN: opt -vector-library=Darwin_libsystem_m -replace-with-veclib -S < %s | FileCheck %s
|
|
|
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
|
target triple = "x86_64-unknown-linux-gnu"
|
|
|
|
define <4 x float> @sin_v4f32(<4 x float> %in) {
|
|
; CHECK-LABEL: define {{[^@]+}}@sin_v4f32
|
|
; CHECK-SAME: (<4 x float> [[IN:%.*]]) {
|
|
; CHECK-NEXT: [[TMP1:%.*]] = call <4 x float> @_simd_sin_f4(<4 x float> [[IN]])
|
|
; CHECK-NEXT: ret <4 x float> [[TMP1]]
|
|
;
|
|
%call = call <4 x float> @llvm.sin.v4f32(<4 x float> %in)
|
|
ret <4 x float> %call
|
|
}
|
|
declare <4 x float> @llvm.sin.v4f32(<4 x float>) #0
|
|
|
|
define <2 x double> @sin_v2f64(<2 x double> %in) {
|
|
; CHECK-LABEL: define {{[^@]+}}@sin_v2f64
|
|
; CHECK-SAME: (<2 x double> [[IN:%.*]]) {
|
|
; CHECK-NEXT: [[TMP1:%.*]] = call <2 x double> @_simd_sin_d2(<2 x double> [[IN]])
|
|
; CHECK-NEXT: ret <2 x double> [[TMP1]]
|
|
;
|
|
%call = call <2 x double> @llvm.sin.v2f64(<2 x double> %in)
|
|
ret <2 x double> %call
|
|
}
|
|
declare <2 x double> @llvm.sin.v2f64(<2 x double>)
|
|
|
|
|
|
define <2 x double> @exp_v2(<2 x double> %in) {
|
|
; CHECK-LABEL: define {{[^@]+}}@exp_v2
|
|
; CHECK-SAME: (<2 x double> [[IN:%.*]]) {
|
|
; CHECK-NEXT: [[TMP1:%.*]] = call <2 x double> @_simd_exp_d2(<2 x double> [[IN]])
|
|
; CHECK-NEXT: ret <2 x double> [[TMP1]]
|
|
;
|
|
%call = call <2 x double> @llvm.exp.v2f64(<2 x double> %in)
|
|
ret <2 x double> %call
|
|
}
|
|
|
|
declare <2 x double> @llvm.exp.v2f64(<2 x double>) #0
|
|
|
|
define <4 x float> @exp_f32(<4 x float> %in) {
|
|
; CHECK-LABEL: define {{[^@]+}}@exp_f32
|
|
; CHECK-SAME: (<4 x float> [[IN:%.*]]) {
|
|
; CHECK-NEXT: [[TMP1:%.*]] = call <4 x float> @_simd_exp_f4(<4 x float> [[IN]])
|
|
; CHECK-NEXT: ret <4 x float> [[TMP1]]
|
|
;
|
|
%call = call <4 x float> @llvm.exp.v4f32(<4 x float> %in)
|
|
ret <4 x float> %call
|
|
}
|
|
|
|
declare <4 x float> @llvm.exp.v4f32(<4 x float>) #0
|
|
|
|
define <3 x double> @exp_v3(<3 x double> %in) {
|
|
; CHECK-LABEL: define {{[^@]+}}@exp_v3
|
|
; CHECK-SAME: (<3 x double> [[IN:%.*]]) {
|
|
; CHECK-NEXT: [[CALL:%.*]] = call <3 x double> @llvm.exp.v3f64(<3 x double> [[IN]])
|
|
; CHECK-NEXT: ret <3 x double> [[CALL]]
|
|
;
|
|
%call = call <3 x double> @llvm.exp.v3f64(<3 x double> %in)
|
|
ret <3 x double> %call
|
|
}
|
|
|
|
declare <3 x double> @llvm.exp.v3f64(<3 x double>) #0
|