1 ; RUN: llc < %s -march=nvptx -mcpu=sm_10 | FileCheck %s --check-prefix=PTX32 2 ; RUN: llc < %s -march=nvptx -mcpu=sm_20 | FileCheck %s --check-prefix=PTX32 3 ; RUN: llc < %s -march=nvptx64 -mcpu=sm_10 | FileCheck %s --check-prefix=PTX64 4 ; RUN: llc < %s -march=nvptx64 -mcpu=sm_20 | FileCheck %s --check-prefix=PTX64 5 6 7 ;; i8 8 9 define void @st_global_i8(i8 addrspace(1)* %ptr, i8 %a) { 10 ; PTX32: st.global.u8 [%r{{[0-9]+}}], %rc{{[0-9]+}} 11 ; PTX32: ret 12 ; PTX64: st.global.u8 [%rl{{[0-9]+}}], %rc{{[0-9]+}} 13 ; PTX64: ret 14 store i8 %a, i8 addrspace(1)* %ptr 15 ret void 16 } 17 18 define void @st_shared_i8(i8 addrspace(3)* %ptr, i8 %a) { 19 ; PTX32: st.shared.u8 [%r{{[0-9]+}}], %rc{{[0-9]+}} 20 ; PTX32: ret 21 ; PTX64: st.shared.u8 [%rl{{[0-9]+}}], %rc{{[0-9]+}} 22 ; PTX64: ret 23 store i8 %a, i8 addrspace(3)* %ptr 24 ret void 25 } 26 27 define void @st_local_i8(i8 addrspace(5)* %ptr, i8 %a) { 28 ; PTX32: st.local.u8 [%r{{[0-9]+}}], %rc{{[0-9]+}} 29 ; PTX32: ret 30 ; PTX64: st.local.u8 [%rl{{[0-9]+}}], %rc{{[0-9]+}} 31 ; PTX64: ret 32 store i8 %a, i8 addrspace(5)* %ptr 33 ret void 34 } 35 36 ;; i16 37 38 define void @st_global_i16(i16 addrspace(1)* %ptr, i16 %a) { 39 ; PTX32: st.global.u16 [%r{{[0-9]+}}], %rs{{[0-9]+}} 40 ; PTX32: ret 41 ; PTX64: st.global.u16 [%rl{{[0-9]+}}], %rs{{[0-9]+}} 42 ; PTX64: ret 43 store i16 %a, i16 addrspace(1)* %ptr 44 ret void 45 } 46 47 define void @st_shared_i16(i16 addrspace(3)* %ptr, i16 %a) { 48 ; PTX32: st.shared.u16 [%r{{[0-9]+}}], %rs{{[0-9]+}} 49 ; PTX32: ret 50 ; PTX64: st.shared.u16 [%rl{{[0-9]+}}], %rs{{[0-9]+}} 51 ; PTX64: ret 52 store i16 %a, i16 addrspace(3)* %ptr 53 ret void 54 } 55 56 define void @st_local_i16(i16 addrspace(5)* %ptr, i16 %a) { 57 ; PTX32: st.local.u16 [%r{{[0-9]+}}], %rs{{[0-9]+}} 58 ; PTX32: ret 59 ; PTX64: st.local.u16 [%rl{{[0-9]+}}], %rs{{[0-9]+}} 60 ; PTX64: ret 61 store i16 %a, i16 addrspace(5)* %ptr 62 ret void 63 } 64 65 ;; i32 66 67 define void @st_global_i32(i32 addrspace(1)* %ptr, i32 %a) { 68 ; PTX32: st.global.u32 [%r{{[0-9]+}}], %r{{[0-9]+}} 69 ; PTX32: ret 70 ; PTX64: st.global.u32 [%rl{{[0-9]+}}], %r{{[0-9]+}} 71 ; PTX64: ret 72 store i32 %a, i32 addrspace(1)* %ptr 73 ret void 74 } 75 76 define void @st_shared_i32(i32 addrspace(3)* %ptr, i32 %a) { 77 ; PTX32: st.shared.u32 [%r{{[0-9]+}}], %r{{[0-9]+}} 78 ; PTX32: ret 79 ; PTX64: st.shared.u32 [%rl{{[0-9]+}}], %r{{[0-9]+}} 80 ; PTX64: ret 81 store i32 %a, i32 addrspace(3)* %ptr 82 ret void 83 } 84 85 define void @st_local_i32(i32 addrspace(5)* %ptr, i32 %a) { 86 ; PTX32: st.local.u32 [%r{{[0-9]+}}], %r{{[0-9]+}} 87 ; PTX32: ret 88 ; PTX64: st.local.u32 [%rl{{[0-9]+}}], %r{{[0-9]+}} 89 ; PTX64: ret 90 store i32 %a, i32 addrspace(5)* %ptr 91 ret void 92 } 93 94 ;; i64 95 96 define void @st_global_i64(i64 addrspace(1)* %ptr, i64 %a) { 97 ; PTX32: st.global.u64 [%r{{[0-9]+}}], %rl{{[0-9]+}} 98 ; PTX32: ret 99 ; PTX64: st.global.u64 [%rl{{[0-9]+}}], %rl{{[0-9]+}} 100 ; PTX64: ret 101 store i64 %a, i64 addrspace(1)* %ptr 102 ret void 103 } 104 105 define void @st_shared_i64(i64 addrspace(3)* %ptr, i64 %a) { 106 ; PTX32: st.shared.u64 [%r{{[0-9]+}}], %rl{{[0-9]+}} 107 ; PTX32: ret 108 ; PTX64: st.shared.u64 [%rl{{[0-9]+}}], %rl{{[0-9]+}} 109 ; PTX64: ret 110 store i64 %a, i64 addrspace(3)* %ptr 111 ret void 112 } 113 114 define void @st_local_i64(i64 addrspace(5)* %ptr, i64 %a) { 115 ; PTX32: st.local.u64 [%r{{[0-9]+}}], %rl{{[0-9]+}} 116 ; PTX32: ret 117 ; PTX64: st.local.u64 [%rl{{[0-9]+}}], %rl{{[0-9]+}} 118 ; PTX64: ret 119 store i64 %a, i64 addrspace(5)* %ptr 120 ret void 121 } 122 123 ;; f32 124 125 define void @st_global_f32(float addrspace(1)* %ptr, float %a) { 126 ; PTX32: st.global.f32 [%r{{[0-9]+}}], %f{{[0-9]+}} 127 ; PTX32: ret 128 ; PTX64: st.global.f32 [%rl{{[0-9]+}}], %f{{[0-9]+}} 129 ; PTX64: ret 130 store float %a, float addrspace(1)* %ptr 131 ret void 132 } 133 134 define void @st_shared_f32(float addrspace(3)* %ptr, float %a) { 135 ; PTX32: st.shared.f32 [%r{{[0-9]+}}], %f{{[0-9]+}} 136 ; PTX32: ret 137 ; PTX64: st.shared.f32 [%rl{{[0-9]+}}], %f{{[0-9]+}} 138 ; PTX64: ret 139 store float %a, float addrspace(3)* %ptr 140 ret void 141 } 142 143 define void @st_local_f32(float addrspace(5)* %ptr, float %a) { 144 ; PTX32: st.local.f32 [%r{{[0-9]+}}], %f{{[0-9]+}} 145 ; PTX32: ret 146 ; PTX64: st.local.f32 [%rl{{[0-9]+}}], %f{{[0-9]+}} 147 ; PTX64: ret 148 store float %a, float addrspace(5)* %ptr 149 ret void 150 } 151 152 ;; f64 153 154 define void @st_global_f64(double addrspace(1)* %ptr, double %a) { 155 ; PTX32: st.global.f64 [%r{{[0-9]+}}], %fl{{[0-9]+}} 156 ; PTX32: ret 157 ; PTX64: st.global.f64 [%rl{{[0-9]+}}], %fl{{[0-9]+}} 158 ; PTX64: ret 159 store double %a, double addrspace(1)* %ptr 160 ret void 161 } 162 163 define void @st_shared_f64(double addrspace(3)* %ptr, double %a) { 164 ; PTX32: st.shared.f64 [%r{{[0-9]+}}], %fl{{[0-9]+}} 165 ; PTX32: ret 166 ; PTX64: st.shared.f64 [%rl{{[0-9]+}}], %fl{{[0-9]+}} 167 ; PTX64: ret 168 store double %a, double addrspace(3)* %ptr 169 ret void 170 } 171 172 define void @st_local_f64(double addrspace(5)* %ptr, double %a) { 173 ; PTX32: st.local.f64 [%r{{[0-9]+}}], %fl{{[0-9]+}} 174 ; PTX32: ret 175 ; PTX64: st.local.f64 [%rl{{[0-9]+}}], %fl{{[0-9]+}} 176 ; PTX64: ret 177 store double %a, double addrspace(5)* %ptr 178 ret void 179 } 180