1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=arm-apple-ios5.0 -mcpu=cortex-a8 | FileCheck %s -check-prefix=A8 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=arm-apple-ios5.0 -mcpu=swift | FileCheck %s -check-prefix=SWIFT 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; rdar://12481395 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdefine void @foo(i32 %x, i32 %y, i32* nocapture %P) nounwind ssp { 7*9880d681SAndroid Build Coastguard Workerentry: 8*9880d681SAndroid Build Coastguard Worker; A8-LABEL: foo: 9*9880d681SAndroid Build Coastguard Worker; A8: bl ___divmodsi4 10*9880d681SAndroid Build Coastguard Worker; A8-NOT: bl ___divmodsi4 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Worker; SWIFT-LABEL: foo: 13*9880d681SAndroid Build Coastguard Worker; SWIFT: sdiv 14*9880d681SAndroid Build Coastguard Worker; SWIFT: mls 15*9880d681SAndroid Build Coastguard Worker; SWIFT-NOT: bl __divmodsi4 16*9880d681SAndroid Build Coastguard Worker %div = sdiv i32 %x, %y 17*9880d681SAndroid Build Coastguard Worker store i32 %div, i32* %P, align 4 18*9880d681SAndroid Build Coastguard Worker %rem = srem i32 %x, %y 19*9880d681SAndroid Build Coastguard Worker %arrayidx6 = getelementptr inbounds i32, i32* %P, i32 1 20*9880d681SAndroid Build Coastguard Worker store i32 %rem, i32* %arrayidx6, align 4 21*9880d681SAndroid Build Coastguard Worker ret void 22*9880d681SAndroid Build Coastguard Worker} 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerdefine void @bar(i32 %x, i32 %y, i32* nocapture %P) nounwind ssp { 25*9880d681SAndroid Build Coastguard Workerentry: 26*9880d681SAndroid Build Coastguard Worker; A8-LABEL: bar: 27*9880d681SAndroid Build Coastguard Worker; A8: bl ___udivmodsi4 28*9880d681SAndroid Build Coastguard Worker; A8-NOT: bl ___udivmodsi4 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker; SWIFT-LABEL: bar: 31*9880d681SAndroid Build Coastguard Worker; SWIFT: udiv 32*9880d681SAndroid Build Coastguard Worker; SWIFT: mls 33*9880d681SAndroid Build Coastguard Worker; SWIFT-NOT: bl __udivmodsi4 34*9880d681SAndroid Build Coastguard Worker %div = udiv i32 %x, %y 35*9880d681SAndroid Build Coastguard Worker store i32 %div, i32* %P, align 4 36*9880d681SAndroid Build Coastguard Worker %rem = urem i32 %x, %y 37*9880d681SAndroid Build Coastguard Worker %arrayidx6 = getelementptr inbounds i32, i32* %P, i32 1 38*9880d681SAndroid Build Coastguard Worker store i32 %rem, i32* %arrayidx6, align 4 39*9880d681SAndroid Build Coastguard Worker ret void 40*9880d681SAndroid Build Coastguard Worker} 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Worker; rdar://9280991 43*9880d681SAndroid Build Coastguard Worker@flags = external unnamed_addr global i32 44*9880d681SAndroid Build Coastguard Worker@tabsize = external unnamed_addr global i32 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Workerdefine void @do_indent(i32 %cols) nounwind { 47*9880d681SAndroid Build Coastguard Workerentry: 48*9880d681SAndroid Build Coastguard Worker; A8-LABEL: do_indent: 49*9880d681SAndroid Build Coastguard Worker; SWIFT-LABEL: do_indent: 50*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* @flags, align 4 51*9880d681SAndroid Build Coastguard Worker %1 = and i32 %0, 67108864 52*9880d681SAndroid Build Coastguard Worker %2 = icmp eq i32 %1, 0 53*9880d681SAndroid Build Coastguard Worker br i1 %2, label %bb1, label %bb 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Workerbb: 56*9880d681SAndroid Build Coastguard Worker; A8: bl ___divmodsi4 57*9880d681SAndroid Build Coastguard Worker; SWIFT: sdiv 58*9880d681SAndroid Build Coastguard Worker; SWIFT: mls 59*9880d681SAndroid Build Coastguard Worker; SWIFT-NOT: bl __divmodsi4 60*9880d681SAndroid Build Coastguard Worker %3 = load i32, i32* @tabsize, align 4 61*9880d681SAndroid Build Coastguard Worker %4 = srem i32 %cols, %3 62*9880d681SAndroid Build Coastguard Worker %5 = sdiv i32 %cols, %3 63*9880d681SAndroid Build Coastguard Worker %6 = tail call i32 @llvm.objectsize.i32.p0i8(i8* null, i1 false) 64*9880d681SAndroid Build Coastguard Worker %7 = tail call i8* @__memset_chk(i8* null, i32 9, i32 %5, i32 %6) nounwind 65*9880d681SAndroid Build Coastguard Worker br label %bb1 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Workerbb1: 68*9880d681SAndroid Build Coastguard Worker %line_indent_len.0 = phi i32 [ %4, %bb ], [ 0, %entry ] 69*9880d681SAndroid Build Coastguard Worker %8 = getelementptr inbounds i8, i8* null, i32 %line_indent_len.0 70*9880d681SAndroid Build Coastguard Worker store i8 0, i8* %8, align 1 71*9880d681SAndroid Build Coastguard Worker ret void 72*9880d681SAndroid Build Coastguard Worker} 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.objectsize.i32.p0i8(i8*, i1) nounwind readnone 75*9880d681SAndroid Build Coastguard Workerdeclare i8* @__memset_chk(i8*, i32, i32, i32) nounwind 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Worker; rdar://11714607 78*9880d681SAndroid Build Coastguard Workerdefine i32 @howmany(i32 %x, i32 %y) nounwind { 79*9880d681SAndroid Build Coastguard Workerentry: 80*9880d681SAndroid Build Coastguard Worker; A8-LABEL: howmany: 81*9880d681SAndroid Build Coastguard Worker; A8: bl ___udivmodsi4 82*9880d681SAndroid Build Coastguard Worker; A8-NOT: ___udivsi3 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Worker; SWIFT-LABEL: howmany: 85*9880d681SAndroid Build Coastguard Worker; SWIFT: udiv 86*9880d681SAndroid Build Coastguard Worker; SWIFT: mls 87*9880d681SAndroid Build Coastguard Worker; SWIFT-NOT: bl __udivmodsi4 88*9880d681SAndroid Build Coastguard Worker %rem = urem i32 %x, %y 89*9880d681SAndroid Build Coastguard Worker %div = udiv i32 %x, %y 90*9880d681SAndroid Build Coastguard Worker %not.cmp = icmp ne i32 %rem, 0 91*9880d681SAndroid Build Coastguard Worker %add = zext i1 %not.cmp to i32 92*9880d681SAndroid Build Coastguard Worker %cond = add i32 %add, %div 93*9880d681SAndroid Build Coastguard Worker ret i32 %cond 94*9880d681SAndroid Build Coastguard Worker} 95