280 lines · plain
1; RUN: opt %loadNPMPolly '-passes=polly-custom<opt-isl>' -stats -disable-output < %s 2>&1 | FileCheck %s -match-full-lines2 3; REQUIRES: asserts4 5; void foo_1d(float *A) {6; for (long i = 0; i < 1024; i++)7; A[i] += i;8; }9;10; void foo_2d(float *A) {11; for (long i = 0; i < 1024; i++)12; for (long j = 0; j < 1024; j++)13; A[i + j] += i + j;14; }15;16; void foo_3d(float *A) {17; for (long i = 0; i < 1024; i++)18; for (long j = 0; j < 1024; j++)19; for (long k = 0; k < 1024; k++)20; A[i + j + k] += i + j + k;21; }22;23; void foo_4d(float *A) {24; for (long i = 0; i < 1024; i++)25; for (long j = 0; j < 1024; j++)26; for (long k = 0; k < 1024; k++)27; for (long l = 0; l < 1024; l++)28; A[i + j + k + l] += i + j + k + l;29; }30;31; void foo_zero_iterations(float *S) {32; for (long i = 0; i < 0; i++)33; A[i] += i;34; }35target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"36 37define void @foo_1d(ptr %A) {38bb:39 br label %bb140 41bb1: ; preds = %bb6, %bb42 %i.0 = phi i64 [ 0, %bb ], [ %tmp7, %bb6 ]43 %exitcond = icmp ne i64 %i.0, 102444 br i1 %exitcond, label %bb2, label %bb845 46bb2: ; preds = %bb147 %tmp = sitofp i64 %i.0 to float48 %tmp3 = getelementptr inbounds float, ptr %A, i64 %i.049 %tmp4 = load float, ptr %tmp3, align 450 %tmp5 = fadd float %tmp4, %tmp51 store float %tmp5, ptr %tmp3, align 452 br label %bb653 54bb6: ; preds = %bb255 %tmp7 = add nuw nsw i64 %i.0, 156 br label %bb157 58bb8: ; preds = %bb159 ret void60}61 62define void @foo_2d(ptr %A) {63bb:64 br label %bb265 66bb2: ; preds = %bb14, %bb67 %i.0 = phi i64 [ 0, %bb ], [ %tmp15, %bb14 ]68 %exitcond1 = icmp ne i64 %i.0, 102469 br i1 %exitcond1, label %bb3, label %bb1670 71bb3: ; preds = %bb272 br label %bb473 74bb4: ; preds = %bb11, %bb375 %j.0 = phi i64 [ 0, %bb3 ], [ %tmp12, %bb11 ]76 %exitcond = icmp ne i64 %j.0, 102477 br i1 %exitcond, label %bb5, label %bb1378 79bb5: ; preds = %bb480 %tmp = add nuw nsw i64 %i.0, %j.081 %tmp6 = sitofp i64 %tmp to float82 %tmp7 = add nuw nsw i64 %i.0, %j.083 %tmp8 = getelementptr inbounds float, ptr %A, i64 %tmp784 %tmp9 = load float, ptr %tmp8, align 485 %tmp10 = fadd float %tmp9, %tmp686 store float %tmp10, ptr %tmp8, align 487 br label %bb1188 89bb11: ; preds = %bb590 %tmp12 = add nuw nsw i64 %j.0, 191 br label %bb492 93bb13: ; preds = %bb494 br label %bb1495 96bb14: ; preds = %bb1397 %tmp15 = add nuw nsw i64 %i.0, 198 br label %bb299 100bb16: ; preds = %bb2101 ret void102}103 104define void @foo_3d(ptr %A) {105bb:106 br label %bb3107 108bb3: ; preds = %bb22, %bb109 %i.0 = phi i64 [ 0, %bb ], [ %tmp23, %bb22 ]110 %exitcond2 = icmp ne i64 %i.0, 1024111 br i1 %exitcond2, label %bb4, label %bb24112 113bb4: ; preds = %bb3114 br label %bb5115 116bb5: ; preds = %bb19, %bb4117 %j.0 = phi i64 [ 0, %bb4 ], [ %tmp20, %bb19 ]118 %exitcond1 = icmp ne i64 %j.0, 1024119 br i1 %exitcond1, label %bb6, label %bb21120 121bb6: ; preds = %bb5122 br label %bb7123 124bb7: ; preds = %bb16, %bb6125 %k.0 = phi i64 [ 0, %bb6 ], [ %tmp17, %bb16 ]126 %exitcond = icmp ne i64 %k.0, 1024127 br i1 %exitcond, label %bb8, label %bb18128 129bb8: ; preds = %bb7130 %tmp = add nuw nsw i64 %i.0, %j.0131 %tmp9 = add nuw nsw i64 %tmp, %k.0132 %tmp10 = sitofp i64 %tmp9 to float133 %tmp11 = add nuw nsw i64 %i.0, %j.0134 %tmp12 = add nuw nsw i64 %tmp11, %k.0135 %tmp13 = getelementptr inbounds float, ptr %A, i64 %tmp12136 %tmp14 = load float, ptr %tmp13, align 4137 %tmp15 = fadd float %tmp14, %tmp10138 store float %tmp15, ptr %tmp13, align 4139 br label %bb16140 141bb16: ; preds = %bb8142 %tmp17 = add nuw nsw i64 %k.0, 1143 br label %bb7144 145bb18: ; preds = %bb7146 br label %bb19147 148bb19: ; preds = %bb18149 %tmp20 = add nuw nsw i64 %j.0, 1150 br label %bb5151 152bb21: ; preds = %bb5153 br label %bb22154 155bb22: ; preds = %bb21156 %tmp23 = add nuw nsw i64 %i.0, 1157 br label %bb3158 159bb24: ; preds = %bb3160 ret void161}162 163define void @foo_4d(ptr %A) {164bb:165 br label %bb4166 167bb4: ; preds = %bb30, %bb168 %i.0 = phi i64 [ 0, %bb ], [ %tmp31, %bb30 ]169 %exitcond3 = icmp ne i64 %i.0, 1024170 br i1 %exitcond3, label %bb5, label %bb32171 172bb5: ; preds = %bb4173 br label %bb6174 175bb6: ; preds = %bb27, %bb5176 %j.0 = phi i64 [ 0, %bb5 ], [ %tmp28, %bb27 ]177 %exitcond2 = icmp ne i64 %j.0, 1024178 br i1 %exitcond2, label %bb7, label %bb29179 180bb7: ; preds = %bb6181 br label %bb8182 183bb8: ; preds = %bb24, %bb7184 %k.0 = phi i64 [ 0, %bb7 ], [ %tmp25, %bb24 ]185 %exitcond1 = icmp ne i64 %k.0, 1024186 br i1 %exitcond1, label %bb9, label %bb26187 188bb9: ; preds = %bb8189 br label %bb10190 191bb10: ; preds = %bb21, %bb9192 %l.0 = phi i64 [ 0, %bb9 ], [ %tmp22, %bb21 ]193 %exitcond = icmp ne i64 %l.0, 1024194 br i1 %exitcond, label %bb11, label %bb23195 196bb11: ; preds = %bb10197 %tmp = add nuw nsw i64 %i.0, %j.0198 %tmp12 = add nuw nsw i64 %tmp, %k.0199 %tmp13 = add nuw nsw i64 %tmp12, %l.0200 %tmp14 = sitofp i64 %tmp13 to float201 %tmp15 = add nuw nsw i64 %i.0, %j.0202 %tmp16 = add nuw nsw i64 %tmp15, %k.0203 %tmp17 = add nuw nsw i64 %tmp16, %l.0204 %tmp18 = getelementptr inbounds float, ptr %A, i64 %tmp17205 %tmp19 = load float, ptr %tmp18, align 4206 %tmp20 = fadd float %tmp19, %tmp14207 store float %tmp20, ptr %tmp18, align 4208 br label %bb21209 210bb21: ; preds = %bb11211 %tmp22 = add nuw nsw i64 %l.0, 1212 br label %bb10213 214bb23: ; preds = %bb10215 br label %bb24216 217bb24: ; preds = %bb23218 %tmp25 = add nuw nsw i64 %k.0, 1219 br label %bb8220 221bb26: ; preds = %bb8222 br label %bb27223 224bb27: ; preds = %bb26225 %tmp28 = add nuw nsw i64 %j.0, 1226 br label %bb6227 228bb29: ; preds = %bb6229 br label %bb30230 231bb30: ; preds = %bb29232 %tmp31 = add nuw nsw i64 %i.0, 1233 br label %bb4234 235bb32: ; preds = %bb4236 ret void237}238 239define void @foo_zero_iterations(ptr %A) {240bb:241 br label %bb1242 243bb1: ; preds = %bb6, %bb244 %i.0 = phi i64 [ 0, %bb ], [ %tmp7, %bb6 ]245 %exitcond = icmp ne i64 %i.0, 0246 br i1 %exitcond, label %bb2, label %bb8247 248bb2: ; preds = %bb1249 %tmp = sitofp i64 %i.0 to float250 %tmp3 = getelementptr inbounds float, ptr %A, i64 %i.0251 %tmp4 = load float, ptr %tmp3, align 4252 %tmp5 = fadd float %tmp4, %tmp253 store float %tmp5, ptr %tmp3, align 4254 br label %bb6255 256bb6: ; preds = %bb2257 %tmp7 = add nuw nsw i64 %i.0, 1258 br label %bb1259 260bb8: ; preds = %bb1261 ret void262}263 264 265; CHECK-DAG: 1 polly-opt-isl - Number of first level tiling applied266; CHECK-DAG: 9 polly-opt-isl - Number of affine loops optimized267; CHECK-DAG: 10 polly-opt-isl - Number of band members (original)268; CHECK-DAG: 10 polly-opt-isl - Number of band members (after scheduler)269; CHECK-DAG: 12 polly-opt-isl - Number of band members (after optimizer)270; CHECK-DAG: 10 polly-opt-isl - Number of bands (original)271; CHECK-DAG: 7 polly-opt-isl - Number of bands (after scheduler)272; CHECK-DAG: 8 polly-opt-isl - Number of bands (after optimizer)273; CHECK-DAG: 4 polly-opt-isl - Number of coincident band members (after scheduler)274; CHECK-DAG: 5 polly-opt-isl - Number of coincident band members (after optimizer)275; CHECK-DAG: 7 polly-opt-isl - Number of permutable bands (after scheduler)276; CHECK-DAG: 8 polly-opt-isl - Number of permutable bands (after optimizer)277; CHECK-DAG: 3 polly-opt-isl - Number of scops optimized278; CHECK-DAG: 4 polly-opt-isl - Number of scops processed279; CHECK-DAG: 4 polly-opt-isl - Number of scops rescheduled280