|
1 | 1 | // RUN: %clang_cc1 -finclude-default-header -triple dxil-pc-shadermodel6.3-library %s \
|
2 | 2 | // RUN: -fnative-half-type -emit-llvm -disable-llvm-passes -o - | \
|
3 |
| -// RUN: FileCheck %s --check-prefixes=CHECK,NATIVE_HALF |
| 3 | +// RUN: FileCheck %s --check-prefixes=CHECK,NATIVE_HALF \ |
| 4 | +// RUN: -DTARGET=dx -DFNATTRS=noundef |
4 | 5 | // RUN: %clang_cc1 -finclude-default-header -triple dxil-pc-shadermodel6.3-library %s \
|
5 | 6 | // RUN: -emit-llvm -disable-llvm-passes -o - | \
|
6 |
| -// RUN: FileCheck %s --check-prefixes=CHECK,NO_HALF |
| 7 | +// RUN: FileCheck %s --check-prefixes=CHECK,NO_HALF \ |
| 8 | +// RUN: -DTARGET=dx -DFNATTRS=noundef |
| 9 | +// RUN: %clang_cc1 -finclude-default-header -triple spirv-unknown-vulkan-compute %s \ |
| 10 | +// RUN: -fnative-half-type -emit-llvm -disable-llvm-passes -o - | \ |
| 11 | +// RUN: FileCheck %s --check-prefixes=CHECK,NATIVE_HALF \ |
| 12 | +// RUN: -DTARGET=spv -DFNATTRS="spir_func noundef" |
| 13 | +// RUN: %clang_cc1 -finclude-default-header -triple spirv-unknown-vulkan-compute %s \ |
| 14 | +// RUN: -emit-llvm -disable-llvm-passes -o - | \ |
| 15 | +// RUN: FileCheck %s --check-prefixes=CHECK,NO_HALF \ |
| 16 | +// RUN: -DTARGET=spv -DFNATTRS="spir_func noundef" |
7 | 17 |
|
8 | 18 | #ifdef __HLSL_ENABLE_16_BIT
|
9 |
| -// NATIVE_HALF-LABEL: define noundef i16 @_Z16test_clamp_short |
10 |
| -// NATIVE_HALF: call i16 @llvm.dx.clamp.i16( |
| 19 | +// NATIVE_HALF: define [[FNATTRS]] i16 @_Z16test_clamp_short |
| 20 | +// NATIVE_HALF: call i16 @llvm.[[TARGET]].sclamp.i16( |
11 | 21 | int16_t test_clamp_short(int16_t p0, int16_t p1) { return clamp(p0, p1,p1); }
|
12 |
| -// NATIVE_HALF-LABEL: define noundef <2 x i16> @_Z17test_clamp_short2 |
13 |
| -// NATIVE_HALF: call <2 x i16> @llvm.dx.clamp.v2i16( |
| 22 | +// NATIVE_HALF: define [[FNATTRS]] <2 x i16> @_Z17test_clamp_short2 |
| 23 | +// NATIVE_HALF: call <2 x i16> @llvm.[[TARGET]].sclamp.v2i16( |
14 | 24 | int16_t2 test_clamp_short2(int16_t2 p0, int16_t2 p1) { return clamp(p0, p1,p1); }
|
15 |
| -// NATIVE_HALF-LABEL: define noundef <3 x i16> @_Z17test_clamp_short3 |
16 |
| -// NATIVE_HALF: call <3 x i16> @llvm.dx.clamp.v3i16 |
| 25 | +// NATIVE_HALF: define [[FNATTRS]] <3 x i16> @_Z17test_clamp_short3 |
| 26 | +// NATIVE_HALF: call <3 x i16> @llvm.[[TARGET]].sclamp.v3i16 |
17 | 27 | int16_t3 test_clamp_short3(int16_t3 p0, int16_t3 p1) { return clamp(p0, p1,p1); }
|
18 |
| -// NATIVE_HALF-LABEL: define noundef <4 x i16> @_Z17test_clamp_short4 |
19 |
| -// NATIVE_HALF: call <4 x i16> @llvm.dx.clamp.v4i16 |
| 28 | +// NATIVE_HALF: define [[FNATTRS]] <4 x i16> @_Z17test_clamp_short4 |
| 29 | +// NATIVE_HALF: call <4 x i16> @llvm.[[TARGET]].sclamp.v4i16 |
20 | 30 | int16_t4 test_clamp_short4(int16_t4 p0, int16_t4 p1) { return clamp(p0, p1,p1); }
|
21 | 31 |
|
22 |
| -// NATIVE_HALF-LABEL: define noundef i16 @_Z17test_clamp_ushort |
23 |
| -// NATIVE_HALF: call i16 @llvm.dx.uclamp.i16( |
| 32 | +// NATIVE_HALF: define [[FNATTRS]] i16 @_Z17test_clamp_ushort |
| 33 | +// NATIVE_HALF: call i16 @llvm.[[TARGET]].uclamp.i16( |
24 | 34 | uint16_t test_clamp_ushort(uint16_t p0, uint16_t p1) { return clamp(p0, p1,p1); }
|
25 |
| -// NATIVE_HALF-LABEL: define noundef <2 x i16> @_Z18test_clamp_ushort2 |
26 |
| -// NATIVE_HALF: call <2 x i16> @llvm.dx.uclamp.v2i16 |
| 35 | +// NATIVE_HALF: define [[FNATTRS]] <2 x i16> @_Z18test_clamp_ushort2 |
| 36 | +// NATIVE_HALF: call <2 x i16> @llvm.[[TARGET]].uclamp.v2i16 |
27 | 37 | uint16_t2 test_clamp_ushort2(uint16_t2 p0, uint16_t2 p1) { return clamp(p0, p1,p1); }
|
28 |
| -// NATIVE_HALF-LABEL: define noundef <3 x i16> @_Z18test_clamp_ushort3 |
29 |
| -// NATIVE_HALF: call <3 x i16> @llvm.dx.uclamp.v3i16 |
| 38 | +// NATIVE_HALF: define [[FNATTRS]] <3 x i16> @_Z18test_clamp_ushort3 |
| 39 | +// NATIVE_HALF: call <3 x i16> @llvm.[[TARGET]].uclamp.v3i16 |
30 | 40 | uint16_t3 test_clamp_ushort3(uint16_t3 p0, uint16_t3 p1) { return clamp(p0, p1,p1); }
|
31 |
| -// NATIVE_HALF-LABEL: define noundef <4 x i16> @_Z18test_clamp_ushort4 |
32 |
| -// NATIVE_HALF: call <4 x i16> @llvm.dx.uclamp.v4i16 |
| 41 | +// NATIVE_HALF: define [[FNATTRS]] <4 x i16> @_Z18test_clamp_ushort4 |
| 42 | +// NATIVE_HALF: call <4 x i16> @llvm.[[TARGET]].uclamp.v4i16 |
33 | 43 | uint16_t4 test_clamp_ushort4(uint16_t4 p0, uint16_t4 p1) { return clamp(p0, p1,p1); }
|
34 | 44 | #endif
|
35 | 45 |
|
36 |
| -// CHECK-LABEL: define noundef i32 @_Z14test_clamp_int |
37 |
| -// CHECK: call i32 @llvm.dx.clamp.i32( |
| 46 | +// CHECK: define [[FNATTRS]] i32 @_Z14test_clamp_int |
| 47 | +// CHECK: call i32 @llvm.[[TARGET]].sclamp.i32( |
38 | 48 | int test_clamp_int(int p0, int p1) { return clamp(p0, p1,p1); }
|
39 |
| -// CHECK-LABEL: define noundef <2 x i32> @_Z15test_clamp_int2 |
40 |
| -// CHECK: call <2 x i32> @llvm.dx.clamp.v2i32 |
| 49 | +// CHECK: define [[FNATTRS]] <2 x i32> @_Z15test_clamp_int2 |
| 50 | +// CHECK: call <2 x i32> @llvm.[[TARGET]].sclamp.v2i32 |
41 | 51 | int2 test_clamp_int2(int2 p0, int2 p1) { return clamp(p0, p1,p1); }
|
42 |
| -// CHECK-LABEL: define noundef <3 x i32> @_Z15test_clamp_int3 |
43 |
| -// CHECK: call <3 x i32> @llvm.dx.clamp.v3i32 |
| 52 | +// CHECK: define [[FNATTRS]] <3 x i32> @_Z15test_clamp_int3 |
| 53 | +// CHECK: call <3 x i32> @llvm.[[TARGET]].sclamp.v3i32 |
44 | 54 | int3 test_clamp_int3(int3 p0, int3 p1) { return clamp(p0, p1,p1); }
|
45 |
| -// CHECK-LABEL: define noundef <4 x i32> @_Z15test_clamp_int4 |
46 |
| -// CHECK: call <4 x i32> @llvm.dx.clamp.v4i32 |
| 55 | +// CHECK: define [[FNATTRS]] <4 x i32> @_Z15test_clamp_int4 |
| 56 | +// CHECK: call <4 x i32> @llvm.[[TARGET]].sclamp.v4i32 |
47 | 57 | int4 test_clamp_int4(int4 p0, int4 p1) { return clamp(p0, p1,p1); }
|
48 | 58 |
|
49 |
| -// CHECK-LABEL: define noundef i32 @_Z15test_clamp_uint |
50 |
| -// CHECK: call i32 @llvm.dx.uclamp.i32( |
| 59 | +// CHECK: define [[FNATTRS]] i32 @_Z15test_clamp_uint |
| 60 | +// CHECK: call i32 @llvm.[[TARGET]].uclamp.i32( |
51 | 61 | int test_clamp_uint(uint p0, uint p1) { return clamp(p0, p1,p1); }
|
52 |
| -// CHECK-LABEL: define noundef <2 x i32> @_Z16test_clamp_uint2 |
53 |
| -// CHECK: call <2 x i32> @llvm.dx.uclamp.v2i32 |
| 62 | +// CHECK: define [[FNATTRS]] <2 x i32> @_Z16test_clamp_uint2 |
| 63 | +// CHECK: call <2 x i32> @llvm.[[TARGET]].uclamp.v2i32 |
54 | 64 | uint2 test_clamp_uint2(uint2 p0, uint2 p1) { return clamp(p0, p1,p1); }
|
55 |
| -// CHECK-LABEL: define noundef <3 x i32> @_Z16test_clamp_uint3 |
56 |
| -// CHECK: call <3 x i32> @llvm.dx.uclamp.v3i32 |
| 65 | +// CHECK: define [[FNATTRS]] <3 x i32> @_Z16test_clamp_uint3 |
| 66 | +// CHECK: call <3 x i32> @llvm.[[TARGET]].uclamp.v3i32 |
57 | 67 | uint3 test_clamp_uint3(uint3 p0, uint3 p1) { return clamp(p0, p1,p1); }
|
58 |
| -// CHECK-LABEL: define noundef <4 x i32> @_Z16test_clamp_uint4 |
59 |
| -// CHECK: call <4 x i32> @llvm.dx.uclamp.v4i32 |
| 68 | +// CHECK: define [[FNATTRS]] <4 x i32> @_Z16test_clamp_uint4 |
| 69 | +// CHECK: call <4 x i32> @llvm.[[TARGET]].uclamp.v4i32 |
60 | 70 | uint4 test_clamp_uint4(uint4 p0, uint4 p1) { return clamp(p0, p1,p1); }
|
61 | 71 |
|
62 |
| -// CHECK-LABEL: define noundef i64 @_Z15test_clamp_long |
63 |
| -// CHECK: call i64 @llvm.dx.clamp.i64( |
| 72 | +// CHECK: define [[FNATTRS]] i64 @_Z15test_clamp_long |
| 73 | +// CHECK: call i64 @llvm.[[TARGET]].sclamp.i64( |
64 | 74 | int64_t test_clamp_long(int64_t p0, int64_t p1) { return clamp(p0, p1,p1); }
|
65 |
| -// CHECK-LABEL: define noundef <2 x i64> @_Z16test_clamp_long2 |
66 |
| -// CHECK: call <2 x i64> @llvm.dx.clamp.v2i64 |
| 75 | +// CHECK: define [[FNATTRS]] <2 x i64> @_Z16test_clamp_long2 |
| 76 | +// CHECK: call <2 x i64> @llvm.[[TARGET]].sclamp.v2i64 |
67 | 77 | int64_t2 test_clamp_long2(int64_t2 p0, int64_t2 p1) { return clamp(p0, p1,p1); }
|
68 |
| -// CHECK-LABEL: define noundef <3 x i64> @_Z16test_clamp_long3 |
69 |
| -// CHECK: call <3 x i64> @llvm.dx.clamp.v3i64 |
| 78 | +// CHECK: define [[FNATTRS]] <3 x i64> @_Z16test_clamp_long3 |
| 79 | +// CHECK: call <3 x i64> @llvm.[[TARGET]].sclamp.v3i64 |
70 | 80 | int64_t3 test_clamp_long3(int64_t3 p0, int64_t3 p1) { return clamp(p0, p1,p1); }
|
71 |
| -// CHECK-LABEL: define noundef <4 x i64> @_Z16test_clamp_long4 |
72 |
| -// CHECK: call <4 x i64> @llvm.dx.clamp.v4i64 |
| 81 | +// CHECK: define [[FNATTRS]] <4 x i64> @_Z16test_clamp_long4 |
| 82 | +// CHECK: call <4 x i64> @llvm.[[TARGET]].sclamp.v4i64 |
73 | 83 | int64_t4 test_clamp_long4(int64_t4 p0, int64_t4 p1) { return clamp(p0, p1,p1); }
|
74 | 84 |
|
75 |
| -// CHECK-LABEL: define noundef i64 @_Z16test_clamp_ulong |
76 |
| -// CHECK: call i64 @llvm.dx.uclamp.i64( |
| 85 | +// CHECK: define [[FNATTRS]] i64 @_Z16test_clamp_ulong |
| 86 | +// CHECK: call i64 @llvm.[[TARGET]].uclamp.i64( |
77 | 87 | uint64_t test_clamp_ulong(uint64_t p0, uint64_t p1) { return clamp(p0, p1,p1); }
|
78 |
| -// CHECK-LABEL: define noundef <2 x i64> @_Z17test_clamp_ulong2 |
79 |
| -// CHECK: call <2 x i64> @llvm.dx.uclamp.v2i64 |
| 88 | +// CHECK: define [[FNATTRS]] <2 x i64> @_Z17test_clamp_ulong2 |
| 89 | +// CHECK: call <2 x i64> @llvm.[[TARGET]].uclamp.v2i64 |
80 | 90 | uint64_t2 test_clamp_ulong2(uint64_t2 p0, uint64_t2 p1) { return clamp(p0, p1,p1); }
|
81 |
| -// CHECK-LABEL: define noundef <3 x i64> @_Z17test_clamp_ulong3 |
82 |
| -// CHECK: call <3 x i64> @llvm.dx.uclamp.v3i64 |
| 91 | +// CHECK: define [[FNATTRS]] <3 x i64> @_Z17test_clamp_ulong3 |
| 92 | +// CHECK: call <3 x i64> @llvm.[[TARGET]].uclamp.v3i64 |
83 | 93 | uint64_t3 test_clamp_ulong3(uint64_t3 p0, uint64_t3 p1) { return clamp(p0, p1,p1); }
|
84 |
| -// CHECK-LABEL: define noundef <4 x i64> @_Z17test_clamp_ulong4 |
85 |
| -// CHECK: call <4 x i64> @llvm.dx.uclamp.v4i64 |
| 94 | +// CHECK: define [[FNATTRS]] <4 x i64> @_Z17test_clamp_ulong4 |
| 95 | +// CHECK: call <4 x i64> @llvm.[[TARGET]].uclamp.v4i64 |
86 | 96 | uint64_t4 test_clamp_ulong4(uint64_t4 p0, uint64_t4 p1) { return clamp(p0, p1,p1); }
|
87 | 97 |
|
88 |
| -// NATIVE_HALF-LABEL: define noundef half @_Z15test_clamp_half |
89 |
| -// NATIVE_HALF: call half @llvm.dx.clamp.f16( |
90 |
| -// NO_HALF-LABEL: define noundef float @_Z15test_clamp_half |
91 |
| -// NO_HALF: call float @llvm.dx.clamp.f32( |
| 98 | +// NATIVE_HALF: define [[FNATTRS]] half @_Z15test_clamp_half |
| 99 | +// NATIVE_HALF: call half @llvm.[[TARGET]].nclamp.f16( |
| 100 | +// NO_HALF: define [[FNATTRS]] float @_Z15test_clamp_half |
| 101 | +// NO_HALF: call float @llvm.[[TARGET]].nclamp.f32( |
92 | 102 | half test_clamp_half(half p0, half p1) { return clamp(p0, p1,p1); }
|
93 |
| -// NATIVE_HALF-LABEL: define noundef <2 x half> @_Z16test_clamp_half2 |
94 |
| -// NATIVE_HALF: call <2 x half> @llvm.dx.clamp.v2f16 |
95 |
| -// NO_HALF-LABEL: define noundef <2 x float> @_Z16test_clamp_half2 |
96 |
| -// NO_HALF: call <2 x float> @llvm.dx.clamp.v2f32( |
| 103 | +// NATIVE_HALF: define [[FNATTRS]] <2 x half> @_Z16test_clamp_half2 |
| 104 | +// NATIVE_HALF: call <2 x half> @llvm.[[TARGET]].nclamp.v2f16 |
| 105 | +// NO_HALF: define [[FNATTRS]] <2 x float> @_Z16test_clamp_half2 |
| 106 | +// NO_HALF: call <2 x float> @llvm.[[TARGET]].nclamp.v2f32( |
97 | 107 | half2 test_clamp_half2(half2 p0, half2 p1) { return clamp(p0, p1,p1); }
|
98 |
| -// NATIVE_HALF-LABEL: define noundef <3 x half> @_Z16test_clamp_half3 |
99 |
| -// NATIVE_HALF: call <3 x half> @llvm.dx.clamp.v3f16 |
100 |
| -// NO_HALF-LABEL: define noundef <3 x float> @_Z16test_clamp_half3 |
101 |
| -// NO_HALF: call <3 x float> @llvm.dx.clamp.v3f32( |
| 108 | +// NATIVE_HALF: define [[FNATTRS]] <3 x half> @_Z16test_clamp_half3 |
| 109 | +// NATIVE_HALF: call <3 x half> @llvm.[[TARGET]].nclamp.v3f16 |
| 110 | +// NO_HALF: define [[FNATTRS]] <3 x float> @_Z16test_clamp_half3 |
| 111 | +// NO_HALF: call <3 x float> @llvm.[[TARGET]].nclamp.v3f32( |
102 | 112 | half3 test_clamp_half3(half3 p0, half3 p1) { return clamp(p0, p1,p1); }
|
103 |
| -// NATIVE_HALF-LABEL: define noundef <4 x half> @_Z16test_clamp_half4 |
104 |
| -// NATIVE_HALF: call <4 x half> @llvm.dx.clamp.v4f16 |
105 |
| -// NO_HALF-LABEL: define noundef <4 x float> @_Z16test_clamp_half4 |
106 |
| -// NO_HALF: call <4 x float> @llvm.dx.clamp.v4f32( |
| 113 | +// NATIVE_HALF: define [[FNATTRS]] <4 x half> @_Z16test_clamp_half4 |
| 114 | +// NATIVE_HALF: call <4 x half> @llvm.[[TARGET]].nclamp.v4f16 |
| 115 | +// NO_HALF: define [[FNATTRS]] <4 x float> @_Z16test_clamp_half4 |
| 116 | +// NO_HALF: call <4 x float> @llvm.[[TARGET]].nclamp.v4f32( |
107 | 117 | half4 test_clamp_half4(half4 p0, half4 p1) { return clamp(p0, p1,p1); }
|
108 | 118 |
|
109 |
| -// CHECK-LABEL: define noundef float @_Z16test_clamp_float |
110 |
| -// CHECK: call float @llvm.dx.clamp.f32( |
| 119 | +// CHECK: define [[FNATTRS]] float @_Z16test_clamp_float |
| 120 | +// CHECK: call float @llvm.[[TARGET]].nclamp.f32( |
111 | 121 | float test_clamp_float(float p0, float p1) { return clamp(p0, p1,p1); }
|
112 |
| -// CHECK-LABEL: define noundef <2 x float> @_Z17test_clamp_float2 |
113 |
| -// CHECK: call <2 x float> @llvm.dx.clamp.v2f32 |
| 122 | +// CHECK: define [[FNATTRS]] <2 x float> @_Z17test_clamp_float2 |
| 123 | +// CHECK: call <2 x float> @llvm.[[TARGET]].nclamp.v2f32 |
114 | 124 | float2 test_clamp_float2(float2 p0, float2 p1) { return clamp(p0, p1,p1); }
|
115 |
| -// CHECK-LABEL: define noundef <3 x float> @_Z17test_clamp_float3 |
116 |
| -// CHECK: call <3 x float> @llvm.dx.clamp.v3f32 |
| 125 | +// CHECK: define [[FNATTRS]] <3 x float> @_Z17test_clamp_float3 |
| 126 | +// CHECK: call <3 x float> @llvm.[[TARGET]].nclamp.v3f32 |
117 | 127 | float3 test_clamp_float3(float3 p0, float3 p1) { return clamp(p0, p1,p1); }
|
118 |
| -// CHECK-LABEL: define noundef <4 x float> @_Z17test_clamp_float4 |
119 |
| -// CHECK: call <4 x float> @llvm.dx.clamp.v4f32 |
| 128 | +// CHECK: define [[FNATTRS]] <4 x float> @_Z17test_clamp_float4 |
| 129 | +// CHECK: call <4 x float> @llvm.[[TARGET]].nclamp.v4f32 |
120 | 130 | float4 test_clamp_float4(float4 p0, float4 p1) { return clamp(p0, p1,p1); }
|
121 | 131 |
|
122 |
| -// CHECK-LABEL: define noundef double @_Z17test_clamp_double |
123 |
| -// CHECK: call double @llvm.dx.clamp.f64( |
| 132 | +// CHECK: define [[FNATTRS]] double @_Z17test_clamp_double |
| 133 | +// CHECK: call double @llvm.[[TARGET]].nclamp.f64( |
124 | 134 | double test_clamp_double(double p0, double p1) { return clamp(p0, p1,p1); }
|
125 |
| -// CHECK-LABEL: define noundef <2 x double> @_Z18test_clamp_double2 |
126 |
| -// CHECK: call <2 x double> @llvm.dx.clamp.v2f64 |
| 135 | +// CHECK: define [[FNATTRS]] <2 x double> @_Z18test_clamp_double2 |
| 136 | +// CHECK: call <2 x double> @llvm.[[TARGET]].nclamp.v2f64 |
127 | 137 | double2 test_clamp_double2(double2 p0, double2 p1) { return clamp(p0, p1,p1); }
|
128 |
| -// CHECK-LABEL: define noundef <3 x double> @_Z18test_clamp_double3 |
129 |
| -// CHECK: call <3 x double> @llvm.dx.clamp.v3f64 |
| 138 | +// CHECK: define [[FNATTRS]] <3 x double> @_Z18test_clamp_double3 |
| 139 | +// CHECK: call <3 x double> @llvm.[[TARGET]].nclamp.v3f64 |
130 | 140 | double3 test_clamp_double3(double3 p0, double3 p1) { return clamp(p0, p1,p1); }
|
131 |
| -// CHECK-LABEL: define noundef <4 x double> @_Z18test_clamp_double4 |
132 |
| -// CHECK: call <4 x double> @llvm.dx.clamp.v4f64 |
| 141 | +// CHECK: define [[FNATTRS]] <4 x double> @_Z18test_clamp_double4 |
| 142 | +// CHECK: call <4 x double> @llvm.[[TARGET]].nclamp.v4f64 |
133 | 143 | double4 test_clamp_double4(double4 p0, double4 p1) { return clamp(p0, p1,p1); }
|
0 commit comments