brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · 2c80e86 Raw
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