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