[PATCH] D26196: Add support for non-zero null pointer for C and OpenCL

Yaxun Liu via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Dec 6 14:25:35 PST 2016


yaxunl marked 7 inline comments as done.
yaxunl added inline comments.


================
Comment at: lib/CodeGen/CGExprScalar.cpp:1532
+      return llvm::ConstantInt::get(ConvertType(DestTy),
+          CGF.getContext().getTargetNullPtrValue(E->getType()));
     assert(!DestTy->isBooleanType() && "bool should use PointerToBool");
----------------
rjmccall wrote:
> Why is this necessary?  ptrtoint on the recursively-emitted null pointer should do this automatically.
Since the target knows the value in the null pointers, it can fold a null pointer to integer literal directly.

The above code does that, e.g.

```
void test_cast_null_pointer_to_sizet_calee(size_t arg_private,
                                           size_t arg_local,
                                           size_t arg_global,
                                           size_t arg_constant,
                                           size_t arg_generic);

// CHECK-LABEL: test_cast_null_pointer_to_sizet
// CHECK: call void @test_cast_null_pointer_to_sizet_calee(i64 -1, i64 -1, i64 0, i64 0, i64 0)
void test_cast_null_pointer_to_sizet(void) {
  test_cast_null_pointer_to_sizet_calee((size_t)((private char*)0),
                                        (size_t)((local char*)0),
                                        (size_t)((global char*)0),
                                        (size_t)((constant char*)0),
                                        (size_t)((generic char*)0));
}

```

Without the above code, we only get ptrtoint instructions.


https://reviews.llvm.org/D26196





More information about the cfe-commits mailing list