File: math-lib-value.ispc

package info (click to toggle)
ispc 1.28.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 97,620 kB
  • sloc: cpp: 77,067; python: 8,303; yacc: 3,337; lex: 1,126; ansic: 631; sh: 475; makefile: 17
file content (49 lines) | stat: -rw-r--r-- 2,368 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// This test checks that the math library is correctly set based on the user
// provided command line option --math-lib.
// __math_lib value is defined in the core.isph file without the initialization
// when ISPC compiles stdlib bitcode files during ISPC build. Later, this value
// is initialized with the value provided by the user via macro definition in
// ISPC_MATH_LIB_VAL defined in module.cpp file (where preprocessor is
// initialized). This value is then used in the math functions to call the
// appropriate math library function.

// RUN: %{ispc} %s --target=host --nowrap 2>&1 --debug-phase=2:2 -o t.o | FileCheck %s --check-prefix=CHECK-ISPC
// RUN: %{ispc} %s --target=host --math-lib=default --nowrap 2>&1 --debug-phase=2:2 -o t.o | FileCheck %s --check-prefix=CHECK-ISPC
// RUN: %{ispc} %s --target=host --math-lib=fast --nowrap 2>&1 --debug-phase=2:2 -o t.o | FileCheck %s --check-prefix=CHECK-FAST
// RUN: %{ispc} %s --target=host --math-lib=svml --nowrap 2>&1 --debug-phase=2:2 -o t.o | FileCheck %s --check-prefix=CHECK-SVML
// RUN: %{ispc} %s --target=host --math-lib=system --nowrap 2>&1 --debug-phase=2:2 -o t.o | FileCheck %s --check-prefix=CHECK-SYSTEM

// RUN: %{ispc} %s --target=host --math-lib=default --nowrap 2>&1 --emit-llvm-text -o - | FileCheck %s --check-prefix=CHECK-FINAL-ISPC
// RUN: %{ispc} %s --target=host --math-lib=svml --nowrap 2>&1 --emit-llvm-text -o - | FileCheck %s --check-prefix=CHECK-FINAL-SVML
// RUN: %{ispc} %s --target=host --math-lib=system --nowrap 2>&1 --emit-llvm-text -o - | FileCheck %s --check-prefix=CHECK-FINAL-SYSTEM

// SVML is supported for x86 only
// REQUIRES: X86_ENABLED && !MACOS_HOST

// CHECK-ISPC: @__math_lib = constant i32 0
// CHECK-FINAL-ISPC-LABEL: @foo___vyf
// CHECK-FINAL-ISPC-NEXT: allocas:
// CHECK-FINAL-ISPC-NEXT: {{.*}} fmul
// CHECK-FINAL-ISPC-NEXT: {{.*}} @llvm.sqrt.
// CHECK-FINAL-ISPC-NEXT: ret

// CHECK-FAST: @__math_lib = constant i32 1

// CHECK-SVML: @__math_lib = constant i32 2
// CHECK-FINAL-SVML-LABEL: @foo___vyf
// CHECK-FINAL-SVML-NEXT: allocas:
// CHECK-FINAL-SVML-NEXT: {{.*}} fmul
// CHECK-FINAL-SVML-NEXT: {{.*}} @__svml_sqrtf
// CHECK-FINAL-SVML-NEXT: ret

// CHECK-SYSTEM: @__math_lib = constant i32 3
// CHECK-FINAL-SYSTEM: call float @sinf(
// TODO! tail call?

float foo(float a) {
    return sqrt(a / 2.);
}

float bar(float a) {
    return sin(a);
}