Eric Christopher | e035e26 | 2015-03-07 01:39:06 +0000 | [diff] [blame] | 1 | ; 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 |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 2 | ; |
| 3 | ; Test MI-Sched suppory latency based stalls on in in-order pipeline |
| 4 | ; using the new machine model. |
| 5 | |
| 6 | target 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 | |
| 8 | ; Don't be too strict with the top of the schedule, but most of it |
| 9 | ; should be nicely pipelined. |
| 10 | ; |
| 11 | ; CHECK: saxpy10: |
| 12 | ; CHECK: vldr |
| 13 | ; CHECK: vldr |
| 14 | ; CHECK: vldr |
| 15 | ; CHECK: vldr |
| 16 | ; CHECK: vldr |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 17 | ; CHECK-NEXT: vldr |
Andrew Trick | 3ca67d6 | 2013-12-28 21:57:05 +0000 | [diff] [blame] | 18 | ; CHECK-NEXT: vmul |
Andrew Trick | 43adfb3 | 2015-03-27 06:10:13 +0000 | [diff] [blame] | 19 | ; CHECK-NEXT: vadd |
| 20 | ; CHECK-NEXT: vadd |
| 21 | ; CHECK-NEXT: vldr |
Andrew Trick | 3ca67d6 | 2013-12-28 21:57:05 +0000 | [diff] [blame] | 22 | ; CHECK-NEXT: vldr |
| 23 | ; CHECK-NEXT: vadd |
| 24 | ; CHECK-NEXT: vadd |
| 25 | ; CHECK-NEXT: vmul |
| 26 | ; CHECK-NEXT: vldr |
| 27 | ; CHECK-NEXT: vadd |
| 28 | ; CHECK-NEXT: vadd |
| 29 | ; CHECK-NEXT: vldr |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 30 | ; CHECK-NEXT: vmul |
Andrew Trick | 43adfb3 | 2015-03-27 06:10:13 +0000 | [diff] [blame] | 31 | ; CHECK-NEXT: vldr |
| 32 | ; CHECK-NEXT: vadd |
| 33 | ; CHECK-NEXT: vldr |
| 34 | ; CHECK-NEXT: vadd |
| 35 | ; CHECK-NEXT: vldr |
| 36 | ; CHECK-NEXT: vmul |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 37 | ; CHECK-NEXT: vadd |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 38 | ; CHECK-NEXT: vldr |
Andrew Trick | 3ca67d6 | 2013-12-28 21:57:05 +0000 | [diff] [blame] | 39 | ; CHECK-NEXT: vadd |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 40 | ; CHECK-NEXT: vldr |
| 41 | ; CHECK-NEXT: vmul |
| 42 | ; CHECK-NEXT: vadd |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 43 | ; CHECK-NEXT: vldr |
Andrew Trick | 3ca67d6 | 2013-12-28 21:57:05 +0000 | [diff] [blame] | 44 | ; CHECK-NEXT: vadd |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 45 | ; CHECK-NEXT: vldr |
| 46 | ; CHECK-NEXT: vmul |
| 47 | ; CHECK-NEXT: vadd |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 48 | ; CHECK-NEXT: vldr |
Andrew Trick | 3ca67d6 | 2013-12-28 21:57:05 +0000 | [diff] [blame] | 49 | ; CHECK-NEXT: vadd |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 50 | ; CHECK-NEXT: vldr |
| 51 | ; CHECK-NEXT: vmul |
| 52 | ; CHECK-NEXT: vadd |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 53 | ; CHECK-NEXT: vldr |
| 54 | ; CHECK-NEXT: vmul |
| 55 | ; CHECK-NEXT: vadd |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 56 | ; CHECK-NEXT: vldr |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 57 | ; CHECK-NEXT: vadd |
| 58 | ; CHECK-NEXT: vadd |
| 59 | ; CHECK-NEXT: vadd |
| 60 | ; CHECK-NEXT: vmov |
| 61 | ; CHECK-NEXT: bx |
| 62 | ; |
| 63 | ; This accumulates a sum rather than storing each result. |
| 64 | define float @saxpy10(float* nocapture readonly %data1, float* nocapture readonly %data2, float %a) { |
| 65 | entry: |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 66 | %0 = load float, float* %data1, align 4 |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 67 | %mul = fmul float %0, %a |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 68 | %1 = load float, float* %data2, align 4 |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 69 | %add = fadd float %mul, %1 |
| 70 | %add2 = fadd float %add, 0.000000e+00 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 71 | %arrayidx.1 = getelementptr inbounds float, float* %data1, i32 1 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 72 | %2 = load float, float* %arrayidx.1, align 4 |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 73 | %mul.1 = fmul float %2, %a |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 74 | %arrayidx1.1 = getelementptr inbounds float, float* %data2, i32 1 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 75 | %3 = load float, float* %arrayidx1.1, align 4 |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 76 | %add.1 = fadd float %mul.1, %3 |
| 77 | %add2.1 = fadd float %add2, %add.1 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 78 | %arrayidx.2 = getelementptr inbounds float, float* %data1, i32 2 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 79 | %4 = load float, float* %arrayidx.2, align 4 |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 80 | %mul.2 = fmul float %4, %a |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 81 | %arrayidx1.2 = getelementptr inbounds float, float* %data2, i32 2 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 82 | %5 = load float, float* %arrayidx1.2, align 4 |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 83 | %add.2 = fadd float %mul.2, %5 |
| 84 | %add2.2 = fadd float %add2.1, %add.2 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 85 | %arrayidx.3 = getelementptr inbounds float, float* %data1, i32 3 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 86 | %6 = load float, float* %arrayidx.3, align 4 |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 87 | %mul.3 = fmul float %6, %a |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 88 | %arrayidx1.3 = getelementptr inbounds float, float* %data2, i32 3 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 89 | %7 = load float, float* %arrayidx1.3, align 4 |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 90 | %add.3 = fadd float %mul.3, %7 |
| 91 | %add2.3 = fadd float %add2.2, %add.3 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 92 | %arrayidx.4 = getelementptr inbounds float, float* %data1, i32 4 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 93 | %8 = load float, float* %arrayidx.4, align 4 |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 94 | %mul.4 = fmul float %8, %a |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 95 | %arrayidx1.4 = getelementptr inbounds float, float* %data2, i32 4 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 96 | %9 = load float, float* %arrayidx1.4, align 4 |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 97 | %add.4 = fadd float %mul.4, %9 |
| 98 | %add2.4 = fadd float %add2.3, %add.4 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 99 | %arrayidx.5 = getelementptr inbounds float, float* %data1, i32 5 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 100 | %10 = load float, float* %arrayidx.5, align 4 |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 101 | %mul.5 = fmul float %10, %a |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 102 | %arrayidx1.5 = getelementptr inbounds float, float* %data2, i32 5 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 103 | %11 = load float, float* %arrayidx1.5, align 4 |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 104 | %add.5 = fadd float %mul.5, %11 |
| 105 | %add2.5 = fadd float %add2.4, %add.5 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 106 | %arrayidx.6 = getelementptr inbounds float, float* %data1, i32 6 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 107 | %12 = load float, float* %arrayidx.6, align 4 |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 108 | %mul.6 = fmul float %12, %a |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 109 | %arrayidx1.6 = getelementptr inbounds float, float* %data2, i32 6 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 110 | %13 = load float, float* %arrayidx1.6, align 4 |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 111 | %add.6 = fadd float %mul.6, %13 |
| 112 | %add2.6 = fadd float %add2.5, %add.6 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 113 | %arrayidx.7 = getelementptr inbounds float, float* %data1, i32 7 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 114 | %14 = load float, float* %arrayidx.7, align 4 |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 115 | %mul.7 = fmul float %14, %a |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 116 | %arrayidx1.7 = getelementptr inbounds float, float* %data2, i32 7 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 117 | %15 = load float, float* %arrayidx1.7, align 4 |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 118 | %add.7 = fadd float %mul.7, %15 |
| 119 | %add2.7 = fadd float %add2.6, %add.7 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 120 | %arrayidx.8 = getelementptr inbounds float, float* %data1, i32 8 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 121 | %16 = load float, float* %arrayidx.8, align 4 |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 122 | %mul.8 = fmul float %16, %a |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 123 | %arrayidx1.8 = getelementptr inbounds float, float* %data2, i32 8 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 124 | %17 = load float, float* %arrayidx1.8, align 4 |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 125 | %add.8 = fadd float %mul.8, %17 |
| 126 | %add2.8 = fadd float %add2.7, %add.8 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 127 | %arrayidx.9 = getelementptr inbounds float, float* %data1, i32 9 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 128 | %18 = load float, float* %arrayidx.9, align 4 |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 129 | %mul.9 = fmul float %18, %a |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 130 | %arrayidx1.9 = getelementptr inbounds float, float* %data2, i32 9 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 131 | %19 = load float, float* %arrayidx1.9, align 4 |
Andrew Trick | 880e573 | 2013-12-05 17:55:58 +0000 | [diff] [blame] | 132 | %add.9 = fadd float %mul.9, %19 |
| 133 | %add2.9 = fadd float %add2.8, %add.9 |
| 134 | ret float %add2.9 |
| 135 | } |