xref: /llvm-project/clang/test/CodeGenHLSL/builtins/reversebits.hlsl (revision f34a5205aa481a6d9a15054bcc5f7b9875906a17)
1// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \
2// RUN:   dxil-pc-shadermodel6.3-library %s -fnative-half-type \
3// RUN:   -emit-llvm -disable-llvm-passes -O3 -o - | FileCheck %s
4
5#ifdef __HLSL_ENABLE_16_BIT
6// CHECK: define noundef i16 @
7// CHECK: call i16 @llvm.bitreverse.i16(
8uint16_t test_bitreverse_ushort(uint16_t p0)
9{
10	return reversebits(p0);
11}
12// CHECK: define noundef <2 x i16> @
13// CHECK: call <2 x i16> @llvm.bitreverse.v2i16
14uint16_t2 test_bitreverse_ushort2(uint16_t2 p0)
15{
16	return reversebits(p0);
17}
18// CHECK: define noundef <3 x i16> @
19// CHECK: call <3 x i16> @llvm.bitreverse.v3i16
20uint16_t3 test_bitreverse_ushort3(uint16_t3 p0)
21{
22	return reversebits(p0);
23}
24// CHECK: define noundef <4 x i16> @
25// CHECK: call <4 x i16> @llvm.bitreverse.v4i16
26uint16_t4 test_bitreverse_ushort4(uint16_t4 p0)
27{
28	return reversebits(p0);
29}
30#endif
31
32// CHECK: define noundef i32 @
33// CHECK: call i32 @llvm.bitreverse.i32(
34int test_bitreverse_uint(uint p0)
35{
36	return reversebits(p0);
37}
38// CHECK: define noundef <2 x i32> @
39// CHECK: call <2 x i32> @llvm.bitreverse.v2i32
40uint2 test_bitreverse_uint2(uint2 p0)
41{
42	return reversebits(p0);
43}
44// CHECK: define noundef <3 x i32> @
45// CHECK: call <3 x i32> @llvm.bitreverse.v3i32
46uint3 test_bitreverse_uint3(uint3 p0)
47{
48	return reversebits(p0);
49}
50// CHECK: define noundef <4 x i32> @
51// CHECK: call <4 x i32> @llvm.bitreverse.v4i32
52uint4 test_bitreverse_uint4(uint4 p0)
53{
54	return reversebits(p0);
55}
56
57// CHECK: define noundef i64 @
58// CHECK: call i64 @llvm.bitreverse.i64(
59uint64_t test_bitreverse_long(uint64_t p0)
60{
61	return reversebits(p0);
62}
63// CHECK: define noundef <2 x i64> @
64// CHECK: call <2 x i64> @llvm.bitreverse.v2i64
65uint64_t2 test_bitreverse_long2(uint64_t2 p0)
66{
67	return reversebits(p0);
68}
69// CHECK: define noundef <3 x i64> @
70// CHECK: call <3 x i64> @llvm.bitreverse.v3i64
71uint64_t3 test_bitreverse_long3(uint64_t3 p0)
72{
73	return reversebits(p0);
74}
75// CHECK: define noundef <4 x i64> @
76// CHECK: call <4 x i64> @llvm.bitreverse.v4i64
77uint64_t4 test_bitreverse_long4(uint64_t4 p0)
78{
79	return reversebits(p0);
80}
81