1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=arm -mtriple=thumbv7-apple-ios7.0.0 -float-abi=hard -mcpu=cortex-a9 -misched-postra -enable-misched -pre-RA-sched=source -scheditins=false | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; 3*9880d681SAndroid Build Coastguard Worker; Test MI-Sched suppory latency based stalls on in in-order pipeline 4*9880d681SAndroid Build Coastguard Worker; using the new machine model. 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32-S32" 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker; Don't be too strict with the top of the schedule, but most of it 9*9880d681SAndroid Build Coastguard Worker; should be nicely pipelined. 10*9880d681SAndroid Build Coastguard Worker; 11*9880d681SAndroid Build Coastguard Worker; CHECK: saxpy10: 12*9880d681SAndroid Build Coastguard Worker; CHECK: vldr 13*9880d681SAndroid Build Coastguard Worker; CHECK: vldr 14*9880d681SAndroid Build Coastguard Worker; CHECK: vldr 15*9880d681SAndroid Build Coastguard Worker; CHECK: vldr 16*9880d681SAndroid Build Coastguard Worker; CHECK: vldr 17*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr 18*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmul 19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd 20*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd 21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr 22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr 23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd 24*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd 25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmul 26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr 27*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd 28*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd 29*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr 30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmul 31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr 32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd 33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr 34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd 35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr 36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmul 37*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd 38*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr 39*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd 40*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr 41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmul 42*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd 43*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr 44*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd 45*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr 46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmul 47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd 48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr 49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd 50*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr 51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmul 52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd 53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr 54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmul 55*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd 56*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr 57*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd 58*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd 59*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd 60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmov 61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bx 62*9880d681SAndroid Build Coastguard Worker; 63*9880d681SAndroid Build Coastguard Worker; This accumulates a sum rather than storing each result. 64*9880d681SAndroid Build Coastguard Workerdefine float @saxpy10(float* nocapture readonly %data1, float* nocapture readonly %data2, float %a) { 65*9880d681SAndroid Build Coastguard Workerentry: 66*9880d681SAndroid Build Coastguard Worker %0 = load float, float* %data1, align 4 67*9880d681SAndroid Build Coastguard Worker %mul = fmul float %0, %a 68*9880d681SAndroid Build Coastguard Worker %1 = load float, float* %data2, align 4 69*9880d681SAndroid Build Coastguard Worker %add = fadd float %mul, %1 70*9880d681SAndroid Build Coastguard Worker %add2 = fadd float %add, 0.000000e+00 71*9880d681SAndroid Build Coastguard Worker %arrayidx.1 = getelementptr inbounds float, float* %data1, i32 1 72*9880d681SAndroid Build Coastguard Worker %2 = load float, float* %arrayidx.1, align 4 73*9880d681SAndroid Build Coastguard Worker %mul.1 = fmul float %2, %a 74*9880d681SAndroid Build Coastguard Worker %arrayidx1.1 = getelementptr inbounds float, float* %data2, i32 1 75*9880d681SAndroid Build Coastguard Worker %3 = load float, float* %arrayidx1.1, align 4 76*9880d681SAndroid Build Coastguard Worker %add.1 = fadd float %mul.1, %3 77*9880d681SAndroid Build Coastguard Worker %add2.1 = fadd float %add2, %add.1 78*9880d681SAndroid Build Coastguard Worker %arrayidx.2 = getelementptr inbounds float, float* %data1, i32 2 79*9880d681SAndroid Build Coastguard Worker %4 = load float, float* %arrayidx.2, align 4 80*9880d681SAndroid Build Coastguard Worker %mul.2 = fmul float %4, %a 81*9880d681SAndroid Build Coastguard Worker %arrayidx1.2 = getelementptr inbounds float, float* %data2, i32 2 82*9880d681SAndroid Build Coastguard Worker %5 = load float, float* %arrayidx1.2, align 4 83*9880d681SAndroid Build Coastguard Worker %add.2 = fadd float %mul.2, %5 84*9880d681SAndroid Build Coastguard Worker %add2.2 = fadd float %add2.1, %add.2 85*9880d681SAndroid Build Coastguard Worker %arrayidx.3 = getelementptr inbounds float, float* %data1, i32 3 86*9880d681SAndroid Build Coastguard Worker %6 = load float, float* %arrayidx.3, align 4 87*9880d681SAndroid Build Coastguard Worker %mul.3 = fmul float %6, %a 88*9880d681SAndroid Build Coastguard Worker %arrayidx1.3 = getelementptr inbounds float, float* %data2, i32 3 89*9880d681SAndroid Build Coastguard Worker %7 = load float, float* %arrayidx1.3, align 4 90*9880d681SAndroid Build Coastguard Worker %add.3 = fadd float %mul.3, %7 91*9880d681SAndroid Build Coastguard Worker %add2.3 = fadd float %add2.2, %add.3 92*9880d681SAndroid Build Coastguard Worker %arrayidx.4 = getelementptr inbounds float, float* %data1, i32 4 93*9880d681SAndroid Build Coastguard Worker %8 = load float, float* %arrayidx.4, align 4 94*9880d681SAndroid Build Coastguard Worker %mul.4 = fmul float %8, %a 95*9880d681SAndroid Build Coastguard Worker %arrayidx1.4 = getelementptr inbounds float, float* %data2, i32 4 96*9880d681SAndroid Build Coastguard Worker %9 = load float, float* %arrayidx1.4, align 4 97*9880d681SAndroid Build Coastguard Worker %add.4 = fadd float %mul.4, %9 98*9880d681SAndroid Build Coastguard Worker %add2.4 = fadd float %add2.3, %add.4 99*9880d681SAndroid Build Coastguard Worker %arrayidx.5 = getelementptr inbounds float, float* %data1, i32 5 100*9880d681SAndroid Build Coastguard Worker %10 = load float, float* %arrayidx.5, align 4 101*9880d681SAndroid Build Coastguard Worker %mul.5 = fmul float %10, %a 102*9880d681SAndroid Build Coastguard Worker %arrayidx1.5 = getelementptr inbounds float, float* %data2, i32 5 103*9880d681SAndroid Build Coastguard Worker %11 = load float, float* %arrayidx1.5, align 4 104*9880d681SAndroid Build Coastguard Worker %add.5 = fadd float %mul.5, %11 105*9880d681SAndroid Build Coastguard Worker %add2.5 = fadd float %add2.4, %add.5 106*9880d681SAndroid Build Coastguard Worker %arrayidx.6 = getelementptr inbounds float, float* %data1, i32 6 107*9880d681SAndroid Build Coastguard Worker %12 = load float, float* %arrayidx.6, align 4 108*9880d681SAndroid Build Coastguard Worker %mul.6 = fmul float %12, %a 109*9880d681SAndroid Build Coastguard Worker %arrayidx1.6 = getelementptr inbounds float, float* %data2, i32 6 110*9880d681SAndroid Build Coastguard Worker %13 = load float, float* %arrayidx1.6, align 4 111*9880d681SAndroid Build Coastguard Worker %add.6 = fadd float %mul.6, %13 112*9880d681SAndroid Build Coastguard Worker %add2.6 = fadd float %add2.5, %add.6 113*9880d681SAndroid Build Coastguard Worker %arrayidx.7 = getelementptr inbounds float, float* %data1, i32 7 114*9880d681SAndroid Build Coastguard Worker %14 = load float, float* %arrayidx.7, align 4 115*9880d681SAndroid Build Coastguard Worker %mul.7 = fmul float %14, %a 116*9880d681SAndroid Build Coastguard Worker %arrayidx1.7 = getelementptr inbounds float, float* %data2, i32 7 117*9880d681SAndroid Build Coastguard Worker %15 = load float, float* %arrayidx1.7, align 4 118*9880d681SAndroid Build Coastguard Worker %add.7 = fadd float %mul.7, %15 119*9880d681SAndroid Build Coastguard Worker %add2.7 = fadd float %add2.6, %add.7 120*9880d681SAndroid Build Coastguard Worker %arrayidx.8 = getelementptr inbounds float, float* %data1, i32 8 121*9880d681SAndroid Build Coastguard Worker %16 = load float, float* %arrayidx.8, align 4 122*9880d681SAndroid Build Coastguard Worker %mul.8 = fmul float %16, %a 123*9880d681SAndroid Build Coastguard Worker %arrayidx1.8 = getelementptr inbounds float, float* %data2, i32 8 124*9880d681SAndroid Build Coastguard Worker %17 = load float, float* %arrayidx1.8, align 4 125*9880d681SAndroid Build Coastguard Worker %add.8 = fadd float %mul.8, %17 126*9880d681SAndroid Build Coastguard Worker %add2.8 = fadd float %add2.7, %add.8 127*9880d681SAndroid Build Coastguard Worker %arrayidx.9 = getelementptr inbounds float, float* %data1, i32 9 128*9880d681SAndroid Build Coastguard Worker %18 = load float, float* %arrayidx.9, align 4 129*9880d681SAndroid Build Coastguard Worker %mul.9 = fmul float %18, %a 130*9880d681SAndroid Build Coastguard Worker %arrayidx1.9 = getelementptr inbounds float, float* %data2, i32 9 131*9880d681SAndroid Build Coastguard Worker %19 = load float, float* %arrayidx1.9, align 4 132*9880d681SAndroid Build Coastguard Worker %add.9 = fadd float %mul.9, %19 133*9880d681SAndroid Build Coastguard Worker %add2.9 = fadd float %add2.8, %add.9 134*9880d681SAndroid Build Coastguard Worker ret float %add2.9 135*9880d681SAndroid Build Coastguard Worker} 136