1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -indvars -disable-output 2*9880d681SAndroid Build Coastguard Worker; PR4009 3*9880d681SAndroid Build Coastguard Worker; PR4038 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32" 6*9880d681SAndroid Build Coastguard Workertarget triple = "i386-pc-linux-gnu" 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Workerdefine void @safe_bcopy(i8* %to) nounwind { 9*9880d681SAndroid Build Coastguard Workerentry: 10*9880d681SAndroid Build Coastguard Worker %cmp11 = icmp ult i8* %to, null ; <i1> [#uses=1] 11*9880d681SAndroid Build Coastguard Worker br i1 %cmp11, label %loop, label %return 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Workerreturn: ; preds = %entry 14*9880d681SAndroid Build Coastguard Worker ret void 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerloop: ; preds = %loop, %if.else 17*9880d681SAndroid Build Coastguard Worker %pn = phi i8* [ %ge, %loop ], [ null, %entry ] ; <i8*> [#uses=1] 18*9880d681SAndroid Build Coastguard Worker %cp = ptrtoint i8* %to to i32 ; <i32> [#uses=1] 19*9880d681SAndroid Build Coastguard Worker %su = sub i32 0, %cp ; <i32> [#uses=1] 20*9880d681SAndroid Build Coastguard Worker %ge = getelementptr i8, i8* %pn, i32 %su ; <i8*> [#uses=2] 21*9880d681SAndroid Build Coastguard Worker tail call void @bcopy(i8* %ge) nounwind 22*9880d681SAndroid Build Coastguard Worker br label %loop 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdefine void @safe_bcopy_4038(i8* %from, i8* %to, i32 %size) nounwind { 26*9880d681SAndroid Build Coastguard Workerentry: 27*9880d681SAndroid Build Coastguard Worker br i1 false, label %if.else, label %if.then12 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerif.then12: ; preds = %entry 30*9880d681SAndroid Build Coastguard Worker ret void 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerif.else: ; preds = %entry 33*9880d681SAndroid Build Coastguard Worker %sub.ptr.rhs.cast40 = ptrtoint i8* %from to i32 ; <i32> [#uses=1] 34*9880d681SAndroid Build Coastguard Worker br label %if.end54 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Workerif.end54: ; preds = %if.end54, %if.else 37*9880d681SAndroid Build Coastguard Worker %sub.ptr4912.pn = phi i8* [ %sub.ptr4912, %if.end54 ], [ null, %if.else ] ; <i8*> [#uses=1] 38*9880d681SAndroid Build Coastguard Worker %sub.ptr7 = phi i8* [ %sub.ptr, %if.end54 ], [ null, %if.else ] ; <i8*> [#uses=2] 39*9880d681SAndroid Build Coastguard Worker %sub.ptr.rhs.cast46.pn = ptrtoint i8* %from to i32 ; <i32> [#uses=1] 40*9880d681SAndroid Build Coastguard Worker %sub.ptr.lhs.cast45.pn = ptrtoint i8* %to to i32 ; <i32> [#uses=1] 41*9880d681SAndroid Build Coastguard Worker %sub.ptr.sub47.pn = sub i32 %sub.ptr.rhs.cast46.pn, %sub.ptr.lhs.cast45.pn ; <i32> [#uses=1] 42*9880d681SAndroid Build Coastguard Worker %sub.ptr4912 = getelementptr i8, i8* %sub.ptr4912.pn, i32 %sub.ptr.sub47.pn ; <i8*> [#uses=2] 43*9880d681SAndroid Build Coastguard Worker tail call void @bcopy_4038(i8* %sub.ptr4912, i8* %sub.ptr7, i32 0) nounwind 44*9880d681SAndroid Build Coastguard Worker %sub.ptr = getelementptr i8, i8* %sub.ptr7, i32 %sub.ptr.rhs.cast40 ; <i8*> [#uses=1] 45*9880d681SAndroid Build Coastguard Worker br label %if.end54 46*9880d681SAndroid Build Coastguard Worker} 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Workerdeclare void @bcopy(i8* nocapture) nounwind 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Workerdeclare void @bcopy_4038(i8*, i8*, i32) nounwind 51