[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