Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / clang / test / CodeGenHLSL / builtins / bitreverse.hlsl
blobe7609a2b61e25913ae531fd4c6745ae1694324bd
1 // RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \\r
2 // RUN:   dxil-pc-shadermodel6.3-library %s -D__HLSL_ENABLE_16_BIT \\r
3 // RUN:   -emit-llvm -disable-llvm-passes -O3 -o - | FileCheck %s\r
4 \r
5 #ifdef __HLSL_ENABLE_16_BIT\r
6 // CHECK: define noundef i16 @\r
7 // CHECK: call i16 @llvm.bitreverse.i16(\r
8 int16_t test_bitreverse_short(int16_t p0)\r
9 {\r
10         return reversebits(p0);\r
11 }\r
12 // CHECK: define noundef <2 x i16> @\r
13 // CHECK: call <2 x i16> @llvm.bitreverse.v2i16(\r
14 int16_t2 test_bitreverse_short2(int16_t2 p0)\r
15 {\r
16         return reversebits(p0);\r
17 }\r
18 // CHECK: define noundef <3 x i16> @\r
19 // CHECK: call <3 x i16> @llvm.bitreverse.v3i16\r
20 int16_t3 test_bitreverse_short3(int16_t3 p0)\r
21 {\r
22         return reversebits(p0);\r
23 }\r
24 // CHECK: define noundef <4 x i16> @\r
25 // CHECK: call <4 x i16> @llvm.bitreverse.v4i16\r
26 int16_t4 test_bitreverse_short4(int16_t4 p0)\r
27 {\r
28         return reversebits(p0);\r
29 }\r
31 // CHECK: define noundef i16 @\r
32 // CHECK: call i16 @llvm.bitreverse.i16(\r
33 uint16_t test_bitreverse_ushort(uint16_t p0)\r
34 {\r
35         return reversebits(p0);\r
36 }\r
37 // CHECK: define noundef <2 x i16> @\r
38 // CHECK: call <2 x i16> @llvm.bitreverse.v2i16\r
39 uint16_t2 test_bitreverse_ushort2(uint16_t2 p0)\r
40 {\r
41         return reversebits(p0);\r
42 }\r
43 // CHECK: define noundef <3 x i16> @\r
44 // CHECK: call <3 x i16> @llvm.bitreverse.v3i16\r
45 uint16_t3 test_bitreverse_ushort3(uint16_t3 p0)\r
46 {\r
47         return reversebits(p0);\r
48 }\r
49 // CHECK: define noundef <4 x i16> @\r
50 // CHECK: call <4 x i16> @llvm.bitreverse.v4i16\r
51 uint16_t4 test_bitreverse_ushort4(uint16_t4 p0)\r
52 {\r
53         return reversebits(p0);\r
54 }\r
55 #endif\r
57 // CHECK: define noundef i32 @\r
58 // CHECK: call i32 @llvm.bitreverse.i32(\r
59 int test_bitreverse_int(int p0)\r
60 {\r
61         return reversebits(p0);\r
62 }\r
63 // CHECK: define noundef <2 x i32> @\r
64 // CHECK: call <2 x i32> @llvm.bitreverse.v2i32\r
65 int2 test_bitreverse_int2(int2 p0)\r
66 {\r
67         return reversebits(p0);\r
68 }\r
69 // CHECK: define noundef <3 x i32> @\r
70 // CHECK: call <3 x i32> @llvm.bitreverse.v3i32\r
71 int3 test_bitreverse_int3(int3 p0)\r
72 {\r
73         return reversebits(p0);\r
74 }\r
75 // CHECK: define noundef <4 x i32> @\r
76 // CHECK: call <4 x i32> @llvm.bitreverse.v4i32\r
77 int4 test_bitreverse_int4(int4 p0)\r
78 {\r
79         return reversebits(p0);\r
80 }\r
82 // CHECK: define noundef i32 @\r
83 // CHECK: call i32 @llvm.bitreverse.i32(\r
84 int test_bitreverse_uint(uint p0)\r
85 {\r
86         return reversebits(p0);\r
87 }\r
88 // CHECK: define noundef <2 x i32> @\r
89 // CHECK: call <2 x i32> @llvm.bitreverse.v2i32\r
90 uint2 test_bitreverse_uint2(uint2 p0)\r
91 {\r
92         return reversebits(p0);\r
93 }\r
94 // CHECK: define noundef <3 x i32> @\r
95 // CHECK: call <3 x i32> @llvm.bitreverse.v3i32\r
96 uint3 test_bitreverse_uint3(uint3 p0)\r
97 {\r
98         return reversebits(p0);\r
99 }\r
100 // CHECK: define noundef <4 x i32> @\r
101 // CHECK: call <4 x i32> @llvm.bitreverse.v4i32\r
102 uint4 test_bitreverse_uint4(uint4 p0)\r
104         return reversebits(p0);\r
107 // CHECK: define noundef i64 @\r
108 // CHECK: call i64 @llvm.bitreverse.i64(\r
109 int64_t test_bitreverse_long(int64_t p0)\r
111         return reversebits(p0);\r
113 // CHECK: define noundef <2 x i64> @\r
114 // CHECK: call <2 x i64> @llvm.bitreverse.v2i64\r
115 int64_t2 test_bitreverse_long2(int64_t2 p0)\r
117         return reversebits(p0);\r
119 // CHECK: define noundef <3 x i64> @\r
120 // CHECK: call <3 x i64> @llvm.bitreverse.v3i64\r
121 int64_t3 test_bitreverse_long3(int64_t3 p0)\r
123         return reversebits(p0);\r
125 // CHECK: define noundef <4 x i64> @\r
126 // CHECK: call <4 x i64> @llvm.bitreverse.v4i64\r
127 int64_t4 test_bitreverse_long4(int64_t4 p0)\r
129         return reversebits(p0);\r
132 // CHECK: define noundef i64 @\r
133 // CHECK: call i64 @llvm.bitreverse.i64(\r
134 uint64_t test_bitreverse_long(uint64_t p0)\r
136         return reversebits(p0);\r
138 // CHECK: define noundef <2 x i64> @\r
139 // CHECK: call <2 x i64> @llvm.bitreverse.v2i64\r
140 uint64_t2 test_bitreverse_long2(uint64_t2 p0)\r
142         return reversebits(p0);\r
144 // CHECK: define noundef <3 x i64> @\r
145 // CHECK: call <3 x i64> @llvm.bitreverse.v3i64\r
146 uint64_t3 test_bitreverse_long3(uint64_t3 p0)\r
148         return reversebits(p0);\r
150 // CHECK: define noundef <4 x i64> @\r
151 // CHECK: call <4 x i64> @llvm.bitreverse.v4i64\r
152 uint64_t4 test_bitreverse_long4(uint64_t4 p0)\r
154         return reversebits(p0);\r