blob: 954344b6f7ce281c269666a97bee7eac996c8230 [file]
// clang-format off
// RUN: %clang++ %flags -foffload-via-llvm --offload-arch=native %s -o %t
// RUN: %t | %fcheck-generic
// RUN: %clang++ %flags -foffload-via-llvm --offload-arch=native %s -o %t -fopenmp
// RUN: %t | %fcheck-generic
// clang-format on
// UNSUPPORTED: aarch64-unknown-linux-gnu
// UNSUPPORTED: x86_64-unknown-linux-gnu
// UNSUPPORTED: nvptx64-nvidia-cuda-LTO
// UNSUPPORTED: amdgcn-amd-amdhsa-LTO
// UNSUPPORTED: amdgpu-amd-amdhsa-LTO
// UNSUPPORTED: intelgpu
#include <stdio.h>
static void print_error(const char *Label, hipError_t Error) {
printf("%s value: %u\n", Label, static_cast<unsigned>(Error));
printf("%s name: %s\n", Label, hipGetErrorName(Error));
}
__global__ void setValue(int *Out, int Value) { *Out = Value; }
int main(int argc, char **argv) {
print_error("null stream create", hipStreamCreate(nullptr));
// CHECK: null stream create value: 1
// CHECK: null stream create name: hipErrorInvalidValue
print_error("null flags stream create",
hipStreamCreateWithFlags(nullptr, hipStreamDefault));
// CHECK: null flags stream create value: 1
// CHECK: null flags stream create name: hipErrorInvalidValue
hipStream_t InvalidFlagsStream = nullptr;
print_error("invalid stream flags",
hipStreamCreateWithFlags(&InvalidFlagsStream, ~0u));
// CHECK: invalid stream flags value: 1
// CHECK: invalid stream flags name: hipErrorInvalidValue
printf("invalid flags stream: %d\n", InvalidFlagsStream == nullptr);
// CHECK: invalid flags stream: 1
hipStream_t Stream = nullptr;
if (hipStreamCreate(&Stream) != hipSuccess)
return 1;
hipStream_t BlockingStream = nullptr;
if (hipStreamCreateWithFlags(&BlockingStream, hipStreamDefault) != hipSuccess)
return 1;
hipStream_t NonBlockingStream = nullptr;
if (hipStreamCreateWithFlags(&NonBlockingStream, hipStreamNonBlocking) !=
hipSuccess)
return 1;
printf("stream created: %d\n", Stream != nullptr);
// CHECK: stream created: 1
printf("stream flags created: %d %d\n", BlockingStream != nullptr,
NonBlockingStream != nullptr);
// CHECK: stream flags created: 1 1
int *StreamPtr = nullptr;
int *DefaultPtr = nullptr;
int StreamResult = 0;
int DefaultResult = 0;
if (hipMalloc(&StreamPtr, sizeof(int)) != hipSuccess)
return 1;
if (hipMalloc(&DefaultPtr, sizeof(int)) != hipSuccess)
return 1;
setValue<<<1, 1, 0, Stream>>>(StreamPtr, 42);
setValue<<<1, 1>>>(DefaultPtr, 17);
if (hipStreamSynchronize(Stream) != hipSuccess)
return 1;
if (hipDeviceSynchronize() != hipSuccess)
return 1;
if (hipMemcpy(&StreamResult, StreamPtr, sizeof(int), hipMemcpyDeviceToHost) !=
hipSuccess)
return 1;
if (hipMemcpy(&DefaultResult, DefaultPtr, sizeof(int),
hipMemcpyDeviceToHost) != hipSuccess)
return 1;
printf("stream result: %d\n", StreamResult);
// CHECK: stream result: 42
printf("default result: %d\n", DefaultResult);
// CHECK: default result: 17
if (hipStreamDestroy(Stream) != hipSuccess)
return 1;
print_error("destroyed stream destroy", hipStreamDestroy(Stream));
// CHECK: destroyed stream destroy value: 4
// CHECK: destroyed stream destroy name: hipErrorInvalidResourceHandle
hipFree(StreamPtr);
hipFree(DefaultPtr);
}