[DAGCombiner] Add target hook function to decide folding (mul (add x, c1), c2)
[llvm-project.git] / llvm / test / Transforms / Inline / 2006-11-09-InlineCGUpdate.ll
blobe4323194f62303562fea2791f664f0ace92484c9
1 ; RUN: opt < %s -inline -prune-eh -disable-output -enable-new-pm=0
2 ; PR992
3 target datalayout = "e-p:32:32"
4 target triple = "i686-pc-linux-gnu"
5         %struct._IO_FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct._IO_FILE*, i32, i32, i32, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i32, [52 x i8] }
6         %struct._IO_marker = type { %struct._IO_marker*, %struct._IO_FILE*, i32 }
7         %"struct.__cxxabiv1::__array_type_info" = type { %"struct.std::type_info" }
8         %"struct.__cxxabiv1::__si_class_type_info" = type { %"struct.__cxxabiv1::__array_type_info", %"struct.__cxxabiv1::__array_type_info"* }
9         %"struct.__gnu_cxx::_Rope_rep_alloc_base<char,std::allocator<char>, true>" = type { i32 }
10         %"struct.__gnu_cxx::__normal_iterator<char*,std::basic_string<char, std::char_traits<char>, std::allocator<char> > >" = type { i8* }
11         %"struct.__gnu_cxx::__normal_iterator<const wchar_t*,std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > >" = type { i32* }
12         %"struct.__gnu_cxx::char_producer<char>" = type { i32 (...)** }
13         %"struct.__gnu_cxx::stdio_sync_filebuf<char,std::char_traits<char> >" = type { %"struct.std::basic_streambuf<char,std::char_traits<char> >", %struct._IO_FILE*, i32 }
14         %"struct.__gnu_cxx::stdio_sync_filebuf<wchar_t,std::char_traits<wchar_t> >" = type { %"struct.std::basic_streambuf<wchar_t,std::char_traits<wchar_t> >", %struct._IO_FILE*, i32 }
15         %struct.__locale_struct = type { [13 x %struct.locale_data*], i16*, i32*, i32*, [13 x i8*] }
16         %struct.__mbstate_t = type { i32, %"struct.__gnu_cxx::_Rope_rep_alloc_base<char,std::allocator<char>, true>" }
17         %struct.locale_data = type opaque
18         %"struct.std::__basic_file<char>" = type { %struct._IO_FILE*, i1 }
19         %"struct.std::__codecvt_abstract_base<char,char,__mbstate_t>" = type { %"struct.std::locale::facet" }
20         %"struct.std::basic_filebuf<char,std::char_traits<char> >" = type { %"struct.std::basic_streambuf<char,std::char_traits<char> >", i32, %"struct.std::__basic_file<char>", i32, %struct.__mbstate_t, %struct.__mbstate_t, i8*, i32, i1, i1, i1, i1, i8, i8*, i8*, i1, %"struct.std::codecvt<char,char,__mbstate_t>"*, i8*, i32, i8*, i8* }
21         %"struct.std::basic_filebuf<wchar_t,std::char_traits<wchar_t> >" = type { %"struct.std::basic_streambuf<wchar_t,std::char_traits<wchar_t> >", i32, %"struct.std::__basic_file<char>", i32, %struct.__mbstate_t, %struct.__mbstate_t, i32*, i32, i1, i1, i1, i1, i32, i32*, i32*, i1, %"struct.std::codecvt<char,char,__mbstate_t>"*, i8*, i32, i8*, i8* }
22         %"struct.std::basic_fstream<char,std::char_traits<char> >" = type { { %"struct.std::locale::facet", %"struct.__gnu_cxx::char_producer<char>" }, %"struct.std::basic_filebuf<char,std::char_traits<char> >", %"struct.std::basic_ios<char,std::char_traits<char> >" }
23         %"struct.std::basic_fstream<wchar_t,std::char_traits<wchar_t> >" = type { { %"struct.std::locale::facet", %"struct.__gnu_cxx::char_producer<char>" }, %"struct.std::basic_filebuf<wchar_t,std::char_traits<wchar_t> >", %"struct.std::basic_ios<wchar_t,std::char_traits<wchar_t> >" }
24         %"struct.std::basic_ios<char,std::char_traits<char> >" = type { %"struct.std::ios_base", %"struct.std::basic_ostream<char,std::char_traits<char> >"*, i8, i1, %"struct.std::basic_streambuf<char,std::char_traits<char> >"*, %"struct.std::ctype<char>"*, %"struct.std::__codecvt_abstract_base<char,char,__mbstate_t>"*, %"struct.std::__codecvt_abstract_base<char,char,__mbstate_t>"* }
25         %"struct.std::basic_ios<wchar_t,std::char_traits<wchar_t> >" = type { %"struct.std::ios_base", %"struct.std::basic_ostream<wchar_t,std::char_traits<wchar_t> >"*, i32, i1, %"struct.std::basic_streambuf<wchar_t,std::char_traits<wchar_t> >"*, %"struct.std::codecvt<char,char,__mbstate_t>"*, %"struct.std::__codecvt_abstract_base<char,char,__mbstate_t>"*, %"struct.std::__codecvt_abstract_base<char,char,__mbstate_t>"* }
26         %"struct.std::basic_iostream<wchar_t,std::char_traits<wchar_t> >" = type { %"struct.std::locale::facet", %"struct.__gnu_cxx::char_producer<char>", %"struct.std::basic_ios<wchar_t,std::char_traits<wchar_t> >" }
27         %"struct.std::basic_ostream<char,std::char_traits<char> >" = type { i32 (...)**, %"struct.std::basic_ios<char,std::char_traits<char> >" }
28         %"struct.std::basic_ostream<wchar_t,std::char_traits<wchar_t> >" = type { i32 (...)**, %"struct.std::basic_ios<wchar_t,std::char_traits<wchar_t> >" }
29         %"struct.std::basic_streambuf<char,std::char_traits<char> >" = type { i32 (...)**, i8*, i8*, i8*, i8*, i8*, i8*, %"struct.std::locale" }
30         %"struct.std::basic_streambuf<wchar_t,std::char_traits<wchar_t> >" = type { i32 (...)**, i32*, i32*, i32*, i32*, i32*, i32*, %"struct.std::locale" }
31         %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >" = type { %"struct.__gnu_cxx::__normal_iterator<char*,std::basic_string<char, std::char_traits<char>, std::allocator<char> > >" }
32         %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Rep" = type { %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Rep_base" }
33         %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Rep_base" = type { i32, i32, i32 }
34         %"struct.std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >" = type { %"struct.__gnu_cxx::__normal_iterator<const wchar_t*,std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > >" }
35         %"struct.std::codecvt<char,char,__mbstate_t>" = type { %"struct.std::__codecvt_abstract_base<char,char,__mbstate_t>", %struct.__locale_struct* }
36         %"struct.std::collate<char>" = type { %"struct.std::locale::facet", %struct.__locale_struct* }
37         %"struct.std::collate_byname<char>" = type { %"struct.std::collate<char>" }
38         %"struct.std::ctype<char>" = type { %"struct.std::__codecvt_abstract_base<char,char,__mbstate_t>", %struct.__locale_struct*, i1, i32*, i32*, i16* }
39         %"struct.std::ctype_byname<char>" = type { %"struct.std::ctype<char>" }
40         %"struct.std::domain_error" = type { %"struct.std::logic_error" }
41         %"struct.std::ios_base" = type { i32 (...)**, i32, i32, i32, i32, i32, %"struct.std::ios_base::_Callback_list"*, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, %"struct.std::ios_base::_Words"*, %"struct.std::locale" }
42         %"struct.std::ios_base::_Callback_list" = type { %"struct.std::ios_base::_Callback_list"*, void (i32, %"struct.std::ios_base"*, i32)*, i32, i32 }
43         %"struct.std::ios_base::_Words" = type { i8*, i32 }
44         %"struct.std::istreambuf_iterator<char,std::char_traits<char> >" = type { %"struct.std::basic_streambuf<char,std::char_traits<char> >"*, i32 }
45         %"struct.std::istreambuf_iterator<wchar_t,std::char_traits<wchar_t> >" = type { %"struct.std::basic_streambuf<wchar_t,std::char_traits<wchar_t> >"*, i32 }
46         %"struct.std::locale" = type { %"struct.std::locale::_Impl"* }
47         %"struct.std::locale::_Impl" = type { i32, %"struct.std::locale::facet"**, i32, %"struct.std::locale::facet"**, i8** }
48         %"struct.std::locale::facet" = type { i32 (...)**, i32 }
49         %"struct.std::logic_error" = type { %"struct.__gnu_cxx::char_producer<char>", %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >" }
50         %"struct.std::type_info" = type { i32 (...)**, i8* }
51 @.str_11 = external global [42 x i8]            ; <[42 x i8]*> [#uses=0]
52 @.str_9 = external global [24 x i8]             ; <[24 x i8]*> [#uses=0]
53 @.str_1 = external global [17 x i8]             ; <[17 x i8]*> [#uses=0]
55 define void @main() {
56 entry:
57         tail call fastcc void @_ZNSolsEi( )
58         ret void
61 define fastcc void @_ZNSolsEi() {
62 entry:
63         %tmp.22 = icmp eq i32 0, 0              ; <i1> [#uses=1]
64         br i1 %tmp.22, label %else, label %then
66 then:           ; preds = %entry
67         ret void
69 else:           ; preds = %entry
70         tail call fastcc void @_ZNSolsEl( )
71         ret void
74 define void @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_() {
75 entry:
76         ret void
79 define fastcc void @_ZNSt9basic_iosIcSt11char_traitsIcEE8setstateESt12_Ios_Iostate() {
80 entry:
81         tail call fastcc void @_ZSt19__throw_ios_failurePKc( )
82         ret void
85 define fastcc void @_ZNSo3putEc() {
86 entry:
87         ret void
90 define fastcc void @_ZNSolsEl() {
91 entry:
92         %tmp.21.i = icmp eq %"struct.std::basic_ostream<char,std::char_traits<char> >"* null, null              ; <i1> [#uses=1]
93         br i1 %tmp.21.i, label %endif.0.i, label %shortcirc_next.i
95 shortcirc_next.i:               ; preds = %entry
96         ret void
98 endif.0.i:              ; preds = %entry
99         call fastcc void @_ZNSt9basic_iosIcSt11char_traitsIcEE8setstateESt12_Ios_Iostate( )
100         ret void
103 define fastcc void @_ZSt19__throw_ios_failurePKc() {
104 entry:
105         call fastcc void @_ZNSsC1EPKcRKSaIcE( )
106         ret void
109 define fastcc void @_ZNSt8ios_baseD2Ev() {
110 entry:
111         unreachable
114 define void @_ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE5uflowEv() {
115 entry:
116         unreachable
119 define void @_ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEED1Ev() {
120 entry:
121         unreachable
124 define void @_ZNSt15basic_streambufIcSt11char_traitsIcEE6setbufEPci() {
125 entry:
126         ret void
129 define fastcc void @_ZSt9use_facetISt5ctypeIcEERKT_RKSt6locale() {
130 entry:
131         ret void
134 declare fastcc void @_ZNSaIcED1Ev()
136 define fastcc void @_ZSt19__throw_logic_errorPKc() {
137 entry:
138         call fastcc void @_ZNSt11logic_errorC1ERKSs( )
139         ret void
142 define fastcc void @_ZNSs4_Rep9_S_createEjRKSaIcE() {
143 entry:
144         br i1 false, label %then.0, label %endif.0
146 then.0:         ; preds = %entry
147         call fastcc void @_ZSt20__throw_length_errorPKc( )
148         ret void
150 endif.0:                ; preds = %entry
151         ret void
154 define fastcc void @_ZSt20__throw_length_errorPKc() {
155 entry:
156         call fastcc void @_ZNSt12length_errorC1ERKSs( )
157         ret void
160 define fastcc void @_ZNSs16_S_construct_auxIPKcEEPcT_S3_RKSaIcE12__false_type() {
161 entry:
162         br i1 false, label %then.1.i, label %endif.1.i
164 then.1.i:               ; preds = %entry
165         call fastcc void @_ZSt19__throw_logic_errorPKc( )
166         ret void
168 endif.1.i:              ; preds = %entry
169         call fastcc void @_ZNSs4_Rep9_S_createEjRKSaIcE( )
170         unreachable
173 define fastcc void @_ZNSsC1ERKSs() personality i32 (...)* @__gxx_personality_v0 {
174 entry:
175         call fastcc void @_ZNSs4_Rep7_M_grabERKSaIcES2_( )
176         invoke fastcc void @_ZNSaIcEC1ERKS_( )
177                         to label %invoke_cont.1 unwind label %invoke_catch.1
179 invoke_catch.1:         ; preds = %entry
180         %exn = landingpad {i8*, i32}
181                  catch i8* null
182         call fastcc void @_ZNSaIcED1Ev( )
183         resume { i8*, i32 } %exn
185 invoke_cont.1:          ; preds = %entry
186         call fastcc void @_ZNSaIcEC2ERKS_( )
187         ret void
190 define fastcc void @_ZNSs7reserveEj() {
191 entry:
192         ret void
195 define fastcc void @_ZNSaIcEC1ERKS_() {
196 entry:
197         ret void
200 define fastcc void @_ZNSs4_Rep7_M_grabERKSaIcES2_() {
201 entry:
202         br i1 false, label %else.i, label %cond_true
204 cond_true:              ; preds = %entry
205         ret void
207 else.i:         ; preds = %entry
208         tail call fastcc void @_ZNSs4_Rep9_S_createEjRKSaIcE( )
209         ret void
212 define fastcc void @_ZNSsC1EPKcRKSaIcE() {
213 entry:
214         tail call fastcc void @_ZNSs16_S_construct_auxIPKcEEPcT_S3_RKSaIcE12__false_type( )
215         unreachable
218 define fastcc void @_ZNSaIcEC2ERKS_() {
219 entry:
220         ret void
223 define void @_ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev() {
224 entry:
225         unreachable
228 define void @_ZNSt14collate_bynameIcED1Ev() {
229 entry:
230         unreachable
233 define void @_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRy() {
234 entry:
235         ret void
238 define void @_ZNSt23__codecvt_abstract_baseIcc11__mbstate_tED1Ev() {
239 entry:
240         unreachable
243 define void @_ZNSt12ctype_bynameIcED0Ev() {
244 entry:
245         unreachable
248 define fastcc void @_ZNSt8messagesIwEC1Ej() {
249 entry:
250         ret void
253 define fastcc void @_ZSt14__convert_to_vIlEvPKcRT_RSt12_Ios_IostateRKP15__locale_structi() {
254 entry:
255         ret void
258 define fastcc void @_ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Ej() {
259 entry:
260         ret void
263 define fastcc void @_ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Ej() {
264 entry:
265         ret void
268 define fastcc void @_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE16_M_extract_floatES3_S3_RSt8ios_baseRSt12_Ios_IostateRSs() {
269 entry:
270         unreachable
273 define fastcc void @_ZNSbIwSt11char_traitsIwESaIwEE4swapERS2_() {
274 entry:
275         ret void
278 define void @_ZNSt14basic_iostreamIwSt11char_traitsIwEED0Ev() {
279 entry:
280         unreachable
283 define void @_ZNSt15basic_streambufIcSt11char_traitsIcEE9showmanycEv() {
284 entry:
285         ret void
288 define void @_ZNSt9exceptionD0Ev() {
289 entry:
290         unreachable
293 define fastcc void @_ZNSt11logic_errorC1ERKSs() {
294 entry:
295         call fastcc void @_ZNSsC1ERKSs( )
296         ret void
299 define fastcc void @_ZNSt11logic_errorD2Ev() {
300 entry:
301         unreachable
304 define fastcc void @_ZNSt12length_errorC1ERKSs() personality i32 (...)* @__gxx_personality_v0 {
305 entry:
306         invoke fastcc void @_ZNSsC1ERKSs( )
307                         to label %_ZNSt11logic_errorC2ERKSs.exit unwind label %invoke_catch.i
309 invoke_catch.i:         ; preds = %entry
310         %exn = landingpad {i8*, i32}
311                  catch i8* null
312         resume { i8*, i32 } %exn
314 _ZNSt11logic_errorC2ERKSs.exit:         ; preds = %entry
315         ret void
318 define void @_ZNK10__cxxabiv120__si_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2_() {
319 entry:
320         ret void
323 define fastcc void @_ZNSbIwSt11char_traitsIwESaIwEE16_S_construct_auxIPKwEEPwT_S7_RKS1_12__false_type() {
324 entry:
325         ret void
328 define void @_ZTv0_n12_NSt13basic_fstreamIwSt11char_traitsIwEED1Ev() {
329 entry:
330         ret void
333 define void @_ZNSt13basic_fstreamIcSt11char_traitsIcEED1Ev() {
334 entry:
335         unreachable
338 define fastcc void @_ZNSt5ctypeIcEC1EPKtbj() {
339 entry:
340         ret void
343 declare i32 @__gxx_personality_v0(...)