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 4 5; ALL-LABEL: conv1 6define 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 14} 15 16; ALL-LABEL: conv2 17define 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 26} 27 28; ALL-LABEL: conv3 29define 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 38} 39 40; ALL-LABEL: conv4 41define 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 50} 51 52; ALL-LABEL: conv5 53define 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 61} 62 63; ALL-LABEL: conv6 64define 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 73} 74 75; ALL-LABEL: conv7 76define 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 85} 86 87; ALL-LABEL: conv8 88define 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 97} 98