1; RUN: llc -O0 < %s -march=nvptx -mcpu=sm_20 | FileCheck %s -check-prefix=PTX32 2; RUN: llc -O0 < %s -march=nvptx64 -mcpu=sm_20 | FileCheck %s -check-prefix=PTX64 3 4define i32 @conv1(i32 addrspace(1)* %ptr) { 5; PTX32: conv1 6; PTX32: cvta.global.u32 7; PTX32: ld.u32 8; PTX64: conv1 9; PTX64: cvta.global.u64 10; PTX64: ld.u32 11 %genptr = addrspacecast i32 addrspace(1)* %ptr to i32* 12 %val = load i32, i32* %genptr 13 ret i32 %val 14} 15 16define i32 @conv2(i32 addrspace(3)* %ptr) { 17; PTX32: conv2 18; PTX32: cvta.shared.u32 19; PTX32: ld.u32 20; PTX64: conv2 21; PTX64: cvta.shared.u64 22; PTX64: ld.u32 23 %genptr = addrspacecast i32 addrspace(3)* %ptr to i32* 24 %val = load i32, i32* %genptr 25 ret i32 %val 26} 27 28define i32 @conv3(i32 addrspace(4)* %ptr) { 29; PTX32: conv3 30; PTX32: cvta.const.u32 31; PTX32: ld.u32 32; PTX64: conv3 33; PTX64: cvta.const.u64 34; PTX64: ld.u32 35 %genptr = addrspacecast i32 addrspace(4)* %ptr to i32* 36 %val = load i32, i32* %genptr 37 ret i32 %val 38} 39 40define i32 @conv4(i32 addrspace(5)* %ptr) { 41; PTX32: conv4 42; PTX32: cvta.local.u32 43; PTX32: ld.u32 44; PTX64: conv4 45; PTX64: cvta.local.u64 46; PTX64: ld.u32 47 %genptr = addrspacecast i32 addrspace(5)* %ptr to i32* 48 %val = load i32, i32* %genptr 49 ret i32 %val 50} 51 52define i32 @conv5(i32* %ptr) { 53; PTX32: conv5 54; PTX32: cvta.to.global.u32 55; PTX32: ld.global.u32 56; PTX64: conv5 57; PTX64: cvta.to.global.u64 58; PTX64: ld.global.u32 59 %specptr = addrspacecast i32* %ptr to i32 addrspace(1)* 60 %val = load i32, i32 addrspace(1)* %specptr 61 ret i32 %val 62} 63 64define i32 @conv6(i32* %ptr) { 65; PTX32: conv6 66; PTX32: cvta.to.shared.u32 67; PTX32: ld.shared.u32 68; PTX64: conv6 69; PTX64: cvta.to.shared.u64 70; PTX64: ld.shared.u32 71 %specptr = addrspacecast i32* %ptr to i32 addrspace(3)* 72 %val = load i32, i32 addrspace(3)* %specptr 73 ret i32 %val 74} 75 76define i32 @conv7(i32* %ptr) { 77; PTX32: conv7 78; PTX32: cvta.to.const.u32 79; PTX32: ld.const.u32 80; PTX64: conv7 81; PTX64: cvta.to.const.u64 82; PTX64: ld.const.u32 83 %specptr = addrspacecast i32* %ptr to i32 addrspace(4)* 84 %val = load i32, i32 addrspace(4)* %specptr 85 ret i32 %val 86} 87 88define i32 @conv8(i32* %ptr) { 89; PTX32: conv8 90; PTX32: cvta.to.local.u32 91; PTX32: ld.local.u32 92; PTX64: conv8 93; PTX64: cvta.to.local.u64 94; PTX64: ld.local.u32 95 %specptr = addrspacecast i32* %ptr to i32 addrspace(5)* 96 %val = load i32, i32 addrspace(5)* %specptr 97 ret i32 %val 98} 99