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