[InstCombine] Signed saturation patterns
[llvm-core.git] / test / Transforms / SimpleLoopUnswitch / 2007-08-01-LCSSA.ll
blob7c65459a65ccc57c46a21354adf738abbe238bcd
1 ; RUN: opt < %s -simple-loop-unswitch -instcombine -disable-output
2 ; RUN: opt < %s -simple-loop-unswitch -enable-mssa-loop-dependency=true -verify-memoryssa -instcombine -disable-output
3         %struct.ClassDef = type { %struct.QByteArray, %struct.QByteArray, %"struct.QList<ArgumentDef>", %"struct.QList<ArgumentDef>", i8, i8, %"struct.QList<ArgumentDef>", %"struct.QList<ArgumentDef>", %"struct.QList<ArgumentDef>", %"struct.QList<ArgumentDef>", %"struct.QList<ArgumentDef>", %"struct.QList<ArgumentDef>", %"struct.QMap<QByteArray,QByteArray>", %"struct.QList<ArgumentDef>", %"struct.QMap<QByteArray,QByteArray>", i32, i32 }
4         %struct.FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct.FILE*, i32, i32, i32, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i8*, i8*, i32, i32, [40 x i8] }
5         %struct.Generator = type { %struct.FILE*, %struct.ClassDef*, %"struct.QList<ArgumentDef>", %struct.QByteArray, %"struct.QList<ArgumentDef>" }
6         %struct.QBasicAtomic = type { i32 }
7         %struct.QByteArray = type { %"struct.QByteArray::Data"* }
8         %"struct.QByteArray::Data" = type { %struct.QBasicAtomic, i32, i32, i8*, [1 x i8] }
9         %"struct.QList<ArgumentDef>" = type { %"struct.QList<ArgumentDef>::._19" }
10         %"struct.QList<ArgumentDef>::._19" = type { %struct.QListData }
11         %struct.QListData = type { %"struct.QListData::Data"* }
12         %"struct.QListData::Data" = type { %struct.QBasicAtomic, i32, i32, i32, i8, [1 x i8*] }
13         %"struct.QMap<QByteArray,QByteArray>" = type { %"struct.QMap<QByteArray,QByteArray>::._56" }
14         %"struct.QMap<QByteArray,QByteArray>::._56" = type { %struct.QMapData* }
15         %struct.QMapData = type { %struct.QMapData*, [12 x %struct.QMapData*], %struct.QBasicAtomic, i32, i32, i32, i8 }
16         %struct._IO_marker = type { %struct._IO_marker*, %struct.FILE*, i32 }
17 @.str9 = external constant [1 x i8]             ; <[1 x i8]*> [#uses=1]
19 declare i32 @strcmp(i8*, i8*)
21 define i32 @_ZN9Generator6strregEPKc(%struct.Generator* %this, i8* %s) {
22 entry:
23         %s_addr.0 = select i1 false, i8* getelementptr ([1 x i8], [1 x i8]* @.str9, i32 0, i32 0), i8* %s               ; <i8*> [#uses=2]
24         %tmp122 = icmp eq i8* %s_addr.0, null           ; <i1> [#uses=1]
25         br label %bb184
27 bb55:           ; preds = %bb184
28         ret i32 0
30 bb88:           ; preds = %bb184
31         br i1 %tmp122, label %bb154, label %bb128
33 bb128:          ; preds = %bb88
34         %tmp138 = call i32 @strcmp( i8* null, i8* %s_addr.0 )           ; <i32> [#uses=1]
35         %iftmp.37.0.in4 = icmp eq i32 %tmp138, 0                ; <i1> [#uses=1]
36         br i1 %iftmp.37.0.in4, label %bb250, label %bb166
38 bb154:          ; preds = %bb88
39         br i1 false, label %bb250, label %bb166
41 bb166:          ; preds = %bb154, %bb128
42         %tmp175 = add i32 %idx.0, 1             ; <i32> [#uses=1]
43         %tmp177 = add i32 %tmp175, 0            ; <i32> [#uses=1]
44         %tmp181 = add i32 %tmp177, 0            ; <i32> [#uses=1]
45         %tmp183 = add i32 %i33.0, 1             ; <i32> [#uses=1]
46         br label %bb184
48 bb184:          ; preds = %bb166, %entry
49         %i33.0 = phi i32 [ 0, %entry ], [ %tmp183, %bb166 ]             ; <i32> [#uses=2]
50         %idx.0 = phi i32 [ 0, %entry ], [ %tmp181, %bb166 ]             ; <i32> [#uses=2]
51         %tmp49 = icmp slt i32 %i33.0, 0         ; <i1> [#uses=1]
52         br i1 %tmp49, label %bb88, label %bb55
54 bb250:          ; preds = %bb154, %bb128
55         ret i32 %idx.0