Skip to content

Commit 5bf5acc

Browse files
committed
Add test for asserting correct generation of ptx-kernel args
1 parent 352abba commit 5bf5acc

File tree

1 file changed

+254
-0
lines changed

1 file changed

+254
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,254 @@
1+
// assembly-output: ptx-linker
2+
// compile-flags: --crate-type cdylib -C target-cpu=sm_86
3+
// only-nvptx64
4+
// ignore-nvptx64
5+
6+
// The following ABI tests are made with nvcc 11.6 does.
7+
//
8+
// The PTX ABI stability is tied to major versions of the PTX ISA
9+
// These tests assume major version 7
10+
//
11+
//
12+
// The following correspondence between types are assumed:
13+
// u<N> - uint<N>_t
14+
// i<N> - int<N>_t
15+
// [T, N] - std::array<T, N>
16+
// &T - T const*
17+
// &mut T - T*
18+
19+
// CHECK: .version 7
20+
21+
#![feature(abi_ptx, lang_items, no_core)]
22+
#![no_core]
23+
24+
#[lang = "sized"]
25+
trait Sized {}
26+
#[lang = "copy"]
27+
trait Copy {}
28+
29+
#[repr(C)]
30+
pub struct SingleU8 {
31+
f: u8,
32+
}
33+
34+
#[repr(C)]
35+
pub struct DoubleU8 {
36+
f: u8,
37+
g: u8,
38+
}
39+
40+
#[repr(C)]
41+
pub struct TripleU8 {
42+
f: u8,
43+
g: u8,
44+
h: u8,
45+
}
46+
47+
#[repr(C)]
48+
pub struct TripleU16 {
49+
f: u16,
50+
g: u16,
51+
h: u16,
52+
}
53+
#[repr(C)]
54+
pub struct TripleU32 {
55+
f: u32,
56+
g: u32,
57+
h: u32,
58+
}
59+
#[repr(C)]
60+
pub struct TripleU64 {
61+
f: u64,
62+
g: u64,
63+
h: u64,
64+
}
65+
66+
#[repr(C)]
67+
pub struct DoubleFloat {
68+
f: f32,
69+
g: f32,
70+
}
71+
72+
#[repr(C)]
73+
pub struct TripleFloat {
74+
f: f32,
75+
g: f32,
76+
h: f32,
77+
}
78+
79+
#[repr(C)]
80+
pub struct TripleDouble {
81+
f: f64,
82+
g: f64,
83+
h: f64,
84+
}
85+
86+
#[repr(C)]
87+
pub struct ManyIntegers {
88+
f: u8,
89+
g: u16,
90+
h: u32,
91+
i: u64,
92+
}
93+
94+
#[repr(C)]
95+
pub struct ManyNumerics {
96+
f: u8,
97+
g: u16,
98+
h: u32,
99+
i: u64,
100+
j: f32,
101+
k: f64,
102+
}
103+
104+
// CHECK: .visible .entry f_u8_arg(
105+
// CHECK: .param .u8 f_u8_arg_param_0
106+
#[no_mangle]
107+
pub unsafe extern "ptx-kernel" fn f_u8_arg(_a: u8) {}
108+
109+
// CHECK: .visible .entry f_u16_arg(
110+
// CHECK: .param .u16 f_u16_arg_param_0
111+
#[no_mangle]
112+
pub unsafe extern "ptx-kernel" fn f_u16_arg(_a: u16) {}
113+
114+
// CHECK: .visible .entry f_u32_arg(
115+
// CHECK: .param .u32 f_u32_arg_param_0
116+
#[no_mangle]
117+
pub unsafe extern "ptx-kernel" fn f_u32_arg(_a: u32) {}
118+
119+
// CHECK: .visible .entry f_u64_arg(
120+
// CHECK: .param .u64 f_u64_arg_param_0
121+
#[no_mangle]
122+
pub unsafe extern "ptx-kernel" fn f_u64_arg(_a: u64) {}
123+
124+
// CHECK: .visible .entry f_u128_arg(
125+
// CHECK: .param .align 16 .b8 f_u128_arg_param_0[16]
126+
#[no_mangle]
127+
pub unsafe extern "ptx-kernel" fn f_u128_arg(_a: u128) {}
128+
129+
// CHECK: .visible .entry f_i8_arg(
130+
// CHECK: .param .u8 f_i8_arg_param_0
131+
#[no_mangle]
132+
pub unsafe extern "ptx-kernel" fn f_i8_arg(_a: i8) {}
133+
134+
// CHECK: .visible .entry f_i16_arg(
135+
// CHECK: .param .u16 f_i16_arg_param_0
136+
#[no_mangle]
137+
pub unsafe extern "ptx-kernel" fn f_i16_arg(_a: i16) {}
138+
139+
// CHECK: .visible .entry f_i32_arg(
140+
// CHECK: .param .u32 f_i32_arg_param_0
141+
#[no_mangle]
142+
pub unsafe extern "ptx-kernel" fn f_i32_arg(_a: i32) {}
143+
144+
// CHECK: .visible .entry f_i64_arg(
145+
// CHECK: .param .u64 f_i64_arg_param_0
146+
#[no_mangle]
147+
pub unsafe extern "ptx-kernel" fn f_i64_arg(_a: i64) {}
148+
149+
// CHECK: .visible .entry f_i128_arg(
150+
// CHECK: .param .align 16 .b8 f_i128_arg_param_0[16]
151+
#[no_mangle]
152+
pub unsafe extern "ptx-kernel" fn f_i128_arg(_a: i128) {}
153+
154+
// CHECK: .visible .entry f_f32_arg(
155+
// CHECK: .param .f32 f_f32_arg_param_0
156+
#[no_mangle]
157+
pub unsafe extern "ptx-kernel" fn f_f32_arg(_a: f32) {}
158+
159+
// CHECK: .visible .entry f_f64_arg(
160+
// CHECK: .param .f64 f_f64_arg_param_0
161+
#[no_mangle]
162+
pub unsafe extern "ptx-kernel" fn f_f64_arg(_a: f64) {}
163+
164+
// CHECK: .visible .entry f_single_u8_arg(
165+
// CHECK: .param .align 1 .b8 f_single_u8_arg_param_0[1]
166+
#[no_mangle]
167+
pub unsafe extern "ptx-kernel" fn f_single_u8_arg(_a: SingleU8) {}
168+
169+
// CHECK: .visible .entry f_double_u8_arg(
170+
// CHECK: .param .align 1 .b8 f_double_u8_arg_param_0[2]
171+
#[no_mangle]
172+
pub unsafe extern "ptx-kernel" fn f_double_u8_arg(_a: DoubleU8) {}
173+
174+
// CHECK: .visible .entry f_triple_u8_arg(
175+
// CHECK: .param .align 1 .b8 f_triple_u8_arg_param_0[3]
176+
#[no_mangle]
177+
pub unsafe extern "ptx-kernel" fn f_triple_u8_arg(_a: TripleU8) {}
178+
179+
// CHECK: .visible .entry f_triple_u16_arg(
180+
// CHECK: .param .align 2 .b8 f_triple_u16_arg_param_0[6]
181+
#[no_mangle]
182+
pub unsafe extern "ptx-kernel" fn f_triple_u16_arg(_a: TripleU16) {}
183+
184+
// CHECK: .visible .entry f_triple_u32_arg(
185+
// CHECK: .param .align 4 .b8 f_triple_u32_arg_param_0[12]
186+
#[no_mangle]
187+
pub unsafe extern "ptx-kernel" fn f_triple_u32_arg(_a: TripleU32) {}
188+
189+
// CHECK: .visible .entry f_triple_u64_arg(
190+
// CHECK: .param .align 8 .b8 f_triple_u64_arg_param_0[24]
191+
#[no_mangle]
192+
pub unsafe extern "ptx-kernel" fn f_triple_u64_arg(_a: TripleU64) {}
193+
194+
// CHECK: .visible .entry f_many_integers_arg(
195+
// CHECK: .param .align 8 .b8 f_many_integers_arg_param_0[16]
196+
#[no_mangle]
197+
pub unsafe extern "ptx-kernel" fn f_many_integers_arg(_a: ManyIntegers) {}
198+
199+
// CHECK: .visible .entry f_double_float_arg(
200+
// CHECK: .param .align 4 .b8 f_double_float_arg_param_0[8]
201+
#[no_mangle]
202+
pub unsafe extern "ptx-kernel" fn f_double_float_arg(_a: DoubleFloat) {}
203+
204+
// CHECK: .visible .entry f_triple_float_arg(
205+
// CHECK: .param .align 4 .b8 f_triple_float_arg_param_0[12]
206+
#[no_mangle]
207+
pub unsafe extern "ptx-kernel" fn f_triple_float_arg(_a: TripleFloat) {}
208+
209+
// CHECK: .visible .entry f_triple_double_arg(
210+
// CHECK: .param .align 8 .b8 f_triple_double_arg_param_0[24]
211+
#[no_mangle]
212+
pub unsafe extern "ptx-kernel" fn f_triple_double_arg(_a: TripleDouble) {}
213+
214+
// CHECK: .visible .entry f_many_numerics_arg(
215+
// CHECK: .param .align 8 .b8 f_many_numerics_arg_param_0[32]
216+
#[no_mangle]
217+
pub unsafe extern "ptx-kernel" fn f_many_numerics_arg(_a: ManyNumerics) {}
218+
219+
// CHECK: .visible .entry f_byte_array_arg(
220+
// CHECK: .param .align 1 .b8 f_byte_array_arg_param_0[5]
221+
#[no_mangle]
222+
pub unsafe extern "ptx-kernel" fn f_byte_array_arg(_a: [u8; 5]) {}
223+
224+
// CHECK: .visible .entry f_float_array_arg(
225+
// CHECK: .param .align 4 .b8 f_float_array_arg_param_0[20]
226+
#[no_mangle]
227+
pub unsafe extern "ptx-kernel" fn f_float_array_arg(_a: [f32; 5]) {}
228+
229+
// CHECK: .visible .entry f_u128_array_arg(
230+
// CHECK: .param .align 16 .b8 f_u128_array_arg_param_0[80]
231+
#[no_mangle]
232+
pub unsafe extern "ptx-kernel" fn f_u128_array_arg(_a: [u128; 5]) {}
233+
234+
// CHECK: .visible .entry f_u32_slice_arg(
235+
// CHECK: .param .u64 f_u32_slice_arg_param_0
236+
// CHECK: .param .u64 f_u32_slice_arg_param_1
237+
#[no_mangle]
238+
pub unsafe extern "ptx-kernel" fn f_u32_slice_arg(_a: &[u32]) {}
239+
240+
// CHECK: .visible .entry f_tuple_u8_u8_arg(
241+
// CHECK: .param .align 1 .b8 f_tuple_u8_u8_arg_param_0[2]
242+
#[no_mangle]
243+
pub unsafe extern "ptx-kernel" fn f_tuple_u8_u8_arg(_a: (u8, u8)) {}
244+
245+
// CHECK: .visible .entry f_tuple_u32_u32_arg(
246+
// CHECK: .param .align 4 .b8 f_tuple_u32_u32_arg_param_0[8]
247+
#[no_mangle]
248+
pub unsafe extern "ptx-kernel" fn f_tuple_u32_u32_arg(_a: (u32, u32)) {}
249+
250+
251+
// CHECK: .visible .entry f_tuple_u8_u8_u32_arg(
252+
// CHECK: .param .align 4 .b8 f_tuple_u8_u8_u32_arg_param_0[8]
253+
#[no_mangle]
254+
pub unsafe extern "ptx-kernel" fn f_tuple_u8_u8_u32_arg(_a: (u8, u8, u32)) {}

0 commit comments

Comments
 (0)