Handle opaque pointers in image specialization (#863)
Contributes to #816
* Image specialization now handles both transparent and opaque pointers
* Much of the code can be removed after moving fully to opaque
pointers
* Doesn't use InferTypes because the pass's traversal is necessary and would
simply be repeated
* Specialized builtin functions are now remangled from an updated type instead of having a
suffix tacked on
* Fixed some image query functions to support mangled struct names
* Fixed some builtin demangling
* Changed how opaque pointers is disabled
* added a new command line option to control it
* sets the code gen option
* remove the command line parsing
diff --git a/lib/Builtins.cpp b/lib/Builtins.cpp
index 5c00059..5871d7d 100644
--- a/lib/Builtins.cpp
+++ b/lib/Builtins.cpp
@@ -233,11 +233,13 @@
while (pos < mangled_name_len) {
ParamTypeInfo type_info;
if (mangled_name[pos] == 'S') {
- // handle duplicate param_type
- if (mangled_name[pos + 1] != '_') {
+ // handle duplicate param_type. Comes in two flavours:
+ // S_ and S#_.
+ char p1 = mangled_name[pos + 1];
+ if (p1 != '_' && (mangled_name[pos + 2] != '_')) {
return false;
}
- pos += 2;
+ pos += p1 == '_' ? 2 : 3;
if (params_.empty()) {
return false;
}
diff --git a/lib/Compiler.cpp b/lib/Compiler.cpp
index ff81dd8..6229e9f 100644
--- a/lib/Compiler.cpp
+++ b/lib/Compiler.cpp
@@ -157,6 +157,10 @@
"Emit LLVM IR to the given file after parsing and stop compilation."),
llvm::cl::value_desc("filename"));
+static llvm::cl::opt<bool> OpaquePointers("enable-opaque-pointers",
+ llvm::cl::desc("Use opaque pointers"),
+ llvm::cl::init(false));
+
namespace {
struct OpenCLBuiltinMemoryBuffer final : public llvm::MemoryBuffer {
OpenCLBuiltinMemoryBuffer(const void *data, uint64_t data_length) {
@@ -465,6 +469,7 @@
instance.getCodeGenOpts().SimplifyLibCalls = false;
instance.getCodeGenOpts().EmitOpenCLArgMetadata = false;
instance.getCodeGenOpts().DisableO0ImplyOptNone = true;
+ instance.getCodeGenOpts().OpaquePointers = OpaquePointers;
instance.getDiagnosticOpts().IgnoreWarnings = IgnoreWarnings;
instance.getLangOpts().SinglePrecisionConstants =
@@ -834,21 +839,16 @@
// ParseCommandLineOptions with the specific options.
bool has_pre = false;
bool has_load_pre = false;
- bool has_opaque_pointers = false;
const std::string pre = "-enable-pre";
const std::string load_pre = "-enable-load-pre";
- const std::string opaque = "-opaque-pointers";
for (int i = 1; i < argc; ++i) {
std::string option(argv[i]);
auto pre_pos = option.find(pre);
auto load_pos = option.find(load_pre);
- auto opaque_pos = option.find(opaque);
if (pre_pos == 0 || (pre_pos == 1 && option[0] == '-')) {
has_pre = true;
} else if (load_pos == 0 || (load_pos == 1 && option[0] == '-')) {
has_load_pre = true;
- } else if (opaque_pos == 0 || (opaque_pos == 1 && option[0] == '-')) {
- has_opaque_pointers = true;
}
}
@@ -864,10 +864,6 @@
if (!has_load_pre) {
llvmArgv[llvmArgc++] = "-enable-load-pre=0";
}
- // TODO(#816): remove this after final transition.
- if (!has_opaque_pointers) {
- llvmArgv[llvmArgc++] = "-opaque-pointers=0";
- }
llvm::cl::ResetAllOptionOccurrences();
llvm::cl::ParseCommandLineOptions(llvmArgc, llvmArgv);
diff --git a/lib/SpecializeImageTypes.cpp b/lib/SpecializeImageTypes.cpp
index c80e8dc..04356ca 100644
--- a/lib/SpecializeImageTypes.cpp
+++ b/lib/SpecializeImageTypes.cpp
@@ -44,40 +44,39 @@
for (auto f : kernels) {
for (auto &Arg : f->args()) {
- if (IsImageType(Arg.getType())) {
- Type *new_type = RemapType(&Arg);
- if (!new_type) {
- // No specializing information found, assume the image is sampled with
- // a float type.
- std::string name =
- cast<StructType>(Arg.getType()->getPointerElementType())
- ->getName()
- .str();
+ ResultType res;
+ llvm::Type *new_ty = nullptr;
+ std::tie(res, new_ty) = RemapType(&Arg);
+ if (res != ResultType::kNotImage) {
+ if (res == kNotSpecialized) {
+ // Argument is an image, but not specializing information was found.
+ // Assume the image is sampled with a float type.
+ std::string name = cast<StructType>(new_ty)->getName().str();
name += ".float";
- const auto pos = name.find("_wo_t");
- if (!IsStorageImageType(Arg.getType())) {
+ if (name.find("_ro") != std::string::npos) {
name += ".sampled";
- } else if (clspv::Option::Language() >=
- clspv::Option::SourceLanguage::OpenCL_C_20 &&
- pos != std::string::npos) {
- // In OpenCL 2.0 (or later), treat write_only images as read_write
- // images. This prevents the compiler from generating duplicate
- // image types (invalid SPIR-V).
- name = name.substr(0, pos) + "_rw_t" + name.substr(pos + 5);
+ } else if (Option::Language() >= Option::SourceLanguage::OpenCL_C_20) {
+ // Treat write-only images as read-write images in OpenCL 2.0 or
+ // later to avoid duplicate image types getting generated in the
+ // SPIR.V.
+ auto pos = name.find("_wo");
+ if (pos != std::string::npos) {
+ name = name.substr(0, pos) + "_rw" + name.substr(pos + 3);
+ }
}
- StructType *new_struct =
- StructType::getTypeByName(M.getContext(), name);
- if (!new_struct)
- new_struct = StructType::create(Arg.getContext(), name);
- new_type = PointerType::get(new_struct,
- Arg.getType()->getPointerAddressSpace());
+ StructType *new_struct = StructType::getTypeByName(M.getContext(), name);
+ if (!new_struct) {
+ new_struct = StructType::create(M.getContext(), name);
+ }
+ new_ty = new_struct;
}
- specialized_images_.insert(new_type);
- SpecializeArg(f, &Arg, new_type);
+ specialized_images_.insert(new_ty);
+ SpecializeArg(f, &Arg, new_ty);
}
}
}
+ // TODO(#816): unnecessary after transition.
// Keep functions in the same relative order.
std::vector<Function *> to_rewrite;
for (auto &F : M) {
@@ -91,38 +90,98 @@
return PA;
}
-Type *SpecializeImageTypesPass::RemapType(Argument *arg) {
+std::pair<SpecializeImageTypesPass::ResultType, Type *>
+SpecializeImageTypesPass::RemapType(Argument *arg) {
+ ResultType final_res = ResultType::kNotImage;
+ Type *new_ty = nullptr;
for (auto &U : arg->uses()) {
- if (auto new_type = RemapUse(U.getUser(), U.getOperandNo())) {
- return new_type;
+ ResultType res;
+ Type *ty = nullptr;
+ std::tie(res, ty) = RemapUse(U.getUser(), U.getOperandNo());
+ if (res == ResultType::kSpecialized) {
+ return std::make_pair(res, ty);
+ } else if (res == ResultType::kNotSpecialized && final_res == ResultType::kNotImage) {
+ new_ty = ty;
+ final_res = res;
}
}
- return nullptr;
+ // TODO(#816): remove after final transition
+ if (final_res == ResultType::kNotImage) {
+ if (arg->getType()->isPointerTy() && !arg->getType()->isOpaquePointerTy()) {
+ auto *ele_ty =
+ cast<PointerType>(arg->getType())->getNonOpaquePointerElementType();
+ StructType *struct_ty = dyn_cast<StructType>(ele_ty);
+ if (IsImageType(struct_ty)) {
+ return std::make_pair(ResultType::kNotSpecialized, struct_ty);
+ }
+ }
+ }
+
+ return std::make_pair(final_res, new_ty);
}
-Type *SpecializeImageTypesPass::RemapUse(Value *value, unsigned operand_no) {
+std::pair<SpecializeImageTypesPass::ResultType, Type *>
+SpecializeImageTypesPass::RemapUse(Value *value, unsigned operand_no) {
if (CallInst *call = dyn_cast<CallInst>(value)) {
- auto called = call->getCalledFunction();
- auto func_info = Builtins::Lookup(called);
- switch (func_info.getType()) {
+ auto *called = call->getCalledFunction();
+ auto info = Builtins::Lookup(called);
+ if (!BUILTIN_IN_GROUP(info.getType(), Image)) {
+ // Not an image builtin so see if we can specialize the type by
+ // traversing the called function.
+ ResultType final_res = ResultType::kNotImage;
+ Type *new_ty = nullptr;
+ if (!called->isDeclaration()) {
+ for (auto &U : called->getArg(operand_no)->uses()) {
+ ResultType res = ResultType::kNotImage;
+ Type *ty = nullptr;
+ std::tie(res, ty) = RemapUse(U.getUser(), U.getOperandNo());
+ if (res == ResultType::kSpecialized) {
+ return std::make_pair(res, ty);
+ } else if (res == kNotSpecialized && final_res == kNotImage) {
+ final_res = res;
+ new_ty = ty;
+ }
+ }
+ }
+ return std::make_pair(final_res, new_ty);
+ }
+ if (operand_no != 0) {
+ // All image builtins take the image as the first operand, so this is not
+ // an image type.
+ return std::make_pair(ResultType::kNotImage, nullptr);
+ }
+
+ // This user is an image type. Check if we've specialized it already. If
+ // not, see if it can be specialized by this builtin.
+ std::string name;
+ auto *operand = call->getArgOperand(operand_no);
+ // TODO(#816): remove after final transition.
+ if (!operand->getType()->isOpaquePointerTy()) {
+ auto *ele_ty = dyn_cast<PointerType>(operand->getType())
+ ->getNonOpaquePointerElementType();
+ name = dyn_cast<StructType>(ele_ty)->getName().str();
+ } else {
+ auto param = info.getParameter(operand_no);
+ assert(param.type_id == Type::StructTyID);
+ name = param.name;
+ }
+
+ auto *struct_ty =
+ StructType::getTypeByName(call->getContext(), name);
+
+ if (specialized_images_.count(struct_ty))
+ return std::make_pair(ResultType::kSpecialized, struct_ty);
+
+ switch (info.getType()) {
+ // Specializable cases: reads and writes.
case Builtins::kReadImagef:
case Builtins::kReadImagei:
case Builtins::kReadImageui:
case Builtins::kWriteImagef:
case Builtins::kWriteImagei:
case Builtins::kWriteImageui: {
- // Specialize the image type based on it's usage in the builtin.
- Value *image = call->getOperand(0);
- Type *imageTy = image->getType();
-
- // Check if this type is already specialized.
- if (specialized_images_.count(imageTy))
- return imageTy;
-
- std::string name =
- cast<StructType>(imageTy->getPointerElementType())->getName().str();
- switch (func_info.getType()) {
+ switch (info.getType()) {
case Builtins::kReadImagef:
case Builtins::kWriteImagef:
name += ".float";
@@ -139,47 +198,47 @@
break;
}
- // Read only images are translated as sampled images.
- const auto pos = name.find("_wo_t");
- if (!IsStorageImageType(imageTy)) {
+ const auto wo_pos = name.find("_wo");
+ const auto ro_pos = name.find("_ro");
+ if (ro_pos != std::string::npos) {
name += ".sampled";
- } else if (clspv::Option::Language() >=
- clspv::Option::SourceLanguage::OpenCL_C_20 &&
- pos != std::string::npos) {
+ } else if (Option::Language() >= Option::SourceLanguage::OpenCL_C_20 &&
+ wo_pos != std::string::npos) {
// In OpenCL 2.0 (or later), treat write_only images as read_write
// images. This prevents the compiler from generating duplicate image
// types (invalid SPIR-V).
- name = name.substr(0, pos) + "_rw_t" + name.substr(pos + 5);
+ name = name.substr(0, wo_pos) + "_rw" + name.substr(wo_pos + 3);
}
- StructType *new_struct =
- StructType::getTypeByName(call->getContext(), name);
- if (!new_struct) {
- new_struct = StructType::create(call->getContext(), name);
+ struct_ty = StructType::getTypeByName(call->getContext(), name);
+ if (!struct_ty) {
+ struct_ty = StructType::create(call->getContext(), name);
}
- PointerType *new_pointer =
- PointerType::get(new_struct, imageTy->getPointerAddressSpace());
- return new_pointer;
+ return std::make_pair(ResultType::kSpecialized, struct_ty);
}
+ // Non-specializable cases: queries.
default:
- if (!called->isDeclaration()) {
- for (auto &U : called->getArg(operand_no)->uses()) {
- if (auto new_type = RemapUse(U.getUser(), U.getOperandNo())) {
- return new_type;
- }
- }
- }
+ return std::make_pair(ResultType::kNotSpecialized, struct_ty);
break;
}
- } else if (IsImageType(value->getType())) {
+ } else if (value->getType()->isPointerTy()) {
+ // This can occur for instructions such as address space cast.
+ ResultType final_res = ResultType::kNotImage;
+ Type *new_ty = nullptr;
for (auto &U : value->uses()) {
- if (auto new_type = RemapUse(U.getUser(), U.getOperandNo())) {
- return new_type;
+ ResultType res = ResultType::kNotImage;
+ Type *ty = nullptr;
+ std::tie(res, ty) = RemapUse(U.getUser(), U.getOperandNo());
+ if (res == ResultType::kSpecialized) {
+ return std::make_pair(res, ty);
+ } else if (res == kNotSpecialized && final_res == kNotImage) {
+ final_res = res;
+ new_ty = ty;
}
}
}
- return nullptr;
+ return std::make_pair(ResultType::kNotImage, nullptr);
}
void SpecializeImageTypesPass::SpecializeArg(Function *f, Argument *arg,
@@ -188,8 +247,12 @@
if (where != remapped_args_.end())
return;
+ // TODO(#816): remove after transition.
+ const bool transparent = !arg->getType()->isOpaquePointerTy();
remapped_args_[arg] = new_type;
- functions_to_modify_.insert(f);
+ if (transparent) functions_to_modify_.insert(f);
+
+ auto *struct_ty = cast<StructType>(new_type);
// Fix all uses of |arg|.
std::vector<Value *> stack;
@@ -198,17 +261,23 @@
Value *value = stack.back();
stack.pop_back();
- if (value->getType() == new_type)
+ if (transparent &&
+ cast<PointerType>(value->getType())->getNonOpaquePointerElementType() ==
+ new_type) {
continue;
+ }
auto old_type = value->getType();
- value->mutateType(new_type);
+ if (transparent) {
+ value->mutateType(
+ PointerType::get(new_type, old_type->getPointerAddressSpace()));
+ }
for (auto &u : value->uses()) {
if (auto call = dyn_cast<CallInst>(u.getUser())) {
auto called = call->getCalledFunction();
auto &func_info = Builtins::Lookup(called);
if (BUILTIN_IN_GROUP(func_info.getType(), Image)) {
- auto new_func = ReplaceImageBuiltin(called, new_type);
+ auto new_func = ReplaceImageBuiltin(called, func_info, struct_ty);
call->setCalledFunction(new_func);
if (called->getNumUses() == 0)
called->eraseFromParent();
@@ -227,27 +296,34 @@
}
Function *SpecializeImageTypesPass::ReplaceImageBuiltin(Function *f,
- Type *type) {
- std::string name = f->getName().str();
- name += ".";
- name += cast<StructType>(type->getPointerElementType())->getName();
- if (auto replaced = f->getParent()->getFunction(name))
- return replaced;
+ Builtins::FunctionInfo info,
+ StructType *type) {
+ // Update the parameter name and produce a new mangling of the function to
+ // match.
+ auto &image_param = info.getParameter(0);
+ image_param.name = type->getName().str();
+ std::string new_name = Builtins::GetMangledFunctionName(info);
- // Change the image argument to the specialized type.
- SmallVector<Type *, 4> paramTys;
- for (auto &Arg : f->args()) {
- if (IsImageType(Arg.getType()))
- paramTys.push_back(type);
- else
- paramTys.push_back(Arg.getType());
+ // TODO(#816): remove after transition
+ Function *new_func = nullptr;
+ if (f->getArg(0)->getType()->isOpaquePointerTy()) {
+ auto callee = f->getParent()->getOrInsertFunction(
+ new_name, f->getFunctionType(), f->getAttributes());
+ new_func = cast<Function>(callee.getCallee());
+ } else {
+ SmallVector<Type *, 4> param_tys;
+ for (auto &Arg : f->args()) {
+ param_tys.push_back(Arg.getType());
+ }
+ param_tys[0] = PointerType::get(type, param_tys[0]->getPointerAddressSpace());
+
+ auto func_ty =
+ FunctionType::get(f->getReturnType(), param_tys, f->isVarArg());
+ auto callee =
+ f->getParent()->getOrInsertFunction(new_name, func_ty, f->getAttributes());
+ new_func = cast<Function>(callee.getCallee());
}
- auto func_type =
- FunctionType::get(f->getReturnType(), paramTys, f->isVarArg());
- auto callee =
- f->getParent()->getOrInsertFunction(name, func_type, f->getAttributes());
- auto new_func = cast<Function>(callee.getCallee());
new_func->setCallingConv(f->getCallingConv());
new_func->copyMetadata(f, 0);
return new_func;
@@ -262,7 +338,8 @@
if (where == remapped_args_.end())
arg_types.push_back(arg.getType());
else
- arg_types.push_back(where->second);
+ arg_types.push_back(PointerType::get(
+ where->second, arg.getType()->getPointerAddressSpace()));
}
auto func_type =
diff --git a/lib/SpecializeImageTypes.h b/lib/SpecializeImageTypes.h
index 1286449..a8836cd 100644
--- a/lib/SpecializeImageTypes.h
+++ b/lib/SpecializeImageTypes.h
@@ -12,9 +12,13 @@
// See the License for the specific language governing permissions and
// limitations under the License.
+#include <utility>
+
#include "llvm/IR/Module.h"
#include "llvm/IR/PassManager.h"
+#include "Builtins.h"
+
#ifndef _CLSPV_LIB_SPECIALIZE_IMAGE_TYPES_PASS_H
#define _CLSPV_LIB_SPECIALIZE_IMAGE_TYPES_PASS_H
@@ -23,12 +27,15 @@
: llvm::PassInfoMixin<SpecializeImageTypesPass> {
llvm::PreservedAnalyses run(llvm::Module &M, llvm::ModuleAnalysisManager &);
+ enum ResultType { kNotImage, kNotSpecialized, kSpecialized };
+
private:
// Returns the specialized image type for |arg|.
- llvm::Type *RemapType(llvm::Argument *arg);
+ std::pair<ResultType, llvm::Type *> RemapType(llvm::Argument *arg);
// Returns the specialized image type for operand |operand_no| in |value|.
- llvm::Type *RemapUse(llvm::Value *value, unsigned operand_no);
+ std::pair<ResultType, llvm::Type *> RemapUse(llvm::Value *value,
+ unsigned operand_no);
// Specializes |arg| as |new_type|. Recursively updates the use chain.
void SpecializeArg(llvm::Function *f, llvm::Argument *arg,
@@ -36,7 +43,9 @@
// Returns a replacement image builtin function for the specialized type
// |type|.
- llvm::Function *ReplaceImageBuiltin(llvm::Function *f, llvm::Type *type);
+ llvm::Function *ReplaceImageBuiltin(llvm::Function *f,
+ Builtins::FunctionInfo info,
+ llvm::StructType *type);
// Rewrites |f| using the |remapped_args_| to determine to updated types.
void RewriteFunction(llvm::Function *f);
diff --git a/lib/Types.cpp b/lib/Types.cpp
index a35e5c9..a0bf3a1 100644
--- a/lib/Types.cpp
+++ b/lib/Types.cpp
@@ -323,7 +323,11 @@
if (STy->getName().startswith("opencl.image1d_array_ro_t") ||
STy->getName().startswith("opencl.image1d_array_wo_t") ||
STy->getName().startswith("opencl.image2d_array_ro_t") ||
- STy->getName().startswith("opencl.image2d_array_wo_t")) {
+ STy->getName().startswith("opencl.image2d_array_wo_t") ||
+ STy->getName().startswith("ocl_image1d_array_ro") ||
+ STy->getName().startswith("ocl_image1d_array_wo") ||
+ STy->getName().startswith("ocl_image2d_array_ro") ||
+ STy->getName().startswith("ocl_image2d_array_wo")) {
isArrayImageType = true;
}
}
@@ -355,8 +359,8 @@
Type *ty = nullptr;
if (IsImageType(type, &ty)) {
if (auto struct_ty = dyn_cast_or_null<StructType>(ty)) {
- if (struct_ty->getName().contains("_wo_t") ||
- struct_ty->getName().contains("_rw_t")) {
+ if (struct_ty->getName().contains("_wo") ||
+ struct_ty->getName().contains("_rw")) {
return true;
}
}
diff --git a/lib/Types.h b/lib/Types.h
index b1b67c2..54586bc 100644
--- a/lib/Types.h
+++ b/lib/Types.h
@@ -27,6 +27,7 @@
//
// If the type of |v\ is an opaque pointer, this function traverses the uses of
// |v| to determine the appropriate type.
+// Returns nullptr if a type cannot be inferred.
llvm::Type *InferType(llvm::Value *v, llvm::LLVMContext &context,
llvm::DenseMap<llvm::Value *, llvm::Type *> *cache);
diff --git a/test/AllocateDescriptors/spec_images_no_sharing.ll b/test/AllocateDescriptors/spec_images_no_sharing.ll
new file mode 100644
index 0000000..c03cf1d
--- /dev/null
+++ b/test/AllocateDescriptors/spec_images_no_sharing.ll
@@ -0,0 +1,31 @@
+; RUN: clspv-opt %s -o %t.ll -opaque-pointers --passes=specialize-image-types,allocate-descriptors
+; RUN: FileCheck %s < %t.ll
+
+; CHECK: @foo
+; CHECK: [[res:%[a-zA-Z0-9_.]+]] = call ptr addrspace(1) @_Z14clspv.resource.0(i32 0, i32 0, i32 7, i32 0, i32 0, i32 0, %ocl_image1d_wo.float zeroinitializer)
+; CHECK: (ptr addrspace(1) [[res]],
+; CHECK: @bar
+; CHECK: [[res:%[a-zA-Z0-9_.]+]] = call ptr addrspace(1) @_Z14clspv.resource.1(i32 0, i32 0, i32 7, i32 0, i32 1, i32 0, %ocl_image1d_wo.int zeroinitializer)
+; CHECK: (ptr addrspace(1) [[res]],
+
+target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
+target triple = "spir-unknown-unknown"
+
+define dso_local spir_kernel void @foo(ptr addrspace(1) %t) !clspv.pod_args_impl !7 {
+entry:
+ call spir_func void @_Z12write_imagef14ocl_image1d_woiDv4_f(ptr addrspace(1) %t, i32 0, <4 x float> zeroinitializer)
+ ret void
+}
+
+declare spir_func void @_Z12write_imagef14ocl_image1d_woiDv4_f(ptr addrspace(1), i32, <4 x float>)
+
+define dso_local spir_kernel void @bar(ptr addrspace(1) %t) !clspv.pod_args_impl !7 {
+entry:
+ call spir_func void @_Z12write_imagei14ocl_image1d_woiDv4_i(ptr addrspace(1) %t, i32 0, <4 x i32> zeroinitializer)
+ ret void
+}
+
+declare spir_func void @_Z12write_imagei14ocl_image1d_woiDv4_i(ptr addrspace(1), i32, <4 x i32>)
+
+!7 = !{i32 2}
+
diff --git a/test/AllocateDescriptors/spec_images_sharing.ll b/test/AllocateDescriptors/spec_images_sharing.ll
new file mode 100644
index 0000000..1e652aa
--- /dev/null
+++ b/test/AllocateDescriptors/spec_images_sharing.ll
@@ -0,0 +1,29 @@
+; RUN: clspv-opt %s -o %t.ll -opaque-pointers --passes=specialize-image-types,allocate-descriptors
+; RUN: FileCheck %s < %t.ll
+
+; CHECK: @foo
+; CHECK: [[res:%[a-zA-Z0-9_.]+]] = call ptr addrspace(1) @_Z14clspv.resource.0(i32 0, i32 0, i32 7, i32 0, i32 0, i32 0, %ocl_image1d_wo.float zeroinitializer)
+; CHECK: (ptr addrspace(1) [[res]],
+; CHECK: @bar
+; CHECK: [[res:%[a-zA-Z0-9_.]+]] = call ptr addrspace(1) @_Z14clspv.resource.0(i32 0, i32 0, i32 7, i32 0, i32 0, i32 0, %ocl_image1d_wo.float zeroinitializer)
+; CHECK: (ptr addrspace(1) [[res]],
+
+target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
+target triple = "spir-unknown-unknown"
+
+define dso_local spir_kernel void @foo(ptr addrspace(1) %t) !clspv.pod_args_impl !7 {
+entry:
+ call spir_func void @_Z12write_imagef14ocl_image1d_woiDv4_f(ptr addrspace(1) %t, i32 0, <4 x float> zeroinitializer)
+ ret void
+}
+
+declare spir_func void @_Z12write_imagef14ocl_image1d_woiDv4_f(ptr addrspace(1), i32, <4 x float>)
+
+define dso_local spir_kernel void @bar(ptr addrspace(1) %t) !clspv.pod_args_impl !7 {
+entry:
+ call spir_func void @_Z12write_imagef14ocl_image1d_woiDv4_f(ptr addrspace(1) %t, i32 0, <4 x float> zeroinitializer)
+ ret void
+}
+
+!7 = !{i32 2}
+
diff --git a/test/AllocateDescriptors/traverse_pointer_insdtruction.ll b/test/AllocateDescriptors/traverse_pointer_instruction.ll
similarity index 100%
rename from test/AllocateDescriptors/traverse_pointer_insdtruction.ll
rename to test/AllocateDescriptors/traverse_pointer_instruction.ll
diff --git a/test/LLVMIntrinsics/unreachable.ll b/test/LLVMIntrinsics/unreachable.ll
index 521687e..5c02dc0 100644
--- a/test/LLVMIntrinsics/unreachable.ll
+++ b/test/LLVMIntrinsics/unreachable.ll
@@ -1,4 +1,4 @@
-; RUN: clspv -x ir %s -o %t.spv
+; RUN: clspv -x ir %s -o %t.spv -opaque-pointers=0
; RUN: spirv-val --target-env vulkan1.0 %t.spv
; RUN: spirv-dis %t.spv -o - | FileCheck %s
diff --git a/test/SpecializeImageTypes/image1d_array_float_get_image_width.ll b/test/SpecializeImageTypes/image1d_array_float_get_image_width.ll
index 3f0a7a4..81a6884 100644
--- a/test/SpecializeImageTypes/image1d_array_float_get_image_width.ll
+++ b/test/SpecializeImageTypes/image1d_array_float_get_image_width.ll
@@ -2,11 +2,11 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_array_wo_t.float]] = type opaque
-; CHECK-DAG: declare spir_func void @_Z12write_imagef20ocl_image1d_array_woDv2_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x float>) [[ATTRS1:#[0-9]+]]
-; CHECK-DAG: declare spir_func i32 @_Z15get_image_width20ocl_image1d_array_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
+; CHECK-DAG: declare spir_func void @_Z12write_imagef31[[IMAGE]]Dv2_iDv4_f(%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x float>) [[ATTRS1:#[0-9]+]]
+; CHECK-DAG: declare spir_func i32 @_Z15get_image_width31[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
; CHECK: define spir_kernel void @write_float
-; CHECK: call spir_func void @_Z12write_imagef20ocl_image1d_array_woDv2_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
-; CHECK: call spir_func i32 @_Z15get_image_width20ocl_image1d_array_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
+; CHECK: call spir_func void @_Z12write_imagef31[[IMAGE]]Dv2_iDv4_f(%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func i32 @_Z15get_image_width31[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
; CHECK-DAG: attributes [[ATTRS1]] = { convergent nounwind }
; CHECK-DAG: attributes [[ATTRS2]] = { convergent nobuiltin nounwind readonly }
diff --git a/test/SpecializeImageTypes/image1d_array_float_sampled_get_image_width.ll b/test/SpecializeImageTypes/image1d_array_float_sampled_get_image_width.ll
index 4190bce..bee0eb2 100644
--- a/test/SpecializeImageTypes/image1d_array_float_sampled_get_image_width.ll
+++ b/test/SpecializeImageTypes/image1d_array_float_sampled_get_image_width.ll
@@ -2,11 +2,11 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_array_ro_t.float.sampled]] = type opaque
-; CHECK-DAG: declare spir_func <4 x float> @_Z11read_imagef20ocl_image1d_array_ro11ocl_samplerDv2_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>) [[ATTRS1:#[0-9]+]]
-; CHECK-DAG: declare spir_func i32 @_Z15get_image_width20ocl_image1d_array_ro.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
+; CHECK-DAG: declare spir_func <4 x float> @_Z11read_imagef39[[IMAGE]]11ocl_samplerDv2_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>) [[ATTRS1:#[0-9]+]]
+; CHECK-DAG: declare spir_func i32 @_Z15get_image_width39[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
; CHECK: define spir_kernel void @read_float
-; CHECK: call spir_func <4 x float> @_Z11read_imagef20ocl_image1d_array_ro11ocl_samplerDv2_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
-; CHECK: call spir_func i32 @_Z15get_image_width20ocl_image1d_array_ro.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x float> @_Z11read_imagef39[[IMAGE]]11ocl_samplerDv2_f(%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func i32 @_Z15get_image_width39[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
; CHECK-DAG: attributes [[ATTRS1]] = { convergent nounwind }
; CHECK-DAG: attributes [[ATTRS2]] = { nounwind }
diff --git a/test/SpecializeImageTypes/image1d_buffer_float_get_image_width.ll b/test/SpecializeImageTypes/image1d_buffer_float_get_image_width.ll
index cda4854..ecd4a81 100644
--- a/test/SpecializeImageTypes/image1d_buffer_float_get_image_width.ll
+++ b/test/SpecializeImageTypes/image1d_buffer_float_get_image_width.ll
@@ -2,11 +2,11 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_buffer_wo_t.float]] = type opaque
-; CHECK-DAG: declare spir_func void @_Z12write_imagef21ocl_image1d_buffer_woiDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, i32, <4 x float>) [[ATTRS1:#[0-9]+]]
-; CHECK-DAG: declare spir_func i32 @_Z15get_image_width21ocl_image1d_buffer_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
+; CHECK-DAG: declare spir_func void @_Z12write_imagef32[[IMAGE]]iDv4_f(%[[IMAGE]] addrspace(1)*, i32, <4 x float>) [[ATTRS1:#[0-9]+]]
+; CHECK-DAG: declare spir_func i32 @_Z15get_image_width32[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
; CHECK: define spir_kernel void @write_float
-; CHECK: call spir_func void @_Z12write_imagef21ocl_image1d_buffer_woiDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
-; CHECK: call spir_func i32 @_Z15get_image_width21ocl_image1d_buffer_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
+; CHECK: call spir_func void @_Z12write_imagef32[[IMAGE]]iDv4_f(%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func i32 @_Z15get_image_width32[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
; CHECK-DAG: attributes [[ATTRS1]] = { convergent nounwind }
; CHECK-DAG: attributes [[ATTRS2]] = { convergent nobuiltin nounwind readonly }
diff --git a/test/SpecializeImageTypes/image1d_float_get_image_width.ll b/test/SpecializeImageTypes/image1d_float_get_image_width.ll
index 045df52..d8ce07b 100644
--- a/test/SpecializeImageTypes/image1d_float_get_image_width.ll
+++ b/test/SpecializeImageTypes/image1d_float_get_image_width.ll
@@ -2,11 +2,11 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_wo_t.float]] = type opaque
-; CHECK-DAG: declare spir_func void @_Z12write_imagef14ocl_image1d_woiDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, i32, <4 x float>) [[ATTRS1:#[0-9]+]]
-; CHECK-DAG: declare spir_func i32 @_Z15get_image_width14ocl_image1d_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
+; CHECK-DAG: declare spir_func void @_Z12write_imagef25[[IMAGE]]iDv4_f(%[[IMAGE]] addrspace(1)*, i32, <4 x float>) [[ATTRS1:#[0-9]+]]
+; CHECK-DAG: declare spir_func i32 @_Z15get_image_width25[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
; CHECK: define spir_kernel void @write_float
-; CHECK: call spir_func void @_Z12write_imagef14ocl_image1d_woiDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
-; CHECK: call spir_func i32 @_Z15get_image_width14ocl_image1d_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
+; CHECK: call spir_func void @_Z12write_imagef25[[IMAGE]]iDv4_f(%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func i32 @_Z15get_image_width25[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
; CHECK-DAG: attributes [[ATTRS1]] = { convergent nounwind }
; CHECK-DAG: attributes [[ATTRS2]] = { convergent nobuiltin nounwind readonly }
diff --git a/test/SpecializeImageTypes/image1d_float_sampled_get_image_width.ll b/test/SpecializeImageTypes/image1d_float_sampled_get_image_width.ll
index 8fad62a..fa36899 100644
--- a/test/SpecializeImageTypes/image1d_float_sampled_get_image_width.ll
+++ b/test/SpecializeImageTypes/image1d_float_sampled_get_image_width.ll
@@ -2,11 +2,11 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_ro_t.float.sampled]] = type opaque
-; CHECK-DAG: declare spir_func <4 x float> @_Z11read_imagef14ocl_image1d_ro11ocl_samplerf.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, float) [[ATTRS1:#[0-9]+]]
-; CHECK-DAG: declare spir_func i32 @_Z15get_image_width14ocl_image1d_ro.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
+; CHECK-DAG: declare spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]11ocl_samplerf(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, float) [[ATTRS1:#[0-9]+]]
+; CHECK-DAG: declare spir_func i32 @_Z15get_image_width33[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
; CHECK: define spir_kernel void @read_float
-; CHECK: call spir_func <4 x float> @_Z11read_imagef14ocl_image1d_ro11ocl_samplerf.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
-; CHECK: call spir_func i32 @_Z15get_image_width14ocl_image1d_ro.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]11ocl_samplerf(%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func i32 @_Z15get_image_width33[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
; CHECK-DAG: attributes [[ATTRS1]] = { convergent nounwind }
; CHECK-DAG: attributes [[ATTRS2]] = { nounwind }
diff --git a/test/SpecializeImageTypes/image2d_array_float_get_image_height.ll b/test/SpecializeImageTypes/image2d_array_float_get_image_height.ll
index c7dd964..4437fe3 100644
--- a/test/SpecializeImageTypes/image2d_array_float_get_image_height.ll
+++ b/test/SpecializeImageTypes/image2d_array_float_get_image_height.ll
@@ -2,11 +2,11 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_array_wo_t.float]] = type opaque
-; CHECK-DAG: declare spir_func void @_Z12write_imagef20ocl_image2d_array_woDv4_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x float>) [[ATTRS1:#[0-9]+]]
-; CHECK-DAG: declare spir_func i32 @_Z16get_image_height20ocl_image2d_array_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
+; CHECK-DAG: declare spir_func void @_Z12write_imagef31[[IMAGE]]Dv4_iDv4_f(%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x float>) [[ATTRS1:#[0-9]+]]
+; CHECK-DAG: declare spir_func i32 @_Z16get_image_height31[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
; CHECK: define spir_kernel void @write_float
-; CHECK: call spir_func void @_Z12write_imagef20ocl_image2d_array_woDv4_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
-; CHECK: call spir_func i32 @_Z16get_image_height20ocl_image2d_array_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
+; CHECK: call spir_func void @_Z12write_imagef31[[IMAGE]]Dv4_iDv4_f(%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func i32 @_Z16get_image_height31[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
; CHECK-DAG: attributes [[ATTRS1]] = { convergent nounwind }
; CHECK-DAG: attributes [[ATTRS2]] = { convergent nobuiltin nounwind readonly }
diff --git a/test/SpecializeImageTypes/image2d_array_float_get_image_width.ll b/test/SpecializeImageTypes/image2d_array_float_get_image_width.ll
index 7b4d069..36201ec 100644
--- a/test/SpecializeImageTypes/image2d_array_float_get_image_width.ll
+++ b/test/SpecializeImageTypes/image2d_array_float_get_image_width.ll
@@ -2,11 +2,11 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_array_wo_t.float]] = type opaque
-; CHECK-DAG: declare spir_func void @_Z12write_imagef20ocl_image2d_array_woDv4_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x float>) [[ATTRS1:#[0-9]+]]
-; CHECK-DAG: declare spir_func i32 @_Z15get_image_width20ocl_image2d_array_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
+; CHECK-DAG: declare spir_func void @_Z12write_imagef31[[IMAGE]]Dv4_iDv4_f(%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x float>) [[ATTRS1:#[0-9]+]]
+; CHECK-DAG: declare spir_func i32 @_Z15get_image_width31[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
; CHECK: define spir_kernel void @write_float
-; CHECK: call spir_func void @_Z12write_imagef20ocl_image2d_array_woDv4_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
-; CHECK: call spir_func i32 @_Z15get_image_width20ocl_image2d_array_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
+; CHECK: call spir_func void @_Z12write_imagef31[[IMAGE]]Dv4_iDv4_f(%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func i32 @_Z15get_image_width31[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
; CHECK-DAG: attributes [[ATTRS1]] = { convergent nounwind }
; CHECK-DAG: attributes [[ATTRS2]] = { convergent nobuiltin nounwind readonly }
diff --git a/test/SpecializeImageTypes/image2d_array_float_sampled_get_image_height.ll b/test/SpecializeImageTypes/image2d_array_float_sampled_get_image_height.ll
index 221f0f6..7d33f1d 100644
--- a/test/SpecializeImageTypes/image2d_array_float_sampled_get_image_height.ll
+++ b/test/SpecializeImageTypes/image2d_array_float_sampled_get_image_height.ll
@@ -2,11 +2,11 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_array_ro_t.float.sampled]] = type opaque
-; CHECK-DAG: declare spir_func <4 x float> @_Z11read_imagef20ocl_image2d_array_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS1:#[0-9]+]]
-; CHECK-DAG: declare spir_func i32 @_Z16get_image_height20ocl_image2d_array_ro.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
+; CHECK-DAG: declare spir_func <4 x float> @_Z11read_imagef39[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS1:#[0-9]+]]
+; CHECK-DAG: declare spir_func i32 @_Z16get_image_height39[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
; CHECK: define spir_kernel void @read_float
-; CHECK: call spir_func <4 x float> @_Z11read_imagef20ocl_image2d_array_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
-; CHECK: call spir_func i32 @_Z16get_image_height20ocl_image2d_array_ro.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x float> @_Z11read_imagef39[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func i32 @_Z16get_image_height39[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
; CHECK-DAG: attributes [[ATTRS1]] = { convergent nounwind }
; CHECK-DAG: attributes [[ATTRS2]] = { nounwind }
diff --git a/test/SpecializeImageTypes/image2d_array_float_sampled_get_image_width.ll b/test/SpecializeImageTypes/image2d_array_float_sampled_get_image_width.ll
index 21c1e61..b6134fd 100644
--- a/test/SpecializeImageTypes/image2d_array_float_sampled_get_image_width.ll
+++ b/test/SpecializeImageTypes/image2d_array_float_sampled_get_image_width.ll
@@ -2,11 +2,11 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_array_ro_t.float.sampled]] = type opaque
-; CHECK-DAG: declare spir_func <4 x float> @_Z11read_imagef20ocl_image2d_array_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS1:#[0-9]+]]
-; CHECK-DAG: declare spir_func i32 @_Z15get_image_width20ocl_image2d_array_ro.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
+; CHECK-DAG: declare spir_func <4 x float> @_Z11read_imagef39[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS1:#[0-9]+]]
+; CHECK-DAG: declare spir_func i32 @_Z15get_image_width39[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
; CHECK: define spir_kernel void @read_float
-; CHECK: call spir_func <4 x float> @_Z11read_imagef20ocl_image2d_array_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
-; CHECK: call spir_func i32 @_Z15get_image_width20ocl_image2d_array_ro.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x float> @_Z11read_imagef39[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func i32 @_Z15get_image_width39[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
; CHECK-DAG: attributes [[ATTRS1]] = { convergent nounwind }
; CHECK-DAG: attributes [[ATTRS2]] = { nounwind }
diff --git a/test/SpecializeImageTypes/image2d_array_int_get_image_dim.ll b/test/SpecializeImageTypes/image2d_array_int_get_image_dim.ll
index 13e5e7b..9c826e4 100644
--- a/test/SpecializeImageTypes/image2d_array_int_get_image_dim.ll
+++ b/test/SpecializeImageTypes/image2d_array_int_get_image_dim.ll
@@ -2,11 +2,11 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_array_wo_t.int]] = type opaque
-; CHECK: declare spir_func <2 x i32> @_Z13get_image_dim20ocl_image2d_array_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS:#[0-9]+]]
-; CHECK: declare spir_func void @_Z12write_imagei20ocl_image2d_array_woDv4_iS0_.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x i32>) [[ATTRS]]
+; CHECK: declare spir_func <2 x i32> @_Z13get_image_dim29[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z12write_imagei29[[IMAGE]]Dv4_iDv4_i(%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x i32>) [[ATTRS]]
; CHECK: define spir_kernel void @write_int
-; CHECK: call spir_func void @_Z12write_imagei20ocl_image2d_array_woDv4_iS0_.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
-; CHECK: call spir_func <2 x i32> @_Z13get_image_dim20ocl_image2d_array_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z12write_imagei29[[IMAGE]]Dv4_iDv4_i(%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <2 x i32> @_Z13get_image_dim29[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/image2d_array_int_sampled_get_image_dim.ll b/test/SpecializeImageTypes/image2d_array_int_sampled_get_image_dim.ll
index d9aecf2..18bbd0f 100644
--- a/test/SpecializeImageTypes/image2d_array_int_sampled_get_image_dim.ll
+++ b/test/SpecializeImageTypes/image2d_array_int_sampled_get_image_dim.ll
@@ -2,10 +2,10 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_array_ro_t.int.sampled]] = type opaque
-; CHECK: declare spir_func <2 x i32> @_Z13get_image_dim20ocl_image2d_array_ro.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS:#[0-9]+]]
-; CHECK: declare spir_func <4 x i32> @_Z11read_imagei20ocl_image2d_array_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS]]
+; CHECK: declare spir_func <2 x i32> @_Z13get_image_dim37[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z11read_imagei37[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS]]
; CHECK: define spir_kernel void @read_int
-; CHECK: call spir_func <2 x i32> @_Z13get_image_dim20ocl_image2d_array_ro.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <2 x i32> @_Z13get_image_dim37[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/image2d_float_get_image_height.ll b/test/SpecializeImageTypes/image2d_float_get_image_height.ll
index 3078d33..bc550f8 100644
--- a/test/SpecializeImageTypes/image2d_float_get_image_height.ll
+++ b/test/SpecializeImageTypes/image2d_float_get_image_height.ll
@@ -2,11 +2,11 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_wo_t.float]] = type opaque
-; CHECK-DAG: declare spir_func void @_Z12write_imagef14ocl_image2d_woDv2_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x float>) [[ATTRS1:#[0-9]+]]
-; CHECK-DAG: declare spir_func i32 @_Z16get_image_height14ocl_image2d_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
+; CHECK-DAG: declare spir_func void @_Z12write_imagef25[[IMAGE]]Dv2_iDv4_f(%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x float>) [[ATTRS1:#[0-9]+]]
+; CHECK-DAG: declare spir_func i32 @_Z16get_image_height25[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
; CHECK: define spir_kernel void @write_float
-; CHECK: call spir_func void @_Z12write_imagef14ocl_image2d_woDv2_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
-; CHECK: call spir_func i32 @_Z16get_image_height14ocl_image2d_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
+; CHECK: call spir_func void @_Z12write_imagef25[[IMAGE]]Dv2_iDv4_f(%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func i32 @_Z16get_image_height25[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
; CHECK-DAG: attributes [[ATTRS1]] = { convergent nounwind }
; CHECK-DAG: attributes [[ATTRS2]] = { convergent nobuiltin nounwind readonly }
diff --git a/test/SpecializeImageTypes/image2d_float_get_image_width.ll b/test/SpecializeImageTypes/image2d_float_get_image_width.ll
index fcfb6f1..59b9dbb 100644
--- a/test/SpecializeImageTypes/image2d_float_get_image_width.ll
+++ b/test/SpecializeImageTypes/image2d_float_get_image_width.ll
@@ -2,11 +2,11 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_wo_t.float]] = type opaque
-; CHECK-DAG: declare spir_func void @_Z12write_imagef14ocl_image2d_woDv2_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x float>) [[ATTRS1:#[0-9]+]]
-; CHECK-DAG: declare spir_func i32 @_Z15get_image_width14ocl_image2d_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
+; CHECK-DAG: declare spir_func void @_Z12write_imagef25[[IMAGE]]Dv2_iDv4_f(%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x float>) [[ATTRS1:#[0-9]+]]
+; CHECK-DAG: declare spir_func i32 @_Z15get_image_width25[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
; CHECK: define spir_kernel void @write_float
-; CHECK: call spir_func void @_Z12write_imagef14ocl_image2d_woDv2_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
-; CHECK: call spir_func i32 @_Z15get_image_width14ocl_image2d_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
+; CHECK: call spir_func void @_Z12write_imagef25[[IMAGE]]Dv2_iDv4_f(%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func i32 @_Z15get_image_width25[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
; CHECK-DAG: attributes [[ATTRS1]] = { convergent nounwind }
; CHECK-DAG: attributes [[ATTRS2]] = { convergent nobuiltin nounwind readonly }
diff --git a/test/SpecializeImageTypes/image2d_float_sampled_get_image_height.ll b/test/SpecializeImageTypes/image2d_float_sampled_get_image_height.ll
index 02d4ece..7d03a15 100644
--- a/test/SpecializeImageTypes/image2d_float_sampled_get_image_height.ll
+++ b/test/SpecializeImageTypes/image2d_float_sampled_get_image_height.ll
@@ -2,11 +2,11 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_ro_t.float.sampled]] = type opaque
-; CHECK-DAG: declare spir_func <4 x float> @_Z11read_imagef14ocl_image2d_ro11ocl_samplerDv2_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>) [[ATTRS1:#[0-9]+]]
-; CHECK-DAG: declare spir_func i32 @_Z16get_image_height14ocl_image2d_ro.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
+; CHECK-DAG: declare spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]11ocl_samplerDv2_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>) [[ATTRS1:#[0-9]+]]
+; CHECK-DAG: declare spir_func i32 @_Z16get_image_height33[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
; CHECK: define spir_kernel void @read_float
-; CHECK: call spir_func <4 x float> @_Z11read_imagef14ocl_image2d_ro11ocl_samplerDv2_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
-; CHECK: call spir_func i32 @_Z16get_image_height14ocl_image2d_ro.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]11ocl_samplerDv2_f(%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func i32 @_Z16get_image_height33[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
; CHECK-DAG: attributes [[ATTRS1]] = { convergent nounwind }
; CHECK-DAG: attributes [[ATTRS2]] = { nounwind }
diff --git a/test/SpecializeImageTypes/image2d_float_sampled_get_image_width.ll b/test/SpecializeImageTypes/image2d_float_sampled_get_image_width.ll
index da0dde0..3de4db7 100644
--- a/test/SpecializeImageTypes/image2d_float_sampled_get_image_width.ll
+++ b/test/SpecializeImageTypes/image2d_float_sampled_get_image_width.ll
@@ -2,11 +2,11 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_ro_t.float.sampled]] = type opaque
-; CHECK-DAG: declare spir_func <4 x float> @_Z11read_imagef14ocl_image2d_ro11ocl_samplerDv2_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>) [[ATTRS1:#[0-9]+]]
-; CHECK-DAG: declare spir_func i32 @_Z15get_image_width14ocl_image2d_ro.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
+; CHECK-DAG: declare spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]11ocl_samplerDv2_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>) [[ATTRS1:#[0-9]+]]
+; CHECK-DAG: declare spir_func i32 @_Z15get_image_width33[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS2:#[0-9]+]]
; CHECK: define spir_kernel void @read_float
-; CHECK: call spir_func <4 x float> @_Z11read_imagef14ocl_image2d_ro11ocl_samplerDv2_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
-; CHECK: call spir_func i32 @_Z15get_image_width14ocl_image2d_ro.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]11ocl_samplerDv2_f(%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func i32 @_Z15get_image_width33[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
; CHECK-DAG: attributes [[ATTRS1]] = { convergent nounwind }
; CHECK-DAG: attributes [[ATTRS2]] = { nounwind }
diff --git a/test/SpecializeImageTypes/image2d_int_get_image_dim.ll b/test/SpecializeImageTypes/image2d_int_get_image_dim.ll
index 3968649..421f3fe 100644
--- a/test/SpecializeImageTypes/image2d_int_get_image_dim.ll
+++ b/test/SpecializeImageTypes/image2d_int_get_image_dim.ll
@@ -2,11 +2,11 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_wo_t.int]] = type opaque
-; CHECK: declare spir_func <2 x i32> @_Z13get_image_dim14ocl_image2d_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS:#[0-9]+]]
-; CHECK: declare spir_func void @_Z12write_imagei14ocl_image2d_woDv2_iDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x i32>) [[ATTRS]]
+; CHECK: declare spir_func <2 x i32> @_Z13get_image_dim23[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z12write_imagei23[[IMAGE]]Dv2_iDv4_i(%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x i32>) [[ATTRS]]
; CHECK: define spir_kernel void @write_int
-; CHECK: call spir_func void @_Z12write_imagei14ocl_image2d_woDv2_iDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
-; CHECK: call spir_func <2 x i32> @_Z13get_image_dim14ocl_image2d_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z12write_imagei23[[IMAGE]]Dv2_iDv4_i(%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <2 x i32> @_Z13get_image_dim23[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/image2d_int_sampled_get_image_dim.ll b/test/SpecializeImageTypes/image2d_int_sampled_get_image_dim.ll
index 77a4e3e..e6c075f 100644
--- a/test/SpecializeImageTypes/image2d_int_sampled_get_image_dim.ll
+++ b/test/SpecializeImageTypes/image2d_int_sampled_get_image_dim.ll
@@ -2,10 +2,10 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_ro_t.int.sampled]] = type opaque
-; CHECK: declare spir_func <2 x i32> @_Z13get_image_dim14ocl_image2d_ro.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS:#[0-9]+]]
-; CHECK: declare spir_func <4 x i32> @_Z11read_imagei14ocl_image2d_ro11ocl_samplerDv2_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>) [[ATTRS]]
+; CHECK: declare spir_func <2 x i32> @_Z13get_image_dim31[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z11read_imagei31[[IMAGE]]11ocl_samplerDv2_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>) [[ATTRS]]
; CHECK: define spir_kernel void @read_int
-; CHECK: call spir_func <2 x i32> @_Z13get_image_dim14ocl_image2d_ro.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <2 x i32> @_Z13get_image_dim31[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/image3d_float_get_image_depth.ll b/test/SpecializeImageTypes/image3d_float_get_image_depth.ll
index acb242d..d874274 100644
--- a/test/SpecializeImageTypes/image3d_float_get_image_depth.ll
+++ b/test/SpecializeImageTypes/image3d_float_get_image_depth.ll
@@ -2,11 +2,11 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image3d_wo_t.float]] = type opaque
-; CHECK: declare spir_func i32 @_Z15get_image_depth14ocl_image3d_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS:#[0-9]+]]
-; CHECK: declare spir_func void @_Z12write_imagef14ocl_image3d_woDv4_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x float>) [[ATTRS]]
+; CHECK: declare spir_func i32 @_Z15get_image_depth25[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z12write_imagef25[[IMAGE]]Dv4_iDv4_f(%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x float>) [[ATTRS]]
; CHECK: define spir_kernel void @write_float
-; CHECK: call spir_func void @_Z12write_imagef14ocl_image3d_woDv4_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
-; CHECK: call spir_func i32 @_Z15get_image_depth14ocl_image3d_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
+; CHECK: call spir_func void @_Z12write_imagef25[[IMAGE]]Dv4_iDv4_f(%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func i32 @_Z15get_image_depth25[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/image3d_float_get_image_height.ll b/test/SpecializeImageTypes/image3d_float_get_image_height.ll
index 046c907..85e3045 100644
--- a/test/SpecializeImageTypes/image3d_float_get_image_height.ll
+++ b/test/SpecializeImageTypes/image3d_float_get_image_height.ll
@@ -2,11 +2,11 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image3d_wo_t.float]] = type opaque
-; CHECK: declare spir_func i32 @_Z16get_image_height14ocl_image3d_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS:#[0-9]+]]
-; CHECK: declare spir_func void @_Z12write_imagef14ocl_image3d_woDv4_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x float>) [[ATTRS]]
+; CHECK: declare spir_func i32 @_Z16get_image_height25[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z12write_imagef25[[IMAGE]]Dv4_iDv4_f(%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x float>) [[ATTRS]]
; CHECK: define spir_kernel void @write_float
-; CHECK: call spir_func void @_Z12write_imagef14ocl_image3d_woDv4_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
-; CHECK: call spir_func i32 @_Z16get_image_height14ocl_image3d_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
+; CHECK: call spir_func void @_Z12write_imagef25[[IMAGE]]Dv4_iDv4_f(%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func i32 @_Z16get_image_height25[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/image3d_float_get_image_width.ll b/test/SpecializeImageTypes/image3d_float_get_image_width.ll
index 1b0813f..9588cc3 100644
--- a/test/SpecializeImageTypes/image3d_float_get_image_width.ll
+++ b/test/SpecializeImageTypes/image3d_float_get_image_width.ll
@@ -2,11 +2,11 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image3d_wo_t.float]] = type opaque
-; CHECK: declare spir_func i32 @_Z15get_image_width14ocl_image3d_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS:#[0-9]+]]
-; CHECK: declare spir_func void @_Z12write_imagef14ocl_image3d_woDv4_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x float>) [[ATTRS]]
+; CHECK: declare spir_func i32 @_Z15get_image_width25[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z12write_imagef25[[IMAGE]]Dv4_iDv4_f(%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x float>) [[ATTRS]]
; CHECK: define spir_kernel void @write_float
-; CHECK: call spir_func void @_Z12write_imagef14ocl_image3d_woDv4_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
-; CHECK: call spir_func i32 @_Z15get_image_width14ocl_image3d_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
+; CHECK: call spir_func void @_Z12write_imagef25[[IMAGE]]Dv4_iDv4_f(%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func i32 @_Z15get_image_width25[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/image3d_float_sampled_get_image_depth.ll b/test/SpecializeImageTypes/image3d_float_sampled_get_image_depth.ll
index 42c7a1a..85f4c80 100644
--- a/test/SpecializeImageTypes/image3d_float_sampled_get_image_depth.ll
+++ b/test/SpecializeImageTypes/image3d_float_sampled_get_image_depth.ll
@@ -2,11 +2,11 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image3d_ro_t.float.sampled]] = type opaque
-; CHECK: declare spir_func i32 @_Z15get_image_depth14ocl_image3d_ro.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS:#[0-9]+]]
-; CHECK: declare spir_func <4 x float> @_Z11read_imagef14ocl_image3d_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func i32 @_Z15get_image_depth33[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_float
-; CHECK: call spir_func <4 x float> @_Z11read_imagef14ocl_image3d_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
-; CHECK: call spir_func i32 @_Z15get_image_depth14ocl_image3d_ro.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
+; CHECK: call spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func i32 @_Z15get_image_depth33[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/image3d_float_sampled_get_image_height.ll b/test/SpecializeImageTypes/image3d_float_sampled_get_image_height.ll
index 1ffc69b..e5397f4 100644
--- a/test/SpecializeImageTypes/image3d_float_sampled_get_image_height.ll
+++ b/test/SpecializeImageTypes/image3d_float_sampled_get_image_height.ll
@@ -2,11 +2,11 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image3d_ro_t.float.sampled]] = type opaque
-; CHECK: declare spir_func i32 @_Z16get_image_height14ocl_image3d_ro.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS:#[0-9]+]]
-; CHECK: declare spir_func <4 x float> @_Z11read_imagef14ocl_image3d_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func i32 @_Z16get_image_height33[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_float
-; CHECK: call spir_func <4 x float> @_Z11read_imagef14ocl_image3d_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
-; CHECK: call spir_func i32 @_Z16get_image_height14ocl_image3d_ro.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
+; CHECK: call spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func i32 @_Z16get_image_height33[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/image3d_float_sampled_get_image_width.ll b/test/SpecializeImageTypes/image3d_float_sampled_get_image_width.ll
index 5539d46..9b471ff 100644
--- a/test/SpecializeImageTypes/image3d_float_sampled_get_image_width.ll
+++ b/test/SpecializeImageTypes/image3d_float_sampled_get_image_width.ll
@@ -2,11 +2,11 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image3d_ro_t.float.sampled]] = type opaque
-; CHECK: declare spir_func i32 @_Z15get_image_width14ocl_image3d_ro.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS:#[0-9]+]]
-; CHECK: declare spir_func <4 x float> @_Z11read_imagef14ocl_image3d_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func i32 @_Z15get_image_width33[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_float
-; CHECK: call spir_func <4 x float> @_Z11read_imagef14ocl_image3d_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
-; CHECK: call spir_func i32 @_Z15get_image_width14ocl_image3d_ro.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
+; CHECK: call spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func i32 @_Z15get_image_width33[[IMAGE]](%[[IMAGE]] addrspace(1)* %image)
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/image3d_int_get_image_dim.ll b/test/SpecializeImageTypes/image3d_int_get_image_dim.ll
index ffd5f3c..9aea48a 100644
--- a/test/SpecializeImageTypes/image3d_int_get_image_dim.ll
+++ b/test/SpecializeImageTypes/image3d_int_get_image_dim.ll
@@ -2,11 +2,11 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image3d_wo_t.int]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z13get_image_dim14ocl_image3d_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS:#[0-9]+]]
-; CHECK: declare spir_func void @_Z12write_imagei14ocl_image3d_woDv4_iS0_.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x i32>) [[ATTRS]]
+; CHECK: declare spir_func <4 x i32> @_Z13get_image_dim23[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z12write_imagei23[[IMAGE]]Dv4_iDv4_i(%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x i32>) [[ATTRS]]
; CHECK: define spir_kernel void @write_int
-; CHECK: call spir_func void @_Z12write_imagei14ocl_image3d_woDv4_iS0_.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
-; CHECK: call spir_func <4 x i32> @_Z13get_image_dim14ocl_image3d_wo.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z12write_imagei23[[IMAGE]]Dv4_iDv4_i(%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z13get_image_dim23[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/image3d_int_sampled_get_image_dim.ll b/test/SpecializeImageTypes/image3d_int_sampled_get_image_dim.ll
index 87b9442..2dd52bd 100644
--- a/test/SpecializeImageTypes/image3d_int_sampled_get_image_dim.ll
+++ b/test/SpecializeImageTypes/image3d_int_sampled_get_image_dim.ll
@@ -2,11 +2,11 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image3d_ro_t.int.sampled]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z13get_image_dim14ocl_image3d_ro.[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS:#[0-9]+]]
-; CHECK: declare spir_func <4 x i32> @_Z11read_imagei14ocl_image3d_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS]]
+; CHECK: declare spir_func <4 x i32> @_Z13get_image_dim31[[IMAGE]](%[[IMAGE]] addrspace(1)*) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z11read_imagei31[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS]]
; CHECK: define spir_kernel void @read_int
-; CHECK: call spir_func <4 x i32> @_Z11read_imagei14ocl_image3d_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
-; CHECK: call spir_func <4 x i32> @_Z13get_image_dim14ocl_image3d_ro.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z11read_imagei31[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z13get_image_dim31[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/multiple_image_args_subfuction.ll b/test/SpecializeImageTypes/multiple_image_args_subfuction.ll
index a1c192f..a5f6430 100644
--- a/test/SpecializeImageTypes/multiple_image_args_subfuction.ll
+++ b/test/SpecializeImageTypes/multiple_image_args_subfuction.ll
@@ -3,13 +3,13 @@
; CHECK-DAG: %[[RO_IM:opencl.image2d_ro_t.float.sampled]] = type opaque
; CHECK-DAG: %[[WO_IM:opencl.image2d_wo_t.int]] = type opaque
-; CHECK-DAG: declare spir_func <4 x float> @_Z11read_imagef14ocl_image2d_ro11ocl_samplerDv2_f.[[RO_IM]](%[[RO_IM]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>)
-; CHECK-DAG: declare spir_func void @_Z12write_imagei14ocl_image2d_woDv2_iDv4_i.[[WO_IM]](%[[WO_IM]] addrspace(1)*, <2 x i32>, <4 x i32>)
+; CHECK-DAG: declare spir_func <4 x float> @_Z11read_imagef33[[RO_IM]]11ocl_samplerDv2_f(%[[RO_IM]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>)
+; CHECK-DAG: declare spir_func void @_Z12write_imagei23[[WO_IM]]Dv2_iDv4_i(%[[WO_IM]] addrspace(1)*, <2 x i32>, <4 x i32>)
; CHECK: define spir_kernel void @read_float
; CHECK: call spir_func void @foo(%[[RO_IM]] addrspace(1)* %ro, %[[WO_IM]] addrspace(1)* %wo
; CHECK: define spir_func void @foo
-; CHECK: call spir_func <4 x float> @_Z11read_imagef14ocl_image2d_ro11ocl_samplerDv2_f.[[RO_IM]](%[[RO_IM]] addrspace(1)* %ro
-; CHECK: call spir_func void @_Z12write_imagei14ocl_image2d_woDv2_iDv4_i.[[WO_IM]](%[[WO_IM]] addrspace(1)* %wo
+; CHECK: call spir_func <4 x float> @_Z11read_imagef33[[RO_IM]]11ocl_samplerDv2_f(%[[RO_IM]] addrspace(1)* %ro
+; CHECK: call spir_func void @_Z12write_imagei23[[WO_IM]]Dv2_iDv4_i(%[[WO_IM]] addrspace(1)* %wo
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
target triple = "spir-unknown-unknown"
diff --git a/test/SpecializeImageTypes/multiple_image_kernel_args.ll b/test/SpecializeImageTypes/multiple_image_kernel_args.ll
index 072a16e..37cc2c6 100644
--- a/test/SpecializeImageTypes/multiple_image_kernel_args.ll
+++ b/test/SpecializeImageTypes/multiple_image_kernel_args.ll
@@ -3,11 +3,11 @@
; CHECK-DAG: %[[RO_IM:opencl.image2d_ro_t.float.sampled]] = type opaque
; CHECK-DAG: %[[WO_IM:opencl.image2d_wo_t.int]] = type opaque
-; CHECK-DAG: declare spir_func <4 x float> @_Z11read_imagef14ocl_image2d_ro11ocl_samplerDv2_f.[[RO_IM]](%[[RO_IM]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>)
-; CHECK-DAG: declare spir_func void @_Z12write_imagei14ocl_image2d_woDv2_iDv4_i.[[WO_IM]](%[[WO_IM]] addrspace(1)*, <2 x i32>, <4 x i32>)
+; CHECK-DAG: declare spir_func <4 x float> @_Z11read_imagef33[[RO_IM]]11ocl_samplerDv2_f(%[[RO_IM]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>)
+; CHECK-DAG: declare spir_func void @_Z12write_imagei23[[WO_IM]]Dv2_iDv4_i(%[[WO_IM]] addrspace(1)*, <2 x i32>, <4 x i32>)
; CHECK: define spir_kernel void @read_float
-; CHECK: call spir_func <4 x float> @_Z11read_imagef14ocl_image2d_ro11ocl_samplerDv2_f.[[RO_IM]](%[[RO_IM]] addrspace(1)* %ro
-; CHECK: call spir_func void @_Z12write_imagei14ocl_image2d_woDv2_iDv4_i.[[WO_IM]](%[[WO_IM]] addrspace(1)* %wo
+; CHECK: call spir_func <4 x float> @_Z11read_imagef33[[RO_IM]]11ocl_samplerDv2_f(%[[RO_IM]] addrspace(1)* %ro
+; CHECK: call spir_func void @_Z12write_imagei23[[WO_IM]]Dv2_iDv4_i(%[[WO_IM]] addrspace(1)* %wo
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
target triple = "spir-unknown-unknown"
diff --git a/test/SpecializeImageTypes/multiple_image_kernel_args_different_subfunctions.ll b/test/SpecializeImageTypes/multiple_image_kernel_args_different_subfunctions.ll
index 6a7e6b5..cf3c036 100644
--- a/test/SpecializeImageTypes/multiple_image_kernel_args_different_subfunctions.ll
+++ b/test/SpecializeImageTypes/multiple_image_kernel_args_different_subfunctions.ll
@@ -3,15 +3,15 @@
; CHECK-DAG: %[[RO_IM:opencl.image2d_ro_t.float.sampled]] = type opaque
; CHECK-DAG: %[[WO_IM:opencl.image2d_wo_t.int]] = type opaque
-; CHECK-DAG: declare spir_func <4 x float> @_Z11read_imagef14ocl_image2d_ro11ocl_samplerDv2_f.[[RO_IM]](%[[RO_IM]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>)
-; CHECK-DAG: declare spir_func void @_Z12write_imagei14ocl_image2d_woDv2_iDv4_i.[[WO_IM]](%[[WO_IM]] addrspace(1)*, <2 x i32>, <4 x i32>)
+; CHECK-DAG: declare spir_func <4 x float> @_Z11read_imagef33[[RO_IM]]11ocl_samplerDv2_f(%[[RO_IM]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>)
+; CHECK-DAG: declare spir_func void @_Z12write_imagei23[[WO_IM]]Dv2_iDv4_i(%[[WO_IM]] addrspace(1)*, <2 x i32>, <4 x i32>)
; CHECK: define spir_kernel void @k1
; CHECK: call spir_func <4 x float> @foo(%[[RO_IM]] addrspace(1)* %ro,
; CHECK: call spir_func void @bar(%[[WO_IM]] addrspace(1)* %wo,
; CHECK-DAG: define spir_func <4 x float> @foo
-; CHECK-DAG: call spir_func <4 x float> @_Z11read_imagef14ocl_image2d_ro11ocl_samplerDv2_f.[[RO_IM]](%[[RO_IM]] addrspace(1)* %ro
+; CHECK-DAG: call spir_func <4 x float> @_Z11read_imagef33[[RO_IM]]11ocl_samplerDv2_f(%[[RO_IM]] addrspace(1)* %ro
; CHECK-DAG: define spir_func void @bar
-; CHECK-DAG: call spir_func void @_Z12write_imagei14ocl_image2d_woDv2_iDv4_i.[[WO_IM]](%[[WO_IM]] addrspace(1)* %wo
+; CHECK-DAG: call spir_func void @_Z12write_imagei23[[WO_IM]]Dv2_iDv4_i(%[[WO_IM]] addrspace(1)* %wo
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
target triple = "spir-unknown-unknown"
diff --git a/test/SpecializeImageTypes/opaque_image1d_array_int.ll b/test/SpecializeImageTypes/opaque_image1d_array_int.ll
new file mode 100644
index 0000000..54eaeb7
--- /dev/null
+++ b/test/SpecializeImageTypes/opaque_image1d_array_int.ll
@@ -0,0 +1,25 @@
+; RUN: clspv-opt %s -o %t.ll -opaque-pointers --passes=specialize-image-types --cl-std=CL2.0
+; RUN: FileCheck %s < %t.ll
+
+; CHECK: call spir_func <4 x i32> @_Z11read_imagei32ocl_image1d_array_ro.int.sampled11ocl_samplerDv2_f(ptr addrspace(1) %t_in1,
+; CHECK: call spir_func <4 x i32> @_Z11read_imagei24ocl_image1d_array_rw.intDv2_i(ptr addrspace(1) %t_in2,
+; CHECK: call spir_func void @_Z12write_imagei24ocl_image1d_array_rw.intDv2_iDv4_i(ptr addrspace(1) %t_out,
+
+target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
+target triple = "spir-unknown-unknown"
+
+define dso_local spir_kernel void @test(ptr addrspace(1) %t_in1, ptr addrspace(1) %t_in2, ptr addrspace(1) %t_out, ptr addrspace(2) %s, <2 x float> %m, <2 x i32> %n) !clspv.pod_args_impl !7 {
+entry:
+ %call = call spir_func <4 x i32> @_Z11read_imagei20ocl_image1d_array_ro11ocl_samplerDv2_f(ptr addrspace(1) %t_in1, ptr addrspace(2) %s, <2 x float> %m)
+ %call1 = call spir_func <4 x i32> @_Z11read_imagei20ocl_image1d_array_rwDv2_i(ptr addrspace(1) %t_in2, <2 x i32> %n)
+ %add = add <4 x i32> %call, %call1
+ call spir_func void @_Z12write_imagei20ocl_image1d_array_woDv2_iDv4_i(ptr addrspace(1) %t_out, <2 x i32> %n, <4 x i32> %add)
+ ret void
+}
+
+declare spir_func <4 x i32> @_Z11read_imagei20ocl_image1d_array_ro11ocl_samplerDv2_f(ptr addrspace(1), ptr addrspace(2), <2 x float>)
+declare spir_func <4 x i32> @_Z11read_imagei20ocl_image1d_array_rwDv2_i(ptr addrspace(1), <2 x i32>)
+declare spir_func void @_Z12write_imagei20ocl_image1d_array_woDv2_iDv4_i(ptr addrspace(1), <2 x i32>, <4 x i32>)
+
+!7 = !{i32 2}
+
diff --git a/test/SpecializeImageTypes/opaque_image1d_buffer_float.ll b/test/SpecializeImageTypes/opaque_image1d_buffer_float.ll
new file mode 100644
index 0000000..5fb52fd
--- /dev/null
+++ b/test/SpecializeImageTypes/opaque_image1d_buffer_float.ll
@@ -0,0 +1,25 @@
+; RUN: clspv-opt %s -o %t.ll -opaque-pointers --passes=specialize-image-types
+; RUN: FileCheck %s < %t.ll
+
+; CHECK: call spir_func <4 x float> @_Z11read_imagef35ocl_image1d_buffer_ro.float.sampled11ocl_samplerf(ptr addrspace(1) %t_in1,
+; CHECK: call spir_func <4 x float> @_Z11read_imagef35ocl_image1d_buffer_ro.float.sampledi(ptr addrspace(1) %t_in2,
+; CHECK: call spir_func void @_Z12write_imagef27ocl_image1d_buffer_wo.floatiDv4_f(ptr addrspace(1) %t_out,
+
+target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
+target triple = "spir-unknown-unknown"
+
+define dso_local spir_kernel void @test(ptr addrspace(1) %t_in1, ptr addrspace(1) %t_in2, ptr addrspace(1) %t_out, float %m, i32 %n, ptr addrspace(2) %s) !clspv.pod_args_impl !7 {
+entry:
+ %call = call spir_func <4 x float> @_Z11read_imagef21ocl_image1d_buffer_ro11ocl_samplerf(ptr addrspace(1) %t_in1, ptr addrspace(2) %s, float %m)
+ %call1 = call spir_func <4 x float> @_Z11read_imagef21ocl_image1d_buffer_roi(ptr addrspace(1) %t_in2, i32 %n)
+ %add = fadd <4 x float> %call, %call1
+ call spir_func void @_Z12write_imagef21ocl_image1d_buffer_woiDv4_f(ptr addrspace(1) %t_out, i32 %n, <4 x float> %add)
+ ret void
+}
+
+declare spir_func <4 x float> @_Z11read_imagef21ocl_image1d_buffer_ro11ocl_samplerf(ptr addrspace(1), ptr addrspace(2), float)
+declare spir_func <4 x float> @_Z11read_imagef21ocl_image1d_buffer_roi(ptr addrspace(1), i32)
+declare spir_func void @_Z12write_imagef21ocl_image1d_buffer_woiDv4_f(ptr addrspace(1), i32, <4 x float>)
+
+!7 = !{i32 2}
+
diff --git a/test/SpecializeImageTypes/opaque_image1d_float.ll b/test/SpecializeImageTypes/opaque_image1d_float.ll
new file mode 100644
index 0000000..c8c6869
--- /dev/null
+++ b/test/SpecializeImageTypes/opaque_image1d_float.ll
@@ -0,0 +1,25 @@
+; RUN: clspv-opt %s -o %t.ll -opaque-pointers --passes=specialize-image-types
+; RUN: FileCheck %s < %t.ll
+
+; CHECK: call spir_func <4 x float> @_Z11read_imagef28ocl_image1d_ro.float.sampled11ocl_samplerf(ptr addrspace(1) %t_in1,
+; CHECK: call spir_func <4 x float> @_Z11read_imagef28ocl_image1d_ro.float.sampledi(ptr addrspace(1) %t_in2,
+; CHECK: call spir_func void @_Z12write_imagef20ocl_image1d_wo.floatiDv4_f(ptr addrspace(1) %t_out,
+
+target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
+target triple = "spir-unknown-unknown"
+
+define dso_local spir_kernel void @test(ptr addrspace(1) %t_in1, ptr addrspace(1) %t_in2, ptr addrspace(1) %t_out, float %m, i32 %n, ptr addrspace(2) %s) !clspv.pod_args_impl !7 {
+entry:
+ %call = call spir_func <4 x float> @_Z11read_imagef14ocl_image1d_ro11ocl_samplerf(ptr addrspace(1) %t_in1, ptr addrspace(2) %s, float %m)
+ %call1 = call spir_func <4 x float> @_Z11read_imagef14ocl_image1d_roi(ptr addrspace(1) %t_in2, i32 %n)
+ %add = fadd <4 x float> %call, %call1
+ call spir_func void @_Z12write_imagef14ocl_image1d_woiDv4_f(ptr addrspace(1) %t_out, i32 %n, <4 x float> %add)
+ ret void
+}
+
+declare spir_func <4 x float> @_Z11read_imagef14ocl_image1d_ro11ocl_samplerf(ptr addrspace(1), ptr addrspace(2), float)
+declare spir_func <4 x float> @_Z11read_imagef14ocl_image1d_roi(ptr addrspace(1), i32)
+declare spir_func void @_Z12write_imagef14ocl_image1d_woiDv4_f(ptr addrspace(1), i32, <4 x float>)
+
+!7 = !{i32 2}
+
diff --git a/test/SpecializeImageTypes/opaque_image1d_int.ll b/test/SpecializeImageTypes/opaque_image1d_int.ll
new file mode 100644
index 0000000..ce9e888
--- /dev/null
+++ b/test/SpecializeImageTypes/opaque_image1d_int.ll
@@ -0,0 +1,25 @@
+; RUN: clspv-opt %s -o %t.ll -opaque-pointers --passes=specialize-image-types --cl-std=CL2.0
+; RUN: FileCheck %s < %t.ll
+
+; CHECK: call spir_func <4 x i32> @_Z11read_imagei26ocl_image1d_ro.int.sampled11ocl_samplerf(ptr addrspace(1) %t_in1,
+; CHECK: call spir_func <4 x i32> @_Z11read_imagei18ocl_image1d_rw.inti(ptr addrspace(1) %t_in2,
+; CHECK: call spir_func void @_Z12write_imagei18ocl_image1d_rw.intiDv4_i(ptr addrspace(1) %t_out,
+
+target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
+target triple = "spir-unknown-unknown"
+
+define dso_local spir_kernel void @test(ptr addrspace(1) %t_in1, ptr addrspace(1) %t_in2, ptr addrspace(1) %t_out, ptr addrspace(2) %s, float %m, i32 %n) !clspv.pod_args_impl !7 {
+entry:
+ %call = call spir_func <4 x i32> @_Z11read_imagei14ocl_image1d_ro11ocl_samplerf(ptr addrspace(1) %t_in1, ptr addrspace(2) %s, float %m)
+ %call1 = call spir_func <4 x i32> @_Z11read_imagei14ocl_image1d_rwi(ptr addrspace(1) %t_in2, i32 %n)
+ %add = add <4 x i32> %call, %call1
+ call spir_func void @_Z12write_imagei14ocl_image1d_woiDv4_i(ptr addrspace(1) %t_out, i32 %n, <4 x i32> %add)
+ ret void
+}
+
+declare spir_func <4 x i32> @_Z11read_imagei14ocl_image1d_ro11ocl_samplerf(ptr addrspace(1), ptr addrspace(2), float)
+declare spir_func <4 x i32> @_Z11read_imagei14ocl_image1d_rwi(ptr addrspace(1), i32)
+declare spir_func void @_Z12write_imagei14ocl_image1d_woiDv4_i(ptr addrspace(1), i32, <4 x i32>)
+
+!7 = !{i32 2}
+
diff --git a/test/SpecializeImageTypes/opaque_image1d_uint.ll b/test/SpecializeImageTypes/opaque_image1d_uint.ll
new file mode 100644
index 0000000..2009611
--- /dev/null
+++ b/test/SpecializeImageTypes/opaque_image1d_uint.ll
@@ -0,0 +1,25 @@
+; RUN: clspv-opt %s -o %t.ll -opaque-pointers --passes=specialize-image-types --cl-std=CL2.0
+; RUN: FileCheck %s < %t.ll
+
+; CHECK: call spir_func <4 x i32> @_Z12read_imageui27ocl_image1d_ro.uint.sampled11ocl_samplerf(ptr addrspace(1) %t_in1,
+; CHECK: call spir_func <4 x i32> @_Z12read_imageui19ocl_image1d_rw.uinti(ptr addrspace(1) %t_in2,
+; CHECK: call spir_func void @_Z13write_imageui19ocl_image1d_rw.uintiDv4_i(ptr addrspace(1) %t_out,
+
+target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
+target triple = "spir-unknown-unknown"
+
+define dso_local spir_kernel void @test(ptr addrspace(1) %t_in1, ptr addrspace(1) %t_in2, ptr addrspace(1) %t_out, ptr addrspace(2) %s, float %m, i32 %n) !clspv.pod_args_impl !7 {
+entry:
+ %call = call spir_func <4 x i32> @_Z12read_imageui14ocl_image1d_ro11ocl_samplerf(ptr addrspace(1) %t_in1, ptr addrspace(2) %s, float %m)
+ %call1 = call spir_func <4 x i32> @_Z12read_imageui14ocl_image1d_rwi(ptr addrspace(1) %t_in2, i32 %n)
+ %add = add <4 x i32> %call, %call1
+ call spir_func void @_Z13write_imageui14ocl_image1d_woiDv4_i(ptr addrspace(1) %t_out, i32 %n, <4 x i32> %add)
+ ret void
+}
+
+declare spir_func <4 x i32> @_Z12read_imageui14ocl_image1d_ro11ocl_samplerf(ptr addrspace(1), ptr addrspace(2), float)
+declare spir_func <4 x i32> @_Z12read_imageui14ocl_image1d_rwi(ptr addrspace(1), i32)
+declare spir_func void @_Z13write_imageui14ocl_image1d_woiDv4_i(ptr addrspace(1), i32, <4 x i32>)
+
+!7 = !{i32 2}
+
diff --git a/test/SpecializeImageTypes/opaque_image2d_array_uint.ll b/test/SpecializeImageTypes/opaque_image2d_array_uint.ll
new file mode 100644
index 0000000..d11e1bf
--- /dev/null
+++ b/test/SpecializeImageTypes/opaque_image2d_array_uint.ll
@@ -0,0 +1,25 @@
+; RUN: clspv-opt %s -o %t.ll -opaque-pointers --passes=specialize-image-types --cl-std=CL2.0
+; RUN: FileCheck %s < %t.ll
+
+; CHECK: call spir_func <4 x i32> @_Z12read_imageui33ocl_image2d_array_ro.uint.sampled11ocl_samplerDv4_f(ptr addrspace(1) %t_in1,
+; CHECK: call spir_func <4 x i32> @_Z12read_imageui25ocl_image2d_array_rw.uintDv4_i(ptr addrspace(1) %t_in2,
+; CHECK: call spir_func void @_Z13write_imageui25ocl_image2d_array_rw.uintDv4_iDv4_i(ptr addrspace(1) %t_out,
+
+target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
+target triple = "spir-unknown-unknown"
+
+define dso_local spir_kernel void @test(ptr addrspace(1) %t_in1, ptr addrspace(1) %t_in2, ptr addrspace(1) %t_out, ptr addrspace(2) %s, <4 x float> %m, <4 x i32> %n) !clspv.pod_args_impl !7 {
+entry:
+ %call = call spir_func <4 x i32> @_Z12read_imageui20ocl_image2d_array_ro11ocl_samplerDv4_f(ptr addrspace(1) %t_in1, ptr addrspace(2) %s, <4 x float> %m)
+ %call1 = call spir_func <4 x i32> @_Z12read_imageui20ocl_image2d_array_rwDv4_i(ptr addrspace(1) %t_in2, <4 x i32> %n)
+ %add = add <4 x i32> %call, %call1
+ call spir_func void @_Z13write_imageui20ocl_image2d_array_woDv4_iS_(ptr addrspace(1) %t_out, <4 x i32> %n, <4 x i32> %add)
+ ret void
+}
+
+declare spir_func <4 x i32> @_Z12read_imageui20ocl_image2d_array_ro11ocl_samplerDv4_f(ptr addrspace(1), ptr addrspace(2), <4 x float>)
+declare spir_func <4 x i32> @_Z12read_imageui20ocl_image2d_array_rwDv4_i(ptr addrspace(1), <4 x i32>)
+declare spir_func void @_Z13write_imageui20ocl_image2d_array_woDv4_iS_(ptr addrspace(1), <4 x i32>, <4 x i32>)
+
+!7 = !{i32 2}
+
diff --git a/test/SpecializeImageTypes/opaque_image2d_float.ll b/test/SpecializeImageTypes/opaque_image2d_float.ll
new file mode 100644
index 0000000..a3a6eb2
--- /dev/null
+++ b/test/SpecializeImageTypes/opaque_image2d_float.ll
@@ -0,0 +1,25 @@
+; RUN: clspv-opt %s -o %t.ll -opaque-pointers --passes=specialize-image-types
+; RUN: FileCheck %s < %t.ll
+
+; CHECK: call spir_func <4 x float> @_Z11read_imagef28ocl_image2d_ro.float.sampled11ocl_samplerDv2_f(ptr addrspace(1) %t_in1,
+; CHECK: call spir_func <4 x float> @_Z11read_imagef28ocl_image2d_ro.float.sampledDv2_i(ptr addrspace(1) %t_in2,
+; CHECK: call spir_func void @_Z12write_imagef20ocl_image2d_wo.floatDv2_iDv4_f(ptr addrspace(1) %t_out,
+
+target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
+target triple = "spir-unknown-unknown"
+
+define dso_local spir_kernel void @test(ptr addrspace(1) %t_in1, ptr addrspace(1) %t_in2, ptr addrspace(1) %t_out, <2 x float> %m, <2 x i32> %n, ptr addrspace(2) %s) !clspv.pod_args_impl !7 {
+entry:
+ %call = call spir_func <4 x float> @_Z11read_imagef14ocl_image2d_ro11ocl_samplerDv2_f(ptr addrspace(1) %t_in1, ptr addrspace(2) %s, <2 x float> %m)
+ %call1 = call spir_func <4 x float> @_Z11read_imagef14ocl_image2d_roDv2_i(ptr addrspace(1) %t_in2, <2 x i32> %n)
+ %add = fadd <4 x float> %call, %call1
+ call spir_func void @_Z12write_imagef14ocl_image2d_woDv2_iDv4_f(ptr addrspace(1) %t_out, <2 x i32> %n, <4 x float> %add)
+ ret void
+}
+
+declare spir_func <4 x float> @_Z11read_imagef14ocl_image2d_ro11ocl_samplerDv2_f(ptr addrspace(1), ptr addrspace(2), <2 x float>)
+declare spir_func <4 x float> @_Z11read_imagef14ocl_image2d_roDv2_i(ptr addrspace(1), <2 x i32>)
+declare spir_func void @_Z12write_imagef14ocl_image2d_woDv2_iDv4_f(ptr addrspace(1), <2 x i32>, <4 x float>)
+
+!7 = !{i32 2}
+
diff --git a/test/SpecializeImageTypes/opaque_image2d_int.ll b/test/SpecializeImageTypes/opaque_image2d_int.ll
new file mode 100644
index 0000000..614e121
--- /dev/null
+++ b/test/SpecializeImageTypes/opaque_image2d_int.ll
@@ -0,0 +1,25 @@
+; RUN: clspv-opt %s -o %t.ll -opaque-pointers --passes=specialize-image-types --cl-std=CL2.0
+; RUN: FileCheck %s < %t.ll
+
+; CHECK: call spir_func <4 x i32> @_Z11read_imagei26ocl_image2d_ro.int.sampled11ocl_samplerDv2_f(ptr addrspace(1) %t_in1,
+; CHECK: call spir_func <4 x i32> @_Z11read_imagei18ocl_image2d_rw.intDv2_i(ptr addrspace(1) %t_in2,
+; CHECK: call spir_func void @_Z12write_imagei18ocl_image2d_rw.intDv2_iDv4_i(ptr addrspace(1) %t_out,
+
+target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
+target triple = "spir-unknown-unknown"
+
+define dso_local spir_kernel void @test(ptr addrspace(1) %t_in1, ptr addrspace(1) %t_in2, ptr addrspace(1) %t_out, ptr addrspace(2) %s, <2 x float> %m, <2 x i32> %n) !clspv.pod_args_impl !7 {
+entry:
+ %call = call spir_func <4 x i32> @_Z11read_imagei14ocl_image2d_ro11ocl_samplerDv2_f(ptr addrspace(1) %t_in1, ptr addrspace(2) %s, <2 x float> %m)
+ %call1 = call spir_func <4 x i32> @_Z11read_imagei14ocl_image2d_rwDv2_i(ptr addrspace(1) %t_in2, <2 x i32> %n)
+ %add = add <4 x i32> %call, %call1
+ call spir_func void @_Z12write_imagei14ocl_image2d_woDv2_iDv4_i(ptr addrspace(1) %t_out, <2 x i32> %n, <4 x i32> %add)
+ ret void
+}
+
+declare spir_func <4 x i32> @_Z11read_imagei14ocl_image2d_ro11ocl_samplerDv2_f(ptr addrspace(1), ptr addrspace(2), <2 x float>)
+declare spir_func <4 x i32> @_Z11read_imagei14ocl_image2d_rwDv2_i(ptr addrspace(1), <2 x i32>)
+declare spir_func void @_Z12write_imagei14ocl_image2d_woDv2_iDv4_i(ptr addrspace(1), <2 x i32>, <4 x i32>)
+
+!7 = !{i32 2}
+
diff --git a/test/SpecializeImageTypes/opaque_image2d_uint.ll b/test/SpecializeImageTypes/opaque_image2d_uint.ll
new file mode 100644
index 0000000..c0dc2e3
--- /dev/null
+++ b/test/SpecializeImageTypes/opaque_image2d_uint.ll
@@ -0,0 +1,25 @@
+; RUN: clspv-opt %s -o %t.ll -opaque-pointers --passes=specialize-image-types --cl-std=CL2.0
+; RUN: FileCheck %s < %t.ll
+
+; CHECK: call spir_func <4 x i32> @_Z12read_imageui27ocl_image2d_ro.uint.sampled11ocl_samplerDv2_f(ptr addrspace(1) %t_in1,
+; CHECK: call spir_func <4 x i32> @_Z12read_imageui19ocl_image2d_rw.uintDv2_i(ptr addrspace(1) %t_in2,
+; CHECK: call spir_func void @_Z13write_imageui19ocl_image2d_rw.uintDv2_iDv4_i(ptr addrspace(1) %t_out,
+
+target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
+target triple = "spir-unknown-unknown"
+
+define dso_local spir_kernel void @test(ptr addrspace(1) %t_in1, ptr addrspace(1) %t_in2, ptr addrspace(1) %t_out, ptr addrspace(2) %s, <2 x float> %m, <2 x i32> %n) !clspv.pod_args_impl !7 {
+entry:
+ %call = call spir_func <4 x i32> @_Z12read_imageui14ocl_image2d_ro11ocl_samplerDv2_f(ptr addrspace(1) %t_in1, ptr addrspace(2) %s, <2 x float> %m)
+ %call1 = call spir_func <4 x i32> @_Z12read_imageui14ocl_image2d_rwDv2_i(ptr addrspace(1) %t_in2, <2 x i32> %n)
+ %add = add <4 x i32> %call, %call1
+ call spir_func void @_Z13write_imageui14ocl_image2d_woDv2_iDv4_i(ptr addrspace(1) %t_out, <2 x i32> %n, <4 x i32> %add)
+ ret void
+}
+
+declare spir_func <4 x i32> @_Z12read_imageui14ocl_image2d_ro11ocl_samplerDv2_f(ptr addrspace(1), ptr addrspace(2), <2 x float>)
+declare spir_func <4 x i32> @_Z12read_imageui14ocl_image2d_rwDv2_i(ptr addrspace(1), <2 x i32>)
+declare spir_func void @_Z13write_imageui14ocl_image2d_woDv2_iDv4_i(ptr addrspace(1), <2 x i32>, <4 x i32>)
+
+!7 = !{i32 2}
+
diff --git a/test/SpecializeImageTypes/opaque_image3d_float.ll b/test/SpecializeImageTypes/opaque_image3d_float.ll
new file mode 100644
index 0000000..6ca0249
--- /dev/null
+++ b/test/SpecializeImageTypes/opaque_image3d_float.ll
@@ -0,0 +1,25 @@
+; RUN: clspv-opt %s -o %t.ll -opaque-pointers --passes=specialize-image-types
+; RUN: FileCheck %s < %t.ll
+
+; CHECK: call spir_func <4 x float> @_Z11read_imagef28ocl_image3d_ro.float.sampled11ocl_samplerDv4_f(ptr addrspace(1) %t_in1,
+; CHECK: call spir_func <4 x float> @_Z11read_imagef28ocl_image3d_ro.float.sampledDv4_i(ptr addrspace(1) %t_in2,
+; CHECK: call spir_func void @_Z12write_imagef20ocl_image3d_wo.floatDv4_iDv4_f(ptr addrspace(1) %t_out,
+
+target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
+target triple = "spir-unknown-unknown"
+
+define dso_local spir_kernel void @test(ptr addrspace(1) %t_in1, ptr addrspace(1) %t_in2, ptr addrspace(1) %t_out, <4 x float> %m, <4 x i32> %n, ptr addrspace(2) %s) !clspv.pod_args_impl !7 {
+entry:
+ %call = call spir_func <4 x float> @_Z11read_imagef14ocl_image3d_ro11ocl_samplerDv4_f(ptr addrspace(1) %t_in1, ptr addrspace(2) %s, <4 x float> %m)
+ %call1 = call spir_func <4 x float> @_Z11read_imagef14ocl_image3d_roDv4_i(ptr addrspace(1) %t_in2, <4 x i32> %n)
+ %add = fadd <4 x float> %call, %call1
+ call spir_func void @_Z12write_imagef14ocl_image3d_woDv4_iDv4_f(ptr addrspace(1) %t_out, <4 x i32> %n, <4 x float> %add)
+ ret void
+}
+
+declare spir_func <4 x float> @_Z11read_imagef14ocl_image3d_ro11ocl_samplerDv4_f(ptr addrspace(1), ptr addrspace(2), <4 x float>)
+declare spir_func <4 x float> @_Z11read_imagef14ocl_image3d_roDv4_i(ptr addrspace(1), <4 x i32>)
+declare spir_func void @_Z12write_imagef14ocl_image3d_woDv4_iDv4_f(ptr addrspace(1), <4 x i32>, <4 x float>)
+
+!7 = !{i32 2}
+
diff --git a/test/SpecializeImageTypes/opaque_image3d_int.ll b/test/SpecializeImageTypes/opaque_image3d_int.ll
new file mode 100644
index 0000000..b6c255b
--- /dev/null
+++ b/test/SpecializeImageTypes/opaque_image3d_int.ll
@@ -0,0 +1,25 @@
+; RUN: clspv-opt %s -o %t.ll -opaque-pointers --passes=specialize-image-types --cl-std=CL2.0
+; RUN: FileCheck %s < %t.ll
+
+; CHECK: call spir_func <4 x i32> @_Z11read_imagei26ocl_image3d_ro.int.sampled11ocl_samplerDv4_f(ptr addrspace(1) %t_in1,
+; CHECK: call spir_func <4 x i32> @_Z11read_imagei18ocl_image3d_rw.intDv4_i(ptr addrspace(1) %t_in2,
+; CHECK: call spir_func void @_Z12write_imagei18ocl_image3d_rw.intDv4_iDv4_i(ptr addrspace(1) %t_out,
+
+target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
+target triple = "spir-unknown-unknown"
+
+define dso_local spir_kernel void @test(ptr addrspace(1) %t_in1, ptr addrspace(1) %t_in2, ptr addrspace(1) %t_out, ptr addrspace(2) %s, <4 x float> %m, <4 x i32> %n) !clspv.pod_args_impl !7 {
+entry:
+ %call = call spir_func <4 x i32> @_Z11read_imagei14ocl_image3d_ro11ocl_samplerDv4_f(ptr addrspace(1) %t_in1, ptr addrspace(2) %s, <4 x float> %m)
+ %call1 = call spir_func <4 x i32> @_Z11read_imagei14ocl_image3d_rwDv4_i(ptr addrspace(1) %t_in2, <4 x i32> %n)
+ %add = add <4 x i32> %call, %call1
+ call spir_func void @_Z12write_imagei14ocl_image3d_woDv4_iS0_(ptr addrspace(1) %t_out, <4 x i32> %n, <4 x i32> %add)
+ ret void
+}
+
+declare spir_func <4 x i32> @_Z11read_imagei14ocl_image3d_ro11ocl_samplerDv4_f(ptr addrspace(1), ptr addrspace(2), <4 x float>)
+declare spir_func <4 x i32> @_Z11read_imagei14ocl_image3d_rwDv4_i(ptr addrspace(1), <4 x i32>)
+declare spir_func void @_Z12write_imagei14ocl_image3d_woDv4_iS0_(ptr addrspace(1), <4 x i32>, <4 x i32>)
+
+!7 = !{i32 2}
+
diff --git a/test/SpecializeImageTypes/opaque_image3d_uint.ll b/test/SpecializeImageTypes/opaque_image3d_uint.ll
new file mode 100644
index 0000000..63ae71d
--- /dev/null
+++ b/test/SpecializeImageTypes/opaque_image3d_uint.ll
@@ -0,0 +1,25 @@
+; RUN: clspv-opt %s -o %t.ll -opaque-pointers --passes=specialize-image-types --cl-std=CL2.0
+; RUN: FileCheck %s < %t.ll
+
+; CHECK: call spir_func <4 x i32> @_Z12read_imageui27ocl_image3d_ro.uint.sampled11ocl_samplerDv4_f(ptr addrspace(1) %t_in1,
+; CHECK: call spir_func <4 x i32> @_Z12read_imageui19ocl_image3d_rw.uintDv4_i(ptr addrspace(1) %t_in2,
+; CHECK: call spir_func void @_Z13write_imageui19ocl_image3d_rw.uintDv4_iDv4_i(ptr addrspace(1) %t_out,
+
+target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
+target triple = "spir-unknown-unknown"
+
+define dso_local spir_kernel void @test(ptr addrspace(1) %t_in1, ptr addrspace(1) %t_in2, ptr addrspace(1) %t_out, ptr addrspace(2) %s, <4 x float> %m, <4 x i32> %n) !clspv.pod_args_impl !7 {
+entry:
+ %call = call spir_func <4 x i32> @_Z12read_imageui14ocl_image3d_ro11ocl_samplerDv4_f(ptr addrspace(1) %t_in1, ptr addrspace(2) %s, <4 x float> %m)
+ %call1 = call spir_func <4 x i32> @_Z12read_imageui14ocl_image3d_rwDv4_i(ptr addrspace(1) %t_in2, <4 x i32> %n)
+ %add = add <4 x i32> %call, %call1
+ call spir_func void @_Z13write_imageui14ocl_image3d_woDv4_iS_(ptr addrspace(1) %t_out, <4 x i32> %n, <4 x i32> %add)
+ ret void
+}
+
+declare spir_func <4 x i32> @_Z12read_imageui14ocl_image3d_ro11ocl_samplerDv4_f(ptr addrspace(1), ptr addrspace(2), <4 x float>)
+declare spir_func <4 x i32> @_Z12read_imageui14ocl_image3d_rwDv4_i(ptr addrspace(1), <4 x i32>)
+declare spir_func void @_Z13write_imageui14ocl_image3d_woDv4_iS_(ptr addrspace(1), <4 x i32>, <4 x i32>)
+
+!7 = !{i32 2}
+
diff --git a/test/SpecializeImageTypes/opaque_image_subfunction.ll b/test/SpecializeImageTypes/opaque_image_subfunction.ll
new file mode 100644
index 0000000..a2ac08c
--- /dev/null
+++ b/test/SpecializeImageTypes/opaque_image_subfunction.ll
@@ -0,0 +1,35 @@
+; RUN: clspv-opt %s -o %t.ll -opaque-pointers --passes=specialize-image-types
+; RUN: FileCheck %s < %t.ll
+
+; CHECK: @bar(ptr addrspace(1) %t)
+; CHECK: call spir_func void @_Z12write_imagef20ocl_image2d_wo.floatDv2_iDv4_f(ptr addrspace(1) %t
+; CHECK: @foo(ptr addrspace(1) %t)
+; CHECK: call spir_func void @bar(ptr addrspace(1) %t)
+; CHECK: @test(ptr addrspace(1) %t)
+; CHECK: call spir_func void @foo(ptr addrspace(1) %t)
+
+target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
+target triple = "spir-unknown-unknown"
+
+define dso_local spir_func void @bar(ptr addrspace(1) %t) {
+entry:
+ call spir_func void @_Z12write_imagef14ocl_image2d_woDv2_iDv4_f(ptr addrspace(1) %t, <2 x i32> zeroinitializer, <4 x float> zeroinitializer)
+ ret void
+}
+
+declare spir_func void @_Z12write_imagef14ocl_image2d_woDv2_iDv4_f(ptr addrspace(1), <2 x i32>, <4 x float>) #1
+
+define dso_local spir_func void @foo(ptr addrspace(1) %t) {
+entry:
+ call spir_func void @bar(ptr addrspace(1) %t)
+ ret void
+}
+
+define dso_local spir_kernel void @test(ptr addrspace(1) %t) !clspv.pod_args_impl !7 {
+entry:
+ call spir_func void @foo(ptr addrspace(1) %t)
+ ret void
+}
+
+!7 = !{i32 2}
+
diff --git a/test/SpecializeImageTypes/read_image1d_array_float.ll b/test/SpecializeImageTypes/read_image1d_array_float.ll
index 1506282..2abddbd 100644
--- a/test/SpecializeImageTypes/read_image1d_array_float.ll
+++ b/test/SpecializeImageTypes/read_image1d_array_float.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_array_ro_t.float.sampled]] = type opaque
-; CHECK: declare spir_func <4 x float> @_Z11read_imagef20ocl_image1d_array_ro11ocl_samplerDv2_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x float> @_Z11read_imagef39[[IMAGE]]11ocl_samplerDv2_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_float
-; CHECK: call spir_func <4 x float> @_Z11read_imagef20ocl_image1d_array_ro11ocl_samplerDv2_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x float> @_Z11read_imagef39[[IMAGE]]11ocl_samplerDv2_f(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image1d_array_int.ll b/test/SpecializeImageTypes/read_image1d_array_int.ll
index b248d4a..83742d4 100644
--- a/test/SpecializeImageTypes/read_image1d_array_int.ll
+++ b/test/SpecializeImageTypes/read_image1d_array_int.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_array_ro_t.int.sampled]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z11read_imagei20ocl_image1d_array_ro11ocl_samplerDv2_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z11read_imagei37[[IMAGE]]11ocl_samplerDv2_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_int
-; CHECK: call spir_func <4 x i32> @_Z11read_imagei20ocl_image1d_array_ro11ocl_samplerDv2_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z11read_imagei37[[IMAGE]]11ocl_samplerDv2_f(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image1d_array_uint.ll b/test/SpecializeImageTypes/read_image1d_array_uint.ll
index d528291..cc3e33c 100644
--- a/test/SpecializeImageTypes/read_image1d_array_uint.ll
+++ b/test/SpecializeImageTypes/read_image1d_array_uint.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_array_ro_t.uint.sampled]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z12read_imageui20ocl_image1d_array_ro11ocl_samplerDv2_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z12read_imageui38[[IMAGE]]11ocl_samplerDv2_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_uint
-; CHECK: call spir_func <4 x i32> @_Z12read_imageui20ocl_image1d_array_ro11ocl_samplerDv2_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z12read_imageui38[[IMAGE]]11ocl_samplerDv2_f(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image1d_array_unsampled_float.ll b/test/SpecializeImageTypes/read_image1d_array_unsampled_float.ll
index 519c3b5..b05ec77 100644
--- a/test/SpecializeImageTypes/read_image1d_array_unsampled_float.ll
+++ b/test/SpecializeImageTypes/read_image1d_array_unsampled_float.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_array_ro_t.float.sampled]] = type opaque
-; CHECK: declare spir_func <4 x float> @_Z11read_imagef20ocl_image1d_array_roDv2_i.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <2 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x float> @_Z11read_imagef39[[IMAGE]]Dv2_i(%[[IMAGE]] addrspace(1)*, <2 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_float
-; CHECK: call spir_func <4 x float> @_Z11read_imagef20ocl_image1d_array_roDv2_i.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x float> @_Z11read_imagef39[[IMAGE]]Dv2_i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image1d_array_unsampled_int.ll b/test/SpecializeImageTypes/read_image1d_array_unsampled_int.ll
index 7aaed4d..18e533a 100644
--- a/test/SpecializeImageTypes/read_image1d_array_unsampled_int.ll
+++ b/test/SpecializeImageTypes/read_image1d_array_unsampled_int.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_array_ro_t.int.sampled]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z11read_imagei20ocl_image1d_array_roDv2_i.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <2 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z11read_imagei37[[IMAGE]]Dv2_i(%[[IMAGE]] addrspace(1)*, <2 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_int
-; CHECK: call spir_func <4 x i32> @_Z11read_imagei20ocl_image1d_array_roDv2_i.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z11read_imagei37[[IMAGE]]Dv2_i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image1d_array_unsampled_uint.ll b/test/SpecializeImageTypes/read_image1d_array_unsampled_uint.ll
index bc71a31..b93ba00 100644
--- a/test/SpecializeImageTypes/read_image1d_array_unsampled_uint.ll
+++ b/test/SpecializeImageTypes/read_image1d_array_unsampled_uint.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_array_ro_t.uint.sampled]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z12read_imageui20ocl_image1d_array_roDv2_i.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <2 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z12read_imageui38[[IMAGE]]Dv2_i(%[[IMAGE]] addrspace(1)*, <2 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_uint
-; CHECK: call spir_func <4 x i32> @_Z12read_imageui20ocl_image1d_array_roDv2_i.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z12read_imageui38[[IMAGE]]Dv2_i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image1d_buffer_float.ll b/test/SpecializeImageTypes/read_image1d_buffer_float.ll
index abb6db3..2dcea97 100644
--- a/test/SpecializeImageTypes/read_image1d_buffer_float.ll
+++ b/test/SpecializeImageTypes/read_image1d_buffer_float.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_buffer_ro_t.float.sampled]] = type opaque
-; CHECK: declare spir_func <4 x float> @_Z11read_imagef21ocl_image1d_buffer_roi.[[IMAGE]](%[[IMAGE]] addrspace(1)*, i32) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x float> @_Z11read_imagef40[[IMAGE]]i(%[[IMAGE]] addrspace(1)*, i32) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_float
-; CHECK: call spir_func <4 x float> @_Z11read_imagef21ocl_image1d_buffer_roi.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x float> @_Z11read_imagef40[[IMAGE]]i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image1d_buffer_int.ll b/test/SpecializeImageTypes/read_image1d_buffer_int.ll
index 6c2099e..54e7f22 100644
--- a/test/SpecializeImageTypes/read_image1d_buffer_int.ll
+++ b/test/SpecializeImageTypes/read_image1d_buffer_int.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_buffer_ro_t.int.sampled]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z11read_imagei21ocl_image1d_buffer_roi.[[IMAGE]](%[[IMAGE]] addrspace(1)*, i32) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z11read_imagei38[[IMAGE]]i(%[[IMAGE]] addrspace(1)*, i32) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_int
-; CHECK: call spir_func <4 x i32> @_Z11read_imagei21ocl_image1d_buffer_roi.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z11read_imagei38[[IMAGE]]i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image1d_buffer_uint.ll b/test/SpecializeImageTypes/read_image1d_buffer_uint.ll
index 2cfcf1e..e1fe8ca 100644
--- a/test/SpecializeImageTypes/read_image1d_buffer_uint.ll
+++ b/test/SpecializeImageTypes/read_image1d_buffer_uint.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_buffer_ro_t.uint.sampled]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z12read_imageui21ocl_image1d_buffer_roi.[[IMAGE]](%[[IMAGE]] addrspace(1)*, i32) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z12read_imageui39[[IMAGE]]i(%[[IMAGE]] addrspace(1)*, i32) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_uint
-; CHECK: call spir_func <4 x i32> @_Z12read_imageui21ocl_image1d_buffer_roi.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z12read_imageui39[[IMAGE]]i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image1d_float.ll b/test/SpecializeImageTypes/read_image1d_float.ll
index de10ed6..2a029d5 100644
--- a/test/SpecializeImageTypes/read_image1d_float.ll
+++ b/test/SpecializeImageTypes/read_image1d_float.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_ro_t.float.sampled]] = type opaque
-; CHECK: declare spir_func <4 x float> @_Z11read_imagef14ocl_image1d_ro11ocl_samplerf.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, float) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]11ocl_samplerf(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, float) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_float
-; CHECK: call spir_func <4 x float> @_Z11read_imagef14ocl_image1d_ro11ocl_samplerf.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]11ocl_samplerf(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image1d_int.ll b/test/SpecializeImageTypes/read_image1d_int.ll
index 60d2b24..ce50ad6 100644
--- a/test/SpecializeImageTypes/read_image1d_int.ll
+++ b/test/SpecializeImageTypes/read_image1d_int.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_ro_t.int.sampled]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z11read_imagei14ocl_image1d_ro11ocl_samplerf.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, float) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z11read_imagei31[[IMAGE]]11ocl_samplerf(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, float) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_int
-; CHECK: call spir_func <4 x i32> @_Z11read_imagei14ocl_image1d_ro11ocl_samplerf.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z11read_imagei31[[IMAGE]]11ocl_samplerf(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image1d_uint.ll b/test/SpecializeImageTypes/read_image1d_uint.ll
index 35f907a..4670b34 100644
--- a/test/SpecializeImageTypes/read_image1d_uint.ll
+++ b/test/SpecializeImageTypes/read_image1d_uint.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_ro_t.uint.sampled]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z12read_imageui14ocl_image1d_ro11ocl_samplerf.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, float) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z12read_imageui32[[IMAGE]]11ocl_samplerf(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, float) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_uint
-; CHECK: call spir_func <4 x i32> @_Z12read_imageui14ocl_image1d_ro11ocl_samplerf.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z12read_imageui32[[IMAGE]]11ocl_samplerf(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image1d_unsampled_float.ll b/test/SpecializeImageTypes/read_image1d_unsampled_float.ll
index 595c6ae..13de22a 100644
--- a/test/SpecializeImageTypes/read_image1d_unsampled_float.ll
+++ b/test/SpecializeImageTypes/read_image1d_unsampled_float.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_ro_t.float.sampled]] = type opaque
-; CHECK: declare spir_func <4 x float> @_Z11read_imagef14ocl_image1d_roi.[[IMAGE]](%[[IMAGE]] addrspace(1)*, i32) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]i(%[[IMAGE]] addrspace(1)*, i32) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_float
-; CHECK: call spir_func <4 x float> @_Z11read_imagef14ocl_image1d_roi.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image1d_unsampled_int.ll b/test/SpecializeImageTypes/read_image1d_unsampled_int.ll
index 34473d5..4bdbfb9 100644
--- a/test/SpecializeImageTypes/read_image1d_unsampled_int.ll
+++ b/test/SpecializeImageTypes/read_image1d_unsampled_int.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_ro_t.int.sampled]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z11read_imagei14ocl_image1d_roi.[[IMAGE]](%[[IMAGE]] addrspace(1)*, i32) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z11read_imagei31[[IMAGE]]i(%[[IMAGE]] addrspace(1)*, i32) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_int
-; CHECK: call spir_func <4 x i32> @_Z11read_imagei14ocl_image1d_roi.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z11read_imagei31[[IMAGE]]i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image1d_unsampled_uint.ll b/test/SpecializeImageTypes/read_image1d_unsampled_uint.ll
index 6dec22f..f4f4cdb 100644
--- a/test/SpecializeImageTypes/read_image1d_unsampled_uint.ll
+++ b/test/SpecializeImageTypes/read_image1d_unsampled_uint.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_ro_t.uint.sampled]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z12read_imageui14ocl_image1d_roi.[[IMAGE]](%[[IMAGE]] addrspace(1)*, i32) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z12read_imageui32[[IMAGE]]i(%[[IMAGE]] addrspace(1)*, i32) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_uint
-; CHECK: call spir_func <4 x i32> @_Z12read_imageui14ocl_image1d_roi.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z12read_imageui32[[IMAGE]]i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image2d_array_float.ll b/test/SpecializeImageTypes/read_image2d_array_float.ll
index 27bb97a..bc0047d 100644
--- a/test/SpecializeImageTypes/read_image2d_array_float.ll
+++ b/test/SpecializeImageTypes/read_image2d_array_float.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_array_ro_t.float.sampled]] = type opaque
-; CHECK: declare spir_func <4 x float> @_Z11read_imagef20ocl_image2d_array_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x float> @_Z11read_imagef39[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_float
-; CHECK: call spir_func <4 x float> @_Z11read_imagef20ocl_image2d_array_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x float> @_Z11read_imagef39[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image2d_array_int.ll b/test/SpecializeImageTypes/read_image2d_array_int.ll
index 9439455..dfc5ef2 100644
--- a/test/SpecializeImageTypes/read_image2d_array_int.ll
+++ b/test/SpecializeImageTypes/read_image2d_array_int.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_array_ro_t.int.sampled]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z11read_imagei20ocl_image2d_array_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z11read_imagei37[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_int
-; CHECK: call spir_func <4 x i32> @_Z11read_imagei20ocl_image2d_array_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z11read_imagei37[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image2d_array_uint.ll b/test/SpecializeImageTypes/read_image2d_array_uint.ll
index 7f028f1..4b634ae 100644
--- a/test/SpecializeImageTypes/read_image2d_array_uint.ll
+++ b/test/SpecializeImageTypes/read_image2d_array_uint.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_array_ro_t.uint.sampled]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z12read_imageui20ocl_image2d_array_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z12read_imageui38[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_uint
-; CHECK: call spir_func <4 x i32> @_Z12read_imageui20ocl_image2d_array_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z12read_imageui38[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image2d_array_unsampled_float.ll b/test/SpecializeImageTypes/read_image2d_array_unsampled_float.ll
index 2f74094..0ff79c5 100644
--- a/test/SpecializeImageTypes/read_image2d_array_unsampled_float.ll
+++ b/test/SpecializeImageTypes/read_image2d_array_unsampled_float.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_array_ro_t.float.sampled]] = type opaque
-; CHECK: declare spir_func <4 x float> @_Z11read_imagef20ocl_image2d_array_roDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <4 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x float> @_Z11read_imagef39[[IMAGE]]Dv4_i(%[[IMAGE]] addrspace(1)*, <4 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_float
-; CHECK: call spir_func <4 x float> @_Z11read_imagef20ocl_image2d_array_roDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x float> @_Z11read_imagef39[[IMAGE]]Dv4_i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image2d_array_unsampled_int.ll b/test/SpecializeImageTypes/read_image2d_array_unsampled_int.ll
index b197b36..94c00fd 100644
--- a/test/SpecializeImageTypes/read_image2d_array_unsampled_int.ll
+++ b/test/SpecializeImageTypes/read_image2d_array_unsampled_int.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_array_ro_t.int.sampled]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z11read_imagei20ocl_image2d_array_roDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <4 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z11read_imagei37[[IMAGE]]Dv4_i(%[[IMAGE]] addrspace(1)*, <4 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_int
-; CHECK: call spir_func <4 x i32> @_Z11read_imagei20ocl_image2d_array_roDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z11read_imagei37[[IMAGE]]Dv4_i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image2d_array_unsampled_uint.ll b/test/SpecializeImageTypes/read_image2d_array_unsampled_uint.ll
index 7d78ede..70969cd 100644
--- a/test/SpecializeImageTypes/read_image2d_array_unsampled_uint.ll
+++ b/test/SpecializeImageTypes/read_image2d_array_unsampled_uint.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_array_ro_t.uint.sampled]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z12read_imageui20ocl_image2d_array_roDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <4 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z12read_imageui38[[IMAGE]]Dv4_i(%[[IMAGE]] addrspace(1)*, <4 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_uint
-; CHECK: call spir_func <4 x i32> @_Z12read_imageui20ocl_image2d_array_roDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z12read_imageui38[[IMAGE]]Dv4_i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image2d_float.ll b/test/SpecializeImageTypes/read_image2d_float.ll
index 18dbe1f..3d75529 100644
--- a/test/SpecializeImageTypes/read_image2d_float.ll
+++ b/test/SpecializeImageTypes/read_image2d_float.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_ro_t.float.sampled]] = type opaque
-; CHECK: declare spir_func <4 x float> @_Z11read_imagef14ocl_image2d_ro11ocl_samplerDv2_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]11ocl_samplerDv2_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_float
-; CHECK: call spir_func <4 x float> @_Z11read_imagef14ocl_image2d_ro11ocl_samplerDv2_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]11ocl_samplerDv2_f(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image2d_float_subfunction.ll b/test/SpecializeImageTypes/read_image2d_float_subfunction.ll
index b93eab5..2631250 100644
--- a/test/SpecializeImageTypes/read_image2d_float_subfunction.ll
+++ b/test/SpecializeImageTypes/read_image2d_float_subfunction.ll
@@ -2,11 +2,11 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_ro_t.float.sampled]] = type opaque
-; CHECK: declare spir_func <4 x float> @_Z11read_imagef14ocl_image2d_ro11ocl_samplerDv2_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>)
+; CHECK: declare spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]11ocl_samplerDv2_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>)
; CHECK: define spir_kernel void @read_float
; CHECK: call spir_func <4 x float> @bar(%[[IMAGE]] addrspace(1)* %image, <2 x float> %coord
; CHECK: define spir_func <4 x float> @bar(%[[IMAGE]] addrspace(1)* %image, <2 x float> %coord
-; CHECK: call spir_func <4 x float> @_Z11read_imagef14ocl_image2d_ro11ocl_samplerDv2_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]11ocl_samplerDv2_f(%[[IMAGE]] addrspace(1)* %image
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
target triple = "spir-unknown-unknown"
diff --git a/test/SpecializeImageTypes/read_image2d_float_subfunction_two_kernels.ll b/test/SpecializeImageTypes/read_image2d_float_subfunction_two_kernels.ll
index 2948768..13c09fc 100644
--- a/test/SpecializeImageTypes/read_image2d_float_subfunction_two_kernels.ll
+++ b/test/SpecializeImageTypes/read_image2d_float_subfunction_two_kernels.ll
@@ -2,13 +2,13 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_ro_t.float.sampled]] = type opaque
-; CHECK: declare spir_func <4 x float> @_Z11read_imagef14ocl_image2d_ro11ocl_samplerDv2_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>)
+; CHECK: declare spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]11ocl_samplerDv2_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>)
; CHECK: define spir_kernel void @read_float1
; CHECK: call spir_func <4 x float> @bar(%[[IMAGE]] addrspace(1)* %image, <2 x float> %coord
; CHECK: define spir_kernel void @read_float2
; CHECK: call spir_func <4 x float> @bar(%[[IMAGE]] addrspace(1)* %image, <2 x float> %coord
; CHECK: define spir_func <4 x float> @bar(%[[IMAGE]] addrspace(1)* %image, <2 x float> %coord
-; CHECK: call spir_func <4 x float> @_Z11read_imagef14ocl_image2d_ro11ocl_samplerDv2_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]11ocl_samplerDv2_f(%[[IMAGE]] addrspace(1)* %image
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
target triple = "spir-unknown-unknown"
diff --git a/test/SpecializeImageTypes/read_image2d_int.ll b/test/SpecializeImageTypes/read_image2d_int.ll
index 8936eab..e83f25d 100644
--- a/test/SpecializeImageTypes/read_image2d_int.ll
+++ b/test/SpecializeImageTypes/read_image2d_int.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_ro_t.int.sampled]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z11read_imagei14ocl_image2d_ro11ocl_samplerDv2_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z11read_imagei31[[IMAGE]]11ocl_samplerDv2_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_int
-; CHECK: call spir_func <4 x i32> @_Z11read_imagei14ocl_image2d_ro11ocl_samplerDv2_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z11read_imagei31[[IMAGE]]11ocl_samplerDv2_f(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image2d_uint.ll b/test/SpecializeImageTypes/read_image2d_uint.ll
index 94f54e6..c75d347 100644
--- a/test/SpecializeImageTypes/read_image2d_uint.ll
+++ b/test/SpecializeImageTypes/read_image2d_uint.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_ro_t.uint.sampled]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z12read_imageui14ocl_image2d_ro11ocl_samplerDv2_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z12read_imageui32[[IMAGE]]11ocl_samplerDv2_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <2 x float>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_uint
-; CHECK: call spir_func <4 x i32> @_Z12read_imageui14ocl_image2d_ro11ocl_samplerDv2_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z12read_imageui32[[IMAGE]]11ocl_samplerDv2_f(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image2d_unsampled_float.ll b/test/SpecializeImageTypes/read_image2d_unsampled_float.ll
index a6e3157..4f42772 100644
--- a/test/SpecializeImageTypes/read_image2d_unsampled_float.ll
+++ b/test/SpecializeImageTypes/read_image2d_unsampled_float.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_ro_t.float.sampled]] = type opaque
-; CHECK: declare spir_func <4 x float> @_Z11read_imagef14ocl_image2d_roDv2_i.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <2 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]Dv2_i(%[[IMAGE]] addrspace(1)*, <2 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_float
-; CHECK: call spir_func <4 x float> @_Z11read_imagef14ocl_image2d_roDv2_i.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]Dv2_i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image2d_unsampled_int.ll b/test/SpecializeImageTypes/read_image2d_unsampled_int.ll
index 2ed70ab..3d48670 100644
--- a/test/SpecializeImageTypes/read_image2d_unsampled_int.ll
+++ b/test/SpecializeImageTypes/read_image2d_unsampled_int.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_ro_t.int.sampled]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z11read_imagei14ocl_image2d_roDv2_i.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <2 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z11read_imagei31[[IMAGE]]Dv2_i(%[[IMAGE]] addrspace(1)*, <2 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_int
-; CHECK: call spir_func <4 x i32> @_Z11read_imagei14ocl_image2d_roDv2_i.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z11read_imagei31[[IMAGE]]Dv2_i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image2d_unsampled_uint.ll b/test/SpecializeImageTypes/read_image2d_unsampled_uint.ll
index 25a0546..c3b5608 100644
--- a/test/SpecializeImageTypes/read_image2d_unsampled_uint.ll
+++ b/test/SpecializeImageTypes/read_image2d_unsampled_uint.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_ro_t.uint.sampled]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z12read_imageui14ocl_image2d_roDv2_i.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <2 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z12read_imageui32[[IMAGE]]Dv2_i(%[[IMAGE]] addrspace(1)*, <2 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_uint
-; CHECK: call spir_func <4 x i32> @_Z12read_imageui14ocl_image2d_roDv2_i.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z12read_imageui32[[IMAGE]]Dv2_i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image3d_float.ll b/test/SpecializeImageTypes/read_image3d_float.ll
index ed9b62d..4ff5e3b 100644
--- a/test/SpecializeImageTypes/read_image3d_float.ll
+++ b/test/SpecializeImageTypes/read_image3d_float.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image3d_ro_t.float.sampled]] = type opaque
-; CHECK: declare spir_func <4 x float> @_Z11read_imagef14ocl_image3d_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_float
-; CHECK: call spir_func <4 x float> @_Z11read_imagef14ocl_image3d_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image3d_int.ll b/test/SpecializeImageTypes/read_image3d_int.ll
index 52ac6bc..9e26dba 100644
--- a/test/SpecializeImageTypes/read_image3d_int.ll
+++ b/test/SpecializeImageTypes/read_image3d_int.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image3d_ro_t.int.sampled]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z11read_imagei14ocl_image3d_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z11read_imagei31[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_int
-; CHECK: call spir_func <4 x i32> @_Z11read_imagei14ocl_image3d_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z11read_imagei31[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image3d_uint.ll b/test/SpecializeImageTypes/read_image3d_uint.ll
index c0deec7..1f09793 100644
--- a/test/SpecializeImageTypes/read_image3d_uint.ll
+++ b/test/SpecializeImageTypes/read_image3d_uint.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image3d_ro_t.uint.sampled]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z12read_imageui14ocl_image3d_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z12read_imageui32[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)*, %opencl.sampler_t addrspace(2)*, <4 x float>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_uint
-; CHECK: call spir_func <4 x i32> @_Z12read_imageui14ocl_image3d_ro11ocl_samplerDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z12read_imageui32[[IMAGE]]11ocl_samplerDv4_f(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image3d_unsampled_float.ll b/test/SpecializeImageTypes/read_image3d_unsampled_float.ll
index 5e6bed6..07a0111 100644
--- a/test/SpecializeImageTypes/read_image3d_unsampled_float.ll
+++ b/test/SpecializeImageTypes/read_image3d_unsampled_float.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image3d_ro_t.float.sampled]] = type opaque
-; CHECK: declare spir_func <4 x float> @_Z11read_imagef14ocl_image3d_roDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <4 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]Dv4_i(%[[IMAGE]] addrspace(1)*, <4 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_float
-; CHECK: call spir_func <4 x float> @_Z11read_imagef14ocl_image3d_roDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x float> @_Z11read_imagef33[[IMAGE]]Dv4_i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image3d_unsampled_int.ll b/test/SpecializeImageTypes/read_image3d_unsampled_int.ll
index 7347368..2e8d359 100644
--- a/test/SpecializeImageTypes/read_image3d_unsampled_int.ll
+++ b/test/SpecializeImageTypes/read_image3d_unsampled_int.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image3d_ro_t.int.sampled]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z11read_imagei14ocl_image3d_roDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <4 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z11read_imagei31[[IMAGE]]Dv4_i(%[[IMAGE]] addrspace(1)*, <4 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_int
-; CHECK: call spir_func <4 x i32> @_Z11read_imagei14ocl_image3d_roDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z11read_imagei31[[IMAGE]]Dv4_i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/read_image3d_unsampled_uint.ll b/test/SpecializeImageTypes/read_image3d_unsampled_uint.ll
index 9dba343..bb78d87 100644
--- a/test/SpecializeImageTypes/read_image3d_unsampled_uint.ll
+++ b/test/SpecializeImageTypes/read_image3d_unsampled_uint.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image3d_ro_t.uint.sampled]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z12read_imageui14ocl_image3d_roDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <4 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z12read_imageui32[[IMAGE]]Dv4_i(%[[IMAGE]] addrspace(1)*, <4 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_uint
-; CHECK: call spir_func <4 x i32> @_Z12read_imageui14ocl_image3d_roDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z12read_imageui32[[IMAGE]]Dv4_i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/readwrite_image2d_read_float.ll b/test/SpecializeImageTypes/readwrite_image2d_read_float.ll
index 08185ca..16be8b7 100644
--- a/test/SpecializeImageTypes/readwrite_image2d_read_float.ll
+++ b/test/SpecializeImageTypes/readwrite_image2d_read_float.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_rw_t.float]] = type opaque
-; CHECK: declare spir_func <4 x float> @_Z11read_imagef14ocl_image2d_rwDv2_i.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <2 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x float> @_Z11read_imagef25[[IMAGE]]Dv2_i(%[[IMAGE]] addrspace(1)*, <2 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_float
-; CHECK: call spir_func <4 x float> @_Z11read_imagef14ocl_image2d_rwDv2_i.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x float> @_Z11read_imagef25[[IMAGE]]Dv2_i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/readwrite_image2d_read_int.ll b/test/SpecializeImageTypes/readwrite_image2d_read_int.ll
index 5391934..0c94a10 100644
--- a/test/SpecializeImageTypes/readwrite_image2d_read_int.ll
+++ b/test/SpecializeImageTypes/readwrite_image2d_read_int.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_rw_t.int]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z11read_imagei14ocl_image2d_rwDv2_i.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <2 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z11read_imagei23[[IMAGE]]Dv2_i(%[[IMAGE]] addrspace(1)*, <2 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_int
-; CHECK: call spir_func <4 x i32> @_Z11read_imagei14ocl_image2d_rwDv2_i.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z11read_imagei23[[IMAGE]]Dv2_i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/readwrite_image2d_read_uint.ll b/test/SpecializeImageTypes/readwrite_image2d_read_uint.ll
index daf1b74..1a41eda 100644
--- a/test/SpecializeImageTypes/readwrite_image2d_read_uint.ll
+++ b/test/SpecializeImageTypes/readwrite_image2d_read_uint.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_rw_t.uint]] = type opaque
-; CHECK: declare spir_func <4 x i32> @_Z12read_imageui14ocl_image2d_rwDv2_i.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <2 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func <4 x i32> @_Z12read_imageui24[[IMAGE]]Dv2_i(%[[IMAGE]] addrspace(1)*, <2 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @read_uint
-; CHECK: call spir_func <4 x i32> @_Z12read_imageui14ocl_image2d_rwDv2_i.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func <4 x i32> @_Z12read_imageui24[[IMAGE]]Dv2_i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/readwrite_image2d_write_float.ll b/test/SpecializeImageTypes/readwrite_image2d_write_float.ll
index d877235..6d2de25 100644
--- a/test/SpecializeImageTypes/readwrite_image2d_write_float.ll
+++ b/test/SpecializeImageTypes/readwrite_image2d_write_float.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_rw_t.float]] = type opaque
-; CHECK: declare spir_func void @_Z12write_imagef14ocl_image2d_rwDv2_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x float>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z12write_imagef25[[IMAGE]]Dv2_iDv4_f(%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x float>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @write_float
-; CHECK: call spir_func void @_Z12write_imagef14ocl_image2d_rwDv2_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z12write_imagef25[[IMAGE]]Dv2_iDv4_f(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/readwrite_image2d_write_int.ll b/test/SpecializeImageTypes/readwrite_image2d_write_int.ll
index b016914..6c3932e 100644
--- a/test/SpecializeImageTypes/readwrite_image2d_write_int.ll
+++ b/test/SpecializeImageTypes/readwrite_image2d_write_int.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_rw_t.int]] = type opaque
-; CHECK: declare spir_func void @_Z12write_imagei14ocl_image2d_rwDv2_iDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z12write_imagei23[[IMAGE]]Dv2_iDv4_i(%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @write_int
-; CHECK: call spir_func void @_Z12write_imagei14ocl_image2d_rwDv2_iDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z12write_imagei23[[IMAGE]]Dv2_iDv4_i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/readwrite_image2d_write_uint.ll b/test/SpecializeImageTypes/readwrite_image2d_write_uint.ll
index 5915240..ee4e5fc 100644
--- a/test/SpecializeImageTypes/readwrite_image2d_write_uint.ll
+++ b/test/SpecializeImageTypes/readwrite_image2d_write_uint.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_rw_t.uint]] = type opaque
-; CHECK: declare spir_func void @_Z13write_imageui14ocl_image2d_rwDv2_iDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z13write_imageui24[[IMAGE]]Dv2_iDv4_i(%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @write_uint
-; CHECK: call spir_func void @_Z13write_imageui14ocl_image2d_rwDv2_iDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z13write_imageui24[[IMAGE]]Dv2_iDv4_i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/write_image1d_array_float.ll b/test/SpecializeImageTypes/write_image1d_array_float.ll
index 506196b..7507b28 100644
--- a/test/SpecializeImageTypes/write_image1d_array_float.ll
+++ b/test/SpecializeImageTypes/write_image1d_array_float.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_array_wo_t.float]] = type opaque
-; CHECK: declare spir_func void @_Z12write_imagef20ocl_image1d_array_woDv2_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x float>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z12write_imagef31[[IMAGE]]Dv2_iDv4_f(%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x float>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @write_float
-; CHECK: call spir_func void @_Z12write_imagef20ocl_image1d_array_woDv2_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z12write_imagef31[[IMAGE]]Dv2_iDv4_f(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/write_image1d_array_int.ll b/test/SpecializeImageTypes/write_image1d_array_int.ll
index 9fe4c5b..d7decd6 100644
--- a/test/SpecializeImageTypes/write_image1d_array_int.ll
+++ b/test/SpecializeImageTypes/write_image1d_array_int.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_array_wo_t.int]] = type opaque
-; CHECK: declare spir_func void @_Z12write_imagei20ocl_image1d_array_woDv2_iDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z12write_imagei29[[IMAGE]]Dv2_iDv4_i(%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @write_int
-; CHECK: call spir_func void @_Z12write_imagei20ocl_image1d_array_woDv2_iDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z12write_imagei29[[IMAGE]]Dv2_iDv4_i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/write_image1d_array_uint.ll b/test/SpecializeImageTypes/write_image1d_array_uint.ll
index 84f0455..0fb1ac5 100644
--- a/test/SpecializeImageTypes/write_image1d_array_uint.ll
+++ b/test/SpecializeImageTypes/write_image1d_array_uint.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_array_wo_t.uint]] = type opaque
-; CHECK: declare spir_func void @_Z13write_imageui20ocl_image1d_array_woDv2_iDv4_j.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z13write_imageui30[[IMAGE]]Dv2_iDv4_j(%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @write_uint
-; CHECK: call spir_func void @_Z13write_imageui20ocl_image1d_array_woDv2_iDv4_j.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z13write_imageui30[[IMAGE]]Dv2_iDv4_j(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/write_image1d_buffer_float.ll b/test/SpecializeImageTypes/write_image1d_buffer_float.ll
index b5dddb8..3f9419f 100644
--- a/test/SpecializeImageTypes/write_image1d_buffer_float.ll
+++ b/test/SpecializeImageTypes/write_image1d_buffer_float.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_buffer_wo_t.float]] = type opaque
-; CHECK: declare spir_func void @_Z12write_imagef21ocl_image1d_buffer_woiDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, i32, <4 x float>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z12write_imagef32[[IMAGE]]iDv4_f(%[[IMAGE]] addrspace(1)*, i32, <4 x float>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @write_float
-; CHECK: call spir_func void @_Z12write_imagef21ocl_image1d_buffer_woiDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z12write_imagef32[[IMAGE]]iDv4_f(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/write_image1d_buffer_int.ll b/test/SpecializeImageTypes/write_image1d_buffer_int.ll
index 8381e5b..f00412b 100644
--- a/test/SpecializeImageTypes/write_image1d_buffer_int.ll
+++ b/test/SpecializeImageTypes/write_image1d_buffer_int.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_buffer_wo_t.int]] = type opaque
-; CHECK: declare spir_func void @_Z12write_imagei21ocl_image1d_buffer_woiDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)*, i32, <4 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z12write_imagei30[[IMAGE]]iDv4_i(%[[IMAGE]] addrspace(1)*, i32, <4 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @write_int
-; CHECK: call spir_func void @_Z12write_imagei21ocl_image1d_buffer_woiDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z12write_imagei30[[IMAGE]]iDv4_i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/write_image1d_buffer_uint.ll b/test/SpecializeImageTypes/write_image1d_buffer_uint.ll
index 52f7fa0..d180dcd 100644
--- a/test/SpecializeImageTypes/write_image1d_buffer_uint.ll
+++ b/test/SpecializeImageTypes/write_image1d_buffer_uint.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_buffer_wo_t.uint]] = type opaque
-; CHECK: declare spir_func void @_Z13write_imageui21ocl_image1d_buffer_woiDv4_j.[[IMAGE]](%[[IMAGE]] addrspace(1)*, i32, <4 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z13write_imageui31[[IMAGE]]iDv4_j(%[[IMAGE]] addrspace(1)*, i32, <4 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @write_uint
-; CHECK: call spir_func void @_Z13write_imageui21ocl_image1d_buffer_woiDv4_j.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z13write_imageui31[[IMAGE]]iDv4_j(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/write_image1d_float.ll b/test/SpecializeImageTypes/write_image1d_float.ll
index 57f0ffb..2093bcf 100644
--- a/test/SpecializeImageTypes/write_image1d_float.ll
+++ b/test/SpecializeImageTypes/write_image1d_float.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_wo_t.float]] = type opaque
-; CHECK: declare spir_func void @_Z12write_imagef14ocl_image1d_woiDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, i32, <4 x float>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z12write_imagef25[[IMAGE]]iDv4_f(%[[IMAGE]] addrspace(1)*, i32, <4 x float>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @write_float
-; CHECK: call spir_func void @_Z12write_imagef14ocl_image1d_woiDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z12write_imagef25[[IMAGE]]iDv4_f(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/write_image1d_int.ll b/test/SpecializeImageTypes/write_image1d_int.ll
index 33ba875..b1870f3 100644
--- a/test/SpecializeImageTypes/write_image1d_int.ll
+++ b/test/SpecializeImageTypes/write_image1d_int.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_wo_t.int]] = type opaque
-; CHECK: declare spir_func void @_Z12write_imagei14ocl_image1d_woiDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)*, i32, <4 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z12write_imagei23[[IMAGE]]iDv4_i(%[[IMAGE]] addrspace(1)*, i32, <4 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @write_int
-; CHECK: call spir_func void @_Z12write_imagei14ocl_image1d_woiDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z12write_imagei23[[IMAGE]]iDv4_i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/write_image1d_uint.ll b/test/SpecializeImageTypes/write_image1d_uint.ll
index 7121c84..d01c57c 100644
--- a/test/SpecializeImageTypes/write_image1d_uint.ll
+++ b/test/SpecializeImageTypes/write_image1d_uint.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image1d_wo_t.uint]] = type opaque
-; CHECK: declare spir_func void @_Z13write_imageui14ocl_image1d_woiDv4_j.[[IMAGE]](%[[IMAGE]] addrspace(1)*, i32, <4 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z13write_imageui24[[IMAGE]]iDv4_j(%[[IMAGE]] addrspace(1)*, i32, <4 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @write_uint
-; CHECK: call spir_func void @_Z13write_imageui14ocl_image1d_woiDv4_j.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z13write_imageui24[[IMAGE]]iDv4_j(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/write_image2d_array_float.ll b/test/SpecializeImageTypes/write_image2d_array_float.ll
index bbc221f..b2fe094 100644
--- a/test/SpecializeImageTypes/write_image2d_array_float.ll
+++ b/test/SpecializeImageTypes/write_image2d_array_float.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_array_wo_t.float]] = type opaque
-; CHECK: declare spir_func void @_Z12write_imagef20ocl_image2d_array_woDv4_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x float>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z12write_imagef31[[IMAGE]]Dv4_iDv4_f(%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x float>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @write_float
-; CHECK: call spir_func void @_Z12write_imagef20ocl_image2d_array_woDv4_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z12write_imagef31[[IMAGE]]Dv4_iDv4_f(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/write_image2d_array_int.ll b/test/SpecializeImageTypes/write_image2d_array_int.ll
index 39b71eb..9cdc570 100644
--- a/test/SpecializeImageTypes/write_image2d_array_int.ll
+++ b/test/SpecializeImageTypes/write_image2d_array_int.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_array_wo_t.int]] = type opaque
-; CHECK: declare spir_func void @_Z12write_imagei20ocl_image2d_array_woDv4_iS0_.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z12write_imagei29[[IMAGE]]Dv4_iDv4_i(%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @write_int
-; CHECK: call spir_func void @_Z12write_imagei20ocl_image2d_array_woDv4_iS0_.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z12write_imagei29[[IMAGE]]Dv4_iDv4_i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/write_image2d_array_uint.ll b/test/SpecializeImageTypes/write_image2d_array_uint.ll
index c6e334d..69e5ab7 100644
--- a/test/SpecializeImageTypes/write_image2d_array_uint.ll
+++ b/test/SpecializeImageTypes/write_image2d_array_uint.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_array_wo_t.uint]] = type opaque
-; CHECK: declare spir_func void @_Z13write_imageui20ocl_image2d_array_woDv4_iDv4_j.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z13write_imageui30[[IMAGE]]Dv4_iDv4_j(%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @write_uint
-; CHECK: call spir_func void @_Z13write_imageui20ocl_image2d_array_woDv4_iDv4_j.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z13write_imageui30[[IMAGE]]Dv4_iDv4_j(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/write_image2d_float.ll b/test/SpecializeImageTypes/write_image2d_float.ll
index 59b096f..e0d6ca5 100644
--- a/test/SpecializeImageTypes/write_image2d_float.ll
+++ b/test/SpecializeImageTypes/write_image2d_float.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_wo_t.float]] = type opaque
-; CHECK: declare spir_func void @_Z12write_imagef14ocl_image2d_woDv2_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x float>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z12write_imagef25[[IMAGE]]Dv2_iDv4_f(%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x float>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @write_float
-; CHECK: call spir_func void @_Z12write_imagef14ocl_image2d_woDv2_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z12write_imagef25[[IMAGE]]Dv2_iDv4_f(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/write_image2d_int.ll b/test/SpecializeImageTypes/write_image2d_int.ll
index b2ba36a..239c6cd 100644
--- a/test/SpecializeImageTypes/write_image2d_int.ll
+++ b/test/SpecializeImageTypes/write_image2d_int.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_wo_t.int]] = type opaque
-; CHECK: declare spir_func void @_Z12write_imagei14ocl_image2d_woDv2_iDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z12write_imagei23[[IMAGE]]Dv2_iDv4_i(%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @write_int
-; CHECK: call spir_func void @_Z12write_imagei14ocl_image2d_woDv2_iDv4_i.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z12write_imagei23[[IMAGE]]Dv2_iDv4_i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/write_image2d_uint.ll b/test/SpecializeImageTypes/write_image2d_uint.ll
index 502e82e..26f491d 100644
--- a/test/SpecializeImageTypes/write_image2d_uint.ll
+++ b/test/SpecializeImageTypes/write_image2d_uint.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_wo_t.uint]] = type opaque
-; CHECK: declare spir_func void @_Z13write_imageui14ocl_image2d_woDv2_iDv4_j.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z13write_imageui24[[IMAGE]]Dv2_iDv4_j(%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @write_uint
-; CHECK: call spir_func void @_Z13write_imageui14ocl_image2d_woDv2_iDv4_j.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z13write_imageui24[[IMAGE]]Dv2_iDv4_j(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/write_image3d_float.ll b/test/SpecializeImageTypes/write_image3d_float.ll
index 3bff66c..a46d8c5 100644
--- a/test/SpecializeImageTypes/write_image3d_float.ll
+++ b/test/SpecializeImageTypes/write_image3d_float.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image3d_wo_t.float]] = type opaque
-; CHECK: declare spir_func void @_Z12write_imagef14ocl_image3d_woDv4_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x float>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z12write_imagef25[[IMAGE]]Dv4_iDv4_f(%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x float>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @write_float
-; CHECK: call spir_func void @_Z12write_imagef14ocl_image3d_woDv4_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z12write_imagef25[[IMAGE]]Dv4_iDv4_f(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/write_image3d_int.ll b/test/SpecializeImageTypes/write_image3d_int.ll
index 31a431a..4c5dc90 100644
--- a/test/SpecializeImageTypes/write_image3d_int.ll
+++ b/test/SpecializeImageTypes/write_image3d_int.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image3d_wo_t.int]] = type opaque
-; CHECK: declare spir_func void @_Z12write_imagei14ocl_image3d_woDv4_iS0_.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z12write_imagei23[[IMAGE]]Dv4_iDv4_i(%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @write_int
-; CHECK: call spir_func void @_Z12write_imagei14ocl_image3d_woDv4_iS0_.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z12write_imagei23[[IMAGE]]Dv4_iDv4_i(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/write_image3d_uint.ll b/test/SpecializeImageTypes/write_image3d_uint.ll
index 489a54e..caa9d6f 100644
--- a/test/SpecializeImageTypes/write_image3d_uint.ll
+++ b/test/SpecializeImageTypes/write_image3d_uint.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image3d_wo_t.uint]] = type opaque
-; CHECK: declare spir_func void @_Z13write_imageui14ocl_image3d_woDv4_iDv4_j.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x i32>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z13write_imageui24[[IMAGE]]Dv4_iDv4_j(%[[IMAGE]] addrspace(1)*, <4 x i32>, <4 x i32>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @write_uint
-; CHECK: call spir_func void @_Z13write_imageui14ocl_image3d_woDv4_iDv4_j.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z13write_imageui24[[IMAGE]]Dv4_iDv4_j(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/SpecializeImageTypes/write_only_image_as_read_write_image_in_cl20.ll b/test/SpecializeImageTypes/write_only_image_as_read_write_image_in_cl20.ll
index 547cfba..58201b3 100644
--- a/test/SpecializeImageTypes/write_only_image_as_read_write_image_in_cl20.ll
+++ b/test/SpecializeImageTypes/write_only_image_as_read_write_image_in_cl20.ll
@@ -2,9 +2,9 @@
; RUN: FileCheck %s < %t
; CHECK: %[[IMAGE:opencl.image2d_rw_t.float]] = type opaque
-; CHECK: declare spir_func void @_Z12write_imagef14ocl_image2d_woDv2_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x float>) [[ATTRS:#[0-9]+]]
+; CHECK: declare spir_func void @_Z12write_imagef25[[IMAGE]]Dv2_iDv4_f(%[[IMAGE]] addrspace(1)*, <2 x i32>, <4 x float>) [[ATTRS:#[0-9]+]]
; CHECK: define spir_kernel void @write_float
-; CHECK: call spir_func void @_Z12write_imagef14ocl_image2d_woDv2_iDv4_f.[[IMAGE]](%[[IMAGE]] addrspace(1)* %image
+; CHECK: call spir_func void @_Z12write_imagef25[[IMAGE]]Dv2_iDv4_f(%[[IMAGE]] addrspace(1)* %image
; CHECK: attributes [[ATTRS]] = { convergent nounwind }
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
diff --git a/test/longvector-metadata.ll b/test/longvector-metadata.ll
index aff17ec..1d3af79 100644
--- a/test/longvector-metadata.ll
+++ b/test/longvector-metadata.ll
@@ -1,6 +1,6 @@
; TODO(#816): remove opaque pointers disable
; RUN: clspv-opt --passes=long-vector-lowering %s -opaque-pointers=0
-; RUN: clspv -x ir %s -o %t.spv
+; RUN: clspv -x ir %s -o %t.spv --opaque-pointers=0
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
target triple = "spir-unknown-unknown"