; RUN: opt -inline < %s -S -o - -inline-threshold=10 | FileCheck %s target datalayout = "p:32:32" define i32 @outer1() { ; CHECK: @outer1 ; CHECK-NOT: call ; CHECK: ret i32 %ptr = alloca i32 %ptr1 = getelementptr inbounds i32* %ptr, i32 0 %ptr2 = getelementptr inbounds i32* %ptr, i32 42 %result = call i32 @inner1(i32* %ptr1, i32* %ptr2) ret i32 %result } define i32 @inner1(i32* %begin, i32* %end) { %begin.i = ptrtoint i32* %begin to i32 %end.i = ptrtoint i32* %end to i32 %distance = sub i32 %end.i, %begin.i %icmp = icmp sle i32 %distance, 42 br i1 %icmp, label %then, label %else then: ret i32 3 else: %t = load i32* %begin ret i32 %t } define i32 @outer2(i32* %ptr) { ; Test that an inbounds GEP disables this -- it isn't safe in general as ; wrapping changes the behavior of lessthan and greaterthan comparisions. ; CHECK: @outer2 ; CHECK: call i32 @inner2 ; CHECK: ret i32 %ptr1 = getelementptr i32* %ptr, i32 0 %ptr2 = getelementptr i32* %ptr, i32 42 %result = call i32 @inner2(i32* %ptr1, i32* %ptr2) ret i32 %result } define i32 @inner2(i32* %begin, i32* %end) { %begin.i = ptrtoint i32* %begin to i32 %end.i = ptrtoint i32* %end to i32 %distance = sub i32 %end.i, %begin.i %icmp = icmp sle i32 %distance, 42 br i1 %icmp, label %then, label %else then: ret i32 3 else: %t = load i32* %begin ret i32 %t }