Revert "[NFC] Refactor visitIntrinsicCall so it doesn't return a const char*"
[llvm-complete.git] / test / CodeGen / NVPTX / addrspacecast.ll
blobdbcd2beb46fafc1a1c8613d0b15010cf8cad8449
1 ; RUN: llc -O0 < %s -march=nvptx -mcpu=sm_20 | FileCheck %s -check-prefixes=ALL,CLS32,G32
2 ; RUN: llc -O0 < %s -march=nvptx64 -mcpu=sm_20 | FileCheck %s -check-prefixes=ALL,NOPTRCONV,CLS64,G64
3 ; RUN: llc -O0 < %s -march=nvptx64 -mcpu=sm_20 --nvptx-short-ptr| FileCheck %s -check-prefixes=ALL,PTRCONV,CLS64,G64
5 ; ALL-LABEL: conv1
6 define i32 @conv1(i32 addrspace(1)* %ptr) {
7 ; G32: cvta.global.u32
8 ; ALL-NOT: cvt.u64.u32
9 ; G64: cvta.global.u64
10 ; ALL: ld.u32
11   %genptr = addrspacecast i32 addrspace(1)* %ptr to i32*
12   %val = load i32, i32* %genptr
13   ret i32 %val
16 ; ALL-LABEL: conv2
17 define i32 @conv2(i32 addrspace(3)* %ptr) {
18 ; CLS32: cvta.shared.u32
19 ; PTRCONV: cvt.u64.u32
20 ; NOPTRCONV-NOT: cvt.u64.u32
21 ; CLS64: cvta.shared.u64
22 ; ALL: ld.u32
23   %genptr = addrspacecast i32 addrspace(3)* %ptr to i32*
24   %val = load i32, i32* %genptr
25   ret i32 %val
28 ; ALL-LABEL: conv3
29 define i32 @conv3(i32 addrspace(4)* %ptr) {
30 ; CLS32: cvta.const.u32
31 ; PTRCONV: cvt.u64.u32
32 ; NOPTRCONV-NOT: cvt.u64.u32
33 ; CLS64: cvta.const.u64
34 ; ALL: ld.u32
35   %genptr = addrspacecast i32 addrspace(4)* %ptr to i32*
36   %val = load i32, i32* %genptr
37   ret i32 %val
40 ; ALL-LABEL: conv4
41 define i32 @conv4(i32 addrspace(5)* %ptr) {
42 ; CLS32: cvta.local.u32
43 ; PTRCONV: cvt.u64.u32
44 ; NOPTRCONV-NOT: cvt.u64.u32
45 ; CLS64: cvta.local.u64
46 ; ALL: ld.u32
47   %genptr = addrspacecast i32 addrspace(5)* %ptr to i32*
48   %val = load i32, i32* %genptr
49   ret i32 %val
52 ; ALL-LABEL: conv5
53 define i32 @conv5(i32* %ptr) {
54 ; CLS32: cvta.to.global.u32
55 ; ALL-NOT: cvt.u64.u32
56 ; CLS64: cvta.to.global.u64
57 ; ALL: ld.global.u32
58   %specptr = addrspacecast i32* %ptr to i32 addrspace(1)*
59   %val = load i32, i32 addrspace(1)* %specptr
60   ret i32 %val
63 ; ALL-LABEL: conv6
64 define i32 @conv6(i32* %ptr) {
65 ; CLS32: cvta.to.shared.u32
66 ; CLS64: cvta.to.shared.u64
67 ; PTRCONV: cvt.u32.u64
68 ; NOPTRCONV-NOT: cvt.u32.u64
69 ; ALL: ld.shared.u32
70   %specptr = addrspacecast i32* %ptr to i32 addrspace(3)*
71   %val = load i32, i32 addrspace(3)* %specptr
72   ret i32 %val
75 ; ALL-LABEL: conv7
76 define i32 @conv7(i32* %ptr) {
77 ; CLS32: cvta.to.const.u32
78 ; CLS64: cvta.to.const.u64
79 ; PTRCONV: cvt.u32.u64
80 ; NOPTRCONV-NOT: cvt.u32.u64
81 ; ALL: ld.const.u32
82   %specptr = addrspacecast i32* %ptr to i32 addrspace(4)*
83   %val = load i32, i32 addrspace(4)* %specptr
84   ret i32 %val
87 ; ALL-LABEL: conv8
88 define i32 @conv8(i32* %ptr) {
89 ; CLS32: cvta.to.local.u32
90 ; CLS64: cvta.to.local.u64
91 ; PTRCONV: cvt.u32.u64
92 ; NOPTRCONV-NOT: cvt.u32.u64
93 ; ALL: ld.local.u32
94   %specptr = addrspacecast i32* %ptr to i32 addrspace(5)*
95   %val = load i32, i32 addrspace(5)* %specptr
96   ret i32 %val