31 lines
1005 B
LLVM
31 lines
1005 B
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
|
|
; RUN: opt -S -passes=gvn < %s | FileCheck %s
|
|
|
|
define i64 @ptrtoaddr_same(ptr %p) {
|
|
; CHECK-LABEL: define i64 @ptrtoaddr_same(
|
|
; CHECK-SAME: ptr [[P:%.*]]) {
|
|
; CHECK-NEXT: [[J:%.*]] = ptrtoaddr ptr [[P]] to i64
|
|
; CHECK-NEXT: ret i64 0
|
|
;
|
|
%i = ptrtoaddr ptr %p to i64
|
|
%j = ptrtoaddr ptr %p to i64
|
|
%sub = sub i64 %i, %j
|
|
ret i64 %sub
|
|
}
|
|
|
|
; Note that unlike for ptrtoint, it's not possible for ptrtoaddr to differ
|
|
; in result type for the same input.
|
|
define i64 @ptrtoaddr_different(ptr %p, ptr %p2) {
|
|
; CHECK-LABEL: define i64 @ptrtoaddr_different(
|
|
; CHECK-SAME: ptr [[P:%.*]], ptr [[P2:%.*]]) {
|
|
; CHECK-NEXT: [[I:%.*]] = ptrtoaddr ptr [[P]] to i64
|
|
; CHECK-NEXT: [[J:%.*]] = ptrtoaddr ptr [[P2]] to i64
|
|
; CHECK-NEXT: [[SUB:%.*]] = sub i64 [[I]], [[J]]
|
|
; CHECK-NEXT: ret i64 [[SUB]]
|
|
;
|
|
%i = ptrtoaddr ptr %p to i64
|
|
%j = ptrtoaddr ptr %p2 to i64
|
|
%sub = sub i64 %i, %j
|
|
ret i64 %sub
|
|
}
|