brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · 7578672 Raw
123 lines · plain
1; REQUIRES: asserts2; RUN: opt -mcpu=thunderx2t99 -passes=loop-unroll --debug-only=loop-unroll --debug-only=basicblock-utils -S -unroll-allow-partial < %s 2>&1 | FileCheck %s3 4target triple = "aarch64-unknown-linux-gnu"5 6; CHECK: Loop Unroll: F[foo] Loop %loop.header7; CHECK:   Loop Size = 188; CHECK:   Exiting block %loop.inc: TripCount=512, TripMultiple=0, BreakoutTrip=09; CHECK: UNROLLING loop %loop.header by 410; CHECK: Merging:11; CHECK: Loop Unroll: F[foo] Loop %loop.2.header12; CHECK:   Loop Size = 1913; CHECK:   Exiting block %loop.2.inc: TripCount=512, TripMultiple=0, BreakoutTrip=014; CHECK: UNROLLING loop %loop.2.header by 415; CHECK: Merging:16; CHECK: %counter = phi i32 [ 0, %entry ], [ %inc.3, %loop.inc.3 ]17; CHECK: %val = add nuw nsw i32 %counter, 518; CHECK: %val1 = add nuw nsw i32 %counter, 619; CHECK: %val2 = add nuw nsw i32 %counter, 720; CHECK: %val3 = add nuw nsw i32 %counter, 821; CHECK: %val4 = add nuw nsw i32 %counter, 922; CHECK: %val5 = add nuw nsw i32 %counter, 1023; CHECK-NOT: %val = add i32 %counter, 524; CHECK-NOT: %val = add i32 %counter, 625; CHECK-NOT: %val = add i32 %counter, 726; CHECK-NOT: %val = add i32 %counter, 827; CHECK-NOT: %val = add i32 %counter, 928; CHECK-NOT: %val = add i32 %counter, 1029; CHECK: %counter.2 = phi i32 [ 0, %exit.0 ], [ %inc.2.3, %loop.2.inc.3 ]30 31define void @foo(ptr %out) {32entry:33  %0 = alloca [1024 x i32]34  %x0 = alloca [1024 x i32]35  %x01 = alloca [1024 x i32]36  %x02 = alloca [1024 x i32]37  %x03 = alloca [1024 x i32]38  %x04 = alloca [1024 x i32]39  %x05 = alloca [1024 x i32]40  %x06 = alloca [1024 x i32]41  br label %loop.header42 43loop.header:44  %counter = phi i32 [0, %entry], [%inc, %loop.inc]45  br label %loop.body46 47loop.body:48  %ptr = getelementptr [1024 x i32], ptr %0, i32 0, i32 %counter49  store i32 %counter, ptr %ptr50  %val = add i32 %counter, 551  %xptr = getelementptr [1024 x i32], ptr %x0, i32 0, i32 %counter52  store i32 %val, ptr %xptr53  %val1 = add i32 %counter, 654  %xptr1 = getelementptr [1024 x i32], ptr %x01, i32 0, i32 %counter55  store i32 %val1, ptr %xptr156  %val2 = add i32 %counter, 757  %xptr2 = getelementptr [1024 x i32], ptr %x02, i32 0, i32 %counter58  store i32 %val2, ptr %xptr259  %val3 = add i32 %counter, 860  %xptr3 = getelementptr [1024 x i32], ptr %x03, i32 0, i32 %counter61  store i32 %val3, ptr %xptr362  %val4 = add i32 %counter, 963  %xptr4 = getelementptr [1024 x i32], ptr %x04, i32 0, i32 %counter64  store i32 %val4, ptr %xptr465  %val5 = add i32 %counter, 1066  %xptr5 = getelementptr [1024 x i32], ptr %x05, i32 0, i32 %counter67  store i32 %val5, ptr %xptr568  br label %loop.inc69 70loop.inc:71  %inc = add i32 %counter, 272  %1 = icmp sge i32 %inc, 102373  br i1 %1, label  %exit.0, label %loop.header74 75exit.0:76  %2 = getelementptr [1024 x i32], ptr %0, i32 0, i32 577  %3 = load i32, ptr %278  store i32 %3, ptr %out79  br label %loop.2.header80 81 82loop.2.header:83  %counter.2 = phi i32 [0, %exit.0], [%inc.2, %loop.2.inc]84  br label %loop.2.body85 86loop.2.body:87  %ptr.2 = getelementptr [1024 x i32], ptr %0, i32 0, i32 %counter.288  store i32 %counter.2, ptr %ptr.289  %val.2 = add i32 %counter.2, 590  %xptr.2 = getelementptr [1024 x i32], ptr %x0, i32 0, i32 %counter.291  store i32 %val.2, ptr %xptr.292  %val1.2 = add i32 %counter.2, 693  %xptr1.2 = getelementptr [1024 x i32], ptr %x01, i32 0, i32 %counter.294  store i32 %val1, ptr %xptr1.295  %val2.2 = add i32 %counter.2, 796  %xptr2.2 = getelementptr [1024 x i32], ptr %x02, i32 0, i32 %counter.297  store i32 %val2, ptr %xptr2.298  %val3.2 = add i32 %counter.2, 899  %xptr3.2 = getelementptr [1024 x i32], ptr %x03, i32 0, i32 %counter.2100  store i32 %val3.2, ptr %xptr3.2101  %val4.2 = add i32 %counter.2, 9102  %xptr4.2 = getelementptr [1024 x i32], ptr %x04, i32 0, i32 %counter.2103  store i32 %val4.2, ptr %xptr4.2104  %val5.2 = add i32 %counter.2, 10105  %xptr5.2 = getelementptr [1024 x i32], ptr %x05, i32 0, i32 %counter.2106  store i32 %val5.2, ptr %xptr5.2107  %xptr6.2 = getelementptr [1024 x i32], ptr %x06, i32 0, i32 %counter.2108  store i32 %val5.2, ptr %xptr6.2109  br label %loop.2.inc110 111loop.2.inc:112  %inc.2 = add i32 %counter.2, 2113  %4 = icmp sge i32 %inc.2, 1023114  br i1 %4, label  %exit.2, label %loop.2.header115 116exit.2:117  %x2 = getelementptr [1024 x i32], ptr %0, i32 0, i32 6118  %x3 = load i32, ptr %x2119  %out2 = getelementptr i32, ptr %out, i32 1120  store i32 %3, ptr %out2121  ret void122}123