CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
508 lines
22 KiB
Plaintext
508 lines
22 KiB
Plaintext
// REQUIRES: nvptx-registered-target
|
|
// RUN: %clangxx -O1 -S --cuda-device-only --offload-arch=sm_32 -nocudalib -nocudainc -target x86_64-unknown-linux-gnu %s -o - | FileCheck %s --check-prefixes=CHECK,LINUX
|
|
// RUN: %clangxx -O1 -S --cuda-device-only --offload-arch=sm_32 -nocudalib -nocudainc -target x86_64-pc-windows-msvc %s -o - | FileCheck %s --check-prefixes=CHECK,WINDOWS
|
|
|
|
|
|
#define __device__ __attribute__((device))
|
|
#define warpSize 32
|
|
#define memcpy __builtin_memcpy
|
|
|
|
// Define missing types for standalone testing
|
|
struct char2 { char x, y; };
|
|
struct char4 { char x, y, z, w; };
|
|
struct short2 { short x, y; };
|
|
struct short4 { short x, y, z, w; };
|
|
struct int2 { int x, y; };
|
|
struct int4 { int x, y, z, w; };
|
|
struct longlong2 { long long x, y; };
|
|
struct uchar2 { unsigned char x, y; };
|
|
struct uchar4 { unsigned char x, y, z, w; };
|
|
struct ushort2 { unsigned short x, y; };
|
|
struct ushort4 { unsigned short x, y, z, w; };
|
|
struct uint2 { unsigned int x, y; };
|
|
struct uint4 { unsigned int x, y, z, w; };
|
|
struct ulonglong2 { unsigned long long x, y; };
|
|
struct float2 { float x, y; };
|
|
struct float4 { float x, y, z, w; };
|
|
struct double2 { double x, y; };
|
|
|
|
#include "__clang_cuda_intrinsics.h"
|
|
|
|
__device__ void test_loads_cg(void *ptr) {
|
|
// CHECK-LABEL: .func _Z13test_loads_cgPv
|
|
// CHECK: ld.global.cg.s8
|
|
__ldcg(((const char *)ptr) + 0);
|
|
// CHECK: ld.global.cg.s32
|
|
__ldcg(((const int *)ptr) + 1);
|
|
// LINUX: ld.global.cg.s64
|
|
// WINDOWS: ld.global.cg.s32
|
|
__ldcg(((const long *)ptr) + 2);
|
|
// LINUX: ld.global.cg.u64
|
|
// WINDOWS: ld.global.cg.u32
|
|
__ldcg(((const unsigned long *)ptr) + 3);
|
|
// CHECK: ld.global.cg.s64
|
|
__ldcg(((const long long *)ptr) + 4);
|
|
// CHECK: ld.global.cg.f32
|
|
__ldcg(((const float *)ptr) + 5);
|
|
// CHECK: ld.global.cg.f64
|
|
__ldcg(((const double *)ptr) + 6);
|
|
// CHECK: ld.global.cg.v2.s8
|
|
__ldcg(((const char2 *)ptr) + 7);
|
|
// CHECK: ld.global.cg.v4.s8
|
|
__ldcg(((const char4 *)ptr) + 8);
|
|
// CHECK: ld.global.cg.v2.s16
|
|
__ldcg(((const short2 *)ptr) + 9);
|
|
// CHECK: ld.global.cg.v4.s16
|
|
__ldcg(((const short4 *)ptr) + 10);
|
|
// CHECK: ld.global.cg.v2.s32
|
|
__ldcg(((const int2 *)ptr) + 11);
|
|
// CHECK: ld.global.cg.v4.s32
|
|
__ldcg(((const int4 *)ptr) + 12);
|
|
// CHECK: ld.global.cg.v2.s64
|
|
__ldcg(((const longlong2 *)ptr) + 13);
|
|
// CHECK: ld.global.cg.v2.u8
|
|
__ldcg(((const uchar2 *)ptr) + 14);
|
|
// CHECK: ld.global.cg.v4.u8
|
|
__ldcg(((const uchar4 *)ptr) + 15);
|
|
// CHECK: ld.global.cg.v2.u16
|
|
__ldcg(((const ushort2 *)ptr) + 16);
|
|
// CHECK: ld.global.cg.v4.u16
|
|
__ldcg(((const ushort4 *)ptr) + 17);
|
|
// CHECK: ld.global.cg.v2.u32
|
|
__ldcg(((const uint2 *)ptr) + 18);
|
|
// CHECK: ld.global.cg.v4.u32
|
|
__ldcg(((const uint4 *)ptr) + 19);
|
|
// CHECK: ld.global.cg.v2.u64
|
|
__ldcg(((const ulonglong2 *)ptr) + 20);
|
|
// CHECK: ld.global.cg.v2.f32
|
|
__ldcg(((const float2 *)ptr) + 21);
|
|
// CHECK: ld.global.cg.v4.f32
|
|
__ldcg(((const float4 *)ptr) + 22);
|
|
// CHECK: ld.global.cg.v2.f64
|
|
__ldcg(((const double2 *)ptr) + 23);
|
|
}
|
|
__device__ void test_loads_cv(void *ptr) {
|
|
// CHECK-LABEL: .func _Z13test_loads_cvPv
|
|
// CHECK: ld.global.cv.s8
|
|
volatile char v_0 = __ldcv(((const char *)ptr) + 0);
|
|
// CHECK: ld.global.cv.s32
|
|
volatile int v_1 = __ldcv(((const int *)ptr) + 1);
|
|
// LINUX: ld.global.cv.s64
|
|
// WINDOWS: ld.global.cv.s32
|
|
volatile long v_2 = __ldcv(((const long *)ptr) + 2);
|
|
// LINUX: ld.global.cv.u64
|
|
// WINDOWS: ld.global.cv.u32
|
|
volatile unsigned long v_3 = __ldcv(((const unsigned long *)ptr) + 3);
|
|
// CHECK: ld.global.cv.s64
|
|
volatile long long v_4 = __ldcv(((const long long *)ptr) + 4);
|
|
// CHECK: ld.global.cv.f32
|
|
volatile float v_5 = __ldcv(((const float *)ptr) + 5);
|
|
// CHECK: ld.global.cv.f64
|
|
volatile double v_6 = __ldcv(((const double *)ptr) + 6);
|
|
// CHECK: ld.global.cv.v2.s8
|
|
volatile char2 v_7 = __ldcv(((const char2 *)ptr) + 7);
|
|
// CHECK: ld.global.cv.v4.s8
|
|
volatile char4 v_8 = __ldcv(((const char4 *)ptr) + 8);
|
|
// CHECK: ld.global.cv.v2.s16
|
|
volatile short2 v_9 = __ldcv(((const short2 *)ptr) + 9);
|
|
// CHECK: ld.global.cv.v4.s16
|
|
volatile short4 v_10 = __ldcv(((const short4 *)ptr) + 10);
|
|
// CHECK: ld.global.cv.v2.s32
|
|
volatile int2 v_11 = __ldcv(((const int2 *)ptr) + 11);
|
|
// CHECK: ld.global.cv.v4.s32
|
|
volatile int4 v_12 = __ldcv(((const int4 *)ptr) + 12);
|
|
// CHECK: ld.global.cv.v2.s64
|
|
volatile longlong2 v_13 = __ldcv(((const longlong2 *)ptr) + 13);
|
|
// CHECK: ld.global.cv.v2.u8
|
|
volatile uchar2 v_14 = __ldcv(((const uchar2 *)ptr) + 14);
|
|
// CHECK: ld.global.cv.v4.u8
|
|
volatile uchar4 v_15 = __ldcv(((const uchar4 *)ptr) + 15);
|
|
// CHECK: ld.global.cv.v2.u16
|
|
volatile ushort2 v_16 = __ldcv(((const ushort2 *)ptr) + 16);
|
|
// CHECK: ld.global.cv.v4.u16
|
|
volatile ushort4 v_17 = __ldcv(((const ushort4 *)ptr) + 17);
|
|
// CHECK: ld.global.cv.v2.u32
|
|
volatile uint2 v_18 = __ldcv(((const uint2 *)ptr) + 18);
|
|
// CHECK: ld.global.cv.v4.u32
|
|
volatile uint4 v_19 = __ldcv(((const uint4 *)ptr) + 19);
|
|
// CHECK: ld.global.cv.v2.u64
|
|
volatile ulonglong2 v_20 = __ldcv(((const ulonglong2 *)ptr) + 20);
|
|
// CHECK: ld.global.cv.v2.f32
|
|
volatile float2 v_21 = __ldcv(((const float2 *)ptr) + 21);
|
|
// CHECK: ld.global.cv.v4.f32
|
|
volatile float4 v_22 = __ldcv(((const float4 *)ptr) + 22);
|
|
// CHECK: ld.global.cv.v2.f64
|
|
volatile double2 v_23 = __ldcv(((const double2 *)ptr) + 23);
|
|
}
|
|
__device__ void test_loads_cs(void *ptr) {
|
|
// CHECK-LABEL: .func _Z13test_loads_csPv
|
|
// CHECK: ld.global.cs.s8
|
|
__ldcs(((const char *)ptr) + 0);
|
|
// CHECK: ld.global.cs.s32
|
|
__ldcs(((const int *)ptr) + 1);
|
|
// LINUX: ld.global.cs.s64
|
|
// WINDOWS: ld.global.cs.s32
|
|
__ldcs(((const long *)ptr) + 2);
|
|
// LINUX: ld.global.cs.u64
|
|
// WINDOWS: ld.global.cs.u32
|
|
__ldcs(((const unsigned long *)ptr) + 3);
|
|
// CHECK: ld.global.cs.s64
|
|
__ldcs(((const long long *)ptr) + 4);
|
|
// CHECK: ld.global.cs.f32
|
|
__ldcs(((const float *)ptr) + 5);
|
|
// CHECK: ld.global.cs.f64
|
|
__ldcs(((const double *)ptr) + 6);
|
|
// CHECK: ld.global.cs.v2.s8
|
|
__ldcs(((const char2 *)ptr) + 7);
|
|
// CHECK: ld.global.cs.v4.s8
|
|
__ldcs(((const char4 *)ptr) + 8);
|
|
// CHECK: ld.global.cs.v2.s16
|
|
__ldcs(((const short2 *)ptr) + 9);
|
|
// CHECK: ld.global.cs.v4.s16
|
|
__ldcs(((const short4 *)ptr) + 10);
|
|
// CHECK: ld.global.cs.v2.s32
|
|
__ldcs(((const int2 *)ptr) + 11);
|
|
// CHECK: ld.global.cs.v4.s32
|
|
__ldcs(((const int4 *)ptr) + 12);
|
|
// CHECK: ld.global.cs.v2.s64
|
|
__ldcs(((const longlong2 *)ptr) + 13);
|
|
// CHECK: ld.global.cs.v2.u8
|
|
__ldcs(((const uchar2 *)ptr) + 14);
|
|
// CHECK: ld.global.cs.v4.u8
|
|
__ldcs(((const uchar4 *)ptr) + 15);
|
|
// CHECK: ld.global.cs.v2.u16
|
|
__ldcs(((const ushort2 *)ptr) + 16);
|
|
// CHECK: ld.global.cs.v4.u16
|
|
__ldcs(((const ushort4 *)ptr) + 17);
|
|
// CHECK: ld.global.cs.v2.u32
|
|
__ldcs(((const uint2 *)ptr) + 18);
|
|
// CHECK: ld.global.cs.v4.u32
|
|
__ldcs(((const uint4 *)ptr) + 19);
|
|
// CHECK: ld.global.cs.v2.u64
|
|
__ldcs(((const ulonglong2 *)ptr) + 20);
|
|
// CHECK: ld.global.cs.v2.f32
|
|
__ldcs(((const float2 *)ptr) + 21);
|
|
// CHECK: ld.global.cs.v4.f32
|
|
__ldcs(((const float4 *)ptr) + 22);
|
|
// CHECK: ld.global.cs.v2.f64
|
|
__ldcs(((const double2 *)ptr) + 23);
|
|
}
|
|
__device__ void test_loads_ca(void *ptr) {
|
|
// CHECK-LABEL: .func _Z13test_loads_caPv
|
|
// CHECK: ld.global.ca.s8
|
|
__ldca(((const char *)ptr) + 0);
|
|
// CHECK: ld.global.ca.s32
|
|
__ldca(((const int *)ptr) + 1);
|
|
// LINUX: ld.global.ca.s64
|
|
// WINDOWS: ld.global.ca.s32
|
|
__ldca(((const long *)ptr) + 2);
|
|
// LINUX: ld.global.ca.u64
|
|
// WINDOWS: ld.global.ca.u32
|
|
__ldca(((const unsigned long *)ptr) + 3);
|
|
// CHECK: ld.global.ca.s64
|
|
__ldca(((const long long *)ptr) + 4);
|
|
// CHECK: ld.global.ca.f32
|
|
__ldca(((const float *)ptr) + 5);
|
|
// CHECK: ld.global.ca.f64
|
|
__ldca(((const double *)ptr) + 6);
|
|
// CHECK: ld.global.ca.v2.s8
|
|
__ldca(((const char2 *)ptr) + 7);
|
|
// CHECK: ld.global.ca.v4.s8
|
|
__ldca(((const char4 *)ptr) + 8);
|
|
// CHECK: ld.global.ca.v2.s16
|
|
__ldca(((const short2 *)ptr) + 9);
|
|
// CHECK: ld.global.ca.v4.s16
|
|
__ldca(((const short4 *)ptr) + 10);
|
|
// CHECK: ld.global.ca.v2.s32
|
|
__ldca(((const int2 *)ptr) + 11);
|
|
// CHECK: ld.global.ca.v4.s32
|
|
__ldca(((const int4 *)ptr) + 12);
|
|
// CHECK: ld.global.ca.v2.s64
|
|
__ldca(((const longlong2 *)ptr) + 13);
|
|
// CHECK: ld.global.ca.v2.u8
|
|
__ldca(((const uchar2 *)ptr) + 14);
|
|
// CHECK: ld.global.ca.v4.u8
|
|
__ldca(((const uchar4 *)ptr) + 15);
|
|
// CHECK: ld.global.ca.v2.u16
|
|
__ldca(((const ushort2 *)ptr) + 16);
|
|
// CHECK: ld.global.ca.v4.u16
|
|
__ldca(((const ushort4 *)ptr) + 17);
|
|
// CHECK: ld.global.ca.v2.u32
|
|
__ldca(((const uint2 *)ptr) + 18);
|
|
// CHECK: ld.global.ca.v4.u32
|
|
__ldca(((const uint4 *)ptr) + 19);
|
|
// CHECK: ld.global.ca.v2.u64
|
|
__ldca(((const ulonglong2 *)ptr) + 20);
|
|
// CHECK: ld.global.ca.v2.f32
|
|
__ldca(((const float2 *)ptr) + 21);
|
|
// CHECK: ld.global.ca.v4.f32
|
|
__ldca(((const float4 *)ptr) + 22);
|
|
// CHECK: ld.global.ca.v2.f64
|
|
__ldca(((const double2 *)ptr) + 23);
|
|
}
|
|
__device__ void test_loads_lu(void *ptr) {
|
|
// CHECK-LABEL: .func _Z13test_loads_luPv
|
|
// CHECK: ld.global.lu.s8
|
|
volatile char v_0 = __ldlu(((const char *)ptr) + 0);
|
|
// CHECK: ld.global.lu.s32
|
|
volatile int v_1 = __ldlu(((const int *)ptr) + 1);
|
|
// LINUX: ld.global.lu.s64
|
|
// WINDOWS: ld.global.lu.s32
|
|
volatile long v_2 = __ldlu(((const long *)ptr) + 2);
|
|
// LINUX: ld.global.lu.u64
|
|
// WINDOWS: ld.global.lu.u32
|
|
volatile unsigned long v_3 = __ldlu(((const unsigned long *)ptr) + 3);
|
|
// CHECK: ld.global.lu.s64
|
|
volatile long long v_4 = __ldlu(((const long long *)ptr) + 4);
|
|
// CHECK: ld.global.lu.f32
|
|
volatile float v_5 = __ldlu(((const float *)ptr) + 5);
|
|
// CHECK: ld.global.lu.f64
|
|
volatile double v_6 = __ldlu(((const double *)ptr) + 6);
|
|
// CHECK: ld.global.lu.v2.s8
|
|
volatile char2 v_7 = __ldlu(((const char2 *)ptr) + 7);
|
|
// CHECK: ld.global.lu.v4.s8
|
|
volatile char4 v_8 = __ldlu(((const char4 *)ptr) + 8);
|
|
// CHECK: ld.global.lu.v2.s16
|
|
volatile short2 v_9 = __ldlu(((const short2 *)ptr) + 9);
|
|
// CHECK: ld.global.lu.v4.s16
|
|
volatile short4 v_10 = __ldlu(((const short4 *)ptr) + 10);
|
|
// CHECK: ld.global.lu.v2.s32
|
|
volatile int2 v_11 = __ldlu(((const int2 *)ptr) + 11);
|
|
// CHECK: ld.global.lu.v4.s32
|
|
volatile int4 v_12 = __ldlu(((const int4 *)ptr) + 12);
|
|
// CHECK: ld.global.lu.v2.s64
|
|
volatile longlong2 v_13 = __ldlu(((const longlong2 *)ptr) + 13);
|
|
// CHECK: ld.global.lu.v2.u8
|
|
volatile uchar2 v_14 = __ldlu(((const uchar2 *)ptr) + 14);
|
|
// CHECK: ld.global.lu.v4.u8
|
|
volatile uchar4 v_15 = __ldlu(((const uchar4 *)ptr) + 15);
|
|
// CHECK: ld.global.lu.v2.u16
|
|
volatile ushort2 v_16 = __ldlu(((const ushort2 *)ptr) + 16);
|
|
// CHECK: ld.global.lu.v4.u16
|
|
volatile ushort4 v_17 = __ldlu(((const ushort4 *)ptr) + 17);
|
|
// CHECK: ld.global.lu.v2.u32
|
|
volatile uint2 v_18 = __ldlu(((const uint2 *)ptr) + 18);
|
|
// CHECK: ld.global.lu.v4.u32
|
|
volatile uint4 v_19 = __ldlu(((const uint4 *)ptr) + 19);
|
|
// CHECK: ld.global.lu.v2.u64
|
|
volatile ulonglong2 v_20 = __ldlu(((const ulonglong2 *)ptr) + 20);
|
|
// CHECK: ld.global.lu.v2.f32
|
|
volatile float2 v_21 = __ldlu(((const float2 *)ptr) + 21);
|
|
// CHECK: ld.global.lu.v4.f32
|
|
volatile float4 v_22 = __ldlu(((const float4 *)ptr) + 22);
|
|
// CHECK: ld.global.lu.v2.f64
|
|
volatile double2 v_23 = __ldlu(((const double2 *)ptr) + 23);
|
|
}
|
|
__device__ void test_stores_wt(void *ptr, int val) {
|
|
// CHECK-LABEL: .func _Z14test_stores_wtPvi
|
|
// CHECK: st.global.wt.s8
|
|
__stwt(((char *)ptr) + 0, (char)val);
|
|
// CHECK: st.global.wt.s32
|
|
__stwt(((int *)ptr) + 1, (int)val);
|
|
// LINUX: st.global.wt.s64
|
|
// WINDOWS: st.global.wt.s32
|
|
__stwt(((long *)ptr) + 2, (long)val);
|
|
// LINUX: st.global.wt.u64
|
|
// WINDOWS: st.global.wt.u32
|
|
__stwt(((unsigned long *)ptr) + 3, (unsigned long)val);
|
|
// CHECK: st.global.wt.s64
|
|
__stwt(((long long *)ptr) + 4, (long long)val);
|
|
// CHECK: st.global.wt.f32
|
|
__stwt(((float *)ptr) + 5, (float)val);
|
|
// CHECK: st.global.wt.f64
|
|
__stwt(((double *)ptr) + 6, (double)val);
|
|
// CHECK: st.global.wt.v2.s8
|
|
{ char2 v = {(char)val, (char)val}; __stwt(((char2 *)ptr) + 7, v); }
|
|
// CHECK: st.global.wt.v4.s8
|
|
{ char4 v = {(char)val, (char)val, (char)val, (char)val}; __stwt(((char4 *)ptr) + 8, v); }
|
|
// CHECK: st.global.wt.v2.s16
|
|
{ short2 v = {(short)val, (short)val}; __stwt(((short2 *)ptr) + 9, v); }
|
|
// CHECK: st.global.wt.v4.s16
|
|
{ short4 v = {(short)val, (short)val, (short)val, (short)val}; __stwt(((short4 *)ptr) + 10, v); }
|
|
// CHECK: st.global.wt.v2.s32
|
|
{ int2 v = {(int)val, (int)val}; __stwt(((int2 *)ptr) + 11, v); }
|
|
// CHECK: st.global.wt.v4.s32
|
|
{ int4 v = {(int)val, (int)val, (int)val, (int)val}; __stwt(((int4 *)ptr) + 12, v); }
|
|
// CHECK: st.global.wt.v2.s64
|
|
{ longlong2 v = {(long long)val, (long long)val}; __stwt(((longlong2 *)ptr) + 13, v); }
|
|
// CHECK: st.global.wt.v2.u8
|
|
{ uchar2 v = {(unsigned char)val, (unsigned char)val}; __stwt(((uchar2 *)ptr) + 14, v); }
|
|
// CHECK: st.global.wt.v4.u8
|
|
{ uchar4 v = {(unsigned char)val, (unsigned char)val, (unsigned char)val, (unsigned char)val}; __stwt(((uchar4 *)ptr) + 15, v); }
|
|
// CHECK: st.global.wt.v2.u16
|
|
{ ushort2 v = {(unsigned short)val, (unsigned short)val}; __stwt(((ushort2 *)ptr) + 16, v); }
|
|
// CHECK: st.global.wt.v4.u16
|
|
{ ushort4 v = {(unsigned short)val, (unsigned short)val, (unsigned short)val, (unsigned short)val}; __stwt(((ushort4 *)ptr) + 17, v); }
|
|
// CHECK: st.global.wt.v2.u32
|
|
{ uint2 v = {(unsigned int)val, (unsigned int)val}; __stwt(((uint2 *)ptr) + 18, v); }
|
|
// CHECK: st.global.wt.v4.u32
|
|
{ uint4 v = {(unsigned int)val, (unsigned int)val, (unsigned int)val, (unsigned int)val}; __stwt(((uint4 *)ptr) + 19, v); }
|
|
// CHECK: st.global.wt.v2.u64
|
|
{ ulonglong2 v = {(unsigned long long)val, (unsigned long long)val}; __stwt(((ulonglong2 *)ptr) + 20, v); }
|
|
// CHECK: st.global.wt.v2.f32
|
|
{ float2 v = {(float)val, (float)val}; __stwt(((float2 *)ptr) + 21, v); }
|
|
// CHECK: st.global.wt.v4.f32
|
|
{ float4 v = {(float)val, (float)val, (float)val, (float)val}; __stwt(((float4 *)ptr) + 22, v); }
|
|
// CHECK: st.global.wt.v2.f64
|
|
{ double2 v = {(double)val, (double)val}; __stwt(((double2 *)ptr) + 23, v); }
|
|
}
|
|
__device__ void test_stores_wb(void *ptr, int val) {
|
|
// CHECK-LABEL: .func _Z14test_stores_wbPvi
|
|
// CHECK: st.global.wb.s8
|
|
__stwb(((char *)ptr) + 0, (char)val);
|
|
// CHECK: st.global.wb.s32
|
|
__stwb(((int *)ptr) + 1, (int)val);
|
|
// LINUX: st.global.wb.s64
|
|
// WINDOWS: st.global.wb.s32
|
|
__stwb(((long *)ptr) + 2, (long)val);
|
|
// LINUX: st.global.wb.u64
|
|
// WINDOWS: st.global.wb.u32
|
|
__stwb(((unsigned long *)ptr) + 3, (unsigned long)val);
|
|
// CHECK: st.global.wb.s64
|
|
__stwb(((long long *)ptr) + 4, (long long)val);
|
|
// CHECK: st.global.wb.f32
|
|
__stwb(((float *)ptr) + 5, (float)val);
|
|
// CHECK: st.global.wb.f64
|
|
__stwb(((double *)ptr) + 6, (double)val);
|
|
// CHECK: st.global.wb.v2.s8
|
|
{ char2 v = {(char)val, (char)val}; __stwb(((char2 *)ptr) + 7, v); }
|
|
// CHECK: st.global.wb.v4.s8
|
|
{ char4 v = {(char)val, (char)val, (char)val, (char)val}; __stwb(((char4 *)ptr) + 8, v); }
|
|
// CHECK: st.global.wb.v2.s16
|
|
{ short2 v = {(short)val, (short)val}; __stwb(((short2 *)ptr) + 9, v); }
|
|
// CHECK: st.global.wb.v4.s16
|
|
{ short4 v = {(short)val, (short)val, (short)val, (short)val}; __stwb(((short4 *)ptr) + 10, v); }
|
|
// CHECK: st.global.wb.v2.s32
|
|
{ int2 v = {(int)val, (int)val}; __stwb(((int2 *)ptr) + 11, v); }
|
|
// CHECK: st.global.wb.v4.s32
|
|
{ int4 v = {(int)val, (int)val, (int)val, (int)val}; __stwb(((int4 *)ptr) + 12, v); }
|
|
// CHECK: st.global.wb.v2.s64
|
|
{ longlong2 v = {(long long)val, (long long)val}; __stwb(((longlong2 *)ptr) + 13, v); }
|
|
// CHECK: st.global.wb.v2.u8
|
|
{ uchar2 v = {(unsigned char)val, (unsigned char)val}; __stwb(((uchar2 *)ptr) + 14, v); }
|
|
// CHECK: st.global.wb.v4.u8
|
|
{ uchar4 v = {(unsigned char)val, (unsigned char)val, (unsigned char)val, (unsigned char)val}; __stwb(((uchar4 *)ptr) + 15, v); }
|
|
// CHECK: st.global.wb.v2.u16
|
|
{ ushort2 v = {(unsigned short)val, (unsigned short)val}; __stwb(((ushort2 *)ptr) + 16, v); }
|
|
// CHECK: st.global.wb.v4.u16
|
|
{ ushort4 v = {(unsigned short)val, (unsigned short)val, (unsigned short)val, (unsigned short)val}; __stwb(((ushort4 *)ptr) + 17, v); }
|
|
// CHECK: st.global.wb.v2.u32
|
|
{ uint2 v = {(unsigned int)val, (unsigned int)val}; __stwb(((uint2 *)ptr) + 18, v); }
|
|
// CHECK: st.global.wb.v4.u32
|
|
{ uint4 v = {(unsigned int)val, (unsigned int)val, (unsigned int)val, (unsigned int)val}; __stwb(((uint4 *)ptr) + 19, v); }
|
|
// CHECK: st.global.wb.v2.u64
|
|
{ ulonglong2 v = {(unsigned long long)val, (unsigned long long)val}; __stwb(((ulonglong2 *)ptr) + 20, v); }
|
|
// CHECK: st.global.wb.v2.f32
|
|
{ float2 v = {(float)val, (float)val}; __stwb(((float2 *)ptr) + 21, v); }
|
|
// CHECK: st.global.wb.v4.f32
|
|
{ float4 v = {(float)val, (float)val, (float)val, (float)val}; __stwb(((float4 *)ptr) + 22, v); }
|
|
// CHECK: st.global.wb.v2.f64
|
|
{ double2 v = {(double)val, (double)val}; __stwb(((double2 *)ptr) + 23, v); }
|
|
}
|
|
__device__ void test_stores_cg(void *ptr, int val) {
|
|
// CHECK-LABEL: .func _Z14test_stores_cgPvi
|
|
// CHECK: st.global.cg.s8
|
|
__stcg(((char *)ptr) + 0, (char)val);
|
|
// CHECK: st.global.cg.s32
|
|
__stcg(((int *)ptr) + 1, (int)val);
|
|
// LINUX: st.global.cg.s64
|
|
// WINDOWS: st.global.cg.s32
|
|
__stcg(((long *)ptr) + 2, (long)val);
|
|
// LINUX: st.global.cg.u64
|
|
// WINDOWS: st.global.cg.u32
|
|
__stcg(((unsigned long *)ptr) + 3, (unsigned long)val);
|
|
// CHECK: st.global.cg.s64
|
|
__stcg(((long long *)ptr) + 4, (long long)val);
|
|
// CHECK: st.global.cg.f32
|
|
__stcg(((float *)ptr) + 5, (float)val);
|
|
// CHECK: st.global.cg.f64
|
|
__stcg(((double *)ptr) + 6, (double)val);
|
|
// CHECK: st.global.cg.v2.s8
|
|
{ char2 v = {(char)val, (char)val}; __stcg(((char2 *)ptr) + 7, v); }
|
|
// CHECK: st.global.cg.v4.s8
|
|
{ char4 v = {(char)val, (char)val, (char)val, (char)val}; __stcg(((char4 *)ptr) + 8, v); }
|
|
// CHECK: st.global.cg.v2.s16
|
|
{ short2 v = {(short)val, (short)val}; __stcg(((short2 *)ptr) + 9, v); }
|
|
// CHECK: st.global.cg.v4.s16
|
|
{ short4 v = {(short)val, (short)val, (short)val, (short)val}; __stcg(((short4 *)ptr) + 10, v); }
|
|
// CHECK: st.global.cg.v2.s32
|
|
{ int2 v = {(int)val, (int)val}; __stcg(((int2 *)ptr) + 11, v); }
|
|
// CHECK: st.global.cg.v4.s32
|
|
{ int4 v = {(int)val, (int)val, (int)val, (int)val}; __stcg(((int4 *)ptr) + 12, v); }
|
|
// CHECK: st.global.cg.v2.s64
|
|
{ longlong2 v = {(long long)val, (long long)val}; __stcg(((longlong2 *)ptr) + 13, v); }
|
|
// CHECK: st.global.cg.v2.u8
|
|
{ uchar2 v = {(unsigned char)val, (unsigned char)val}; __stcg(((uchar2 *)ptr) + 14, v); }
|
|
// CHECK: st.global.cg.v4.u8
|
|
{ uchar4 v = {(unsigned char)val, (unsigned char)val, (unsigned char)val, (unsigned char)val}; __stcg(((uchar4 *)ptr) + 15, v); }
|
|
// CHECK: st.global.cg.v2.u16
|
|
{ ushort2 v = {(unsigned short)val, (unsigned short)val}; __stcg(((ushort2 *)ptr) + 16, v); }
|
|
// CHECK: st.global.cg.v4.u16
|
|
{ ushort4 v = {(unsigned short)val, (unsigned short)val, (unsigned short)val, (unsigned short)val}; __stcg(((ushort4 *)ptr) + 17, v); }
|
|
// CHECK: st.global.cg.v2.u32
|
|
{ uint2 v = {(unsigned int)val, (unsigned int)val}; __stcg(((uint2 *)ptr) + 18, v); }
|
|
// CHECK: st.global.cg.v4.u32
|
|
{ uint4 v = {(unsigned int)val, (unsigned int)val, (unsigned int)val, (unsigned int)val}; __stcg(((uint4 *)ptr) + 19, v); }
|
|
// CHECK: st.global.cg.v2.u64
|
|
{ ulonglong2 v = {(unsigned long long)val, (unsigned long long)val}; __stcg(((ulonglong2 *)ptr) + 20, v); }
|
|
// CHECK: st.global.cg.v2.f32
|
|
{ float2 v = {(float)val, (float)val}; __stcg(((float2 *)ptr) + 21, v); }
|
|
// CHECK: st.global.cg.v4.f32
|
|
{ float4 v = {(float)val, (float)val, (float)val, (float)val}; __stcg(((float4 *)ptr) + 22, v); }
|
|
// CHECK: st.global.cg.v2.f64
|
|
{ double2 v = {(double)val, (double)val}; __stcg(((double2 *)ptr) + 23, v); }
|
|
}
|
|
__device__ void test_stores_cs(void *ptr, int val) {
|
|
// CHECK-LABEL: .func _Z14test_stores_csPvi
|
|
// CHECK: st.global.cs.s8
|
|
__stcs(((char *)ptr) + 0, (char)val);
|
|
// CHECK: st.global.cs.s32
|
|
__stcs(((int *)ptr) + 1, (int)val);
|
|
// LINUX: st.global.cs.s64
|
|
// WINDOWS: st.global.cs.s32
|
|
__stcs(((long *)ptr) + 2, (long)val);
|
|
// LINUX: st.global.cs.u64
|
|
// WINDOWS: st.global.cs.u32
|
|
__stcs(((unsigned long *)ptr) + 3, (unsigned long)val);
|
|
// CHECK: st.global.cs.s64
|
|
__stcs(((long long *)ptr) + 4, (long long)val);
|
|
// CHECK: st.global.cs.f32
|
|
__stcs(((float *)ptr) + 5, (float)val);
|
|
// CHECK: st.global.cs.f64
|
|
__stcs(((double *)ptr) + 6, (double)val);
|
|
// CHECK: st.global.cs.v2.s8
|
|
{ char2 v = {(char)val, (char)val}; __stcs(((char2 *)ptr) + 7, v); }
|
|
// CHECK: st.global.cs.v4.s8
|
|
{ char4 v = {(char)val, (char)val, (char)val, (char)val}; __stcs(((char4 *)ptr) + 8, v); }
|
|
// CHECK: st.global.cs.v2.s16
|
|
{ short2 v = {(short)val, (short)val}; __stcs(((short2 *)ptr) + 9, v); }
|
|
// CHECK: st.global.cs.v4.s16
|
|
{ short4 v = {(short)val, (short)val, (short)val, (short)val}; __stcs(((short4 *)ptr) + 10, v); }
|
|
// CHECK: st.global.cs.v2.s32
|
|
{ int2 v = {(int)val, (int)val}; __stcs(((int2 *)ptr) + 11, v); }
|
|
// CHECK: st.global.cs.v4.s32
|
|
{ int4 v = {(int)val, (int)val, (int)val, (int)val}; __stcs(((int4 *)ptr) + 12, v); }
|
|
// CHECK: st.global.cs.v2.s64
|
|
{ longlong2 v = {(long long)val, (long long)val}; __stcs(((longlong2 *)ptr) + 13, v); }
|
|
// CHECK: st.global.cs.v2.u8
|
|
{ uchar2 v = {(unsigned char)val, (unsigned char)val}; __stcs(((uchar2 *)ptr) + 14, v); }
|
|
// CHECK: st.global.cs.v4.u8
|
|
{ uchar4 v = {(unsigned char)val, (unsigned char)val, (unsigned char)val, (unsigned char)val}; __stcs(((uchar4 *)ptr) + 15, v); }
|
|
// CHECK: st.global.cs.v2.u16
|
|
{ ushort2 v = {(unsigned short)val, (unsigned short)val}; __stcs(((ushort2 *)ptr) + 16, v); }
|
|
// CHECK: st.global.cs.v4.u16
|
|
{ ushort4 v = {(unsigned short)val, (unsigned short)val, (unsigned short)val, (unsigned short)val}; __stcs(((ushort4 *)ptr) + 17, v); }
|
|
// CHECK: st.global.cs.v2.u32
|
|
{ uint2 v = {(unsigned int)val, (unsigned int)val}; __stcs(((uint2 *)ptr) + 18, v); }
|
|
// CHECK: st.global.cs.v4.u32
|
|
{ uint4 v = {(unsigned int)val, (unsigned int)val, (unsigned int)val, (unsigned int)val}; __stcs(((uint4 *)ptr) + 19, v); }
|
|
// CHECK: st.global.cs.v2.u64
|
|
{ ulonglong2 v = {(unsigned long long)val, (unsigned long long)val}; __stcs(((ulonglong2 *)ptr) + 20, v); }
|
|
// CHECK: st.global.cs.v2.f32
|
|
{ float2 v = {(float)val, (float)val}; __stcs(((float2 *)ptr) + 21, v); }
|
|
// CHECK: st.global.cs.v4.f32
|
|
{ float4 v = {(float)val, (float)val, (float)val, (float)val}; __stcs(((float4 *)ptr) + 22, v); }
|
|
// CHECK: st.global.cs.v2.f64
|
|
{ double2 v = {(double)val, (double)val}; __stcs(((double2 *)ptr) + 23, v); }
|
|
}
|