[AVX512] add PSLLD and PSLLQ Intrinsic
[oota-llvm.git] / test / CodeGen / X86 / 2009-07-20-CoalescerBug.ll
1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin10
2 ; PR4587
3 ; rdar://7072590
4
5         %struct.re_pattern_buffer = type <{ i8*, i64, i64, i64, i8*, i64, i64, i8, i8, i8, i8, i8, i8, i8, i8 }>
6
7 define fastcc i32 @regex_compile(i8* %pattern, i64 %size, i64 %syntax, %struct.re_pattern_buffer* nocapture %bufp) nounwind ssp {
8 entry:
9         br i1 undef, label %return, label %if.end
10
11 if.end:         ; preds = %entry
12         %tmp35 = getelementptr %struct.re_pattern_buffer, %struct.re_pattern_buffer* %bufp, i64 0, i32 3                ; <i64*> [#uses=1]
13         store i64 %syntax, i64* %tmp35
14         store i32 undef, i32* undef
15         br i1 undef, label %if.then66, label %if.end102
16
17 if.then66:              ; preds = %if.end
18         br i1 false, label %if.else, label %if.then70
19
20 if.then70:              ; preds = %if.then66
21         %call74 = call i8* @xrealloc(i8* undef, i64 32) nounwind ssp            ; <i8*> [#uses=0]
22         unreachable
23
24 if.else:                ; preds = %if.then66
25         br i1 false, label %do.body86, label %if.end99
26
27 do.body86:              ; preds = %if.else
28         br i1 false, label %do.end, label %if.then90
29
30 if.then90:              ; preds = %do.body86
31         unreachable
32
33 do.end:         ; preds = %do.body86
34         ret i32 12
35
36 if.end99:               ; preds = %if.else
37         br label %if.end102
38
39 if.end102:              ; preds = %if.end99, %if.end
40         br label %while.body
41
42 while.body:             ; preds = %if.end1126, %sw.bb532, %while.body, %if.end102
43         %laststart.2 = phi i8* [ null, %if.end102 ], [ %laststart.7.ph, %if.end1126 ], [ %laststart.2, %sw.bb532 ], [ %laststart.2, %while.body ]               ; <i8*> [#uses=6]
44         %b.1 = phi i8* [ undef, %if.end102 ], [ %ctg29688, %if.end1126 ], [ %b.1, %sw.bb532 ], [ %b.1, %while.body ]            ; <i8*> [#uses=5]
45         br i1 undef, label %while.body, label %if.end127
46
47 if.end127:              ; preds = %while.body
48         switch i32 undef, label %sw.bb532 [
49                 i32 123, label %handle_interval
50                 i32 92, label %do.body3527
51         ]
52
53 sw.bb532:               ; preds = %if.end127
54         br i1 undef, label %while.body, label %if.end808
55
56 if.end808:              ; preds = %sw.bb532
57         br i1 undef, label %while.cond1267.preheader, label %if.then811
58
59 while.cond1267.preheader:               ; preds = %if.end808
60         br i1 false, label %return, label %if.end1294
61
62 if.then811:             ; preds = %if.end808
63         %call817 = call fastcc i8* @skip_one_char(i8* %laststart.2) ssp         ; <i8*> [#uses=0]
64         br i1 undef, label %cond.end834, label %lor.lhs.false827
65
66 lor.lhs.false827:               ; preds = %if.then811
67         br label %cond.end834
68
69 cond.end834:            ; preds = %lor.lhs.false827, %if.then811
70         br i1 undef, label %land.lhs.true838, label %while.cond979.preheader
71
72 land.lhs.true838:               ; preds = %cond.end834
73         br i1 undef, label %if.then842, label %while.cond979.preheader
74
75 if.then842:             ; preds = %land.lhs.true838
76         %conv851 = trunc i64 undef to i32               ; <i32> [#uses=1]
77         br label %while.cond979.preheader
78
79 while.cond979.preheader:                ; preds = %if.then842, %land.lhs.true838, %cond.end834
80         %startoffset.0.ph = phi i32 [ 0, %cond.end834 ], [ 0, %land.lhs.true838 ], [ %conv851, %if.then842 ]            ; <i32> [#uses=2]
81         %laststart.7.ph = phi i8* [ %laststart.2, %cond.end834 ], [ %laststart.2, %land.lhs.true838 ], [ %laststart.2, %if.then842 ]            ; <i8*> [#uses=3]
82         %b.4.ph = phi i8* [ %b.1, %cond.end834 ], [ %b.1, %land.lhs.true838 ], [ %b.1, %if.then842 ]            ; <i8*> [#uses=3]
83         %ctg29688 = getelementptr i8, i8* %b.4.ph, i64 6                ; <i8*> [#uses=1]
84         br label %while.cond979
85
86 while.cond979:          ; preds = %if.end1006, %while.cond979.preheader
87         %cmp991 = icmp ugt i64 undef, 0         ; <i1> [#uses=1]
88         br i1 %cmp991, label %do.body994, label %while.end1088
89
90 do.body994:             ; preds = %while.cond979
91         br i1 undef, label %return, label %if.end1006
92
93 if.end1006:             ; preds = %do.body994
94         %cmp1014 = icmp ugt i64 undef, 32768            ; <i1> [#uses=1]
95         %storemerge10953 = select i1 %cmp1014, i64 32768, i64 undef             ; <i64> [#uses=1]
96         store i64 %storemerge10953, i64* undef
97         br i1 false, label %return, label %while.cond979
98
99 while.end1088:          ; preds = %while.cond979
100         br i1 undef, label %if.then1091, label %if.else1101
101
102 if.then1091:            ; preds = %while.end1088
103         store i8 undef, i8* undef
104         %idx.ext1132.pre = zext i32 %startoffset.0.ph to i64            ; <i64> [#uses=1]
105         %add.ptr1133.pre = getelementptr i8, i8* %laststart.7.ph, i64 %idx.ext1132.pre          ; <i8*> [#uses=1]
106         %sub.ptr.lhs.cast1135.pre = ptrtoint i8* %add.ptr1133.pre to i64                ; <i64> [#uses=1]
107         br label %if.end1126
108
109 if.else1101:            ; preds = %while.end1088
110         %cond1109 = select i1 undef, i32 18, i32 14             ; <i32> [#uses=1]
111         %idx.ext1112 = zext i32 %startoffset.0.ph to i64                ; <i64> [#uses=1]
112         %add.ptr1113 = getelementptr i8, i8* %laststart.7.ph, i64 %idx.ext1112          ; <i8*> [#uses=2]
113         %sub.ptr.rhs.cast1121 = ptrtoint i8* %add.ptr1113 to i64                ; <i64> [#uses=1]
114         call fastcc void @insert_op1(i32 %cond1109, i8* %add.ptr1113, i32 undef, i8* %b.4.ph) ssp
115         br label %if.end1126
116
117 if.end1126:             ; preds = %if.else1101, %if.then1091
118         %sub.ptr.lhs.cast1135.pre-phi = phi i64 [ %sub.ptr.rhs.cast1121, %if.else1101 ], [ %sub.ptr.lhs.cast1135.pre, %if.then1091 ]            ; <i64> [#uses=1]
119         %add.ptr1128 = getelementptr i8, i8* %b.4.ph, i64 3             ; <i8*> [#uses=1]
120         %sub.ptr.rhs.cast1136 = ptrtoint i8* %add.ptr1128 to i64                ; <i64> [#uses=1]
121         %sub.ptr.sub1137 = sub i64 %sub.ptr.lhs.cast1135.pre-phi, %sub.ptr.rhs.cast1136         ; <i64> [#uses=1]
122         %sub.ptr.sub11378527 = trunc i64 %sub.ptr.sub1137 to i32                ; <i32> [#uses=1]
123         %conv1139 = add i32 %sub.ptr.sub11378527, -3            ; <i32> [#uses=1]
124         store i8 undef, i8* undef
125         %shr10.i8599 = lshr i32 %conv1139, 8            ; <i32> [#uses=1]
126         %conv6.i8600 = trunc i32 %shr10.i8599 to i8             ; <i8> [#uses=1]
127         store i8 %conv6.i8600, i8* undef
128         br label %while.body
129
130 if.end1294:             ; preds = %while.cond1267.preheader
131         ret i32 12
132
133 do.body3527:            ; preds = %if.end127
134         br i1 undef, label %do.end3536, label %if.then3531
135
136 if.then3531:            ; preds = %do.body3527
137         unreachable
138
139 do.end3536:             ; preds = %do.body3527
140         ret i32 5
141
142 handle_interval:                ; preds = %if.end127
143         br i1 undef, label %do.body4547, label %cond.false4583
144
145 do.body4547:            ; preds = %handle_interval
146         br i1 undef, label %do.end4556, label %if.then4551
147
148 if.then4551:            ; preds = %do.body4547
149         unreachable
150
151 do.end4556:             ; preds = %do.body4547
152         ret i32 9
153
154 cond.false4583:         ; preds = %handle_interval
155         unreachable
156
157 return:         ; preds = %if.end1006, %do.body994, %while.cond1267.preheader, %entry
158         ret i32 undef
159 }
160
161 declare i8* @xrealloc(i8*, i64) ssp
162
163 declare fastcc i8* @skip_one_char(i8*) nounwind readonly ssp
164
165 declare fastcc void @insert_op1(i32, i8*, i32, i8*) nounwind ssp