1; RUN: llc < %s -march=nvptx -mcpu=sm_20 | FileCheck %s 2; RUN: %if ptxas %{ llc < %s -march=nvptx -mcpu=sm_20 | %ptxas-verify %} 3 4;;; Need 4-byte alignment on float* passed byval 5define ptx_device void @t1(float* byval(float) %x) { 6; CHECK: .func t1 7; CHECK: .param .align 4 .b8 t1_param_0[4] 8 ret void 9} 10 11 12;;; Need 8-byte alignment on double* passed byval 13define ptx_device void @t2(double* byval(double) %x) { 14; CHECK: .func t2 15; CHECK: .param .align 8 .b8 t2_param_0[8] 16 ret void 17} 18 19 20;;; Need 4-byte alignment on float2* passed byval 21%struct.float2 = type { float, float } 22define ptx_device void @t3(%struct.float2* byval(%struct.float2) %x) { 23; CHECK: .func t3 24; CHECK: .param .align 4 .b8 t3_param_0[8] 25 ret void 26} 27 28;;; Need at least 4-byte alignment in order to avoid miscompilation by 29;;; ptxas for sm_50+ 30define ptx_device void @t4(i8* byval(i8) %x) { 31; CHECK: .func t4 32; CHECK: .param .align 4 .b8 t4_param_0[1] 33 ret void 34} 35 36;;; Make sure we adjust alignment at the call site as well. 37define ptx_device void @t5(i8* align 2 byval(i8) %x) { 38; CHECK: .func t5 39; CHECK: .param .align 4 .b8 t5_param_0[1] 40; CHECK: { 41; CHECK: .param .align 4 .b8 param0[1]; 42; CHECK: call.uni 43 call void @t4(i8* byval(i8) %x) 44 ret void 45} 46