llvm-project/clang/test/CodeGenOpenCL
Yaxun Liu 8f66b4b44a Add support for non-zero null pointer for C and OpenCL
In amdgcn target, null pointers in global, constant, and generic address space take value 0 but null pointers in private and local address space take value -1. Currently LLVM assumes all null pointers take value 0, which results in incorrectly translated IR. To workaround this issue, instead of emit null pointers in local and private address space, a null pointer in generic address space is emitted and casted to local and private address space.

Tentative definition of global variables with non-zero initializer will have weak linkage instead of common linkage since common linkage requires zero initializer and does not have explicit section to hold the non-zero value.

Virtual member functions getNullPointer and performAddrSpaceCast are added to TargetCodeGenInfo which by default returns ConstantPointerNull and emitting addrspacecast instruction. A virtual member function getNullPointerValue is added to TargetInfo which by default returns 0. Each target can override these virtual functions to get target specific null pointer and the null pointer value for specific address space, and perform specific translations for addrspacecast.

Wrapper functions getNullPointer is added to CodegenModule and getTargetNullPointerValue is added to ASTContext to facilitate getting the target specific null pointers and their values.

This change has no effect on other targets except amdgcn target. Other targets can provide support of non-zero null pointer in a similar way.

This change only provides support for non-zero null pointer for C and OpenCL. Supporting for other languages will be added later incrementally.

Differential Revision: https://reviews.llvm.org/D26196

