Skip to content

Commit 92a4744

Browse files
committed
When printing types for the OpenCL kernel metadata, use the PrintingPolicy.
This allows 'half' to be printed as 'half' and not as '__fp16'. Patch by Fraser Cormack! llvm-svn: 205624
1 parent 7dc3c0f commit 92a4744

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

clang/lib/CodeGen/CodeGenFunction.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,8 @@ static void GenOpenCLArgMetadata(const FunctionDecl *FD, llvm::Function *Fn,
339339
// Each MDNode is a list in the form of "key", N number of values which is
340340
// the same number of values as their are kernel arguments.
341341

342+
const PrintingPolicy &Policy = ASTCtx.getPrintingPolicy();
343+
342344
// MDNode for the kernel argument address space qualifiers.
343345
SmallVector<llvm::Value*, 8> addressQuals;
344346
addressQuals.push_back(llvm::MDString::get(Context, "kernel_arg_addr_space"));
@@ -372,7 +374,8 @@ static void GenOpenCLArgMetadata(const FunctionDecl *FD, llvm::Function *Fn,
372374
pointeeTy.getAddressSpace())));
373375

374376
// Get argument type name.
375-
std::string typeName = pointeeTy.getUnqualifiedType().getAsString() + "*";
377+
std::string typeName =
378+
pointeeTy.getUnqualifiedType().getAsString(Policy) + "*";
376379

377380
// Turn "unsigned type" to "utype"
378381
std::string::size_type pos = typeName.find("unsigned");
@@ -398,7 +401,7 @@ static void GenOpenCLArgMetadata(const FunctionDecl *FD, llvm::Function *Fn,
398401
addressQuals.push_back(Builder.getInt32(AddrSpc));
399402

400403
// Get argument type name.
401-
std::string typeName = ty.getUnqualifiedType().getAsString();
404+
std::string typeName = ty.getUnqualifiedType().getAsString(Policy);
402405

403406
// Turn "unsigned type" to "utype"
404407
std::string::size_type pos = typeName.find("unsigned");

clang/test/CodeGenOpenCL/kernel-arg-info.cl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,11 @@ kernel void foo2(read_only image1d_t img1, image2d_t img2, write_only image2d_ar
1818
// CHECK: metadata !{metadata !"kernel_arg_type", metadata !"image1d_t", metadata !"image2d_t", metadata !"image2d_array_t"}
1919
// CHECK: metadata !{metadata !"kernel_arg_type_qual", metadata !"", metadata !"", metadata !""}
2020
// CHECK: metadata !{metadata !"kernel_arg_name", metadata !"img1", metadata !"img2", metadata !"img3"}
21+
22+
kernel void foo3(__global half * X) {
23+
}
24+
// CHECK: metadata !{metadata !"kernel_arg_addr_space", i32 1}
25+
// CHECK: metadata !{metadata !"kernel_arg_access_qual", metadata !"none"}
26+
// CHECK: metadata !{metadata !"kernel_arg_type", metadata !"half*"}
27+
// CHECK: metadata !{metadata !"kernel_arg_type_qual", metadata !""}
28+
// CHECK: metadata !{metadata !"kernel_arg_name", metadata !"X"}

0 commit comments

Comments
 (0)