@@ -20,6 +20,34 @@ int16_t3 test_abs_int16_t3(int16_t3 p0) { return abs(p0); }
2020// NATIVE_HALF-LABEL: define noundef <4 x i16> @_Z17test_abs_int16_t4
2121// NATIVE_HALF: call <4 x i16> @llvm.abs.v4i16(
2222int16_t4 test_abs_int16_t4 (int16_t4 p0) { return abs (p0); }
23+
24+ // NATIVE_HALF-LABEL: define {{.*}}hlsl3abs{{.*}}(i16
25+ // NATIVE_HALF: [[Alloca:%.*]] = alloca i16
26+ // NATIVE_HALF-NEXT: store i16 {{%.*}}, ptr [[Alloca]]
27+ // NATIVE_HALF-NEXT: [[Val:%.*]] = load i16, ptr [[Alloca]]
28+ // NATIVE_HALF-NEXT: ret i16 [[Val]]
29+ uint16_t test_abs_uint64_t (uint16_t p0) { return abs (p0); }
30+
31+ // NATIVE_HALF-LABEL: define {{.*}}hlsl3abs{{.*}}(<2 x i16
32+ // NATIVE_HALF: [[Alloca:%.*]] = alloca <2 x i16>
33+ // NATIVE_HALF-NEXT: store <2 x i16> {{%.*}}, ptr [[Alloca]]
34+ // NATIVE_HALF-NEXT: [[Val:%.*]] = load <2 x i16>, ptr [[Alloca]]
35+ // NATIVE_HALF-NEXT: ret <2 x i16> [[Val]]
36+ uint16_t2 test_abs_uint64_t2 (uint16_t2 p0) { return abs (p0); }
37+
38+ // NATIVE_HALF-LABEL: define {{.*}}hlsl3abs{{.*}}(<3 x i16
39+ // NATIVE_HALF: [[Alloca:%.*]] = alloca <3 x i16>
40+ // NATIVE_HALF-NEXT: store <3 x i16> {{%.*}}, ptr [[Alloca]]
41+ // NATIVE_HALF-NEXT: [[Val:%.*]] = load <3 x i16>, ptr [[Alloca]]
42+ // NATIVE_HALF-NEXT: ret <3 x i16> [[Val]]
43+ uint16_t3 test_abs_uint64_t3 (uint16_t3 p0) { return abs (p0); }
44+
45+ // NATIVE_HALF-LABEL: define {{.*}}hlsl3abs{{.*}}(<4 x i16
46+ // NATIVE_HALF: [[Alloca:%.*]] = alloca <4 x i16>
47+ // NATIVE_HALF-NEXT: store <4 x i16> {{%.*}}, ptr [[Alloca]]
48+ // NATIVE_HALF-NEXT: [[Val:%.*]] = load <4 x i16>, ptr [[Alloca]]
49+ // NATIVE_HALF-NEXT: ret <4 x i16> [[Val]]
50+ uint16_t4 test_abs_uint64_t4 (uint16_t4 p0) { return abs (p0); }
2351#endif // __HLSL_ENABLE_16_BIT
2452
2553// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) half @_Z13test_abs_half
@@ -94,3 +122,60 @@ double3 test_abs_double3(double3 p0) { return abs(p0); }
94122// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x double> @_Z16test_abs_double4
95123// CHECK: call reassoc nnan ninf nsz arcp afn <4 x double> @llvm.fabs.v4f64(
96124double4 test_abs_double4 (double4 p0) { return abs (p0); }
125+
126+
127+ // CHECK-LABEL: define {{.*}}hlsl3abs{{.*}}(i32
128+ // CHECK: [[Alloca:%.*]] = alloca i32
129+ // CHECK-NEXT: store i32 {{%.*}}, ptr [[Alloca]]
130+ // CHECK-NEXT: [[Val:%.*]] = load i32, ptr [[Alloca]]
131+ // CHECK-NEXT: ret i32 [[Val]]
132+ uint test_abs_uint (uint p0) { return abs (p0); }
133+
134+ // CHECK-LABEL: define {{.*}}hlsl3abs{{.*}}(<2 x i32
135+ // CHECK: [[Alloca:%.*]] = alloca <2 x i32>
136+ // CHECK-NEXT: store <2 x i32> {{%.*}}, ptr [[Alloca]]
137+ // CHECK-NEXT: [[Val:%.*]] = load <2 x i32>, ptr [[Alloca]]
138+ // CHECK-NEXT: ret <2 x i32> [[Val]]
139+ uint2 test_abs_uint2 (uint2 p0) { return abs (p0); }
140+
141+ // CHECK-LABEL: define {{.*}}hlsl3abs{{.*}}(<3 x i32
142+ // CHECK: [[Alloca:%.*]] = alloca <3 x i32>
143+ // CHECK-NEXT: store <3 x i32> {{%.*}}, ptr [[Alloca]]
144+ // CHECK-NEXT: [[Val:%.*]] = load <3 x i32>, ptr [[Alloca]]
145+ // CHECK-NEXT: ret <3 x i32> [[Val]]
146+ uint3 test_abs_uint3 (uint3 p0) { return abs (p0); }
147+
148+ // CHECK-LABEL: define {{.*}}hlsl3abs{{.*}}(<4 x i32
149+ // CHECK: [[Alloca:%.*]] = alloca <4 x i32>
150+ // CHECK-NEXT: store <4 x i32> {{%.*}}, ptr [[Alloca]]
151+ // CHECK-NEXT: [[Val:%.*]] = load <4 x i32>, ptr [[Alloca]]
152+ // CHECK-NEXT: ret <4 x i32> [[Val]]
153+ uint4 test_abs_uint4 (uint4 p0) { return abs (p0); }
154+
155+ // CHECK-LABEL: define {{.*}}hlsl3abs{{.*}}(i64
156+ // CHECK: [[Alloca:%.*]] = alloca i64
157+ // CHECK-NEXT: store i64 {{%.*}}, ptr [[Alloca]]
158+ // CHECK-NEXT: [[Val:%.*]] = load i64, ptr [[Alloca]]
159+ // CHECK-NEXT: ret i64 [[Val]]
160+ uint64_t test_abs_uint64_t (uint64_t p0) { return abs (p0); }
161+
162+ // CHECK-LABEL: define {{.*}}hlsl3abs{{.*}}(<2 x i64
163+ // CHECK: [[Alloca:%.*]] = alloca <2 x i64>
164+ // CHECK-NEXT: store <2 x i64> {{%.*}}, ptr [[Alloca]]
165+ // CHECK-NEXT: [[Val:%.*]] = load <2 x i64>, ptr [[Alloca]]
166+ // CHECK-NEXT: ret <2 x i64> [[Val]]
167+ uint64_t2 test_abs_uint64_t2 (uint64_t2 p0) { return abs (p0); }
168+
169+ // CHECK-LABEL: define {{.*}}hlsl3abs{{.*}}(<3 x i64
170+ // CHECK: [[Alloca:%.*]] = alloca <3 x i64>
171+ // CHECK-NEXT: store <3 x i64> {{%.*}}, ptr [[Alloca]]
172+ // CHECK-NEXT: [[Val:%.*]] = load <3 x i64>, ptr [[Alloca]]
173+ // CHECK-NEXT: ret <3 x i64> [[Val]]
174+ uint64_t3 test_abs_uint64_t3 (uint64_t3 p0) { return abs (p0); }
175+
176+ // CHECK-LABEL: define {{.*}}hlsl3abs{{.*}}(<4 x i64
177+ // CHECK: [[Alloca:%.*]] = alloca <4 x i64>
178+ // CHECK-NEXT: store <4 x i64> {{%.*}}, ptr [[Alloca]]
179+ // CHECK-NEXT: [[Val:%.*]] = load <4 x i64>, ptr [[Alloca]]
180+ // CHECK-NEXT: ret <4 x i64> [[Val]]
181+ uint64_t4 test_abs_uint64_t4 (uint64_t4 p0) { return abs (p0); }
0 commit comments