301 lines · plain
1; RUN: opt %loadNPMPolly '-passes=polly-custom<detect>' -polly-print-detect -stats -disable-output < %s 2>&1 | FileCheck %s2 3; REQUIRES: asserts4 5; CHECK-DAG: 4 polly-detect - Maximal number of loops in scops (profitable scops only)6; CHECK-DAG: 4 polly-detect - Maximal number of loops in scops7; CHECK-DAG: 11 polly-detect - Number of loops in scops (profitable scops only)8; CHECK-DAG: 11 polly-detect - Number of loops in scops9; CHECK-DAG: 11 polly-detect - Number of total loops10; CHECK-DAG: 6 polly-detect - Number of scops (profitable scops only)11; CHECK-DAG: 1 polly-detect - Number of scops with maximal loop depth 4 (profitable scops only)12; CHECK-DAG: 2 polly-detect - Number of scops with maximal loop depth 1 (profitable scops only)13; CHECK-DAG: 1 polly-detect - Number of scops with maximal loop depth 3 (profitable scops only)14; CHECK-DAG: 1 polly-detect - Number of scops with maximal loop depth 2 (profitable scops only)15; CHECK-DAG: 1 polly-detect - Number of scops with maximal loop depth 0 (profitable scops only)16; CHECK-DAG: 6 polly-detect - Number of scops17; CHECK-DAG: 1 polly-detect - Number of scops with maximal loop depth 418; CHECK-DAG: 2 polly-detect - Number of scops with maximal loop depth 119; CHECK-DAG: 1 polly-detect - Number of scops with maximal loop depth 320; CHECK-DAG: 1 polly-detect - Number of scops with maximal loop depth 221; CHECK-DAG: 1 polly-detect - Number of scops with maximal loop depth 022 23; void foo_0d(float *A) {24; if (true)25; A[0] += i;26; }27;28; void foo_1d(float *A) {29; for (long i = 0; i < 1024; i++)30; A[i] += i;31; }32;33; void foo_2d(float *A) {34; for (long i = 0; i < 1024; i++)35; for (long j = 0; j < 1024; j++)36; A[i + j] += i + j;37; }38;39; void foo_3d(float *A) {40; for (long i = 0; i < 1024; i++)41; for (long j = 0; j < 1024; j++)42; for (long k = 0; k < 1024; k++)43; A[i + j + k] += i + j + k;44; }45;46; void foo_4d(float *A) {47; for (long i = 0; i < 1024; i++)48; for (long j = 0; j < 1024; j++)49; for (long k = 0; k < 1024; k++)50; for (long l = 0; l < 1024; l++)51; A[i + j + k + l] += i + j + k + l;52; }53;54; void foo_zero_iterations(float *S) {55; for (long i = 0; i < 0; i++)56; A[i] += i;57; }58target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"59 60define void @foo_0d(ptr %A) {61bb:62 br label %bb163 64bb1:65 br i1 true, label %exit, label %block66 67block:68 store float 42.0, ptr %A69 br label %exit70 71exit:72 ret void73}74 75define void @foo_1d(ptr %A) {76bb:77 br label %bb178 79bb1: ; preds = %bb6, %bb80 %i.0 = phi i64 [ 0, %bb ], [ %tmp7, %bb6 ]81 %exitcond = icmp ne i64 %i.0, 102482 br i1 %exitcond, label %bb2, label %bb883 84bb2: ; preds = %bb185 %tmp = sitofp i64 %i.0 to float86 %tmp3 = getelementptr inbounds float, ptr %A, i64 %i.087 %tmp4 = load float, ptr %tmp3, align 488 %tmp5 = fadd float %tmp4, %tmp89 store float %tmp5, ptr %tmp3, align 490 br label %bb691 92bb6: ; preds = %bb293 %tmp7 = add nuw nsw i64 %i.0, 194 br label %bb195 96bb8: ; preds = %bb197 ret void98}99 100define void @foo_2d(ptr %A) {101bb:102 br label %bb2103 104bb2: ; preds = %bb14, %bb105 %i.0 = phi i64 [ 0, %bb ], [ %tmp15, %bb14 ]106 %exitcond1 = icmp ne i64 %i.0, 1024107 br i1 %exitcond1, label %bb3, label %bb16108 109bb3: ; preds = %bb2110 br label %bb4111 112bb4: ; preds = %bb11, %bb3113 %j.0 = phi i64 [ 0, %bb3 ], [ %tmp12, %bb11 ]114 %exitcond = icmp ne i64 %j.0, 1024115 br i1 %exitcond, label %bb5, label %bb13116 117bb5: ; preds = %bb4118 %tmp = add nuw nsw i64 %i.0, %j.0119 %tmp6 = sitofp i64 %tmp to float120 %tmp7 = add nuw nsw i64 %i.0, %j.0121 %tmp8 = getelementptr inbounds float, ptr %A, i64 %tmp7122 %tmp9 = load float, ptr %tmp8, align 4123 %tmp10 = fadd float %tmp9, %tmp6124 store float %tmp10, ptr %tmp8, align 4125 br label %bb11126 127bb11: ; preds = %bb5128 %tmp12 = add nuw nsw i64 %j.0, 1129 br label %bb4130 131bb13: ; preds = %bb4132 br label %bb14133 134bb14: ; preds = %bb13135 %tmp15 = add nuw nsw i64 %i.0, 1136 br label %bb2137 138bb16: ; preds = %bb2139 ret void140}141 142define void @foo_3d(ptr %A) {143bb:144 br label %bb3145 146bb3: ; preds = %bb22, %bb147 %i.0 = phi i64 [ 0, %bb ], [ %tmp23, %bb22 ]148 %exitcond2 = icmp ne i64 %i.0, 1024149 br i1 %exitcond2, label %bb4, label %bb24150 151bb4: ; preds = %bb3152 br label %bb5153 154bb5: ; preds = %bb19, %bb4155 %j.0 = phi i64 [ 0, %bb4 ], [ %tmp20, %bb19 ]156 %exitcond1 = icmp ne i64 %j.0, 1024157 br i1 %exitcond1, label %bb6, label %bb21158 159bb6: ; preds = %bb5160 br label %bb7161 162bb7: ; preds = %bb16, %bb6163 %k.0 = phi i64 [ 0, %bb6 ], [ %tmp17, %bb16 ]164 %exitcond = icmp ne i64 %k.0, 1024165 br i1 %exitcond, label %bb8, label %bb18166 167bb8: ; preds = %bb7168 %tmp = add nuw nsw i64 %i.0, %j.0169 %tmp9 = add nuw nsw i64 %tmp, %k.0170 %tmp10 = sitofp i64 %tmp9 to float171 %tmp11 = add nuw nsw i64 %i.0, %j.0172 %tmp12 = add nuw nsw i64 %tmp11, %k.0173 %tmp13 = getelementptr inbounds float, ptr %A, i64 %tmp12174 %tmp14 = load float, ptr %tmp13, align 4175 %tmp15 = fadd float %tmp14, %tmp10176 store float %tmp15, ptr %tmp13, align 4177 br label %bb16178 179bb16: ; preds = %bb8180 %tmp17 = add nuw nsw i64 %k.0, 1181 br label %bb7182 183bb18: ; preds = %bb7184 br label %bb19185 186bb19: ; preds = %bb18187 %tmp20 = add nuw nsw i64 %j.0, 1188 br label %bb5189 190bb21: ; preds = %bb5191 br label %bb22192 193bb22: ; preds = %bb21194 %tmp23 = add nuw nsw i64 %i.0, 1195 br label %bb3196 197bb24: ; preds = %bb3198 ret void199}200 201define void @foo_4d(ptr %A) {202bb:203 br label %bb4204 205bb4: ; preds = %bb30, %bb206 %i.0 = phi i64 [ 0, %bb ], [ %tmp31, %bb30 ]207 %exitcond3 = icmp ne i64 %i.0, 1024208 br i1 %exitcond3, label %bb5, label %bb32209 210bb5: ; preds = %bb4211 br label %bb6212 213bb6: ; preds = %bb27, %bb5214 %j.0 = phi i64 [ 0, %bb5 ], [ %tmp28, %bb27 ]215 %exitcond2 = icmp ne i64 %j.0, 1024216 br i1 %exitcond2, label %bb7, label %bb29217 218bb7: ; preds = %bb6219 br label %bb8220 221bb8: ; preds = %bb24, %bb7222 %k.0 = phi i64 [ 0, %bb7 ], [ %tmp25, %bb24 ]223 %exitcond1 = icmp ne i64 %k.0, 1024224 br i1 %exitcond1, label %bb9, label %bb26225 226bb9: ; preds = %bb8227 br label %bb10228 229bb10: ; preds = %bb21, %bb9230 %l.0 = phi i64 [ 0, %bb9 ], [ %tmp22, %bb21 ]231 %exitcond = icmp ne i64 %l.0, 1024232 br i1 %exitcond, label %bb11, label %bb23233 234bb11: ; preds = %bb10235 %tmp = add nuw nsw i64 %i.0, %j.0236 %tmp12 = add nuw nsw i64 %tmp, %k.0237 %tmp13 = add nuw nsw i64 %tmp12, %l.0238 %tmp14 = sitofp i64 %tmp13 to float239 %tmp15 = add nuw nsw i64 %i.0, %j.0240 %tmp16 = add nuw nsw i64 %tmp15, %k.0241 %tmp17 = add nuw nsw i64 %tmp16, %l.0242 %tmp18 = getelementptr inbounds float, ptr %A, i64 %tmp17243 %tmp19 = load float, ptr %tmp18, align 4244 %tmp20 = fadd float %tmp19, %tmp14245 store float %tmp20, ptr %tmp18, align 4246 br label %bb21247 248bb21: ; preds = %bb11249 %tmp22 = add nuw nsw i64 %l.0, 1250 br label %bb10251 252bb23: ; preds = %bb10253 br label %bb24254 255bb24: ; preds = %bb23256 %tmp25 = add nuw nsw i64 %k.0, 1257 br label %bb8258 259bb26: ; preds = %bb8260 br label %bb27261 262bb27: ; preds = %bb26263 %tmp28 = add nuw nsw i64 %j.0, 1264 br label %bb6265 266bb29: ; preds = %bb6267 br label %bb30268 269bb30: ; preds = %bb29270 %tmp31 = add nuw nsw i64 %i.0, 1271 br label %bb4272 273bb32: ; preds = %bb4274 ret void275}276 277define void @foo_zero_iterations(ptr %A) {278bb:279 br label %bb1280 281bb1: ; preds = %bb6, %bb282 %i.0 = phi i64 [ 0, %bb ], [ %tmp7, %bb6 ]283 %exitcond = icmp ne i64 %i.0, 0284 br i1 %exitcond, label %bb2, label %bb8285 286bb2: ; preds = %bb1287 %tmp = sitofp i64 %i.0 to float288 %tmp3 = getelementptr inbounds float, ptr %A, i64 %i.0289 %tmp4 = load float, ptr %tmp3, align 4290 %tmp5 = fadd float %tmp4, %tmp291 store float %tmp5, ptr %tmp3, align 4292 br label %bb6293 294bb6: ; preds = %bb2295 %tmp7 = add nuw nsw i64 %i.0, 1296 br label %bb1297 298bb8: ; preds = %bb1299 ret void300}301