1 ; RUN: llc < %s -march=nvptx -mcpu=sm_20 | FileCheck %s --check-prefixes=ALL,G32,LS32
2 ; RUN: llc < %s -march=nvptx64 -mcpu=sm_20 | FileCheck %s --check-prefixes=ALL,G64,LS64
3 ; RUN: llc < %s -march=nvptx64 -mcpu=sm_20 --nvptx-short-ptr | FileCheck %s --check-prefixes=G64,LS32
4 ; RUN: %if ptxas && !ptxas-12.0 %{ llc < %s -march=nvptx -mcpu=sm_20 | %ptxas-verify %}
5 ; RUN: %if ptxas %{ llc < %s -march=nvptx64 -mcpu=sm_20 | %ptxas-verify %}
6 ; RUN: %if ptxas %{ llc < %s -march=nvptx64 -mcpu=sm_20 --nvptx-short-ptr | %ptxas-verify %}
10 define i8 @ld_global_i8(ptr addrspace(1) %ptr) {
11 ; ALL-LABEL: ld_global_i8
12 ; G32: ld.global.u8 %{{.*}}, [%r{{[0-9]+}}]
13 ; G64: ld.global.u8 %{{.*}}, [%rd{{[0-9]+}}]
15 %a = load i8, ptr addrspace(1) %ptr
18 define i8 @ld_shared_i8(ptr addrspace(3) %ptr) {
19 ; ALL-LABEL: ld_shared_i8
20 ; LS32: ld.shared.u8 %{{.*}}, [%r{{[0-9]+}}]
21 ; LS64: ld.shared.u8 %{{.*}}, [%rd{{[0-9]+}}]
23 %a = load i8, ptr addrspace(3) %ptr
26 define i8 @ld_local_i8(ptr addrspace(5) %ptr) {
27 ; ALL-LABEL: ld_local_i8
28 ; LS32: ld.local.u8 %{{.*}}, [%r{{[0-9]+}}]
29 ; LS64: ld.local.u8 %{{.*}}, [%rd{{[0-9]+}}]
31 %a = load i8, ptr addrspace(5) %ptr
36 define i16 @ld_global_i16(ptr addrspace(1) %ptr) {
37 ; ALL-LABEL: ld_global_i16
38 ; G32: ld.global.u16 %{{.*}}, [%r{{[0-9]+}}]
39 ; G64: ld.global.u16 %{{.*}}, [%rd{{[0-9]+}}]
41 %a = load i16, ptr addrspace(1) %ptr
44 define i16 @ld_shared_i16(ptr addrspace(3) %ptr) {
45 ; ALL-LABEL: ld_shared_i16
46 ; LS32: ld.shared.u16 %{{.*}}, [%r{{[0-9]+}}]
47 ; LS64: ld.shared.u16 %{{.*}}, [%rd{{[0-9]+}}]
49 %a = load i16, ptr addrspace(3) %ptr
52 define i16 @ld_local_i16(ptr addrspace(5) %ptr) {
53 ; ALL-LABEL: ld_local_i16
54 ; LS32: ld.local.u16 %{{.*}}, [%r{{[0-9]+}}]
55 ; LS64: ld.local.u16 %{{.*}}, [%rd{{[0-9]+}}]
57 %a = load i16, ptr addrspace(5) %ptr
62 define i32 @ld_global_i32(ptr addrspace(1) %ptr) {
63 ; ALL-LABEL: ld_global_i32
64 ; G32: ld.global.u32 %{{.*}}, [%r{{[0-9]+}}]
65 ; G64: ld.global.u32 %{{.*}}, [%rd{{[0-9]+}}]
67 %a = load i32, ptr addrspace(1) %ptr
70 define i32 @ld_shared_i32(ptr addrspace(3) %ptr) {
71 ; ALL-LABEL: ld_shared_i32
72 ; LS32: ld.shared.u32 %{{.*}}, [%r{{[0-9]+}}]
73 ; LS64: ld.shared.u32 %{{.*}}, [%rd{{[0-9]+}}]
75 %a = load i32, ptr addrspace(3) %ptr
78 define i32 @ld_local_i32(ptr addrspace(5) %ptr) {
79 ; ALL-LABEL: ld_local_i32
80 ; LS32: ld.local.u32 %{{.*}}, [%r{{[0-9]+}}]
81 ; LS64: ld.local.u32 %{{.*}}, [%rd{{[0-9]+}}]
83 %a = load i32, ptr addrspace(5) %ptr
88 define i64 @ld_global_i64(ptr addrspace(1) %ptr) {
89 ; ALL-LABEL: ld_global_i64
90 ; G32: ld.global.u64 %{{.*}}, [%r{{[0-9]+}}]
91 ; G64: ld.global.u64 %{{.*}}, [%rd{{[0-9]+}}]
93 %a = load i64, ptr addrspace(1) %ptr
96 define i64 @ld_shared_i64(ptr addrspace(3) %ptr) {
97 ; ALL-LABEL: ld_shared_i64
98 ; LS32: ld.shared.u64 %{{.*}}, [%r{{[0-9]+}}]
99 ; LS64: ld.shared.u64 %{{.*}}, [%rd{{[0-9]+}}]
101 %a = load i64, ptr addrspace(3) %ptr
104 define i64 @ld_local_i64(ptr addrspace(5) %ptr) {
105 ; ALL-LABEL: ld_local_i64
106 ; LS32: ld.local.u64 %{{.*}}, [%r{{[0-9]+}}]
107 ; LS64: ld.local.u64 %{{.*}}, [%rd{{[0-9]+}}]
109 %a = load i64, ptr addrspace(5) %ptr
114 define float @ld_global_f32(ptr addrspace(1) %ptr) {
115 ; ALL-LABEL: ld_global_f32
116 ; G32: ld.global.f32 %{{.*}}, [%r{{[0-9]+}}]
117 ; G64: ld.global.f32 %{{.*}}, [%rd{{[0-9]+}}]
119 %a = load float, ptr addrspace(1) %ptr
122 define float @ld_shared_f32(ptr addrspace(3) %ptr) {
123 ; ALL-LABEL: ld_shared_f32
124 ; LS32: ld.shared.f32 %{{.*}}, [%r{{[0-9]+}}]
125 ; LS64: ld.shared.f32 %{{.*}}, [%rd{{[0-9]+}}]
127 %a = load float, ptr addrspace(3) %ptr
130 define float @ld_local_f32(ptr addrspace(5) %ptr) {
131 ; ALL-LABEL: ld_local_f32
132 ; LS32: ld.local.f32 %{{.*}}, [%r{{[0-9]+}}]
133 ; LS64: ld.local.f32 %{{.*}}, [%rd{{[0-9]+}}]
135 %a = load float, ptr addrspace(5) %ptr
140 define double @ld_global_f64(ptr addrspace(1) %ptr) {
141 ; ALL-LABEL: ld_global_f64
142 ; G32: ld.global.f64 %{{.*}}, [%r{{[0-9]+}}]
143 ; G64: ld.global.f64 %{{.*}}, [%rd{{[0-9]+}}]
145 %a = load double, ptr addrspace(1) %ptr
148 define double @ld_shared_f64(ptr addrspace(3) %ptr) {
149 ; ALL-LABEL: ld_shared_f64
150 ; LS32: ld.shared.f64 %{{.*}}, [%r{{[0-9]+}}]
151 ; LS64: ld.shared.f64 %{{.*}}, [%rd{{[0-9]+}}]
153 %a = load double, ptr addrspace(3) %ptr
156 define double @ld_local_f64(ptr addrspace(5) %ptr) {
157 ; ALL-LABEL: ld_local_f64
158 ; LS32: ld.local.f64 %{{.*}}, [%r{{[0-9]+}}]
159 ; LS64: ld.local.f64 %{{.*}}, [%rd{{[0-9]+}}]
161 %a = load double, ptr addrspace(5) %ptr