brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · e1fecdb Raw
85 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -mtriple=nvptx64 -mcpu=sm_52 -mattr=+ptx64 | FileCheck %s3; RUN: %if ptxas-isa-6.4 %{ llc < %s -mtriple=nvptx64 -mcpu=sm_52 -mattr=+ptx64 | %ptxas-verify %}4 5target triple = "nvptx64-nvidia-cuda"6 7%struct.S = type { i8 }8%struct.U = type { i64 }9 10@ptr = external global ptr, align 811 12define internal i32 @foo() {13; CHECK-LABEL: foo(14; CHECK:       {15; CHECK-NEXT:    .local .align 1 .b8 __local_depot0[2];16; CHECK-NEXT:    .reg .b64 %SP;17; CHECK-NEXT:    .reg .b64 %SPL;18; CHECK-NEXT:    .reg .b16 %rs<2>;19; CHECK-NEXT:    .reg .b32 %r<2>;20; CHECK-NEXT:    .reg .b64 %rd<4>;21; CHECK-EMPTY:22; CHECK-NEXT:  // %bb.0: // %entry23; CHECK-NEXT:    mov.b64 %SPL, __local_depot0;24; CHECK-NEXT:    cvta.local.u64 %SP, %SPL;25; CHECK-NEXT:    ld.global.b64 %rd1, [ptr];26; CHECK-NEXT:    { // callseq 0, 027; CHECK-NEXT:    .param .align 1 .b8 param0[1];28; CHECK-NEXT:    .param .b64 param1;29; CHECK-NEXT:    .param .b32 retval0;30; CHECK-NEXT:    add.u64 %rd2, %SP, 0;31; CHECK-NEXT:    st.param.b64 [param1], %rd2;32; CHECK-NEXT:    add.u64 %rd3, %SPL, 1;33; CHECK-NEXT:    ld.local.b8 %rs1, [%rd3];34; CHECK-NEXT:    st.param.b8 [param0], %rs1;35; CHECK-NEXT:    prototype_0 : .callprototype (.param .b32 _) _ (.param .align 1 .b8 _[1], .param .b64 _);36; CHECK-NEXT:    call (retval0), %rd1, (param0, param1), prototype_0;37; CHECK-NEXT:    ld.param.b32 %r1, [retval0];38; CHECK-NEXT:    } // callseq 039; CHECK-NEXT:    st.param.b32 [func_retval0], %r1;40; CHECK-NEXT:    ret;41entry:42  %s = alloca %struct.S, align 143  %agg.tmp = alloca %struct.S, align 144  %0 = load ptr, ptr @ptr, align 845  %call = call i32 %0(ptr byval(%struct.S) align 1 %agg.tmp, ptr noundef %s)46  ret i32 %call47}48 49define internal i32 @bar() {50; CHECK-LABEL: bar(51; CHECK:         // @bar52; CHECK-NEXT:  {53; CHECK-NEXT:    .local .align 8 .b8 __local_depot1[16];54; CHECK-NEXT:    .reg .b64 %SP;55; CHECK-NEXT:    .reg .b64 %SPL;56; CHECK-NEXT:    .reg .b32 %r<2>;57; CHECK-NEXT:    .reg .b64 %rd<5>;58; CHECK-EMPTY:59; CHECK-NEXT:  // %bb.0: // %entry60; CHECK-NEXT:    mov.b64 %SPL, __local_depot1;61; CHECK-NEXT:    cvta.local.u64 %SP, %SPL;62; CHECK-NEXT:    ld.global.b64 %rd1, [ptr];63; CHECK-NEXT:    { // callseq 1, 064; CHECK-NEXT:    .param .align 8 .b8 param0[8];65; CHECK-NEXT:    .param .b64 param1;66; CHECK-NEXT:    .param .b32 retval0;67; CHECK-NEXT:    add.u64 %rd2, %SP, 0;68; CHECK-NEXT:    st.param.b64 [param1], %rd2;69; CHECK-NEXT:    add.u64 %rd3, %SPL, 8;70; CHECK-NEXT:    ld.local.b64 %rd4, [%rd3];71; CHECK-NEXT:    st.param.b64 [param0], %rd4;72; CHECK-NEXT:    prototype_1 : .callprototype (.param .b32 _) _ (.param .align 8 .b8 _[8], .param .b64 _);73; CHECK-NEXT:    call (retval0), %rd1, (param0, param1), prototype_1;74; CHECK-NEXT:    ld.param.b32 %r1, [retval0];75; CHECK-NEXT:    } // callseq 176; CHECK-NEXT:    st.param.b32 [func_retval0], %r1;77; CHECK-NEXT:    ret;78entry:79  %s = alloca %struct.U, align 880  %agg.tmp = alloca %struct.U, align 881  %0 = load ptr, ptr @ptr, align 882  %call = call noundef i32 %0(ptr byval(%struct.U) align 8 %agg.tmp, ptr %s)83  ret i32 %call84}85