xref: /llvm-project/clang/test/CodeGenHLSL/builtins/fmod.hlsl (revision 762f1b17b2815ccdfb4e5cb5412cb6210db92f73)
1// DirectX target:
2//
3// ---------- Native Half support test -----------
4//
5// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \
6// RUN:   dxil-pc-shadermodel6.3-library %s -fnative-half-type \
7// RUN:   -emit-llvm -disable-llvm-passes -o - | FileCheck %s \
8// RUN:   -DFNATTRS="noundef nofpclass(nan inf)" -DTYPE=half
9
10//
11// ---------- No Native Half support test -----------
12//
13// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \
14// RUN:   dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \
15// RUN:   -o - | FileCheck %s \
16// RUN:   -DFNATTRS="noundef nofpclass(nan inf)" -DTYPE=float
17
18
19// Spirv target:
20//
21// ---------- Native Half support test -----------
22//
23// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \
24// RUN:   spirv-unknown-vulkan-compute %s -fnative-half-type \
25// RUN:   -emit-llvm -disable-llvm-passes -o - | FileCheck %s \
26// RUN:   -DFNATTRS="spir_func noundef nofpclass(nan inf)" -DTYPE=half
27
28//
29// ---------- No Native Half support test -----------
30//
31// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \
32// RUN:   spirv-unknown-vulkan-compute %s -emit-llvm -disable-llvm-passes \
33// RUN:   -o - | FileCheck %s \
34// RUN:   -DFNATTRS="spir_func noundef nofpclass(nan inf)" -DTYPE=float
35
36
37
38// CHECK: define [[FNATTRS]] [[TYPE]] @
39// CHECK: %fmod = frem reassoc nnan ninf nsz arcp afn [[TYPE]]
40// CHECK: ret [[TYPE]] %fmod
41half test_fmod_half(half p0, half p1) { return fmod(p0, p1); }
42
43// CHECK: define [[FNATTRS]] <2 x [[TYPE]]> @
44// CHECK: %fmod = frem reassoc nnan ninf nsz arcp afn <2 x [[TYPE]]>
45// CHECK: ret <2 x [[TYPE]]> %fmod
46half2 test_fmod_half2(half2 p0, half2 p1) { return fmod(p0, p1); }
47
48// CHECK: define [[FNATTRS]] <3 x [[TYPE]]> @
49// CHECK: %fmod = frem reassoc nnan ninf nsz arcp afn <3 x [[TYPE]]>
50// CHECK: ret <3 x [[TYPE]]> %fmod
51half3 test_fmod_half3(half3 p0, half3 p1) { return fmod(p0, p1); }
52
53// CHECK: define [[FNATTRS]] <4 x [[TYPE]]> @
54// CHECK: %fmod = frem reassoc nnan ninf nsz arcp afn <4 x [[TYPE]]>
55// CHECK: ret <4 x [[TYPE]]> %fmod
56half4 test_fmod_half4(half4 p0, half4 p1) { return fmod(p0, p1); }
57
58// CHECK: define [[FNATTRS]] float @
59// CHECK: %fmod = frem reassoc nnan ninf nsz arcp afn float
60// CHECK: ret float %fmod
61float test_fmod_float(float p0, float p1) { return fmod(p0, p1); }
62
63// CHECK: define [[FNATTRS]] <2 x float> @
64// CHECK: %fmod = frem reassoc nnan ninf nsz arcp afn <2 x float>
65// CHECK: ret <2 x float> %fmod
66float2 test_fmod_float2(float2 p0, float2 p1) { return fmod(p0, p1); }
67
68// CHECK: define [[FNATTRS]] <3 x float> @
69// CHECK: %fmod = frem reassoc nnan ninf nsz arcp afn <3 x float>
70// CHECK: ret <3 x float> %fmod
71float3 test_fmod_float3(float3 p0, float3 p1) { return fmod(p0, p1); }
72
73// CHECK: define [[FNATTRS]] <4 x float> @
74// CHECK: %fmod = frem reassoc nnan ninf nsz arcp afn <4 x float>
75// CHECK: ret <4 x float> %fmod
76float4 test_fmod_float4(float4 p0, float4 p1) { return fmod(p0, p1); }
77
78