1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2014-2015 - Scilab Enterprises - Calixte DENIZET
4  *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  */
15 
16 // This file has been generated, so don't modify it by hand !!
17 
18 #include "checkers/Checkers.hxx"
19 
20 namespace analysis
21 {
check_____power____(GVN & gvn,const TIType & in0,const TIType & in1)22 TIType Checkers::check_____power____(GVN & gvn, const TIType & in0, const TIType & in1)
23 {
24     switch (in0.type)
25     {
26         case TIType::EMPTY :
27         {
28             switch (in1.type)
29             {
30                 case TIType::EMPTY :
31                 {
32                     return in0;
33                 }
34                 case TIType::BOOLEAN :
35                 {
36                     return in0;
37                 }
38                 case TIType::COMPLEX :
39                 {
40                     return in0;
41                 }
42                 case TIType::DOUBLE :
43                 {
44                     return in0;
45                 }
46                 case TIType::INT16 :
47                 {
48                     return in0;
49                 }
50                 case TIType::INT32 :
51                 {
52                     return in0;
53                 }
54                 case TIType::INT64 :
55                 {
56                     return in0;
57                 }
58                 case TIType::INT8 :
59                 {
60                     return in0;
61                 }
62                 case TIType::UINT16 :
63                 {
64                     return in0;
65                 }
66                 case TIType::UINT32 :
67                 {
68                     return in0;
69                 }
70                 case TIType::UINT64 :
71                 {
72                     return in0;
73                 }
74                 case TIType::UINT8 :
75                 {
76                     return in0;
77                 }
78                 default :
79                     return TIType(gvn);
80             }
81         }
82         case TIType::BOOLEAN :
83         {
84             switch (in1.type)
85             {
86                 case TIType::EMPTY :
87                 {
88                     return in1;
89                 }
90                 case TIType::COMPLEX :
91                 {
92                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
93                     {
94                         return TIType(gvn, TIType::COMPLEX, in0.rows, in0.rows);
95                     }
96                     if (in0.rows == 1 && in0.cols == 1)
97                     {
98                         return in1;
99                     }
100                     return TIType(gvn, TIType::COMPLEX, -2, -2);
101                 }
102                 case TIType::DOUBLE :
103                 {
104                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
105                     {
106                         return TIType(gvn, TIType::DOUBLE, in0.rows, in0.rows);
107                     }
108                     if (in0.rows == 1 && in0.cols == 1)
109                     {
110                         return in1;
111                     }
112                     return TIType(gvn, TIType::DOUBLE, -2, -2);
113                 }
114                 default :
115                     return TIType(gvn);
116             }
117         }
118         case TIType::COMPLEX :
119         {
120             switch (in1.type)
121             {
122                 case TIType::EMPTY :
123                 {
124                     return in1;
125                 }
126                 case TIType::BOOLEAN :
127                 {
128                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
129                     {
130                         return in0;
131                     }
132                     if (in0.rows == 1 && in0.cols == 1)
133                     {
134                         return TIType(gvn, TIType::COMPLEX, in1.rows, in1.cols);
135                     }
136                     return TIType(gvn, TIType::COMPLEX, -2, -2);
137                 }
138                 case TIType::COMPLEX :
139                 {
140                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
141                     {
142                         return in0;
143                     }
144                     if (in0.rows == 1 && in0.cols == 1)
145                     {
146                         return in1;
147                     }
148                     return TIType(gvn, TIType::COMPLEX, -2, -2);
149                 }
150                 case TIType::DOUBLE :
151                 {
152                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
153                     {
154                         return in0;
155                     }
156                     if (in0.rows == 1 && in0.cols == 1)
157                     {
158                         return TIType(gvn, TIType::COMPLEX, in1.rows, in1.cols);
159                     }
160                     return TIType(gvn, TIType::COMPLEX, -2, -2);
161                 }
162                 default :
163                     return TIType(gvn);
164             }
165         }
166         case TIType::DOUBLE :
167         {
168             switch (in1.type)
169             {
170                 case TIType::EMPTY :
171                 {
172                     return in1;
173                 }
174                 case TIType::BOOLEAN :
175                 {
176                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
177                     {
178                         return in0;
179                     }
180                     if (in0.rows == 1 && in0.cols == 1)
181                     {
182                         return TIType(gvn, TIType::DOUBLE, in1.rows, in1.cols);
183                     }
184                     return TIType(gvn, TIType::DOUBLE, -2, -2);
185                 }
186                 case TIType::COMPLEX :
187                 {
188                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
189                     {
190                         return TIType(gvn, TIType::COMPLEX, in0.rows, in0.rows);
191                     }
192                     if (in0.rows == 1 && in0.cols == 1)
193                     {
194                         return in1;
195                     }
196                     return TIType(gvn, TIType::COMPLEX, -2, -2);
197                 }
198                 case TIType::DOUBLE :
199                 {
200                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
201                     {
202                         return TIType(gvn, TIType::COMPLEX, in0.rows, in0.rows);
203                     }
204                     if (in0.rows == 1 && in0.cols == 1)
205                     {
206                         return TIType(gvn, TIType::COMPLEX, in1.rows, in1.cols);
207                     }
208                     return TIType(gvn, TIType::COMPLEX, -2, -2);
209                 }
210                 case TIType::INT16 :
211                 {
212                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
213                     {
214                         return TIType(gvn, TIType::INT16, in0.rows, in0.rows);
215                     }
216                     if (in0.rows == 1 && in0.cols == 1)
217                     {
218                         return in1;
219                     }
220                     return TIType(gvn, TIType::INT16, -2, -2);
221                 }
222                 case TIType::INT32 :
223                 {
224                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
225                     {
226                         return TIType(gvn, TIType::INT32, in0.rows, in0.rows);
227                     }
228                     if (in0.rows == 1 && in0.cols == 1)
229                     {
230                         return in1;
231                     }
232                     return TIType(gvn, TIType::INT32, -2, -2);
233                 }
234                 case TIType::INT64 :
235                 {
236                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
237                     {
238                         return TIType(gvn, TIType::INT64, in0.rows, in0.rows);
239                     }
240                     if (in0.rows == 1 && in0.cols == 1)
241                     {
242                         return in1;
243                     }
244                     return TIType(gvn, TIType::INT64, -2, -2);
245                 }
246                 case TIType::INT8 :
247                 {
248                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
249                     {
250                         return TIType(gvn, TIType::INT8, in0.rows, in0.rows);
251                     }
252                     if (in0.rows == 1 && in0.cols == 1)
253                     {
254                         return in1;
255                     }
256                     return TIType(gvn, TIType::INT8, -2, -2);
257                 }
258                 case TIType::UINT16 :
259                 {
260                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
261                     {
262                         return TIType(gvn, TIType::UINT16, in0.rows, in0.rows);
263                     }
264                     if (in0.rows == 1 && in0.cols == 1)
265                     {
266                         return in1;
267                     }
268                     return TIType(gvn, TIType::UINT16, -2, -2);
269                 }
270                 case TIType::UINT32 :
271                 {
272                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
273                     {
274                         return TIType(gvn, TIType::UINT32, in0.rows, in0.rows);
275                     }
276                     if (in0.rows == 1 && in0.cols == 1)
277                     {
278                         return in1;
279                     }
280                     return TIType(gvn, TIType::UINT32, -2, -2);
281                 }
282                 case TIType::UINT64 :
283                 {
284                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
285                     {
286                         return TIType(gvn, TIType::UINT64, in0.rows, in0.rows);
287                     }
288                     if (in0.rows == 1 && in0.cols == 1)
289                     {
290                         return in1;
291                     }
292                     return TIType(gvn, TIType::UINT64, -2, -2);
293                 }
294                 case TIType::UINT8 :
295                 {
296                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
297                     {
298                         return TIType(gvn, TIType::UINT8, in0.rows, in0.rows);
299                     }
300                     if (in0.rows == 1 && in0.cols == 1)
301                     {
302                         return in1;
303                     }
304                     return TIType(gvn, TIType::UINT8, -2, -2);
305                 }
306                 default :
307                     return TIType(gvn);
308             }
309         }
310         case TIType::INT16 :
311         {
312             switch (in1.type)
313             {
314                 case TIType::EMPTY :
315                 {
316                     return in1;
317                 }
318                 case TIType::DOUBLE :
319                 {
320                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
321                     {
322                         return in0;
323                     }
324                     if (in0.rows == 1 && in0.cols == 1)
325                     {
326                         return TIType(gvn, TIType::INT16, in1.rows, in1.cols);
327                     }
328                     return TIType(gvn, TIType::INT16, -2, -2);
329                 }
330                 case TIType::INT16 :
331                 {
332                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
333                     {
334                         return in0;
335                     }
336                     if (in0.rows == 1 && in0.cols == 1)
337                     {
338                         return in1;
339                     }
340                     return TIType(gvn, TIType::INT16, -2, -2);
341                 }
342                 case TIType::INT32 :
343                 {
344                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
345                     {
346                         return TIType(gvn, TIType::INT32, in0.rows, in0.rows);
347                     }
348                     if (in0.rows == 1 && in0.cols == 1)
349                     {
350                         return in1;
351                     }
352                     return TIType(gvn, TIType::INT32, -2, -2);
353                 }
354                 case TIType::INT64 :
355                 {
356                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
357                     {
358                         return TIType(gvn, TIType::INT64, in0.rows, in0.rows);
359                     }
360                     if (in0.rows == 1 && in0.cols == 1)
361                     {
362                         return in1;
363                     }
364                     return TIType(gvn, TIType::INT64, -2, -2);
365                 }
366                 case TIType::INT8 :
367                 {
368                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
369                     {
370                         return in0;
371                     }
372                     if (in0.rows == 1 && in0.cols == 1)
373                     {
374                         return TIType(gvn, TIType::INT16, in1.rows, in1.cols);
375                     }
376                     return TIType(gvn, TIType::INT16, -2, -2);
377                 }
378                 case TIType::UINT16 :
379                 {
380                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
381                     {
382                         return TIType(gvn, TIType::UINT16, in0.rows, in0.rows);
383                     }
384                     if (in0.rows == 1 && in0.cols == 1)
385                     {
386                         return in1;
387                     }
388                     return TIType(gvn, TIType::UINT16, -2, -2);
389                 }
390                 case TIType::UINT32 :
391                 {
392                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
393                     {
394                         return TIType(gvn, TIType::UINT32, in0.rows, in0.rows);
395                     }
396                     if (in0.rows == 1 && in0.cols == 1)
397                     {
398                         return in1;
399                     }
400                     return TIType(gvn, TIType::UINT32, -2, -2);
401                 }
402                 case TIType::UINT64 :
403                 {
404                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
405                     {
406                         return TIType(gvn, TIType::UINT64, in0.rows, in0.rows);
407                     }
408                     if (in0.rows == 1 && in0.cols == 1)
409                     {
410                         return in1;
411                     }
412                     return TIType(gvn, TIType::UINT64, -2, -2);
413                 }
414                 case TIType::UINT8 :
415                 {
416                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
417                     {
418                         return TIType(gvn, TIType::UINT16, in0.rows, in0.rows);
419                     }
420                     if (in0.rows == 1 && in0.cols == 1)
421                     {
422                         return TIType(gvn, TIType::UINT16, in1.rows, in1.cols);
423                     }
424                     return TIType(gvn, TIType::UINT16, -2, -2);
425                 }
426                 default :
427                     return TIType(gvn);
428             }
429         }
430         case TIType::INT32 :
431         {
432             switch (in1.type)
433             {
434                 case TIType::EMPTY :
435                 {
436                     return in1;
437                 }
438                 case TIType::DOUBLE :
439                 {
440                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
441                     {
442                         return in0;
443                     }
444                     if (in0.rows == 1 && in0.cols == 1)
445                     {
446                         return TIType(gvn, TIType::INT32, in1.rows, in1.cols);
447                     }
448                     return TIType(gvn, TIType::INT32, -2, -2);
449                 }
450                 case TIType::INT16 :
451                 {
452                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
453                     {
454                         return in0;
455                     }
456                     if (in0.rows == 1 && in0.cols == 1)
457                     {
458                         return TIType(gvn, TIType::INT32, in1.rows, in1.cols);
459                     }
460                     return TIType(gvn, TIType::INT32, -2, -2);
461                 }
462                 case TIType::INT32 :
463                 {
464                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
465                     {
466                         return in0;
467                     }
468                     if (in0.rows == 1 && in0.cols == 1)
469                     {
470                         return in1;
471                     }
472                     return TIType(gvn, TIType::INT32, -2, -2);
473                 }
474                 case TIType::INT64 :
475                 {
476                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
477                     {
478                         return TIType(gvn, TIType::INT64, in0.rows, in0.rows);
479                     }
480                     if (in0.rows == 1 && in0.cols == 1)
481                     {
482                         return in1;
483                     }
484                     return TIType(gvn, TIType::INT64, -2, -2);
485                 }
486                 case TIType::INT8 :
487                 {
488                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
489                     {
490                         return in0;
491                     }
492                     if (in0.rows == 1 && in0.cols == 1)
493                     {
494                         return TIType(gvn, TIType::INT32, in1.rows, in1.cols);
495                     }
496                     return TIType(gvn, TIType::INT32, -2, -2);
497                 }
498                 case TIType::UINT16 :
499                 {
500                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
501                     {
502                         return TIType(gvn, TIType::UINT32, in0.rows, in0.rows);
503                     }
504                     if (in0.rows == 1 && in0.cols == 1)
505                     {
506                         return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
507                     }
508                     return TIType(gvn, TIType::UINT32, -2, -2);
509                 }
510                 case TIType::UINT32 :
511                 {
512                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
513                     {
514                         return TIType(gvn, TIType::UINT32, in0.rows, in0.rows);
515                     }
516                     if (in0.rows == 1 && in0.cols == 1)
517                     {
518                         return in1;
519                     }
520                     return TIType(gvn, TIType::UINT32, -2, -2);
521                 }
522                 case TIType::UINT64 :
523                 {
524                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
525                     {
526                         return TIType(gvn, TIType::UINT64, in0.rows, in0.rows);
527                     }
528                     if (in0.rows == 1 && in0.cols == 1)
529                     {
530                         return in1;
531                     }
532                     return TIType(gvn, TIType::UINT64, -2, -2);
533                 }
534                 case TIType::UINT8 :
535                 {
536                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
537                     {
538                         return TIType(gvn, TIType::UINT32, in0.rows, in0.rows);
539                     }
540                     if (in0.rows == 1 && in0.cols == 1)
541                     {
542                         return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
543                     }
544                     return TIType(gvn, TIType::UINT32, -2, -2);
545                 }
546                 default :
547                     return TIType(gvn);
548             }
549         }
550         case TIType::INT64 :
551         {
552             switch (in1.type)
553             {
554                 case TIType::EMPTY :
555                 {
556                     return in1;
557                 }
558                 case TIType::DOUBLE :
559                 {
560                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
561                     {
562                         return in0;
563                     }
564                     if (in0.rows == 1 && in0.cols == 1)
565                     {
566                         return TIType(gvn, TIType::INT64, in1.rows, in1.cols);
567                     }
568                     return TIType(gvn, TIType::INT64, -2, -2);
569                 }
570                 case TIType::INT16 :
571                 {
572                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
573                     {
574                         return in0;
575                     }
576                     if (in0.rows == 1 && in0.cols == 1)
577                     {
578                         return TIType(gvn, TIType::INT64, in1.rows, in1.cols);
579                     }
580                     return TIType(gvn, TIType::INT64, -2, -2);
581                 }
582                 case TIType::INT32 :
583                 {
584                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
585                     {
586                         return in0;
587                     }
588                     if (in0.rows == 1 && in0.cols == 1)
589                     {
590                         return TIType(gvn, TIType::INT64, in1.rows, in1.cols);
591                     }
592                     return TIType(gvn, TIType::INT64, -2, -2);
593                 }
594                 case TIType::INT64 :
595                 {
596                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
597                     {
598                         return in0;
599                     }
600                     if (in0.rows == 1 && in0.cols == 1)
601                     {
602                         return in1;
603                     }
604                     return TIType(gvn, TIType::INT64, -2, -2);
605                 }
606                 case TIType::INT8 :
607                 {
608                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
609                     {
610                         return in0;
611                     }
612                     if (in0.rows == 1 && in0.cols == 1)
613                     {
614                         return TIType(gvn, TIType::INT64, in1.rows, in1.cols);
615                     }
616                     return TIType(gvn, TIType::INT64, -2, -2);
617                 }
618                 case TIType::UINT16 :
619                 {
620                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
621                     {
622                         return TIType(gvn, TIType::UINT64, in0.rows, in0.rows);
623                     }
624                     if (in0.rows == 1 && in0.cols == 1)
625                     {
626                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
627                     }
628                     return TIType(gvn, TIType::UINT64, -2, -2);
629                 }
630                 case TIType::UINT32 :
631                 {
632                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
633                     {
634                         return TIType(gvn, TIType::UINT64, in0.rows, in0.rows);
635                     }
636                     if (in0.rows == 1 && in0.cols == 1)
637                     {
638                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
639                     }
640                     return TIType(gvn, TIType::UINT64, -2, -2);
641                 }
642                 case TIType::UINT64 :
643                 {
644                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
645                     {
646                         return TIType(gvn, TIType::UINT64, in0.rows, in0.rows);
647                     }
648                     if (in0.rows == 1 && in0.cols == 1)
649                     {
650                         return in1;
651                     }
652                     return TIType(gvn, TIType::UINT64, -2, -2);
653                 }
654                 case TIType::UINT8 :
655                 {
656                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
657                     {
658                         return TIType(gvn, TIType::UINT64, in0.rows, in0.rows);
659                     }
660                     if (in0.rows == 1 && in0.cols == 1)
661                     {
662                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
663                     }
664                     return TIType(gvn, TIType::UINT64, -2, -2);
665                 }
666                 default :
667                     return TIType(gvn);
668             }
669         }
670         case TIType::INT8 :
671         {
672             switch (in1.type)
673             {
674                 case TIType::EMPTY :
675                 {
676                     return in1;
677                 }
678                 case TIType::DOUBLE :
679                 {
680                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
681                     {
682                         return in0;
683                     }
684                     if (in0.rows == 1 && in0.cols == 1)
685                     {
686                         return TIType(gvn, TIType::INT8, in1.rows, in1.cols);
687                     }
688                     return TIType(gvn, TIType::INT8, -2, -2);
689                 }
690                 case TIType::INT16 :
691                 {
692                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
693                     {
694                         return TIType(gvn, TIType::INT16, in0.rows, in0.rows);
695                     }
696                     if (in0.rows == 1 && in0.cols == 1)
697                     {
698                         return in1;
699                     }
700                     return TIType(gvn, TIType::INT16, -2, -2);
701                 }
702                 case TIType::INT32 :
703                 {
704                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
705                     {
706                         return TIType(gvn, TIType::INT32, in0.rows, in0.rows);
707                     }
708                     if (in0.rows == 1 && in0.cols == 1)
709                     {
710                         return in1;
711                     }
712                     return TIType(gvn, TIType::INT32, -2, -2);
713                 }
714                 case TIType::INT64 :
715                 {
716                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
717                     {
718                         return TIType(gvn, TIType::INT64, in0.rows, in0.rows);
719                     }
720                     if (in0.rows == 1 && in0.cols == 1)
721                     {
722                         return in1;
723                     }
724                     return TIType(gvn, TIType::INT64, -2, -2);
725                 }
726                 case TIType::INT8 :
727                 {
728                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
729                     {
730                         return in0;
731                     }
732                     if (in0.rows == 1 && in0.cols == 1)
733                     {
734                         return in1;
735                     }
736                     return TIType(gvn, TIType::INT8, -2, -2);
737                 }
738                 case TIType::UINT16 :
739                 {
740                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
741                     {
742                         return TIType(gvn, TIType::UINT16, in0.rows, in0.rows);
743                     }
744                     if (in0.rows == 1 && in0.cols == 1)
745                     {
746                         return in1;
747                     }
748                     return TIType(gvn, TIType::UINT16, -2, -2);
749                 }
750                 case TIType::UINT32 :
751                 {
752                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
753                     {
754                         return TIType(gvn, TIType::UINT32, in0.rows, in0.rows);
755                     }
756                     if (in0.rows == 1 && in0.cols == 1)
757                     {
758                         return in1;
759                     }
760                     return TIType(gvn, TIType::UINT32, -2, -2);
761                 }
762                 case TIType::UINT64 :
763                 {
764                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
765                     {
766                         return TIType(gvn, TIType::UINT64, in0.rows, in0.rows);
767                     }
768                     if (in0.rows == 1 && in0.cols == 1)
769                     {
770                         return in1;
771                     }
772                     return TIType(gvn, TIType::UINT64, -2, -2);
773                 }
774                 case TIType::UINT8 :
775                 {
776                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
777                     {
778                         return TIType(gvn, TIType::UINT8, in0.rows, in0.rows);
779                     }
780                     if (in0.rows == 1 && in0.cols == 1)
781                     {
782                         return in1;
783                     }
784                     return TIType(gvn, TIType::UINT8, -2, -2);
785                 }
786                 default :
787                     return TIType(gvn);
788             }
789         }
790         case TIType::UINT16 :
791         {
792             switch (in1.type)
793             {
794                 case TIType::EMPTY :
795                 {
796                     return in1;
797                 }
798                 case TIType::DOUBLE :
799                 {
800                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
801                     {
802                         return in0;
803                     }
804                     if (in0.rows == 1 && in0.cols == 1)
805                     {
806                         return TIType(gvn, TIType::UINT16, in1.rows, in1.cols);
807                     }
808                     return TIType(gvn, TIType::UINT16, -2, -2);
809                 }
810                 case TIType::INT16 :
811                 {
812                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
813                     {
814                         return in0;
815                     }
816                     if (in0.rows == 1 && in0.cols == 1)
817                     {
818                         return TIType(gvn, TIType::UINT16, in1.rows, in1.cols);
819                     }
820                     return TIType(gvn, TIType::UINT16, -2, -2);
821                 }
822                 case TIType::INT32 :
823                 {
824                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
825                     {
826                         return TIType(gvn, TIType::UINT32, in0.rows, in0.rows);
827                     }
828                     if (in0.rows == 1 && in0.cols == 1)
829                     {
830                         return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
831                     }
832                     return TIType(gvn, TIType::UINT32, -2, -2);
833                 }
834                 case TIType::INT64 :
835                 {
836                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
837                     {
838                         return TIType(gvn, TIType::UINT64, in0.rows, in0.rows);
839                     }
840                     if (in0.rows == 1 && in0.cols == 1)
841                     {
842                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
843                     }
844                     return TIType(gvn, TIType::UINT64, -2, -2);
845                 }
846                 case TIType::INT8 :
847                 {
848                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
849                     {
850                         return in0;
851                     }
852                     if (in0.rows == 1 && in0.cols == 1)
853                     {
854                         return TIType(gvn, TIType::UINT16, in1.rows, in1.cols);
855                     }
856                     return TIType(gvn, TIType::UINT16, -2, -2);
857                 }
858                 case TIType::UINT16 :
859                 {
860                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
861                     {
862                         return in0;
863                     }
864                     if (in0.rows == 1 && in0.cols == 1)
865                     {
866                         return in1;
867                     }
868                     return TIType(gvn, TIType::UINT16, -2, -2);
869                 }
870                 case TIType::UINT32 :
871                 {
872                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
873                     {
874                         return TIType(gvn, TIType::UINT32, in0.rows, in0.rows);
875                     }
876                     if (in0.rows == 1 && in0.cols == 1)
877                     {
878                         return in1;
879                     }
880                     return TIType(gvn, TIType::UINT32, -2, -2);
881                 }
882                 case TIType::UINT64 :
883                 {
884                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
885                     {
886                         return TIType(gvn, TIType::UINT64, in0.rows, in0.rows);
887                     }
888                     if (in0.rows == 1 && in0.cols == 1)
889                     {
890                         return in1;
891                     }
892                     return TIType(gvn, TIType::UINT64, -2, -2);
893                 }
894                 case TIType::UINT8 :
895                 {
896                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
897                     {
898                         return in0;
899                     }
900                     if (in0.rows == 1 && in0.cols == 1)
901                     {
902                         return TIType(gvn, TIType::UINT16, in1.rows, in1.cols);
903                     }
904                     return TIType(gvn, TIType::UINT16, -2, -2);
905                 }
906                 default :
907                     return TIType(gvn);
908             }
909         }
910         case TIType::UINT32 :
911         {
912             switch (in1.type)
913             {
914                 case TIType::EMPTY :
915                 {
916                     return in1;
917                 }
918                 case TIType::DOUBLE :
919                 {
920                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
921                     {
922                         return in0;
923                     }
924                     if (in0.rows == 1 && in0.cols == 1)
925                     {
926                         return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
927                     }
928                     return TIType(gvn, TIType::UINT32, -2, -2);
929                 }
930                 case TIType::INT16 :
931                 {
932                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
933                     {
934                         return in0;
935                     }
936                     if (in0.rows == 1 && in0.cols == 1)
937                     {
938                         return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
939                     }
940                     return TIType(gvn, TIType::UINT32, -2, -2);
941                 }
942                 case TIType::INT32 :
943                 {
944                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
945                     {
946                         return in0;
947                     }
948                     if (in0.rows == 1 && in0.cols == 1)
949                     {
950                         return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
951                     }
952                     return TIType(gvn, TIType::UINT32, -2, -2);
953                 }
954                 case TIType::INT64 :
955                 {
956                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
957                     {
958                         return TIType(gvn, TIType::UINT64, in0.rows, in0.rows);
959                     }
960                     if (in0.rows == 1 && in0.cols == 1)
961                     {
962                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
963                     }
964                     return TIType(gvn, TIType::UINT64, -2, -2);
965                 }
966                 case TIType::INT8 :
967                 {
968                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
969                     {
970                         return in0;
971                     }
972                     if (in0.rows == 1 && in0.cols == 1)
973                     {
974                         return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
975                     }
976                     return TIType(gvn, TIType::UINT32, -2, -2);
977                 }
978                 case TIType::UINT16 :
979                 {
980                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
981                     {
982                         return in0;
983                     }
984                     if (in0.rows == 1 && in0.cols == 1)
985                     {
986                         return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
987                     }
988                     return TIType(gvn, TIType::UINT32, -2, -2);
989                 }
990                 case TIType::UINT32 :
991                 {
992                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
993                     {
994                         return in0;
995                     }
996                     if (in0.rows == 1 && in0.cols == 1)
997                     {
998                         return in1;
999                     }
1000                     return TIType(gvn, TIType::UINT32, -2, -2);
1001                 }
1002                 case TIType::UINT64 :
1003                 {
1004                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
1005                     {
1006                         return TIType(gvn, TIType::UINT64, in0.rows, in0.rows);
1007                     }
1008                     if (in0.rows == 1 && in0.cols == 1)
1009                     {
1010                         return in1;
1011                     }
1012                     return TIType(gvn, TIType::UINT64, -2, -2);
1013                 }
1014                 case TIType::UINT8 :
1015                 {
1016                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
1017                     {
1018                         return in0;
1019                     }
1020                     if (in0.rows == 1 && in0.cols == 1)
1021                     {
1022                         return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
1023                     }
1024                     return TIType(gvn, TIType::UINT32, -2, -2);
1025                 }
1026                 default :
1027                     return TIType(gvn);
1028             }
1029         }
1030         case TIType::UINT64 :
1031         {
1032             switch (in1.type)
1033             {
1034                 case TIType::EMPTY :
1035                 {
1036                     return in1;
1037                 }
1038                 case TIType::DOUBLE :
1039                 {
1040                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
1041                     {
1042                         return in0;
1043                     }
1044                     if (in0.rows == 1 && in0.cols == 1)
1045                     {
1046                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
1047                     }
1048                     return TIType(gvn, TIType::UINT64, -2, -2);
1049                 }
1050                 case TIType::INT16 :
1051                 {
1052                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
1053                     {
1054                         return in0;
1055                     }
1056                     if (in0.rows == 1 && in0.cols == 1)
1057                     {
1058                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
1059                     }
1060                     return TIType(gvn, TIType::UINT64, -2, -2);
1061                 }
1062                 case TIType::INT32 :
1063                 {
1064                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
1065                     {
1066                         return in0;
1067                     }
1068                     if (in0.rows == 1 && in0.cols == 1)
1069                     {
1070                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
1071                     }
1072                     return TIType(gvn, TIType::UINT64, -2, -2);
1073                 }
1074                 case TIType::INT64 :
1075                 {
1076                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
1077                     {
1078                         return in0;
1079                     }
1080                     if (in0.rows == 1 && in0.cols == 1)
1081                     {
1082                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
1083                     }
1084                     return TIType(gvn, TIType::UINT64, -2, -2);
1085                 }
1086                 case TIType::INT8 :
1087                 {
1088                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
1089                     {
1090                         return in0;
1091                     }
1092                     if (in0.rows == 1 && in0.cols == 1)
1093                     {
1094                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
1095                     }
1096                     return TIType(gvn, TIType::UINT64, -2, -2);
1097                 }
1098                 case TIType::UINT16 :
1099                 {
1100                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
1101                     {
1102                         return in0;
1103                     }
1104                     if (in0.rows == 1 && in0.cols == 1)
1105                     {
1106                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
1107                     }
1108                     return TIType(gvn, TIType::UINT64, -2, -2);
1109                 }
1110                 case TIType::UINT32 :
1111                 {
1112                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
1113                     {
1114                         return in0;
1115                     }
1116                     if (in0.rows == 1 && in0.cols == 1)
1117                     {
1118                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
1119                     }
1120                     return TIType(gvn, TIType::UINT64, -2, -2);
1121                 }
1122                 case TIType::UINT64 :
1123                 {
1124                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
1125                     {
1126                         return in0;
1127                     }
1128                     if (in0.rows == 1 && in0.cols == 1)
1129                     {
1130                         return in1;
1131                     }
1132                     return TIType(gvn, TIType::UINT64, -2, -2);
1133                 }
1134                 case TIType::UINT8 :
1135                 {
1136                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
1137                     {
1138                         return in0;
1139                     }
1140                     if (in0.rows == 1 && in0.cols == 1)
1141                     {
1142                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
1143                     }
1144                     return TIType(gvn, TIType::UINT64, -2, -2);
1145                 }
1146                 default :
1147                     return TIType(gvn);
1148             }
1149         }
1150         case TIType::UINT8 :
1151         {
1152             switch (in1.type)
1153             {
1154                 case TIType::EMPTY :
1155                 {
1156                     return in1;
1157                 }
1158                 case TIType::DOUBLE :
1159                 {
1160                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
1161                     {
1162                         return in0;
1163                     }
1164                     if (in0.rows == 1 && in0.cols == 1)
1165                     {
1166                         return TIType(gvn, TIType::UINT8, in1.rows, in1.cols);
1167                     }
1168                     return TIType(gvn, TIType::UINT8, -2, -2);
1169                 }
1170                 case TIType::INT16 :
1171                 {
1172                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
1173                     {
1174                         return TIType(gvn, TIType::UINT16, in0.rows, in0.rows);
1175                     }
1176                     if (in0.rows == 1 && in0.cols == 1)
1177                     {
1178                         return TIType(gvn, TIType::UINT16, in1.rows, in1.cols);
1179                     }
1180                     return TIType(gvn, TIType::UINT16, -2, -2);
1181                 }
1182                 case TIType::INT32 :
1183                 {
1184                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
1185                     {
1186                         return TIType(gvn, TIType::UINT32, in0.rows, in0.rows);
1187                     }
1188                     if (in0.rows == 1 && in0.cols == 1)
1189                     {
1190                         return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
1191                     }
1192                     return TIType(gvn, TIType::UINT32, -2, -2);
1193                 }
1194                 case TIType::INT64 :
1195                 {
1196                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
1197                     {
1198                         return TIType(gvn, TIType::UINT64, in0.rows, in0.rows);
1199                     }
1200                     if (in0.rows == 1 && in0.cols == 1)
1201                     {
1202                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
1203                     }
1204                     return TIType(gvn, TIType::UINT64, -2, -2);
1205                 }
1206                 case TIType::INT8 :
1207                 {
1208                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
1209                     {
1210                         return in0;
1211                     }
1212                     if (in0.rows == 1 && in0.cols == 1)
1213                     {
1214                         return TIType(gvn, TIType::UINT8, in1.rows, in1.cols);
1215                     }
1216                     return TIType(gvn, TIType::UINT8, -2, -2);
1217                 }
1218                 case TIType::UINT16 :
1219                 {
1220                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
1221                     {
1222                         return TIType(gvn, TIType::UINT16, in0.rows, in0.rows);
1223                     }
1224                     if (in0.rows == 1 && in0.cols == 1)
1225                     {
1226                         return in1;
1227                     }
1228                     return TIType(gvn, TIType::UINT16, -2, -2);
1229                 }
1230                 case TIType::UINT32 :
1231                 {
1232                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
1233                     {
1234                         return TIType(gvn, TIType::UINT32, in0.rows, in0.rows);
1235                     }
1236                     if (in0.rows == 1 && in0.cols == 1)
1237                     {
1238                         return in1;
1239                     }
1240                     return TIType(gvn, TIType::UINT32, -2, -2);
1241                 }
1242                 case TIType::UINT64 :
1243                 {
1244                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
1245                     {
1246                         return TIType(gvn, TIType::UINT64, in0.rows, in0.rows);
1247                     }
1248                     if (in0.rows == 1 && in0.cols == 1)
1249                     {
1250                         return in1;
1251                     }
1252                     return TIType(gvn, TIType::UINT64, -2, -2);
1253                 }
1254                 case TIType::UINT8 :
1255                 {
1256                     if (in0.cols == in0.rows && in1.rows == 1 && in1.cols == 1)
1257                     {
1258                         return in0;
1259                     }
1260                     if (in0.rows == 1 && in0.cols == 1)
1261                     {
1262                         return in1;
1263                     }
1264                     return TIType(gvn, TIType::UINT8, -2, -2);
1265                 }
1266                 default :
1267                     return TIType(gvn);
1268             }
1269         }
1270         default :
1271             return TIType(gvn);
1272     }
1273 }
1274 
1275 } // namespace analysis