llvm-svn: 289252
2016-12-09 19:01:11 +00:00
..
2011-04-15-vec-init-from-vec.cl
addr-space-struct-arg.cl Prune CRLF. 2014-10-27 12:37:26 +00:00
address-space-constant-initializers.cl Test case updates for explicit type parameter to the gep operator 2015-03-13 18:21:46 +00:00
address-spaces-conversions.cl [OpenCL] Fix bug in mergeTypes which causes equivalent types treated as different. 2016-04-28 17:34:57 +00:00
address-spaces-mangling.cl [OpenCL] Added a LIT test for ensuring address space mangling is done the same both in OpenCL1.2 and OpenCL2.0. 2016-12-07 08:43:49 +00:00
address-spaces.cl [OpenCL 2.0] Apply default address space (AS). 2015-11-23 11:14:44 +00:00
amdgcn-flat-scratch-name.cl AMDGPU: Fix inconsistent register name for flat_scratch 2016-02-27 09:06:22 +00:00
amdgpu-abi-struct-coerce.cl AMDGPU: Handle structs directly in AMDGPUABIInfo 2016-08-22 19:25:59 +00:00
amdgpu-attrs.cl [AMDGPU] Expose flat work group size, register and wave control attributes 2016-09-26 01:02:57 +00:00
amdgpu-call-kernel.cl AMDGPU: Set amdgpu_kernel calling convention for OpenCL kernels. 2016-06-30 09:06:33 +00:00
amdgpu-calling-conv.cl AMDGPU: Set amdgpu_kernel calling convention for OpenCL kernels. 2016-06-30 09:06:33 +00:00
amdgpu-nullptr.cl Add support for non-zero null pointer for C and OpenCL 2016-12-09 19:01:11 +00:00
as_type.cl [OpenCL] Fix bug in __builtin_astype causing invalid LLVM cast instructions 2016-10-03 14:41:50 +00:00
bool_cast.cl [Bugfix] Fix ICE on constexpr vector splat. 2016-01-13 01:52:39 +00:00
builtins-amdgcn-vi.cl [AMDGPU] Change frexp.exp builtin to return i16 for f16 input 2016-11-18 22:31:51 +00:00
builtins-amdgcn.cl [AMDGPU] Change frexp.exp builtin to return i16 for f16 input 2016-11-18 22:31:51 +00:00
builtins-generic-amdgcn.cl AMDGPU: Add test for generic builtin behavior 2016-04-14 22:34:39 +00:00
builtins-r600.cl AMDGPU: Remove legacy ldexp builtin 2016-07-15 21:33:06 +00:00
cast_image.cl [OpenCL] Add the lit test for image size which was omitted by r277647. 2016-08-04 19:35:17 +00:00
cl-strict-aliasing.cl Revert r229409: "Hack to try deleting file from build bots" 2015-02-16 18:03:59 +00:00
cl20-device-side-enqueue.cl [OpenCL] Fix for integer parameters of enqueue_kernel 2016-11-14 17:39:58 +00:00
const-str-array-decay.cl Test case updates for explicit type parameter to the gep operator 2015-03-13 18:21:46 +00:00
constant-addr-space-globals.cl [OpenCL] Prevent generation of globals in non-constant AS for OpenCL. 2016-11-29 17:01:19 +00:00
convergent.cl clang/test/CodeGenOpenCL/convergent.cl: Satisfy -Asserts with "opt -instnamer". 2016-11-01 20:08:17 +00:00
denorms-are-zero.cl AMDGPU: Fix target options fp32/64-denormals 2016-09-13 17:37:09 +00:00
event_t.cl [OpenCL] Allow explicit cast of 0 to event_t. 2016-05-20 17:18:16 +00:00
ext-vector-shuffle.cl
fpmath.cl Revert "Improve handling of floating point literals in OpenCL to only use double precision if the target supports fp64." 2016-11-14 12:19:18 +00:00
half.cl [OpenCL] Add supported OpenCL extensions to target info. 2016-05-16 17:06:34 +00:00
images.cl [OpenCL] Complete image types support. 2016-04-08 13:40:33 +00:00
kernel-arg-info-single-as.cl Fix r286819 (accidentally patched multiple times. 2016-11-14 13:14:38 +00:00
kernel-arg-info.cl [OpenCL] Remove access qualifiers on images in arg info metadata. 2016-09-06 10:10:28 +00:00
kernel-attributes.cl Attempt to fix MIPS buildbots after r273425. 2016-06-23 09:29:38 +00:00
kernel-metadata.cl [OpenCL] Use function metadata to represent kernel attributes 2016-06-22 14:56:35 +00:00
local-initializer-undef.cl Emit OpenCL local global variables without zeorinitializer 2014-11-03 16:51:53 +00:00
local.cl Account for calling convention specifiers in function definitions in IR test cases 2015-06-29 17:29:50 +00:00
logical-ops.cl
memcpy.cl Sema: Accept pointers to any address space for builtin functions 2015-03-31 16:39:02 +00:00
no-signed-zeros.cl [OpenCL] Add missing -cl-no-signed-zeros option into driver 2016-07-08 20:28:29 +00:00
opencl_types.cl [OpenCL] Generate opaque type for sampler_t and function call for the initializer 2016-07-28 19:26:30 +00:00
partial_initializer.cl [OpenCL] Setting constant address space for array initializers 2016-10-31 10:26:31 +00:00
pipe_builtin.cl [OpenCL] Augment pipe built-ins with pipe packet size and alignment. 2016-09-23 14:20:00 +00:00
pipe_types.cl [OpenCL] Augment pipe built-ins with pipe packet size and alignment. 2016-09-23 14:20:00 +00:00
private-array-initialization.cl [OpenCL] Setting constant address space for array initializers 2016-10-31 10:26:31 +00:00
ptx-calls.cl IR: Make metadata typeless in assembly, clang side 2014-12-15 19:10:08 +00:00
ptx-kernels.cl IR: Make metadata typeless in assembly, clang side 2014-12-15 19:10:08 +00:00
relaxed-fpmath.cl Remove the cl-no-signed-zeros cc1 option 2015-04-04 14:54:24 +00:00
sampler.cl [OpenCL] Generate opaque type for sampler_t and function call for the initializer 2016-07-28 19:26:30 +00:00
shifts.cl Update clang for D20348 2016-06-14 21:02:05 +00:00
single-precision-constant.cl
size_t.cl Re-commit [OpenCL] AMDGCN: Fix size_t type 2016-08-19 05:17:25 +00:00
spir-calling-conv.cl Re-apply "r226548 - Introduce SPIR calling conventions" reverted in r226558. 2015-01-20 11:20:41 +00:00
spir32_target.cl
spir64_target.cl
spir_version.cl [OpenCL] Fix SPIR version generation. 2016-12-07 08:38:24 +00:00
str_literals.cl Update clang for D20348 2016-06-14 21:02:05 +00:00
to_addr_builtin.cl [OpenCL] Added underscores to the names of 'to_addr' OpenCL built-ins. 2016-08-04 18:06:27 +00:00
unroll-hint.cl [OpenCL] Generate metadata for opencl_unroll_hint attribute 2016-02-19 18:30:11 +00:00
vectorLoadStore.cl
vector_literals_nested.cl
vector_literals_valid.cl
vector_logops.cl
vector_odd.cl
vector_shufflevector_valid.cl Fix invalid shufflevector operands 2015-08-02 15:28:10 +00:00
vla.cl [OPENCL] Fix wrongly vla error for OpenCL array. 2016-06-07 04:34:00 +00:00