| ; RUN: opt -instcombine -S < %s | FileCheck %s | |
| ; When a pointer is addrspacecasted to a another addr space, we cannot assume | |
| ; anything about the new bits. | |
| target datalayout = "p:32:32-p3:32:32-p4:64:64" | |
| ; CHECK-LABEL: @test_shift | |
| ; CHECK-NOT: ret i64 0 | |
| define i64 @test_shift(i8* %p) { | |
| %g = addrspacecast i8* %p to i8 addrspace(4)* | |
| %i = ptrtoint i8 addrspace(4)* %g to i64 | |
| %shift = lshr i64 %i, 32 | |
| ret i64 %shift | |
| } | |
| ; CHECK-LABEL: @test_null | |
| ; A null pointer casted to another addr space may no longer have null value. | |
| ; CHECK-NOT: ret i32 0 | |
| define i32 @test_null() { | |
| %g = addrspacecast i8* null to i8 addrspace(3)* | |
| %i = ptrtoint i8 addrspace(3)* %g to i32 | |
| ret i32 %i | |
| } |