66 lines
2.3 KiB
LLVM
66 lines
2.3 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
|
|
; RUN: opt < %s -passes=instcombine -S | FileCheck %s
|
|
target datalayout = "p1:64:64:64:32"
|
|
|
|
define i32 @ptrtoaddr_inttoptr_arg(i32 %a) {
|
|
; CHECK-LABEL: define i32 @ptrtoaddr_inttoptr_arg(
|
|
; CHECK-SAME: i32 [[A:%.*]]) {
|
|
; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[A]] to i64
|
|
; CHECK-NEXT: [[TOPTR:%.*]] = inttoptr i64 [[TMP1]] to ptr addrspace(1)
|
|
; CHECK-NEXT: [[TOADDR:%.*]] = ptrtoaddr ptr addrspace(1) [[TOPTR]] to i32
|
|
; CHECK-NEXT: ret i32 [[TOADDR]]
|
|
;
|
|
%toptr = inttoptr i32 %a to ptr addrspace(1)
|
|
%toaddr = ptrtoaddr ptr addrspace(1) %toptr to i32
|
|
ret i32 %toaddr
|
|
}
|
|
|
|
define i32 @ptrtoaddr_inttoptr() {
|
|
; CHECK-LABEL: define i32 @ptrtoaddr_inttoptr() {
|
|
; CHECK-NEXT: ret i32 -1
|
|
;
|
|
ret i32 ptrtoaddr (ptr addrspace(1) inttoptr (i32 -1 to ptr addrspace(1)) to i32)
|
|
}
|
|
|
|
define i32 @ptrtoaddr_inttoptr_diff_size1() {
|
|
; CHECK-LABEL: define i32 @ptrtoaddr_inttoptr_diff_size1() {
|
|
; CHECK-NEXT: ret i32 ptrtoaddr (ptr addrspace(1) inttoptr (i64 -1 to ptr addrspace(1)) to i32)
|
|
;
|
|
ret i32 ptrtoaddr (ptr addrspace(1) inttoptr (i64 -1 to ptr addrspace(1)) to i32)
|
|
}
|
|
|
|
define i32 @ptrtoaddr_inttoptr_diff_size2() {
|
|
; CHECK-LABEL: define i32 @ptrtoaddr_inttoptr_diff_size2() {
|
|
; CHECK-NEXT: ret i32 ptrtoaddr (ptr addrspace(1) inttoptr (i16 -1 to ptr addrspace(1)) to i32)
|
|
;
|
|
ret i32 ptrtoaddr (ptr addrspace(1) inttoptr (i16 -1 to ptr addrspace(1)) to i32)
|
|
}
|
|
|
|
define i64 @ptrtoaddr_inttoptr_noas1() {
|
|
; CHECK-LABEL: define i64 @ptrtoaddr_inttoptr_noas1() {
|
|
; CHECK-NEXT: ret i64 1
|
|
;
|
|
ret i64 ptrtoaddr (ptr getelementptr (i8, ptr null, i64 1) to i64)
|
|
}
|
|
|
|
define i64 @ptr2addr2_inttoptr_noas2() {
|
|
; CHECK-LABEL: define i64 @ptr2addr2_inttoptr_noas2() {
|
|
; CHECK-NEXT: ret i64 123
|
|
;
|
|
ret i64 ptrtoaddr (ptr inttoptr (i64 123 to ptr) to i64)
|
|
}
|
|
|
|
define i64 @ptrtoaddr_inttoptr_noas_diff_size1() {
|
|
; CHECK-LABEL: define i64 @ptrtoaddr_inttoptr_noas_diff_size1() {
|
|
; CHECK-NEXT: ret i64 ptrtoaddr (ptr inttoptr (i32 -1 to ptr) to i64)
|
|
;
|
|
ret i64 ptrtoaddr (ptr inttoptr (i32 -1 to ptr) to i64)
|
|
}
|
|
|
|
define i64 @ptrtoaddr_inttoptr_noas_diff_size2() {
|
|
; CHECK-LABEL: define i64 @ptrtoaddr_inttoptr_noas_diff_size2() {
|
|
; CHECK-NEXT: ret i64 ptrtoaddr (ptr inttoptr (i128 -1 to ptr) to i64)
|
|
;
|
|
ret i64 ptrtoaddr (ptr inttoptr (i128 -1 to ptr) to i64)
|
|
}
|