|
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 -O1 -o - | FileCheck %s \ |
| 7 | +// RUN: -emit-llvm -O1 -o - | FileCheck %s \ |
8 | 8 | // RUN: -DFNATTRS="noundef nofpclass(nan inf)" -DTYPE=half
|
9 |
| - |
10 | 9 | //
|
11 | 10 | // ---------- No Native Half support test -----------
|
12 | 11 | //
|
13 | 12 | // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \
|
14 |
| -// RUN: dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \ |
| 13 | +// RUN: dxil-pc-shadermodel6.3-library %s -emit-llvm \ |
15 | 14 | // RUN: -O1 -o - | FileCheck %s \
|
16 | 15 | // RUN: -DFNATTRS="noundef nofpclass(nan inf)" -DTYPE=float
|
17 | 16 |
|
18 | 17 |
|
19 | 18 |
|
20 | 19 | // CHECK: define [[FNATTRS]] [[TYPE]] @
|
21 |
| -// CHECK: call nnan ninf nsz arcp afn [[FNATTRS]] [[TYPE]] @{{.*}}([[TYPE]] noundef nofpclass(nan inf) %{{.*}}, [[TYPE]] noundef nofpclass(nan inf) %{{.*}}) #{{.*}} |
22 |
| -// CHECK: ret [[TYPE]] %call |
| 20 | +// CHECK: %div1.i = fdiv reassoc nnan ninf nsz arcp afn [[TYPE]] |
| 21 | +// CHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn oge [[TYPE]] |
| 22 | +// CHECK: %elt.abs.i = tail call reassoc nnan ninf nsz arcp afn [[TYPE]] @llvm.fabs.f |
| 23 | +// CHECK: %hlsl.frac.i = tail call reassoc nnan ninf nsz arcp afn [[TYPE]] @llvm.dx.frac.f |
| 24 | +// CHECK: %fneg2.i = fneg reassoc nnan ninf nsz arcp afn [[TYPE]] |
| 25 | +// CHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn i1 |
| 26 | +// CHECK: %mul.i = fmul reassoc nnan ninf nsz arcp afn [[TYPE]] |
| 27 | +// CHECK: ret [[TYPE]] %mul.i |
23 | 28 | half test_fmod_half(half p0, half p1) { return fmod(p0, p1); }
|
24 | 29 |
|
25 | 30 | // CHECK: define [[FNATTRS]] <2 x [[TYPE]]> @
|
26 |
| -// CHECK: call reassoc nnan ninf nsz arcp afn [[FNATTRS]] [[TYPE]] @{{.*}}(<2 x [[TYPE]]> noundef nofpclass(nan inf) %{{.*}}, <2 x [[TYPE]]> noundef nofpclass(nan inf) %{{.*}}) #{{.*}} |
27 |
| -// CHECK: ret <2 x [[TYPE]]> %splat.splat |
| 31 | +// CHECK: %div1.i = fdiv reassoc nnan ninf nsz arcp afn <2 x [[TYPE]]> |
| 32 | +// CHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn oge <2 x [[TYPE]]> |
| 33 | +// CHECK: %elt.abs.i = tail call reassoc nnan ninf nsz arcp afn <2 x [[TYPE]]> @llvm.fabs.v2f |
| 34 | +// CHECK: %hlsl.frac.i = tail call reassoc nnan ninf nsz arcp afn <2 x [[TYPE]]> @llvm.dx.frac.v2f |
| 35 | +// CHECK: %fneg2.i = fneg reassoc nnan ninf nsz arcp afn <2 x [[TYPE]]> |
| 36 | +// CHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn <2 x i1> |
| 37 | +// CHECK: %mul.i = fmul reassoc nnan ninf nsz arcp afn <2 x [[TYPE]]> |
| 38 | +// CHECK: ret <2 x [[TYPE]]> %mul.i |
28 | 39 | half2 test_fmod_half2(half2 p0, half2 p1) { return fmod(p0, p1); }
|
29 | 40 |
|
30 | 41 | // CHECK: define [[FNATTRS]] <3 x [[TYPE]]> @
|
31 |
| -// CHECK: call reassoc nnan ninf nsz arcp afn [[FNATTRS]] [[TYPE]] @{{.*}}(<3 x [[TYPE]]> noundef nofpclass(nan inf) %{{.*}}, <3 x [[TYPE]]> noundef nofpclass(nan inf) %{{.*}} #{{.*}} |
32 |
| -// CHECK: ret <3 x [[TYPE]]> %splat.splat |
| 42 | +// CHECK: %div1.i = fdiv reassoc nnan ninf nsz arcp afn <3 x [[TYPE]]> |
| 43 | +// CHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn oge <3 x [[TYPE]]> |
| 44 | +// CHECK: %elt.abs.i = tail call reassoc nnan ninf nsz arcp afn <3 x [[TYPE]]> @llvm.fabs.v3f |
| 45 | +// CHECK: %hlsl.frac.i = tail call reassoc nnan ninf nsz arcp afn <3 x [[TYPE]]> @llvm.dx.frac.v3f |
| 46 | +// CHECK: %fneg2.i = fneg reassoc nnan ninf nsz arcp afn <3 x [[TYPE]]> |
| 47 | +// CHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn <3 x i1> |
| 48 | +// CHECK: %mul.i = fmul reassoc nnan ninf nsz arcp afn <3 x [[TYPE]]> |
| 49 | +// CHECK: ret <3 x [[TYPE]]> %mul.i |
33 | 50 | half3 test_fmod_half3(half3 p0, half3 p1) { return fmod(p0, p1); }
|
34 | 51 |
|
35 | 52 | // CHECK: define [[FNATTRS]] <4 x [[TYPE]]> @
|
36 |
| -// CHECK: call reassoc nnan ninf nsz arcp afn [[FNATTRS]] [[TYPE]] @{{.*}}(<4 x [[TYPE]]> noundef nofpclass(nan inf) %{{.*}}, <4 x [[TYPE]]> noundef nofpclass(nan inf) %{{.*}}) #{{.*}} |
37 |
| -// CHECK: ret <4 x [[TYPE]]> %splat.splat |
| 53 | +// CHECK: %div1.i = fdiv reassoc nnan ninf nsz arcp afn <4 x [[TYPE]]> |
| 54 | +// CHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn oge <4 x [[TYPE]]> |
| 55 | +// CHECK: %elt.abs.i = tail call reassoc nnan ninf nsz arcp afn <4 x [[TYPE]]> @llvm.fabs.v4f |
| 56 | +// CHECK: %hlsl.frac.i = tail call reassoc nnan ninf nsz arcp afn <4 x [[TYPE]]> @llvm.dx.frac.v4f |
| 57 | +// CHECK: %fneg2.i = fneg reassoc nnan ninf nsz arcp afn <4 x [[TYPE]]> |
| 58 | +// CHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn <4 x i1> |
| 59 | +// CHECK: %mul.i = fmul reassoc nnan ninf nsz arcp afn <4 x [[TYPE]]> |
| 60 | +// CHECK: ret <4 x [[TYPE]]> %mul.i |
38 | 61 | half4 test_fmod_half4(half4 p0, half4 p1) { return fmod(p0, p1); }
|
39 | 62 |
|
40 | 63 | // CHECK: define [[FNATTRS]] float @
|
41 |
| -// CHECK: call reassoc nnan ninf nsz arcp afn [[FNATTRS]] float @{{.*}}(float noundef nofpclass(nan inf) %{{.*}}, float noundef nofpclass(nan inf) %{{.*}}) #{{.*}} |
42 |
| -// CHECK: ret float %call |
| 64 | +// CHECK: %div1.i = fdiv reassoc nnan ninf nsz arcp afn float |
| 65 | +// CHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn oge float |
| 66 | +// CHECK: %elt.abs.i = tail call reassoc nnan ninf nsz arcp afn float @llvm.fabs.f |
| 67 | +// CHECK: %hlsl.frac.i = tail call reassoc nnan ninf nsz arcp afn float @llvm.dx.frac.f |
| 68 | +// CHECK: %fneg2.i = fneg reassoc nnan ninf nsz arcp afn float |
| 69 | +// CHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn i1 |
| 70 | +// CHECK: %mul.i = fmul reassoc nnan ninf nsz arcp afn float |
| 71 | +// CHECK: ret float %mul.i |
43 | 72 | float test_fmod_float(float p0, float p1) { return fmod(p0, p1); }
|
44 | 73 |
|
45 | 74 | // CHECK: define [[FNATTRS]] <2 x float> @
|
46 |
| -// CHECK: call reassoc nnan ninf nsz arcp afn [[FNATTRS]] float @{{.*}}(<2 x float> noundef nofpclass(nan inf) %{{.*}}, <2 x float> noundef nofpclass(nan inf) %{{.*}}) #{{.*}} |
47 |
| -// CHECK: ret <2 x float> %splat.splat |
| 75 | +// CHECK: %div1.i = fdiv reassoc nnan ninf nsz arcp afn <2 x float> |
| 76 | +// CHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn oge <2 x float> |
| 77 | +// CHECK: %elt.abs.i = tail call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.fabs.v2f |
| 78 | +// CHECK: %hlsl.frac.i = tail call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.dx.frac.v2f |
| 79 | +// CHECK: %fneg2.i = fneg reassoc nnan ninf nsz arcp afn <2 x float> |
| 80 | +// CHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn <2 x i1> |
| 81 | +// CHECK: %mul.i = fmul reassoc nnan ninf nsz arcp afn <2 x float> |
| 82 | +// CHECK: ret <2 x float> %mul.i |
48 | 83 | float2 test_fmod_float2(float2 p0, float2 p1) { return fmod(p0, p1); }
|
49 | 84 |
|
50 | 85 | // CHECK: define [[FNATTRS]] <3 x float> @
|
51 |
| -// CHECK: call reassoc nnan ninf nsz arcp afn [[FNATTRS]] float @{{.*}}(<3 x float> noundef nofpclass(nan inf) %{{.*}}, <3 x float> noundef nofpclass(nan inf) %{{.*}}) #{{.*}} |
52 |
| -// CHECK: ret <3 x float> %splat.splat |
| 86 | +// CHECK: %div1.i = fdiv reassoc nnan ninf nsz arcp afn <3 x float> |
| 87 | +// CHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn oge <3 x float> |
| 88 | +// CHECK: %elt.abs.i = tail call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.fabs.v3f |
| 89 | +// CHECK: %hlsl.frac.i = tail call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.dx.frac.v3f |
| 90 | +// CHECK: %fneg2.i = fneg reassoc nnan ninf nsz arcp afn <3 x float> |
| 91 | +// CHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn <3 x i1> |
| 92 | +// CHECK: %mul.i = fmul reassoc nnan ninf nsz arcp afn <3 x float> |
| 93 | +// CHECK: ret <3 x float> %mul.i |
53 | 94 | float3 test_fmod_float3(float3 p0, float3 p1) { return fmod(p0, p1); }
|
54 | 95 |
|
55 | 96 | // CHECK: define [[FNATTRS]] <4 x float> @
|
56 |
| -// CHECK: call reassoc nnan ninf nsz arcp afn [[FNATTRS]] float @{{.*}}(<4 x float> noundef nofpclass(nan inf) %{{.*}}, <4 x float> noundef nofpclass(nan inf) %{{.*}}) #{{.*}} |
57 |
| -// CHECK: ret <4 x float> %splat.splat |
| 97 | +// CHECK: %div1.i = fdiv reassoc nnan ninf nsz arcp afn <4 x float> |
| 98 | +// CHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn oge <4 x float> |
| 99 | +// CHECK: %elt.abs.i = tail call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.fabs.v4f |
| 100 | +// CHECK: %hlsl.frac.i = tail call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.frac.v4f |
| 101 | +// CHECK: %fneg2.i = fneg reassoc nnan ninf nsz arcp afn <4 x float> |
| 102 | +// CHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn <4 x i1> |
| 103 | +// CHECK: %mul.i = fmul reassoc nnan ninf nsz arcp afn <4 x float> |
| 104 | +// CHECK: ret <4 x float> %mul.i |
58 | 105 | float4 test_fmod_float4(float4 p0, float4 p1) { return fmod(p0, p1); }
|
59 | 106 |
|
0 commit comments