48 lines · plain
1; RUN: opt < %s -S -passes="default<O2>" -unroll-runtime=true -unroll-threshold-default=0 -unroll-threshold-aggressive=300 | FileCheck %s -check-prefix=O22; RUN: opt < %s -S -passes="default<O3>" -unroll-runtime=true -unroll-threshold-default=0 -unroll-threshold-aggressive=300 | FileCheck %s -check-prefix=O33; RUN: opt < %s -S -passes="default<Os>" -unroll-runtime=true -unroll-threshold-default=0 -unroll-threshold-aggressive=300 | FileCheck %s -check-prefix=Os4; RUN: opt < %s -S -passes="default<Oz>" -unroll-runtime=true -unroll-threshold-default=0 -unroll-threshold-aggressive=300 | FileCheck %s -check-prefix=Oz5 6; Check that Os and Oz are optimized like O2, not like O3. To easily highlight7; the behavior, we artificially disable unrolling for anything but O3 by setting8; the default threshold to 0.9 10; O3: loop1.preheader11; O2-NOT: loop1.preheader12; Os-NOT: loop1.preheader13; Oz-NOT: loop1.preheader14 15define void @unroll(i32 %iter, ptr %addr1, ptr %addr2) nounwind {16entry:17 br label %loop118 19loop1:20 %iv1 = phi i32 [ 0, %entry ], [ %inc1, %loop1.latch ]21 %offset1 = getelementptr i32, ptr %addr1, i32 %iv122 store i32 %iv1, ptr %offset1, align 423 br label %loop2.header24 25loop2.header:26 %e = icmp uge i32 %iter, 127 br i1 %e, label %loop2, label %exit228 29loop2:30 %iv2 = phi i32 [ 0, %loop2.header ], [ %inc2, %loop2 ]31 %offset2 = getelementptr i32, ptr %addr2, i32 %iv232 store i32 %iv2, ptr %offset2, align 433 %inc2 = add i32 %iv2, 134 %exitcnd2 = icmp uge i32 %inc2, %iter35 br i1 %exitcnd2, label %exit2, label %loop236 37exit2:38 br label %loop1.latch39 40loop1.latch:41 %inc1 = add i32 %iv1, 142 %exitcnd1 = icmp uge i32 %inc1, 102443 br i1 %exitcnd1, label %exit, label %loop144 45exit:46 ret void47}48