mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
bd9b22ee76
The IR doesn't have a proper concept of invalid pointers, and "null" constants are just all zeros (though it really needs one). I think it's not possible to break this for AMDGPU due to the copy semantics of byval. If you have an original stack object at 0, the byval copy will be placed above it so I don't think it's really possible to hit a 0 address.
25 lines
763 B
LLVM
25 lines
763 B
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
|
; RUN: opt -S -instsimplify < %s | FileCheck %s
|
|
|
|
target datalayout = "A5"
|
|
|
|
; A 0 valued byval pointer may be valid
|
|
define i1 @byval_may_be_zero(i32 addrspace(5)* byval(i32) %ptr) {
|
|
; CHECK-LABEL: @byval_may_be_zero(
|
|
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 addrspace(5)* [[PTR:%.*]], null
|
|
; CHECK-NEXT: ret i1 [[CMP]]
|
|
;
|
|
%cmp = icmp eq i32 addrspace(5)* %ptr, null
|
|
ret i1 %cmp
|
|
}
|
|
|
|
; FIXME: The interpretation of nonnull assumes a 0 pointer value, so
|
|
; this really is an incorrect fold.
|
|
define i1 @nonnull_may_be_zero(i32 addrspace(5)* nonnull %ptr) {
|
|
; CHECK-LABEL: @nonnull_may_be_zero(
|
|
; CHECK-NEXT: ret i1 false
|
|
;
|
|
%cmp = icmp eq i32 addrspace(5)* %ptr, null
|
|
ret i1 %cmp
|
|
}
|