; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6 ; ; RUN: opt < %s -S -nvptx-lower-aggr-copies | FileCheck %s target triple = "nvptx64-nvidia-cuda" @global_data = global [256 x i8] zeroinitializer declare void @llvm.memmove.p3.p0.i64(ptr addrspace(3) nocapture, ptr nocapture readonly, i64, i1) declare void @llvm.memmove.p0.p3.i64(ptr nocapture, ptr addrspace(3) nocapture readonly, i64, i1) ; Test function that copies from alloca to shared memory, then from shared memory to global memory define void @two_stage_copy() { ; CHECK-LABEL: define void @two_stage_copy() { ; CHECK-NEXT: [[ENTRY:.*:]] ; CHECK-NEXT: [[LOCAL_BUF:%.*]] = alloca [256 x i8], align 1 ; CHECK-NEXT: [[SHARED_BUF:%.*]] = alloca [256 x i8], align 1, addrspace(3) ; CHECK-NEXT: [[LOCAL_PTR:%.*]] = getelementptr inbounds [256 x i8], ptr [[LOCAL_BUF]], i64 0, i64 0 ; CHECK-NEXT: store i8 42, ptr [[LOCAL_PTR]], align 1 ; CHECK-NEXT: call void @llvm.memmove.p3.p0.i64(ptr addrspace(3) [[SHARED_BUF]], ptr [[LOCAL_BUF]], i64 256, i1 false) ; CHECK-NEXT: call void @llvm.memmove.p0.p3.i64(ptr @global_data, ptr addrspace(3) [[SHARED_BUF]], i64 256, i1 false) ; CHECK-NEXT: ret void ; entry: %local_buf = alloca [256 x i8], align 1 %shared_buf = alloca [256 x i8], align 1, addrspace(3) ; Initialize local buffer %local_ptr = getelementptr inbounds [256 x i8], ptr %local_buf, i64 0, i64 0 store i8 42, ptr %local_ptr, align 1 call void @llvm.memmove.p3.p0.i64(ptr addrspace(3) %shared_buf, ptr %local_buf, i64 256, i1 false) call void @llvm.memmove.p0.p3.i64(ptr @global_data, ptr addrspace(3) %shared_buf, i64 256, i1 false) ret void }