mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
23f506e253
I'm about to enable the new loop predication transform by default. It has the effect of completely destroying many read only loops - which happen to be a super common idiom in our test cases. So as to preserve test coverage of other transforms, disable the new transform where it would cause sharp test coverage regressions. (This is semantically part of the enabling commit. It's committed separate to ease revert if the actual flag flip gets reverted.)
64 lines
2.2 KiB
LLVM
64 lines
2.2 KiB
LLVM
; RUN: opt -S -indvars -indvars-predicate-loops=0 < %s | FileCheck %s
|
|
|
|
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
|
|
target triple = "x86_64-apple-macosx10.10.0"
|
|
|
|
@a = common global i32 0, align 4
|
|
|
|
; Function Attrs: nounwind ssp uwtable
|
|
define void @fn1() {
|
|
; CHECK-LABEL: @fn1(
|
|
bb:
|
|
br label %bb4.preheader
|
|
|
|
bb4.preheader: ; preds = %bb, %bb16
|
|
; CHECK-LABEL: bb4.preheader:
|
|
%b.03 = phi i8 [ 0, %bb ], [ %tmp17, %bb16 ]
|
|
; CHECK: %tmp9 = icmp ugt i8 %b.03, 1
|
|
; CHECK-NOT: %tmp9 = icmp ugt i8 0, 1
|
|
|
|
%tmp9 = icmp ugt i8 %b.03, 1
|
|
br i1 %tmp9, label %bb4.preheader.bb18.loopexit.split_crit_edge, label %bb4.preheader.bb4.preheader.split_crit_edge
|
|
|
|
bb4.preheader.bb4.preheader.split_crit_edge: ; preds = %bb4.preheader
|
|
br label %bb4.preheader.split
|
|
|
|
bb4.preheader.bb18.loopexit.split_crit_edge: ; preds = %bb4.preheader
|
|
store i32 0, i32* @a, align 4
|
|
br label %bb18.loopexit.split
|
|
|
|
bb4.preheader.split: ; preds = %bb4.preheader.bb4.preheader.split_crit_edge
|
|
br label %bb7
|
|
|
|
bb4: ; preds = %bb7
|
|
%tmp6 = icmp slt i32 %storemerge2, 0
|
|
br i1 %tmp6, label %bb7, label %bb16
|
|
|
|
bb7: ; preds = %bb4.preheader.split, %bb4
|
|
%storemerge2 = phi i32 [ 0, %bb4.preheader.split ], [ %tmp14, %bb4 ]
|
|
%tmp14 = add nsw i32 %storemerge2, 1
|
|
br i1 false, label %bb18.loopexit, label %bb4
|
|
|
|
bb16: ; preds = %bb4
|
|
%tmp14.lcssa5 = phi i32 [ %tmp14, %bb4 ]
|
|
%tmp17 = add i8 %b.03, -1
|
|
%tmp2 = icmp eq i8 %tmp17, -2
|
|
br i1 %tmp2, label %bb18.loopexit1, label %bb4.preheader
|
|
|
|
bb18.loopexit: ; preds = %bb7
|
|
br label %bb18.loopexit.split
|
|
|
|
bb18.loopexit.split: ; preds = %bb4.preheader.bb18.loopexit.split_crit_edge, %bb18.loopexit
|
|
br label %bb18
|
|
|
|
bb18.loopexit1: ; preds = %bb16
|
|
%tmp14.lcssa5.lcssa = phi i32 [ %tmp14.lcssa5, %bb16 ]
|
|
store i32 %tmp14.lcssa5.lcssa, i32* @a, align 4
|
|
br label %bb18
|
|
|
|
bb18: ; preds = %bb18.loopexit1, %bb18.loopexit.split
|
|
ret void
|
|
}
|
|
|
|
declare void @abort()
|