|
4 | 4 | //
|
5 | 5 | // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \
|
6 | 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 |
| 7 | +// RUN: -emit-llvm -o - | FileCheck %s -DFNATTRS="noundef nofpclass(nan inf)" \ |
| 8 | +// RUN: -DTYPE=half -DINT_TYPE=f16 --check-prefixes=DXCHECK |
9 | 9 |
|
10 | 10 | //
|
11 | 11 | // ---------- No Native Half support test -----------
|
12 | 12 | //
|
13 | 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 |
| 14 | +// RUN: dxil-pc-shadermodel6.3-library %s -emit-llvm \ |
| 15 | +// RUN: -o - | FileCheck %s -DFNATTRS="noundef nofpclass(nan inf)" \ |
| 16 | +// RUN: -DTYPE=float -DINT_TYPE=f32 --check-prefixes=DXCHECK |
17 | 17 |
|
18 | 18 |
|
19 | 19 | // Spirv target:
|
|
22 | 22 | //
|
23 | 23 | // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \
|
24 | 24 | // RUN: spirv-unknown-vulkan-compute %s -fnative-half-type \
|
25 |
| -// RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s \ |
| 25 | +// RUN: -emit-llvm -o - | FileCheck %s \ |
26 | 26 | // RUN: -DFNATTRS="spir_func noundef nofpclass(nan inf)" -DTYPE=half
|
27 | 27 |
|
28 | 28 | //
|
29 | 29 | // ---------- No Native Half support test -----------
|
30 | 30 | //
|
31 | 31 | // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \
|
32 |
| -// RUN: spirv-unknown-vulkan-compute %s -emit-llvm -disable-llvm-passes \ |
| 32 | +// RUN: spirv-unknown-vulkan-compute %s -emit-llvm \ |
33 | 33 | // RUN: -o - | FileCheck %s \
|
34 | 34 | // RUN: -DFNATTRS="spir_func noundef nofpclass(nan inf)" -DTYPE=float
|
35 | 35 |
|
36 | 36 |
|
37 | 37 |
|
| 38 | +// DXCHECK: define [[FNATTRS]] [[TYPE]] @ |
| 39 | +// DXCHECK: %div1.i = fdiv reassoc nnan ninf nsz arcp afn [[TYPE]] %{{.*}}, %{{.*}} |
| 40 | +// DXCHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn oge [[TYPE]] %{{.*}}, 0 |
| 41 | +// DXCHECK: %elt.abs.i = call reassoc nnan ninf nsz arcp afn [[TYPE]] @llvm.fabs.[[INT_TYPE]]([[TYPE]] %{{.*}}) |
| 42 | +// DXCHECK: %hlsl.frac.i = call reassoc nnan ninf nsz arcp afn [[TYPE]] @llvm.dx.frac.[[INT_TYPE]]([[TYPE]] %elt.abs.i) |
| 43 | +// DXCHECK: %fneg.i = fneg reassoc nnan ninf nsz arcp afn [[TYPE]] %{{.*}} |
| 44 | +// DXCHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn i1 %{{.*}}, [[TYPE]] %{{.*}}, [[TYPE]] %fneg.i |
| 45 | +// DXCHECK: %mul.i = fmul reassoc nnan ninf nsz arcp afn [[TYPE]] %hlsl.select.i, %{{.*}} |
| 46 | +// DXCHECK: ret [[TYPE]] %mul.i |
38 | 47 | // CHECK: define [[FNATTRS]] [[TYPE]] @
|
39 |
| -// CHECK: %fmod = frem reassoc nnan ninf nsz arcp afn [[TYPE]] |
40 |
| -// CHECK: ret [[TYPE]] %fmod |
| 48 | +// CHECK: %fmod.i = frem reassoc nnan ninf nsz arcp afn [[TYPE]] |
| 49 | +// CHECK: ret [[TYPE]] %fmod.i |
41 | 50 | half test_fmod_half(half p0, half p1) { return fmod(p0, p1); }
|
42 | 51 |
|
| 52 | +// DXCHECK: define [[FNATTRS]] <2 x [[TYPE]]> @ |
| 53 | +// DXCHECK: %div1.i = fdiv reassoc nnan ninf nsz arcp afn <2 x [[TYPE]]> %{{.*}}, %{{.*}} |
| 54 | +// DXCHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn oge <2 x [[TYPE]]> %{{.*}}, zeroinitializer |
| 55 | +// DXCHECK: %elt.abs.i = call reassoc nnan ninf nsz arcp afn <2 x [[TYPE]]> @llvm.fabs.v2[[INT_TYPE]](<2 x [[TYPE]]> %{{.*}}) |
| 56 | +// DXCHECK: %hlsl.frac.i = call reassoc nnan ninf nsz arcp afn <2 x [[TYPE]]> @llvm.dx.frac.v2[[INT_TYPE]](<2 x [[TYPE]]> %elt.abs.i) |
| 57 | +// DXCHECK: %fneg.i = fneg reassoc nnan ninf nsz arcp afn <2 x [[TYPE]]> %{{.*}} |
| 58 | +// DXCHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn <2 x i1> %{{.*}}, <2 x [[TYPE]]> %{{.*}}, <2 x [[TYPE]]> %fneg.i |
| 59 | +// DXCHECK: %mul.i = fmul reassoc nnan ninf nsz arcp afn <2 x [[TYPE]]> %hlsl.select.i, %{{.*}} |
| 60 | +// DXCHECK: ret <2 x [[TYPE]]> %mul.i |
43 | 61 | // 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 |
| 62 | +// CHECK: %fmod.i = frem reassoc nnan ninf nsz arcp afn <2 x [[TYPE]]> |
| 63 | +// CHECK: ret <2 x [[TYPE]]> %fmod.i |
46 | 64 | half2 test_fmod_half2(half2 p0, half2 p1) { return fmod(p0, p1); }
|
47 | 65 |
|
| 66 | +// DXCHECK: define [[FNATTRS]] <3 x [[TYPE]]> @ |
| 67 | +// DXCHECK: %div1.i = fdiv reassoc nnan ninf nsz arcp afn <3 x [[TYPE]]> %{{.*}}, %{{.*}} |
| 68 | +// DXCHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn oge <3 x [[TYPE]]> %{{.*}}, zeroinitializer |
| 69 | +// DXCHECK: %elt.abs.i = call reassoc nnan ninf nsz arcp afn <3 x [[TYPE]]> @llvm.fabs.v3[[INT_TYPE]](<3 x [[TYPE]]> %{{.*}}) |
| 70 | +// DXCHECK: %hlsl.frac.i = call reassoc nnan ninf nsz arcp afn <3 x [[TYPE]]> @llvm.dx.frac.v3[[INT_TYPE]](<3 x [[TYPE]]> %elt.abs.i) |
| 71 | +// DXCHECK: %fneg.i = fneg reassoc nnan ninf nsz arcp afn <3 x [[TYPE]]> %{{.*}} |
| 72 | +// DXCHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn <3 x i1> %{{.*}}, <3 x [[TYPE]]> %{{.*}}, <3 x [[TYPE]]> %fneg.i |
| 73 | +// DXCHECK: %mul.i = fmul reassoc nnan ninf nsz arcp afn <3 x [[TYPE]]> %hlsl.select.i, %{{.*}} |
| 74 | +// DXCHECK: ret <3 x [[TYPE]]> %mul.i |
48 | 75 | // 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 |
| 76 | +// CHECK: %fmod.i = frem reassoc nnan ninf nsz arcp afn <3 x [[TYPE]]> |
| 77 | +// CHECK: ret <3 x [[TYPE]]> %fmod.i |
51 | 78 | half3 test_fmod_half3(half3 p0, half3 p1) { return fmod(p0, p1); }
|
52 | 79 |
|
| 80 | +// DXCHECK: define [[FNATTRS]] <4 x [[TYPE]]> @ |
| 81 | +// DXCHECK: %div1.i = fdiv reassoc nnan ninf nsz arcp afn <4 x [[TYPE]]> %{{.*}}, %{{.*}} |
| 82 | +// DXCHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn oge <4 x [[TYPE]]> %{{.*}}, zeroinitializer |
| 83 | +// DXCHECK: %elt.abs.i = call reassoc nnan ninf nsz arcp afn <4 x [[TYPE]]> @llvm.fabs.v4[[INT_TYPE]](<4 x [[TYPE]]> %{{.*}}) |
| 84 | +// DXCHECK: %hlsl.frac.i = call reassoc nnan ninf nsz arcp afn <4 x [[TYPE]]> @llvm.dx.frac.v4[[INT_TYPE]](<4 x [[TYPE]]> %elt.abs.i) |
| 85 | +// DXCHECK: %fneg.i = fneg reassoc nnan ninf nsz arcp afn <4 x [[TYPE]]> %{{.*}} |
| 86 | +// DXCHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn <4 x i1> %{{.*}}, <4 x [[TYPE]]> %{{.*}}, <4 x [[TYPE]]> %fneg.i |
| 87 | +// DXCHECK: %mul.i = fmul reassoc nnan ninf nsz arcp afn <4 x [[TYPE]]> %hlsl.select.i, %{{.*}} |
| 88 | +// DXCHECK: ret <4 x [[TYPE]]> %mul.i |
53 | 89 | // 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 |
| 90 | +// CHECK: %fmod.i = frem reassoc nnan ninf nsz arcp afn <4 x [[TYPE]]> |
| 91 | +// CHECK: ret <4 x [[TYPE]]> %fmod.i |
56 | 92 | half4 test_fmod_half4(half4 p0, half4 p1) { return fmod(p0, p1); }
|
57 | 93 |
|
| 94 | +// DXCHECK: define [[FNATTRS]] float @ |
| 95 | +// DXCHECK: %div1.i = fdiv reassoc nnan ninf nsz arcp afn float %{{.*}}, %{{.*}} |
| 96 | +// DXCHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn oge float %{{.*}}, 0.000000e+00 |
| 97 | +// DXCHECK: %elt.abs.i = call reassoc nnan ninf nsz arcp afn float @llvm.fabs.f32(float %{{.*}}) |
| 98 | +// DXCHECK: %hlsl.frac.i = call reassoc nnan ninf nsz arcp afn float @llvm.dx.frac.f32(float %elt.abs.i) |
| 99 | +// DXCHECK: %fneg.i = fneg reassoc nnan ninf nsz arcp afn float %{{.*}} |
| 100 | +// DXCHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn i1 %{{.*}}, float %{{.*}}, float %fneg.i |
| 101 | +// DXCHECK: %mul.i = fmul reassoc nnan ninf nsz arcp afn float %hlsl.select.i, %{{.*}} |
| 102 | +// DXCHECK: ret float %mul.i |
58 | 103 | // CHECK: define [[FNATTRS]] float @
|
59 |
| -// CHECK: %fmod = frem reassoc nnan ninf nsz arcp afn float |
60 |
| -// CHECK: ret float %fmod |
| 104 | +// CHECK: %fmod.i = frem reassoc nnan ninf nsz arcp afn float |
| 105 | +// CHECK: ret float %fmod.i |
61 | 106 | float test_fmod_float(float p0, float p1) { return fmod(p0, p1); }
|
62 | 107 |
|
| 108 | +// DXCHECK: define [[FNATTRS]] <2 x float> @ |
| 109 | +// DXCHECK: %div1.i = fdiv reassoc nnan ninf nsz arcp afn <2 x float> %{{.*}}, %{{.*}} |
| 110 | +// DXCHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn oge <2 x float> %{{.*}}, zeroinitializer |
| 111 | +// DXCHECK: %elt.abs.i = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.fabs.v2f32(<2 x float> %{{.*}}) |
| 112 | +// DXCHECK: %hlsl.frac.i = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.dx.frac.v2f32(<2 x float> %elt.abs.i) |
| 113 | +// DXCHECK: %fneg.i = fneg reassoc nnan ninf nsz arcp afn <2 x float> %{{.*}} |
| 114 | +// DXCHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn <2 x i1> %{{.*}}, <2 x float> %{{.*}}, <2 x float> %fneg.i |
| 115 | +// DXCHECK: %mul.i = fmul reassoc nnan ninf nsz arcp afn <2 x float> %hlsl.select.i, %{{.*}} |
| 116 | +// DXCHECK: ret <2 x float> %mul.i |
63 | 117 | // 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 |
| 118 | +// CHECK: %fmod.i = frem reassoc nnan ninf nsz arcp afn <2 x float> |
| 119 | +// CHECK: ret <2 x float> %fmod.i |
66 | 120 | float2 test_fmod_float2(float2 p0, float2 p1) { return fmod(p0, p1); }
|
67 | 121 |
|
| 122 | +// DXCHECK: define [[FNATTRS]] <3 x float> @ |
| 123 | +// DXCHECK: %div1.i = fdiv reassoc nnan ninf nsz arcp afn <3 x float> %{{.*}}, %{{.*}} |
| 124 | +// DXCHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn oge <3 x float> %{{.*}}, zeroinitializer |
| 125 | +// DXCHECK: %elt.abs.i = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.fabs.v3f32(<3 x float> %{{.*}}) |
| 126 | +// DXCHECK: %hlsl.frac.i = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.dx.frac.v3f32(<3 x float> %elt.abs.i) |
| 127 | +// DXCHECK: %fneg.i = fneg reassoc nnan ninf nsz arcp afn <3 x float> %{{.*}} |
| 128 | +// DXCHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn <3 x i1> %{{.*}}, <3 x float> %{{.*}}, <3 x float> %fneg.i |
| 129 | +// DXCHECK: %mul.i = fmul reassoc nnan ninf nsz arcp afn <3 x float> %hlsl.select.i, %{{.*}} |
| 130 | +// DXCHECK: ret <3 x float> %mul.i |
68 | 131 | // 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 |
| 132 | +// CHECK: %fmod.i = frem reassoc nnan ninf nsz arcp afn <3 x float> |
| 133 | +// CHECK: ret <3 x float> %fmod.i |
71 | 134 | float3 test_fmod_float3(float3 p0, float3 p1) { return fmod(p0, p1); }
|
72 | 135 |
|
| 136 | +// DXCHECK: define [[FNATTRS]] <4 x float> @ |
| 137 | +// DXCHECK: %div1.i = fdiv reassoc nnan ninf nsz arcp afn <4 x float> %{{.*}}, %{{.*}} |
| 138 | +// DXCHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn oge <4 x float> %{{.*}}, zeroinitializer |
| 139 | +// DXCHECK: %elt.abs.i = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.fabs.v4f32(<4 x float> %{{.*}}) |
| 140 | +// DXCHECK: %hlsl.frac.i = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.frac.v4f32(<4 x float> %elt.abs.i) |
| 141 | +// DXCHECK: %fneg.i = fneg reassoc nnan ninf nsz arcp afn <4 x float> %{{.*}} |
| 142 | +// DXCHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %fneg.i |
| 143 | +// DXCHECK: %mul.i = fmul reassoc nnan ninf nsz arcp afn <4 x float> %hlsl.select.i, %{{.*}} |
| 144 | +// DXCHECK: ret <4 x float> %mul.i |
73 | 145 | // 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 |
| 146 | +// CHECK: %fmod.i = frem reassoc nnan ninf nsz arcp afn <4 x float> |
| 147 | +// CHECK: ret <4 x float> %fmod.i |
76 | 148 | float4 test_fmod_float4(float4 p0, float4 p1) { return fmod(p0, p1); }
|
77 | 149 |
|
0 commit comments