blob: 6bc351144011d344ada5d12cc3b4bb001dccbe27 [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt -passes='indvars' -S %s | FileCheck %s
target datalayout = "e-p:64:64-p1:64:64:64:32"
target triple = "x86_64-unknown-linux"
define ptr addrspace(1) @exit_value_narrow_address(ptr addrspace(1) %start, ptr addrspace(1) %end) {
; CHECK-LABEL: define ptr addrspace(1) @exit_value_narrow_address(
; CHECK-SAME: ptr addrspace(1) [[START:%.*]], ptr addrspace(1) [[END:%.*]]) {
; CHECK-NEXT: [[ENTRY:.*]]:
; CHECK-NEXT: [[START2:%.*]] = ptrtoaddr ptr addrspace(1) [[START]] to i32
; CHECK-NEXT: [[END1:%.*]] = ptrtoaddr ptr addrspace(1) [[END]] to i32
; CHECK-NEXT: [[PRE:%.*]] = icmp ult ptr addrspace(1) [[START]], [[END]]
; CHECK-NEXT: br i1 [[PRE]], label %[[LOOP_PREHEADER:.*]], label %[[EXIT:.*]]
; CHECK: [[LOOP_PREHEADER]]:
; CHECK-NEXT: br label %[[LOOP:.*]]
; CHECK: [[LOOP]]:
; CHECK-NEXT: br i1 false, label %[[LOOP]], label %[[EXIT_LOOPEXIT:.*]]
; CHECK: [[EXIT_LOOPEXIT]]:
; CHECK-NEXT: [[TMP0:%.*]] = sub i32 [[END1]], [[START2]]
; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr addrspace(1) [[START]], i32 [[TMP0]]
; CHECK-NEXT: br label %[[EXIT]]
; CHECK: [[EXIT]]:
; CHECK-NEXT: [[RES:%.*]] = phi ptr addrspace(1) [ [[START]], %[[ENTRY]] ], [ [[SCEVGEP]], %[[EXIT_LOOPEXIT]] ]
; CHECK-NEXT: ret ptr addrspace(1) [[RES]]
;
entry:
%pre = icmp ult ptr addrspace(1) %start, %end
br i1 %pre, label %loop, label %exit
loop:
%p = phi ptr addrspace(1) [ %start, %entry ], [ %p.next, %loop ]
%p.next = getelementptr inbounds i8, ptr addrspace(1) %p, i64 1
%c = icmp ult ptr addrspace(1) %p.next, %end
br i1 %c, label %loop, label %exit
exit:
%res = phi ptr addrspace(1) [ %start, %entry ], [ %p.next, %loop ]
ret ptr addrspace(1) %res
}