103 lines · plain
1; This test checks that the address space casts for SPIR-V generic pointer casts2; are lowered correctly by the infer-address-spaces pass.3; RUN: opt < %s -passes=infer-address-spaces -S --mtriple=spirv64-unknown-unknown | FileCheck %s4 5; Casting a global pointer to a global pointer. 6; The uses of c2 will be replaced with %global.7; CHECK: @kernel1(ptr addrspace(1) %global)8define i1 @kernel1(ptr addrspace(1) %global) {9 %c1 = addrspacecast ptr addrspace(1) %global to ptr addrspace(4)10 %c2 = call ptr addrspace(1) @llvm.spv.generic.cast.to.ptr.explicit(ptr addrspace(4) %c1)11 ; CHECK: %b1 = icmp eq ptr addrspace(1) %global, null12 %b1 = icmp eq ptr addrspace(1) %c2, null 13 ret i1 %b114}15 16; Casting a global pointer to a local pointer.17; The uses of c2 will be replaced with null.18; CHECK: @kernel2(ptr addrspace(1) %global)19define i1 @kernel2(ptr addrspace(1) %global) {20 %c1 = addrspacecast ptr addrspace(1) %global to ptr addrspace(4)21 %c2 = call ptr addrspace(3) @llvm.spv.generic.cast.to.ptr.explicit(ptr addrspace(4) %c1)22 ; CHECK: %b1 = icmp eq ptr addrspace(3) null, null23 %b1 = icmp eq ptr addrspace(3) %c2, null24 ret i1 %b125}26 27; Casting a global pointer to a private pointer.28; The uses of c2 will be replaced with null.29; CHECK: @kernel3(ptr addrspace(1) %global)30define i1 @kernel3(ptr addrspace(1) %global) {31 %c1 = addrspacecast ptr addrspace(1) %global to ptr addrspace(4)32 %c2 = call ptr @llvm.spv.generic.cast.to.ptr.explicit(ptr addrspace(4) %c1)33 ; CHECK: %b1 = icmp eq ptr null, null34 %b1 = icmp eq ptr %c2, null 35 ret i1 %b136}37 38; Casting a local pointer to a local pointer.39; The uses of c2 will be replaced with %local.40; CHECK: @kernel4(ptr addrspace(3) %local)41define i1 @kernel4(ptr addrspace(3) %local) {42 %c1 = addrspacecast ptr addrspace(3) %local to ptr addrspace(4)43 %c2 = call ptr addrspace(3) @llvm.spv.generic.cast.to.ptr.explicit(ptr addrspace(4) %c1)44 ; CHECK: %b1 = icmp eq ptr addrspace(3) %local, null45 %b1 = icmp eq ptr addrspace(3) %c2, null 46 ret i1 %b147}48 49; Casting a local pointer to a global pointer.50; The uses of c2 will be replaced with null.51; CHECK: @kernel5(ptr addrspace(3) %local)52define i1 @kernel5(ptr addrspace(3) %local) {53 %c1 = addrspacecast ptr addrspace(3) %local to ptr addrspace(4)54 %c2 = call ptr addrspace(1) @llvm.spv.generic.cast.to.ptr.explicit(ptr addrspace(4) %c1)55 ; CHECK: %b1 = icmp eq ptr addrspace(1) null, null56 %b1 = icmp eq ptr addrspace(1) %c2, null 57 ret i1 %b158}59 60; Casting a local pointer to a private pointer.61; The uses of c2 will be replaced with null.62; CHECK: @kernel6(ptr addrspace(3) %local)63define i1 @kernel6(ptr addrspace(3) %local) {64 %c1 = addrspacecast ptr addrspace(3) %local to ptr addrspace(4)65 %c2 = call ptr @llvm.spv.generic.cast.to.ptr.explicit(ptr addrspace(4) %c1)66 ; CHECK: %b1 = icmp eq ptr null, null67 %b1 = icmp eq ptr %c2, null 68 ret i1 %b169}70 71; Casting a private pointer to a private pointer.72; The uses of c2 will be replaced with %private.73; CHECK: @kernel7(ptr %private)74define i1 @kernel7(ptr %private) {75 %c1 = addrspacecast ptr %private to ptr addrspace(4)76 %c2 = call ptr @llvm.spv.generic.cast.to.ptr.explicit(ptr addrspace(4) %c1)77 ; CHECK: %b1 = icmp eq ptr %private, null78 %b1 = icmp eq ptr %c2, null 79 ret i1 %b180}81 82; Casting a private pointer to a global pointer.83; The uses of c2 will be replaced with null.84; CHECK: @kernel8(ptr %private)85define i1 @kernel8(ptr %private) {86 %c1 = addrspacecast ptr %private to ptr addrspace(4)87 %c2 = call ptr addrspace(1) @llvm.spv.generic.cast.to.ptr.explicit(ptr addrspace(4) %c1)88 ; CHECK: %b1 = icmp eq ptr addrspace(1) null, null89 %b1 = icmp eq ptr addrspace(1) %c2, null90 ret i1 %b191}92 93; Casting a private pointer to a local pointer.94; The uses of c2 will be replaced with null.95; CHECK: @kernel9(ptr %private)96define i1 @kernel9(ptr %private) {97 %c1 = addrspacecast ptr %private to ptr addrspace(4)98 %c2 = call ptr addrspace(3) @llvm.spv.generic.cast.to.ptr.explicit(ptr addrspace(4) %c1)99 ; CHECK: %b1 = icmp eq ptr addrspace(3) null, null100 %b1 = icmp eq ptr addrspace(3) %c2, null101 ret i1 %b1102}103