105 lines · plain
1; REQUIRES: asserts2; RUN: opt -mcpu=core-avx2 -passes=loop-unroll -debug-only=loop-unroll -S -unroll-allow-partial < %s 2>&1 | FileCheck %s3 4target triple = "x86_64-unknown-linux-gnu"5 6; CHECK: Loop Unroll: F[foo] Loop %loop.header7; CHECK: Loop Size = 258; CHECK: UNROLLING loop %loop.header by 2 9; CHECK: Loop Unroll: F[foo] Loop %loop.2.header10; CHECK: Loop Size = 2711; CHECK-NOT: UNROLLING loop %loop.2.header12 13define void @foo(ptr %out) {14entry:15 %0 = alloca [1024 x i32]16 %x0 = alloca [1024 x i32]17 %x01 = alloca [1024 x i32]18 %x02 = alloca [1024 x i32]19 %x03 = alloca [1024 x i32]20 %x04 = alloca [1024 x i32]21 %x05 = alloca [1024 x i32]22 %x06 = alloca [1024 x i32]23 br label %loop.header24 25loop.header:26 %counter = phi i32 [0, %entry], [%inc, %loop.inc]27 br label %loop.body28 29loop.body:30 %ptr = getelementptr [1024 x i32], ptr %0, i32 0, i32 %counter31 store i32 %counter, ptr %ptr32 %val = add i32 %counter, 533 %xptr = getelementptr [1024 x i32], ptr %x0, i32 0, i32 %counter34 store i32 %val, ptr %xptr35 %val1 = add i32 %counter, 636 %xptr1 = getelementptr [1024 x i32], ptr %x01, i32 0, i32 %counter37 store i32 %val1, ptr %xptr138 %val2 = add i32 %counter, 739 %xptr2 = getelementptr [1024 x i32], ptr %x02, i32 0, i32 %counter40 store i32 %val2, ptr %xptr241 %val3 = add i32 %counter, 842 %xptr3 = getelementptr [1024 x i32], ptr %x03, i32 0, i32 %counter43 store i32 %val3, ptr %xptr344 %val4 = add i32 %counter, 945 %xptr4 = getelementptr [1024 x i32], ptr %x04, i32 0, i32 %counter46 store i32 %val4, ptr %xptr447 %val5 = add i32 %counter, 1048 %xptr5 = getelementptr [1024 x i32], ptr %x05, i32 0, i32 %counter49 store i32 %val5, ptr %xptr550 br label %loop.inc51 52loop.inc:53 %inc = add i32 %counter, 254 %1 = icmp sge i32 %inc, 102355 br i1 %1, label %exit.0, label %loop.header56 57exit.0:58 %2 = getelementptr [1024 x i32], ptr %0, i32 0, i32 559 %3 = load i32, ptr %260 store i32 %3, ptr %out61 br label %loop.2.header62 63 64loop.2.header:65 %counter.2 = phi i32 [0, %exit.0], [%inc.2, %loop.2.inc]66 br label %loop.2.body67 68loop.2.body:69 %ptr.2 = getelementptr [1024 x i32], ptr %0, i32 0, i32 %counter.270 store i32 %counter.2, ptr %ptr.271 %val.2 = add i32 %counter.2, 572 %xptr.2 = getelementptr [1024 x i32], ptr %x0, i32 0, i32 %counter.273 store i32 %val.2, ptr %xptr.274 %val1.2 = add i32 %counter.2, 675 %xptr1.2 = getelementptr [1024 x i32], ptr %x01, i32 0, i32 %counter.276 store i32 %val1, ptr %xptr1.277 %val2.2 = add i32 %counter.2, 778 %xptr2.2 = getelementptr [1024 x i32], ptr %x02, i32 0, i32 %counter.279 store i32 %val2, ptr %xptr2.280 %val3.2 = add i32 %counter.2, 881 %xptr3.2 = getelementptr [1024 x i32], ptr %x03, i32 0, i32 %counter.282 store i32 %val3.2, ptr %xptr3.283 %val4.2 = add i32 %counter.2, 984 %xptr4.2 = getelementptr [1024 x i32], ptr %x04, i32 0, i32 %counter.285 store i32 %val4.2, ptr %xptr4.286 %val5.2 = add i32 %counter.2, 1087 %xptr5.2 = getelementptr [1024 x i32], ptr %x05, i32 0, i32 %counter.288 store i32 %val5.2, ptr %xptr5.289 %xptr6.2 = getelementptr [1024 x i32], ptr %x06, i32 0, i32 %counter.290 store i32 %val5.2, ptr %xptr6.291 br label %loop.2.inc92 93loop.2.inc:94 %inc.2 = add i32 %counter.2, 295 %4 = icmp sge i32 %inc.2, 102396 br i1 %4, label %exit.2, label %loop.2.header97 98exit.2:99 %x2 = getelementptr [1024 x i32], ptr %0, i32 0, i32 6100 %x3 = load i32, ptr %x2101 %out2 = getelementptr i32, ptr %out, i32 1102 store i32 %3, ptr %out2103 ret void104}105