@@ -112,6 +112,27 @@ int3 test_sign_int16_t3(int16_t3 p0) { return sign(p0); }
112112// NATIVE_HALF: %hlsl.sign = call <4 x i32> @llvm.[[TARGET]].sign.v4i16(
113113// NATIVE_HALF: ret <4 x i32> %hlsl.sign
114114int4 test_sign_int16_t4 (int16_t4 p0) { return sign (p0); }
115+
116+
117+ // NATIVE_HALF: define [[FNATTRS]] i32 @
118+ // NATIVE_HALF: [[CMP:%.*]] = icmp eq i16 [[ARG:%.*]], 0
119+ // NATIVE_HALF: %hlsl.sign = select i1 [[CMP]], i32 0, i32 1
120+ int test_sign_uint16_t (uint16_t p0) { return sign (p0); }
121+
122+ // NATIVE_HALF: define [[FNATTRS]] <2 x i32> @
123+ // NATIVE_HALF: [[CMP:%.*]] = icmp eq <2 x i16> [[ARG:%.*]], zeroinitializer
124+ // NATIVE_HALF: %hlsl.sign = select <2 x i1> [[CMP]], <2 x i32> zeroinitializer, <2 x i32> <i32 1, i32 1>
125+ int2 test_sign_uint16_t2 (uint16_t2 p0) { return sign (p0); }
126+
127+ // NATIVE_HALF: define [[FNATTRS]] <3 x i32> @
128+ // NATIVE_HALF: [[CMP:%.*]] = icmp eq <3 x i16> [[ARG:%.*]], zeroinitializer
129+ // NATIVE_HALF: %hlsl.sign = select <3 x i1> [[CMP]], <3 x i32> zeroinitializer, <3 x i32> <i32 1, i32 1, i32 1>
130+ int3 test_sign_uint16_t3 (uint16_t3 p0) { return sign (p0); }
131+
132+ // NATIVE_HALF: define [[FNATTRS]] <4 x i32> @
133+ // NATIVE_HALF: [[CMP:%.*]] = icmp eq <4 x i16> [[ARG:%.*]], zeroinitializer
134+ // NATIVE_HALF: %hlsl.sign = select <4 x i1> [[CMP]], <4 x i32> zeroinitializer, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
135+ int4 test_sign_uint16_t4 (uint16_t4 p0) { return sign (p0); }
115136#endif // __HLSL_ENABLE_16_BIT
116137
117138
@@ -136,6 +157,27 @@ int3 test_sign_int3(int3 p0) { return sign(p0); }
136157int4 test_sign_int4 (int4 p0) { return sign (p0); }
137158
138159
160+ // CHECK: define [[FNATTRS]] i32 @
161+ // CHECK: [[CMP:%.*]] = icmp eq i32 [[ARG:%.*]], 0
162+ // CHECK: %hlsl.sign = select i1 [[CMP]], i32 0, i32 1
163+ int test_sign_uint (uint p0) { return sign (p0); }
164+
165+ // CHECK: define [[FNATTRS]] <2 x i32> @
166+ // CHECK: [[CMP:%.*]] = icmp eq <2 x i32> [[ARG:%.*]], zeroinitializer
167+ // CHECK: %hlsl.sign = select <2 x i1> [[CMP]], <2 x i32> zeroinitializer, <2 x i32> <i32 1, i32 1>
168+ int2 test_sign_uint2 (uint2 p0) { return sign (p0); }
169+
170+ // CHECK: define [[FNATTRS]] <3 x i32> @
171+ // CHECK: [[CMP:%.*]] = icmp eq <3 x i32> [[ARG:%.*]], zeroinitializer
172+ // CHECK: %hlsl.sign = select <3 x i1> [[CMP]], <3 x i32> zeroinitializer, <3 x i32> <i32 1, i32 1, i32 1>
173+ int3 test_sign_uint3 (uint3 p0) { return sign (p0); }
174+
175+ // CHECK: define [[FNATTRS]] <4 x i32> @
176+ // CHECK: [[CMP:%.*]] = icmp eq <4 x i32> [[ARG:%.*]], zeroinitializer
177+ // CHECK: %hlsl.sign = select <4 x i1> [[CMP]], <4 x i32> zeroinitializer, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
178+ int4 test_sign_uint4 (uint4 p0) { return sign (p0); }
179+
180+
139181// CHECK: define [[FNATTRS]] i32 @
140182// CHECK: %hlsl.sign = call i32 @llvm.[[TARGET]].sign.i64(
141183// CHECK: ret i32 %hlsl.sign
@@ -155,3 +197,24 @@ int3 test_sign_int64_t3(int64_t3 p0) { return sign(p0); }
155197// CHECK: %hlsl.sign = call <4 x i32> @llvm.[[TARGET]].sign.v4i64(
156198// CHECK: ret <4 x i32> %hlsl.sign
157199int4 test_sign_int64_t4 (int64_t4 p0) { return sign (p0); }
200+
201+
202+ // CHECK: define [[FNATTRS]] i32 @
203+ // CHECK: [[CMP:%.*]] = icmp eq i64 [[ARG:%.*]], 0
204+ // CHECK: %hlsl.sign = select i1 [[CMP]], i32 0, i32 1
205+ int test_sign_int64_t (uint64_t p0) { return sign (p0); }
206+
207+ // CHECK: define [[FNATTRS]] <2 x i32> @
208+ // CHECK: [[CMP:%.*]] = icmp eq <2 x i64> [[ARG:%.*]], zeroinitializer
209+ // CHECK: %hlsl.sign = select <2 x i1> [[CMP]], <2 x i32> zeroinitializer, <2 x i32> <i32 1, i32 1>
210+ int2 test_sign_int64_t2 (uint64_t2 p0) { return sign (p0); }
211+
212+ // CHECK: define [[FNATTRS]] <3 x i32> @
213+ // CHECK: [[CMP:%.*]] = icmp eq <3 x i64> [[ARG:%.*]], zeroinitializer
214+ // CHECK: %hlsl.sign = select <3 x i1> [[CMP]], <3 x i32> zeroinitializer, <3 x i32> <i32 1, i32 1, i32 1>
215+ int3 test_sign_int64_t3 (uint64_t3 p0) { return sign (p0); }
216+
217+ // CHECK: define [[FNATTRS]] <4 x i32> @
218+ // CHECK: [[CMP:%.*]] = icmp eq <4 x i64> [[ARG:%.*]], zeroinitializer
219+ // CHECK: %hlsl.sign = select <4 x i1> [[CMP]], <4 x i32> zeroinitializer, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
220+ int4 test_sign_int64_t4 (uint64_t4 p0) { return sign (p0); }
0 commit comments