Files
TheRock/compiler/amd-llvm/clang/test/Headers/cuda_intrinsics.cu
T
derek.holloway 7502bf64a4
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
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

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); }
}