mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
0a74d2ec75
This patch introduces a function pass to inject the scalar-to-vector mappings stored in the TargetLIbraryInfo (TLI) into the Vector Function ABI (VFABI) variants attribute. The test is testing the injection for three vector libraries supported by the TLI (Accelerate, SVML, MASSV). The pass does not change any of the analysis associated to the function. Differential Revision: https://reviews.llvm.org/D70107
62 lines
3.1 KiB
LLVM
62 lines
3.1 KiB
LLVM
; RUN: opt -vector-library=SVML -inject-tli-mappings -S < %s | FileCheck %s --check-prefixes=COMMON,SVML
|
|
; RUN: opt -vector-library=SVML -passes=inject-tli-mappings -S < %s | FileCheck %s --check-prefixes=COMMON,SVML
|
|
; RUN: opt -vector-library=MASSV -inject-tli-mappings -S < %s | FileCheck %s --check-prefixes=COMMON,MASSV
|
|
; RUN: opt -vector-library=MASSV -passes=inject-tli-mappings -S < %s | FileCheck %s --check-prefixes=COMMON,MASSV
|
|
; RUN: opt -vector-library=Accelerate -inject-tli-mappings -S < %s | FileCheck %s --check-prefixes=COMMON,ACCELERATE
|
|
; RUN: opt -vector-library=Accelerate -passes=inject-tli-mappings -S < %s | FileCheck %s --check-prefixes=COMMON,ACCELERATE
|
|
|
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
|
target triple = "x86_64-unknown-linux-gnu"
|
|
|
|
; COMMON-LABEL: @llvm.compiler.used = appending global
|
|
; SVML-SAME: [3 x i8*] [
|
|
; SVML-SAME: i8* bitcast (<2 x double> (<2 x double>)* @__svml_sin2 to i8*),
|
|
; SVML-SAME: i8* bitcast (<4 x double> (<4 x double>)* @__svml_sin4 to i8*),
|
|
; SVML-SAME: i8* bitcast (<8 x double> (<8 x double>)* @__svml_sin8 to i8*)
|
|
; MASSV-SAME: [2 x i8*] [
|
|
; MASSV-SAME: i8* bitcast (<2 x double> (<2 x double>)* @__sind2_massv to i8*),
|
|
; MASSV-SAME: i8* bitcast (<4 x float> (<4 x float>)* @__log10f4_massv to i8*)
|
|
; ACCELERATE-SAME: [1 x i8*] [
|
|
; ACCELERATE-SAME: i8* bitcast (<4 x float> (<4 x float>)* @vlog10f to i8*)
|
|
; COMMON-SAME: ], section "llvm.metadata"
|
|
|
|
define double @sin_f64(double %in) {
|
|
; COMMON-LABEL: @sin_f64(
|
|
; SVML: call double @sin(double %{{.*}}) #[[SIN:[0-9]+]]
|
|
; MASSV: call double @sin(double %{{.*}}) #[[SIN:[0-9]+]]
|
|
; ACCELERATE: call double @sin(double %{{.*}})
|
|
; No mapping of "sin" to a vector function for Accelerate.
|
|
; ACCELERATE-NOT: _ZGV_LLVM_{{.*}}_sin({{.*}})
|
|
%call = tail call double @sin(double %in)
|
|
ret double %call
|
|
}
|
|
|
|
declare double @sin(double) #0
|
|
|
|
define float @call_llvm.log10.f32(float %in) {
|
|
; COMMON-LABEL: @call_llvm.log10.f32(
|
|
; SVML: call float @llvm.log10.f32(float %{{.*}})
|
|
; MASSV: call float @llvm.log10.f32(float %{{.*}}) #[[LOG10:[0-9]+]]
|
|
; ACCELERATE: call float @llvm.log10.f32(float %{{.*}}) #[[LOG10:[0-9]+]]
|
|
; No mapping of "llvm.log10.f32" to a vector function for SVML.
|
|
; SVML-NOT: _ZGV_LLVM_{{.*}}_llvm.log10.f32({{.*}})
|
|
%call = tail call float @llvm.log10.f32(float %in)
|
|
ret float %call
|
|
}
|
|
|
|
declare float @llvm.log10.f32(float) #0
|
|
attributes #0 = { nounwind readnone }
|
|
|
|
; SVML: attributes #[[SIN]] = { "vector-function-abi-variant"=
|
|
; SVML-SAME: "_ZGV_LLVM_N2v_sin(__svml_sin2),
|
|
; SVML-SAME: _ZGV_LLVM_N4v_sin(__svml_sin4),
|
|
; SVML-SAME: _ZGV_LLVM_N8v_sin(__svml_sin8)" }
|
|
|
|
; MASSV: attributes #[[SIN]] = { "vector-function-abi-variant"=
|
|
; MASSV-SAME: "_ZGV_LLVM_N2v_sin(__sind2_massv)" }
|
|
; MASSV: attributes #[[LOG10]] = { "vector-function-abi-variant"=
|
|
; MASSV-SAME: "_ZGV_LLVM_N4v_llvm.log10.f32(__log10f4_massv)" }
|
|
|
|
; ACCELERATE: attributes #[[LOG10]] = { "vector-function-abi-variant"=
|
|
; ACCELERATE-SAME: "_ZGV_LLVM_N4v_llvm.log10.f32(vlog10f)" }
|