License Header change: Removed the LICENSE_END before beta
[scilab.git] / scilab / modules / ast / src / cpp / analysis / check_____add____.cpp
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 {
22 TIType Checkers::check_____add____(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 in1;
37                 }
38                 case TIType::COMPLEX :
39                 {
40                     return in1;
41                 }
42                 case TIType::DOUBLE :
43                 {
44                     return in1;
45                 }
46                 case TIType::INT16 :
47                 {
48                     return in1;
49                 }
50                 case TIType::INT32 :
51                 {
52                     return in1;
53                 }
54                 case TIType::INT64 :
55                 {
56                     return in1;
57                 }
58                 case TIType::INT8 :
59                 {
60                     return in1;
61                 }
62                 case TIType::STRING :
63                 {
64                     return in1;
65                 }
66                 case TIType::UINT16 :
67                 {
68                     return in1;
69                 }
70                 case TIType::UINT32 :
71                 {
72                     return in1;
73                 }
74                 case TIType::UINT64 :
75                 {
76                     return in1;
77                 }
78                 case TIType::UINT8 :
79                 {
80                     return in1;
81                 }
82                 default :
83                     return TIType(gvn);
84             }
85             return TIType(gvn);
86         }
87         case TIType::BOOLEAN :
88         {
89             switch (in1.type)
90             {
91                 case TIType::EMPTY :
92                 {
93                     return in0;
94                 }
95                 case TIType::BOOLEAN :
96                 {
97                     if (in0.rows == 1 && in0.cols == 1)
98                     {
99                         return TIType(gvn, TIType::DOUBLE, in1.rows, in1.cols);
100                     }
101                     if (in1.rows == 1 && in1.cols == 1)
102                     {
103                         return TIType(gvn, TIType::DOUBLE, in0.rows, in0.cols);
104                     }
105                     if (in1.rows == in0.rows && in1.cols == in0.cols)
106                     {
107                         return TIType(gvn, TIType::DOUBLE, in0.rows, in0.cols);
108                     }
109                     return TIType(gvn, TIType::DOUBLE, -2, -2);
110                 }
111                 case TIType::COMPLEX :
112                 {
113                     if (in0.rows == 1 && in0.cols == 1)
114                     {
115                         return in1;
116                     }
117                     if (in1.rows == 1 && in1.cols == 1)
118                     {
119                         return TIType(gvn, TIType::COMPLEX, in0.rows, in0.cols);
120                     }
121                     if (in1.rows == in0.rows && in1.cols == in0.cols)
122                     {
123                         return in1;
124                     }
125                     return TIType(gvn, TIType::COMPLEX, -2, -2);
126                 }
127                 case TIType::DOUBLE :
128                 {
129                     if (in0.rows == 1 && in0.cols == 1)
130                     {
131                         return in1;
132                     }
133                     if (in1.rows == 1 && in1.cols == 1)
134                     {
135                         return TIType(gvn, TIType::DOUBLE, in0.rows, in0.cols);
136                     }
137                     if (in1.rows == in0.rows && in1.cols == in0.cols)
138                     {
139                         return in1;
140                     }
141                     return TIType(gvn, TIType::DOUBLE, -2, -2);
142                 }
143                 case TIType::INT16 :
144                 {
145                     if (in0.rows == 1 && in0.cols == 1)
146                     {
147                         return in1;
148                     }
149                     if (in1.rows == 1 && in1.cols == 1)
150                     {
151                         return TIType(gvn, TIType::INT16, in0.rows, in0.cols);
152                     }
153                     if (in1.rows == in0.rows && in1.cols == in0.cols)
154                     {
155                         return in1;
156                     }
157                     return TIType(gvn, TIType::INT16, -2, -2);
158                 }
159                 case TIType::INT32 :
160                 {
161                     if (in0.rows == 1 && in0.cols == 1)
162                     {
163                         return in1;
164                     }
165                     if (in1.rows == 1 && in1.cols == 1)
166                     {
167                         return TIType(gvn, TIType::INT32, in0.rows, in0.cols);
168                     }
169                     if (in1.rows == in0.rows && in1.cols == in0.cols)
170                     {
171                         return in1;
172                     }
173                     return TIType(gvn, TIType::INT32, -2, -2);
174                 }
175                 case TIType::INT64 :
176                 {
177                     if (in0.rows == 1 && in0.cols == 1)
178                     {
179                         return in1;
180                     }
181                     if (in1.rows == 1 && in1.cols == 1)
182                     {
183                         return TIType(gvn, TIType::INT64, in0.rows, in0.cols);
184                     }
185                     if (in1.rows == in0.rows && in1.cols == in0.cols)
186                     {
187                         return in1;
188                     }
189                     return TIType(gvn, TIType::INT64, -2, -2);
190                 }
191                 case TIType::INT8 :
192                 {
193                     if (in0.rows == 1 && in0.cols == 1)
194                     {
195                         return in1;
196                     }
197                     if (in1.rows == 1 && in1.cols == 1)
198                     {
199                         return TIType(gvn, TIType::INT8, in0.rows, in0.cols);
200                     }
201                     if (in1.rows == in0.rows && in1.cols == in0.cols)
202                     {
203                         return in1;
204                     }
205                     return TIType(gvn, TIType::INT8, -2, -2);
206                 }
207                 case TIType::UINT16 :
208                 {
209                     if (in0.rows == 1 && in0.cols == 1)
210                     {
211                         return in1;
212                     }
213                     if (in1.rows == 1 && in1.cols == 1)
214                     {
215                         return TIType(gvn, TIType::UINT16, in0.rows, in0.cols);
216                     }
217                     if (in1.rows == in0.rows && in1.cols == in0.cols)
218                     {
219                         return in1;
220                     }
221                     return TIType(gvn, TIType::UINT16, -2, -2);
222                 }
223                 case TIType::UINT32 :
224                 {
225                     if (in0.rows == 1 && in0.cols == 1)
226                     {
227                         return in1;
228                     }
229                     if (in1.rows == 1 && in1.cols == 1)
230                     {
231                         return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
232                     }
233                     if (in1.rows == in0.rows && in1.cols == in0.cols)
234                     {
235                         return in1;
236                     }
237                     return TIType(gvn, TIType::UINT32, -2, -2);
238                 }
239                 case TIType::UINT64 :
240                 {
241                     if (in0.rows == 1 && in0.cols == 1)
242                     {
243                         return in1;
244                     }
245                     if (in1.rows == 1 && in1.cols == 1)
246                     {
247                         return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
248                     }
249                     if (in1.rows == in0.rows && in1.cols == in0.cols)
250                     {
251                         return in1;
252                     }
253                     return TIType(gvn, TIType::UINT64, -2, -2);
254                 }
255                 case TIType::UINT8 :
256                 {
257                     if (in0.rows == 1 && in0.cols == 1)
258                     {
259                         return in1;
260                     }
261                     if (in1.rows == 1 && in1.cols == 1)
262                     {
263                         return TIType(gvn, TIType::UINT8, in0.rows, in0.cols);
264                     }
265                     if (in1.rows == in0.rows && in1.cols == in0.cols)
266                     {
267                         return in1;
268                     }
269                     return TIType(gvn, TIType::UINT8, -2, -2);
270                 }
271                 default :
272                     return TIType(gvn);
273             }
274             return TIType(gvn);
275         }
276         case TIType::COMPLEX :
277         {
278             switch (in1.type)
279             {
280                 case TIType::EMPTY :
281                 {
282                     return in0;
283                 }
284                 case TIType::BOOLEAN :
285                 {
286                     if (in0.rows == 1 && in0.cols == 1)
287                     {
288                         return TIType(gvn, TIType::COMPLEX, in1.rows, in1.cols);
289                     }
290                     if (in1.rows == 1 && in1.cols == 1)
291                     {
292                         return in0;
293                     }
294                     if (in1.rows == in0.rows && in1.cols == in0.cols)
295                     {
296                         return in0;
297                     }
298                     return TIType(gvn, TIType::COMPLEX, -2, -2);
299                 }
300                 case TIType::COMPLEX :
301                 {
302                     if (in0.rows == 1 && in0.cols == 1)
303                     {
304                         return in1;
305                     }
306                     if (in1.rows == 1 && in1.cols == 1)
307                     {
308                         return in0;
309                     }
310                     if (in1.rows == in0.rows && in1.cols == in0.cols)
311                     {
312                         return in0;
313                     }
314                     return TIType(gvn, TIType::COMPLEX, -2, -2);
315                 }
316                 case TIType::DOUBLE :
317                 {
318                     if (in0.rows == 1 && in0.cols == 1)
319                     {
320                         return TIType(gvn, TIType::COMPLEX, in1.rows, in1.cols);
321                     }
322                     if (in1.rows == 1 && in1.cols == 1)
323                     {
324                         return in0;
325                     }
326                     if (in1.rows == in0.rows && in1.cols == in0.cols)
327                     {
328                         return in0;
329                     }
330                     return TIType(gvn, TIType::COMPLEX, -2, -2);
331                 }
332                 default :
333                     return TIType(gvn);
334             }
335             return TIType(gvn);
336         }
337         case TIType::DOUBLE :
338         {
339             switch (in1.type)
340             {
341                 case TIType::EMPTY :
342                 {
343                     return in0;
344                 }
345                 case TIType::BOOLEAN :
346                 {
347                     if (in0.rows == 1 && in0.cols == 1)
348                     {
349                         return TIType(gvn, TIType::DOUBLE, in1.rows, in1.cols);
350                     }
351                     if (in1.rows == 1 && in1.cols == 1)
352                     {
353                         return in0;
354                     }
355                     if (in1.rows == in0.rows && in1.cols == in0.cols)
356                     {
357                         return in0;
358                     }
359                     return TIType(gvn, TIType::DOUBLE, -2, -2);
360                 }
361                 case TIType::COMPLEX :
362                 {
363                     if (in0.rows == 1 && in0.cols == 1)
364                     {
365                         return in1;
366                     }
367                     if (in1.rows == 1 && in1.cols == 1)
368                     {
369                         return TIType(gvn, TIType::COMPLEX, in0.rows, in0.cols);
370                     }
371                     if (in1.rows == in0.rows && in1.cols == in0.cols)
372                     {
373                         return in1;
374                     }
375                     return TIType(gvn, TIType::COMPLEX, -2, -2);
376                 }
377                 case TIType::DOUBLE :
378                 {
379                     if (in0.rows == 1 && in0.cols == 1)
380                     {
381                         return in1;
382                     }
383                     if (in1.rows == 1 && in1.cols == 1)
384                     {
385                         return in0;
386                     }
387                     if (in1.rows == in0.rows && in1.cols == in0.cols)
388                     {
389                         return in0;
390                     }
391                     return TIType(gvn, TIType::DOUBLE, -2, -2);
392                 }
393                 case TIType::INT16 :
394                 {
395                     if (in0.rows == 1 && in0.cols == 1)
396                     {
397                         return in1;
398                     }
399                     if (in1.rows == 1 && in1.cols == 1)
400                     {
401                         return TIType(gvn, TIType::INT16, in0.rows, in0.cols);
402                     }
403                     if (in1.rows == in0.rows && in1.cols == in0.cols)
404                     {
405                         return in1;
406                     }
407                     return TIType(gvn, TIType::INT16, -2, -2);
408                 }
409                 case TIType::INT32 :
410                 {
411                     if (in0.rows == 1 && in0.cols == 1)
412                     {
413                         return in1;
414                     }
415                     if (in1.rows == 1 && in1.cols == 1)
416                     {
417                         return TIType(gvn, TIType::INT32, in0.rows, in0.cols);
418                     }
419                     if (in1.rows == in0.rows && in1.cols == in0.cols)
420                     {
421                         return in1;
422                     }
423                     return TIType(gvn, TIType::INT32, -2, -2);
424                 }
425                 case TIType::INT64 :
426                 {
427                     if (in0.rows == 1 && in0.cols == 1)
428                     {
429                         return in1;
430                     }
431                     if (in1.rows == 1 && in1.cols == 1)
432                     {
433                         return TIType(gvn, TIType::INT64, in0.rows, in0.cols);
434                     }
435                     if (in1.rows == in0.rows && in1.cols == in0.cols)
436                     {
437                         return in1;
438                     }
439                     return TIType(gvn, TIType::INT64, -2, -2);
440                 }
441                 case TIType::INT8 :
442                 {
443                     if (in0.rows == 1 && in0.cols == 1)
444                     {
445                         return in1;
446                     }
447                     if (in1.rows == 1 && in1.cols == 1)
448                     {
449                         return TIType(gvn, TIType::INT8, in0.rows, in0.cols);
450                     }
451                     if (in1.rows == in0.rows && in1.cols == in0.cols)
452                     {
453                         return in1;
454                     }
455                     return TIType(gvn, TIType::INT8, -2, -2);
456                 }
457                 case TIType::UINT16 :
458                 {
459                     if (in0.rows == 1 && in0.cols == 1)
460                     {
461                         return in1;
462                     }
463                     if (in1.rows == 1 && in1.cols == 1)
464                     {
465                         return TIType(gvn, TIType::UINT16, in0.rows, in0.cols);
466                     }
467                     if (in1.rows == in0.rows && in1.cols == in0.cols)
468                     {
469                         return in1;
470                     }
471                     return TIType(gvn, TIType::UINT16, -2, -2);
472                 }
473                 case TIType::UINT32 :
474                 {
475                     if (in0.rows == 1 && in0.cols == 1)
476                     {
477                         return in1;
478                     }
479                     if (in1.rows == 1 && in1.cols == 1)
480                     {
481                         return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
482                     }
483                     if (in1.rows == in0.rows && in1.cols == in0.cols)
484                     {
485                         return in1;
486                     }
487                     return TIType(gvn, TIType::UINT32, -2, -2);
488                 }
489                 case TIType::UINT64 :
490                 {
491                     if (in0.rows == 1 && in0.cols == 1)
492                     {
493                         return in1;
494                     }
495                     if (in1.rows == 1 && in1.cols == 1)
496                     {
497                         return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
498                     }
499                     if (in1.rows == in0.rows && in1.cols == in0.cols)
500                     {
501                         return in1;
502                     }
503                     return TIType(gvn, TIType::UINT64, -2, -2);
504                 }
505                 case TIType::UINT8 :
506                 {
507                     if (in0.rows == 1 && in0.cols == 1)
508                     {
509                         return in1;
510                     }
511                     if (in1.rows == 1 && in1.cols == 1)
512                     {
513                         return TIType(gvn, TIType::UINT8, in0.rows, in0.cols);
514                     }
515                     if (in1.rows == in0.rows && in1.cols == in0.cols)
516                     {
517                         return in1;
518                     }
519                     return TIType(gvn, TIType::UINT8, -2, -2);
520                 }
521                 default :
522                     return TIType(gvn);
523             }
524             return TIType(gvn);
525         }
526         case TIType::INT16 :
527         {
528             switch (in1.type)
529             {
530                 case TIType::EMPTY :
531                 {
532                     return in0;
533                 }
534                 case TIType::BOOLEAN :
535                 {
536                     if (in0.rows == 1 && in0.cols == 1)
537                     {
538                         return TIType(gvn, TIType::INT16, in1.rows, in1.cols);
539                     }
540                     if (in1.rows == 1 && in1.cols == 1)
541                     {
542                         return in0;
543                     }
544                     if (in1.rows == in0.rows && in1.cols == in0.cols)
545                     {
546                         return in0;
547                     }
548                     return TIType(gvn, TIType::INT16, -2, -2);
549                 }
550                 case TIType::DOUBLE :
551                 {
552                     if (in0.rows == 1 && in0.cols == 1)
553                     {
554                         return TIType(gvn, TIType::INT16, in1.rows, in1.cols);
555                     }
556                     if (in1.rows == 1 && in1.cols == 1)
557                     {
558                         return in0;
559                     }
560                     if (in1.rows == in0.rows && in1.cols == in0.cols)
561                     {
562                         return in0;
563                     }
564                     return TIType(gvn, TIType::INT16, -2, -2);
565                 }
566                 case TIType::INT16 :
567                 {
568                     if (in0.rows == 1 && in0.cols == 1)
569                     {
570                         return in1;
571                     }
572                     if (in1.rows == 1 && in1.cols == 1)
573                     {
574                         return in0;
575                     }
576                     if (in1.rows == in0.rows && in1.cols == in0.cols)
577                     {
578                         return in0;
579                     }
580                     return TIType(gvn, TIType::INT16, -2, -2);
581                 }
582                 case TIType::INT32 :
583                 {
584                     if (in0.rows == 1 && in0.cols == 1)
585                     {
586                         return in1;
587                     }
588                     if (in1.rows == 1 && in1.cols == 1)
589                     {
590                         return TIType(gvn, TIType::INT32, in0.rows, in0.cols);
591                     }
592                     if (in1.rows == in0.rows && in1.cols == in0.cols)
593                     {
594                         return in1;
595                     }
596                     return TIType(gvn, TIType::INT32, -2, -2);
597                 }
598                 case TIType::INT64 :
599                 {
600                     if (in0.rows == 1 && in0.cols == 1)
601                     {
602                         return in1;
603                     }
604                     if (in1.rows == 1 && in1.cols == 1)
605                     {
606                         return TIType(gvn, TIType::INT64, in0.rows, in0.cols);
607                     }
608                     if (in1.rows == in0.rows && in1.cols == in0.cols)
609                     {
610                         return in1;
611                     }
612                     return TIType(gvn, TIType::INT64, -2, -2);
613                 }
614                 case TIType::INT8 :
615                 {
616                     if (in0.rows == 1 && in0.cols == 1)
617                     {
618                         return TIType(gvn, TIType::INT16, in1.rows, in1.cols);
619                     }
620                     if (in1.rows == 1 && in1.cols == 1)
621                     {
622                         return in0;
623                     }
624                     if (in1.rows == in0.rows && in1.cols == in0.cols)
625                     {
626                         return in0;
627                     }
628                     return TIType(gvn, TIType::INT16, -2, -2);
629                 }
630                 case TIType::UINT16 :
631                 {
632                     if (in0.rows == 1 && in0.cols == 1)
633                     {
634                         return in1;
635                     }
636                     if (in1.rows == 1 && in1.cols == 1)
637                     {
638                         return TIType(gvn, TIType::UINT16, in0.rows, in0.cols);
639                     }
640                     if (in1.rows == in0.rows && in1.cols == in0.cols)
641                     {
642                         return in1;
643                     }
644                     return TIType(gvn, TIType::UINT16, -2, -2);
645                 }
646                 case TIType::UINT32 :
647                 {
648                     if (in0.rows == 1 && in0.cols == 1)
649                     {
650                         return in1;
651                     }
652                     if (in1.rows == 1 && in1.cols == 1)
653                     {
654                         return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
655                     }
656                     if (in1.rows == in0.rows && in1.cols == in0.cols)
657                     {
658                         return in1;
659                     }
660                     return TIType(gvn, TIType::UINT32, -2, -2);
661                 }
662                 case TIType::UINT64 :
663                 {
664                     if (in0.rows == 1 && in0.cols == 1)
665                     {
666                         return in1;
667                     }
668                     if (in1.rows == 1 && in1.cols == 1)
669                     {
670                         return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
671                     }
672                     if (in1.rows == in0.rows && in1.cols == in0.cols)
673                     {
674                         return in1;
675                     }
676                     return TIType(gvn, TIType::UINT64, -2, -2);
677                 }
678                 case TIType::UINT8 :
679                 {
680                     if (in0.rows == 1 && in0.cols == 1)
681                     {
682                         return TIType(gvn, TIType::UINT16, in1.rows, in1.cols);
683                     }
684                     if (in1.rows == 1 && in1.cols == 1)
685                     {
686                         return TIType(gvn, TIType::UINT16, in0.rows, in0.cols);
687                     }
688                     if (in1.rows == in0.rows && in1.cols == in0.cols)
689                     {
690                         return TIType(gvn, TIType::UINT16, in0.rows, in0.cols);
691                     }
692                     return TIType(gvn, TIType::UINT16, -2, -2);
693                 }
694                 default :
695                     return TIType(gvn);
696             }
697             return TIType(gvn);
698         }
699         case TIType::INT32 :
700         {
701             switch (in1.type)
702             {
703                 case TIType::EMPTY :
704                 {
705                     return in0;
706                 }
707                 case TIType::BOOLEAN :
708                 {
709                     if (in0.rows == 1 && in0.cols == 1)
710                     {
711                         return TIType(gvn, TIType::INT32, in1.rows, in1.cols);
712                     }
713                     if (in1.rows == 1 && in1.cols == 1)
714                     {
715                         return in0;
716                     }
717                     if (in1.rows == in0.rows && in1.cols == in0.cols)
718                     {
719                         return in0;
720                     }
721                     return TIType(gvn, TIType::INT32, -2, -2);
722                 }
723                 case TIType::DOUBLE :
724                 {
725                     if (in0.rows == 1 && in0.cols == 1)
726                     {
727                         return TIType(gvn, TIType::INT32, in1.rows, in1.cols);
728                     }
729                     if (in1.rows == 1 && in1.cols == 1)
730                     {
731                         return in0;
732                     }
733                     if (in1.rows == in0.rows && in1.cols == in0.cols)
734                     {
735                         return in0;
736                     }
737                     return TIType(gvn, TIType::INT32, -2, -2);
738                 }
739                 case TIType::INT16 :
740                 {
741                     if (in0.rows == 1 && in0.cols == 1)
742                     {
743                         return TIType(gvn, TIType::INT32, in1.rows, in1.cols);
744                     }
745                     if (in1.rows == 1 && in1.cols == 1)
746                     {
747                         return in0;
748                     }
749                     if (in1.rows == in0.rows && in1.cols == in0.cols)
750                     {
751                         return in0;
752                     }
753                     return TIType(gvn, TIType::INT32, -2, -2);
754                 }
755                 case TIType::INT32 :
756                 {
757                     if (in0.rows == 1 && in0.cols == 1)
758                     {
759                         return in1;
760                     }
761                     if (in1.rows == 1 && in1.cols == 1)
762                     {
763                         return in0;
764                     }
765                     if (in1.rows == in0.rows && in1.cols == in0.cols)
766                     {
767                         return in0;
768                     }
769                     return TIType(gvn, TIType::INT32, -2, -2);
770                 }
771                 case TIType::INT64 :
772                 {
773                     if (in0.rows == 1 && in0.cols == 1)
774                     {
775                         return in1;
776                     }
777                     if (in1.rows == 1 && in1.cols == 1)
778                     {
779                         return TIType(gvn, TIType::INT64, in0.rows, in0.cols);
780                     }
781                     if (in1.rows == in0.rows && in1.cols == in0.cols)
782                     {
783                         return in1;
784                     }
785                     return TIType(gvn, TIType::INT64, -2, -2);
786                 }
787                 case TIType::INT8 :
788                 {
789                     if (in0.rows == 1 && in0.cols == 1)
790                     {
791                         return TIType(gvn, TIType::INT32, in1.rows, in1.cols);
792                     }
793                     if (in1.rows == 1 && in1.cols == 1)
794                     {
795                         return in0;
796                     }
797                     if (in1.rows == in0.rows && in1.cols == in0.cols)
798                     {
799                         return in0;
800                     }
801                     return TIType(gvn, TIType::INT32, -2, -2);
802                 }
803                 case TIType::UINT16 :
804                 {
805                     if (in0.rows == 1 && in0.cols == 1)
806                     {
807                         return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
808                     }
809                     if (in1.rows == 1 && in1.cols == 1)
810                     {
811                         return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
812                     }
813                     if (in1.rows == in0.rows && in1.cols == in0.cols)
814                     {
815                         return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
816                     }
817                     return TIType(gvn, TIType::UINT32, -2, -2);
818                 }
819                 case TIType::UINT32 :
820                 {
821                     if (in0.rows == 1 && in0.cols == 1)
822                     {
823                         return in1;
824                     }
825                     if (in1.rows == 1 && in1.cols == 1)
826                     {
827                         return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
828                     }
829                     if (in1.rows == in0.rows && in1.cols == in0.cols)
830                     {
831                         return in1;
832                     }
833                     return TIType(gvn, TIType::UINT32, -2, -2);
834                 }
835                 case TIType::UINT64 :
836                 {
837                     if (in0.rows == 1 && in0.cols == 1)
838                     {
839                         return in1;
840                     }
841                     if (in1.rows == 1 && in1.cols == 1)
842                     {
843                         return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
844                     }
845                     if (in1.rows == in0.rows && in1.cols == in0.cols)
846                     {
847                         return in1;
848                     }
849                     return TIType(gvn, TIType::UINT64, -2, -2);
850                 }
851                 case TIType::UINT8 :
852                 {
853                     if (in0.rows == 1 && in0.cols == 1)
854                     {
855                         return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
856                     }
857                     if (in1.rows == 1 && in1.cols == 1)
858                     {
859                         return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
860                     }
861                     if (in1.rows == in0.rows && in1.cols == in0.cols)
862                     {
863                         return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
864                     }
865                     return TIType(gvn, TIType::UINT32, -2, -2);
866                 }
867                 default :
868                     return TIType(gvn);
869             }
870             return TIType(gvn);
871         }
872         case TIType::INT64 :
873         {
874             switch (in1.type)
875             {
876                 case TIType::EMPTY :
877                 {
878                     return in0;
879                 }
880                 case TIType::BOOLEAN :
881                 {
882                     if (in0.rows == 1 && in0.cols == 1)
883                     {
884                         return TIType(gvn, TIType::INT64, in1.rows, in1.cols);
885                     }
886                     if (in1.rows == 1 && in1.cols == 1)
887                     {
888                         return in0;
889                     }
890                     if (in1.rows == in0.rows && in1.cols == in0.cols)
891                     {
892                         return in0;
893                     }
894                     return TIType(gvn, TIType::INT64, -2, -2);
895                 }
896                 case TIType::DOUBLE :
897                 {
898                     if (in0.rows == 1 && in0.cols == 1)
899                     {
900                         return TIType(gvn, TIType::INT64, in1.rows, in1.cols);
901                     }
902                     if (in1.rows == 1 && in1.cols == 1)
903                     {
904                         return in0;
905                     }
906                     if (in1.rows == in0.rows && in1.cols == in0.cols)
907                     {
908                         return in0;
909                     }
910                     return TIType(gvn, TIType::INT64, -2, -2);
911                 }
912                 case TIType::INT16 :
913                 {
914                     if (in0.rows == 1 && in0.cols == 1)
915                     {
916                         return TIType(gvn, TIType::INT64, in1.rows, in1.cols);
917                     }
918                     if (in1.rows == 1 && in1.cols == 1)
919                     {
920                         return in0;
921                     }
922                     if (in1.rows == in0.rows && in1.cols == in0.cols)
923                     {
924                         return in0;
925                     }
926                     return TIType(gvn, TIType::INT64, -2, -2);
927                 }
928                 case TIType::INT32 :
929                 {
930                     if (in0.rows == 1 && in0.cols == 1)
931                     {
932                         return TIType(gvn, TIType::INT64, in1.rows, in1.cols);
933                     }
934                     if (in1.rows == 1 && in1.cols == 1)
935                     {
936                         return in0;
937                     }
938                     if (in1.rows == in0.rows && in1.cols == in0.cols)
939                     {
940                         return in0;
941                     }
942                     return TIType(gvn, TIType::INT64, -2, -2);
943                 }
944                 case TIType::INT64 :
945                 {
946                     if (in0.rows == 1 && in0.cols == 1)
947                     {
948                         return in1;
949                     }
950                     if (in1.rows == 1 && in1.cols == 1)
951                     {
952                         return in0;
953                     }
954                     if (in1.rows == in0.rows && in1.cols == in0.cols)
955                     {
956                         return in0;
957                     }
958                     return TIType(gvn, TIType::INT64, -2, -2);
959                 }
960                 case TIType::INT8 :
961                 {
962                     if (in0.rows == 1 && in0.cols == 1)
963                     {
964                         return TIType(gvn, TIType::INT64, in1.rows, in1.cols);
965                     }
966                     if (in1.rows == 1 && in1.cols == 1)
967                     {
968                         return in0;
969                     }
970                     if (in1.rows == in0.rows && in1.cols == in0.cols)
971                     {
972                         return in0;
973                     }
974                     return TIType(gvn, TIType::INT64, -2, -2);
975                 }
976                 case TIType::UINT16 :
977                 {
978                     if (in0.rows == 1 && in0.cols == 1)
979                     {
980                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
981                     }
982                     if (in1.rows == 1 && in1.cols == 1)
983                     {
984                         return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
985                     }
986                     if (in1.rows == in0.rows && in1.cols == in0.cols)
987                     {
988                         return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
989                     }
990                     return TIType(gvn, TIType::UINT64, -2, -2);
991                 }
992                 case TIType::UINT32 :
993                 {
994                     if (in0.rows == 1 && in0.cols == 1)
995                     {
996                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
997                     }
998                     if (in1.rows == 1 && in1.cols == 1)
999                     {
1000                         return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
1001                     }
1002                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1003                     {
1004                         return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
1005                     }
1006                     return TIType(gvn, TIType::UINT64, -2, -2);
1007                 }
1008                 case TIType::UINT64 :
1009                 {
1010                     if (in0.rows == 1 && in0.cols == 1)
1011                     {
1012                         return in1;
1013                     }
1014                     if (in1.rows == 1 && in1.cols == 1)
1015                     {
1016                         return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
1017                     }
1018                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1019                     {
1020                         return in1;
1021                     }
1022                     return TIType(gvn, TIType::UINT64, -2, -2);
1023                 }
1024                 case TIType::UINT8 :
1025                 {
1026                     if (in0.rows == 1 && in0.cols == 1)
1027                     {
1028                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
1029                     }
1030                     if (in1.rows == 1 && in1.cols == 1)
1031                     {
1032                         return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
1033                     }
1034                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1035                     {
1036                         return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
1037                     }
1038                     return TIType(gvn, TIType::UINT64, -2, -2);
1039                 }
1040                 default :
1041                     return TIType(gvn);
1042             }
1043             return TIType(gvn);
1044         }
1045         case TIType::INT8 :
1046         {
1047             switch (in1.type)
1048             {
1049                 case TIType::EMPTY :
1050                 {
1051                     return in0;
1052                 }
1053                 case TIType::BOOLEAN :
1054                 {
1055                     if (in0.rows == 1 && in0.cols == 1)
1056                     {
1057                         return TIType(gvn, TIType::INT8, in1.rows, in1.cols);
1058                     }
1059                     if (in1.rows == 1 && in1.cols == 1)
1060                     {
1061                         return in0;
1062                     }
1063                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1064                     {
1065                         return in0;
1066                     }
1067                     return TIType(gvn, TIType::INT8, -2, -2);
1068                 }
1069                 case TIType::DOUBLE :
1070                 {
1071                     if (in0.rows == 1 && in0.cols == 1)
1072                     {
1073                         return TIType(gvn, TIType::INT8, in1.rows, in1.cols);
1074                     }
1075                     if (in1.rows == 1 && in1.cols == 1)
1076                     {
1077                         return in0;
1078                     }
1079                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1080                     {
1081                         return in0;
1082                     }
1083                     return TIType(gvn, TIType::INT8, -2, -2);
1084                 }
1085                 case TIType::INT16 :
1086                 {
1087                     if (in0.rows == 1 && in0.cols == 1)
1088                     {
1089                         return in1;
1090                     }
1091                     if (in1.rows == 1 && in1.cols == 1)
1092                     {
1093                         return TIType(gvn, TIType::INT16, in0.rows, in0.cols);
1094                     }
1095                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1096                     {
1097                         return in1;
1098                     }
1099                     return TIType(gvn, TIType::INT16, -2, -2);
1100                 }
1101                 case TIType::INT32 :
1102                 {
1103                     if (in0.rows == 1 && in0.cols == 1)
1104                     {
1105                         return in1;
1106                     }
1107                     if (in1.rows == 1 && in1.cols == 1)
1108                     {
1109                         return TIType(gvn, TIType::INT32, in0.rows, in0.cols);
1110                     }
1111                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1112                     {
1113                         return in1;
1114                     }
1115                     return TIType(gvn, TIType::INT32, -2, -2);
1116                 }
1117                 case TIType::INT64 :
1118                 {
1119                     if (in0.rows == 1 && in0.cols == 1)
1120                     {
1121                         return in1;
1122                     }
1123                     if (in1.rows == 1 && in1.cols == 1)
1124                     {
1125                         return TIType(gvn, TIType::INT64, in0.rows, in0.cols);
1126                     }
1127                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1128                     {
1129                         return in1;
1130                     }
1131                     return TIType(gvn, TIType::INT64, -2, -2);
1132                 }
1133                 case TIType::INT8 :
1134                 {
1135                     if (in0.rows == 1 && in0.cols == 1)
1136                     {
1137                         return in1;
1138                     }
1139                     if (in1.rows == 1 && in1.cols == 1)
1140                     {
1141                         return in0;
1142                     }
1143                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1144                     {
1145                         return in0;
1146                     }
1147                     return TIType(gvn, TIType::INT8, -2, -2);
1148                 }
1149                 case TIType::UINT16 :
1150                 {
1151                     if (in0.rows == 1 && in0.cols == 1)
1152                     {
1153                         return in1;
1154                     }
1155                     if (in1.rows == 1 && in1.cols == 1)
1156                     {
1157                         return TIType(gvn, TIType::UINT16, in0.rows, in0.cols);
1158                     }
1159                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1160                     {
1161                         return in1;
1162                     }
1163                     return TIType(gvn, TIType::UINT16, -2, -2);
1164                 }
1165                 case TIType::UINT32 :
1166                 {
1167                     if (in0.rows == 1 && in0.cols == 1)
1168                     {
1169                         return in1;
1170                     }
1171                     if (in1.rows == 1 && in1.cols == 1)
1172                     {
1173                         return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
1174                     }
1175                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1176                     {
1177                         return in1;
1178                     }
1179                     return TIType(gvn, TIType::UINT32, -2, -2);
1180                 }
1181                 case TIType::UINT64 :
1182                 {
1183                     if (in0.rows == 1 && in0.cols == 1)
1184                     {
1185                         return in1;
1186                     }
1187                     if (in1.rows == 1 && in1.cols == 1)
1188                     {
1189                         return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
1190                     }
1191                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1192                     {
1193                         return in1;
1194                     }
1195                     return TIType(gvn, TIType::UINT64, -2, -2);
1196                 }
1197                 case TIType::UINT8 :
1198                 {
1199                     if (in0.rows == 1 && in0.cols == 1)
1200                     {
1201                         return in1;
1202                     }
1203                     if (in1.rows == 1 && in1.cols == 1)
1204                     {
1205                         return TIType(gvn, TIType::UINT8, in0.rows, in0.cols);
1206                     }
1207                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1208                     {
1209                         return in1;
1210                     }
1211                     return TIType(gvn, TIType::UINT8, -2, -2);
1212                 }
1213                 default :
1214                     return TIType(gvn);
1215             }
1216             return TIType(gvn);
1217         }
1218         case TIType::STRING :
1219         {
1220             switch (in1.type)
1221             {
1222                 case TIType::EMPTY :
1223                 {
1224                     return in0;
1225                 }
1226                 case TIType::STRING :
1227                 {
1228                     if (in0.rows == 1 && in0.cols == 1)
1229                     {
1230                         return in1;
1231                     }
1232                     if (in1.rows == 1 && in1.cols == 1)
1233                     {
1234                         return in0;
1235                     }
1236                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1237                     {
1238                         return in0;
1239                     }
1240                     return TIType(gvn, TIType::STRING, -2, -2);
1241                 }
1242                 default :
1243                     return TIType(gvn);
1244             }
1245             return TIType(gvn);
1246         }
1247         case TIType::UINT16 :
1248         {
1249             switch (in1.type)
1250             {
1251                 case TIType::EMPTY :
1252                 {
1253                     return in0;
1254                 }
1255                 case TIType::BOOLEAN :
1256                 {
1257                     if (in0.rows == 1 && in0.cols == 1)
1258                     {
1259                         return TIType(gvn, TIType::UINT16, in1.rows, in1.cols);
1260                     }
1261                     if (in1.rows == 1 && in1.cols == 1)
1262                     {
1263                         return in0;
1264                     }
1265                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1266                     {
1267                         return in0;
1268                     }
1269                     return TIType(gvn, TIType::UINT16, -2, -2);
1270                 }
1271                 case TIType::DOUBLE :
1272                 {
1273                     if (in0.rows == 1 && in0.cols == 1)
1274                     {
1275                         return TIType(gvn, TIType::UINT16, in1.rows, in1.cols);
1276                     }
1277                     if (in1.rows == 1 && in1.cols == 1)
1278                     {
1279                         return in0;
1280                     }
1281                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1282                     {
1283                         return in0;
1284                     }
1285                     return TIType(gvn, TIType::UINT16, -2, -2);
1286                 }
1287                 case TIType::INT16 :
1288                 {
1289                     if (in0.rows == 1 && in0.cols == 1)
1290                     {
1291                         return TIType(gvn, TIType::UINT16, in1.rows, in1.cols);
1292                     }
1293                     if (in1.rows == 1 && in1.cols == 1)
1294                     {
1295                         return in0;
1296                     }
1297                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1298                     {
1299                         return in0;
1300                     }
1301                     return TIType(gvn, TIType::UINT16, -2, -2);
1302                 }
1303                 case TIType::INT32 :
1304                 {
1305                     if (in0.rows == 1 && in0.cols == 1)
1306                     {
1307                         return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
1308                     }
1309                     if (in1.rows == 1 && in1.cols == 1)
1310                     {
1311                         return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
1312                     }
1313                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1314                     {
1315                         return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
1316                     }
1317                     return TIType(gvn, TIType::UINT32, -2, -2);
1318                 }
1319                 case TIType::INT64 :
1320                 {
1321                     if (in0.rows == 1 && in0.cols == 1)
1322                     {
1323                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
1324                     }
1325                     if (in1.rows == 1 && in1.cols == 1)
1326                     {
1327                         return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
1328                     }
1329                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1330                     {
1331                         return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
1332                     }
1333                     return TIType(gvn, TIType::UINT64, -2, -2);
1334                 }
1335                 case TIType::INT8 :
1336                 {
1337                     if (in0.rows == 1 && in0.cols == 1)
1338                     {
1339                         return TIType(gvn, TIType::UINT16, in1.rows, in1.cols);
1340                     }
1341                     if (in1.rows == 1 && in1.cols == 1)
1342                     {
1343                         return in0;
1344                     }
1345                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1346                     {
1347                         return in0;
1348                     }
1349                     return TIType(gvn, TIType::UINT16, -2, -2);
1350                 }
1351                 case TIType::UINT16 :
1352                 {
1353                     if (in0.rows == 1 && in0.cols == 1)
1354                     {
1355                         return in1;
1356                     }
1357                     if (in1.rows == 1 && in1.cols == 1)
1358                     {
1359                         return in0;
1360                     }
1361                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1362                     {
1363                         return in0;
1364                     }
1365                     return TIType(gvn, TIType::UINT16, -2, -2);
1366                 }
1367                 case TIType::UINT32 :
1368                 {
1369                     if (in0.rows == 1 && in0.cols == 1)
1370                     {
1371                         return in1;
1372                     }
1373                     if (in1.rows == 1 && in1.cols == 1)
1374                     {
1375                         return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
1376                     }
1377                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1378                     {
1379                         return in1;
1380                     }
1381                     return TIType(gvn, TIType::UINT32, -2, -2);
1382                 }
1383                 case TIType::UINT64 :
1384                 {
1385                     if (in0.rows == 1 && in0.cols == 1)
1386                     {
1387                         return in1;
1388                     }
1389                     if (in1.rows == 1 && in1.cols == 1)
1390                     {
1391                         return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
1392                     }
1393                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1394                     {
1395                         return in1;
1396                     }
1397                     return TIType(gvn, TIType::UINT64, -2, -2);
1398                 }
1399                 case TIType::UINT8 :
1400                 {
1401                     if (in0.rows == 1 && in0.cols == 1)
1402                     {
1403                         return TIType(gvn, TIType::UINT16, in1.rows, in1.cols);
1404                     }
1405                     if (in1.rows == 1 && in1.cols == 1)
1406                     {
1407                         return in0;
1408                     }
1409                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1410                     {
1411                         return in0;
1412                     }
1413                     return TIType(gvn, TIType::UINT16, -2, -2);
1414                 }
1415                 default :
1416                     return TIType(gvn);
1417             }
1418             return TIType(gvn);
1419         }
1420         case TIType::UINT32 :
1421         {
1422             switch (in1.type)
1423             {
1424                 case TIType::EMPTY :
1425                 {
1426                     return in0;
1427                 }
1428                 case TIType::BOOLEAN :
1429                 {
1430                     if (in0.rows == 1 && in0.cols == 1)
1431                     {
1432                         return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
1433                     }
1434                     if (in1.rows == 1 && in1.cols == 1)
1435                     {
1436                         return in0;
1437                     }
1438                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1439                     {
1440                         return in0;
1441                     }
1442                     return TIType(gvn, TIType::UINT32, -2, -2);
1443                 }
1444                 case TIType::DOUBLE :
1445                 {
1446                     if (in0.rows == 1 && in0.cols == 1)
1447                     {
1448                         return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
1449                     }
1450                     if (in1.rows == 1 && in1.cols == 1)
1451                     {
1452                         return in0;
1453                     }
1454                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1455                     {
1456                         return in0;
1457                     }
1458                     return TIType(gvn, TIType::UINT32, -2, -2);
1459                 }
1460                 case TIType::INT16 :
1461                 {
1462                     if (in0.rows == 1 && in0.cols == 1)
1463                     {
1464                         return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
1465                     }
1466                     if (in1.rows == 1 && in1.cols == 1)
1467                     {
1468                         return in0;
1469                     }
1470                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1471                     {
1472                         return in0;
1473                     }
1474                     return TIType(gvn, TIType::UINT32, -2, -2);
1475                 }
1476                 case TIType::INT32 :
1477                 {
1478                     if (in0.rows == 1 && in0.cols == 1)
1479                     {
1480                         return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
1481                     }
1482                     if (in1.rows == 1 && in1.cols == 1)
1483                     {
1484                         return in0;
1485                     }
1486                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1487                     {
1488                         return in0;
1489                     }
1490                     return TIType(gvn, TIType::UINT32, -2, -2);
1491                 }
1492                 case TIType::INT64 :
1493                 {
1494                     if (in0.rows == 1 && in0.cols == 1)
1495                     {
1496                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
1497                     }
1498                     if (in1.rows == 1 && in1.cols == 1)
1499                     {
1500                         return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
1501                     }
1502                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1503                     {
1504                         return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
1505                     }
1506                     return TIType(gvn, TIType::UINT64, -2, -2);
1507                 }
1508                 case TIType::INT8 :
1509                 {
1510                     if (in0.rows == 1 && in0.cols == 1)
1511                     {
1512                         return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
1513                     }
1514                     if (in1.rows == 1 && in1.cols == 1)
1515                     {
1516                         return in0;
1517                     }
1518                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1519                     {
1520                         return in0;
1521                     }
1522                     return TIType(gvn, TIType::UINT32, -2, -2);
1523                 }
1524                 case TIType::UINT16 :
1525                 {
1526                     if (in0.rows == 1 && in0.cols == 1)
1527                     {
1528                         return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
1529                     }
1530                     if (in1.rows == 1 && in1.cols == 1)
1531                     {
1532                         return in0;
1533                     }
1534                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1535                     {
1536                         return in0;
1537                     }
1538                     return TIType(gvn, TIType::UINT32, -2, -2);
1539                 }
1540                 case TIType::UINT32 :
1541                 {
1542                     if (in0.rows == 1 && in0.cols == 1)
1543                     {
1544                         return in1;
1545                     }
1546                     if (in1.rows == 1 && in1.cols == 1)
1547                     {
1548                         return in0;
1549                     }
1550                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1551                     {
1552                         return in0;
1553                     }
1554                     return TIType(gvn, TIType::UINT32, -2, -2);
1555                 }
1556                 case TIType::UINT64 :
1557                 {
1558                     if (in0.rows == 1 && in0.cols == 1)
1559                     {
1560                         return in1;
1561                     }
1562                     if (in1.rows == 1 && in1.cols == 1)
1563                     {
1564                         return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
1565                     }
1566                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1567                     {
1568                         return in1;
1569                     }
1570                     return TIType(gvn, TIType::UINT64, -2, -2);
1571                 }
1572                 case TIType::UINT8 :
1573                 {
1574                     if (in0.rows == 1 && in0.cols == 1)
1575                     {
1576                         return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
1577                     }
1578                     if (in1.rows == 1 && in1.cols == 1)
1579                     {
1580                         return in0;
1581                     }
1582                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1583                     {
1584                         return in0;
1585                     }
1586                     return TIType(gvn, TIType::UINT32, -2, -2);
1587                 }
1588                 default :
1589                     return TIType(gvn);
1590             }
1591             return TIType(gvn);
1592         }
1593         case TIType::UINT64 :
1594         {
1595             switch (in1.type)
1596             {
1597                 case TIType::EMPTY :
1598                 {
1599                     return in0;
1600                 }
1601                 case TIType::BOOLEAN :
1602                 {
1603                     if (in0.rows == 1 && in0.cols == 1)
1604                     {
1605                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
1606                     }
1607                     if (in1.rows == 1 && in1.cols == 1)
1608                     {
1609                         return in0;
1610                     }
1611                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1612                     {
1613                         return in0;
1614                     }
1615                     return TIType(gvn, TIType::UINT64, -2, -2);
1616                 }
1617                 case TIType::DOUBLE :
1618                 {
1619                     if (in0.rows == 1 && in0.cols == 1)
1620                     {
1621                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
1622                     }
1623                     if (in1.rows == 1 && in1.cols == 1)
1624                     {
1625                         return in0;
1626                     }
1627                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1628                     {
1629                         return in0;
1630                     }
1631                     return TIType(gvn, TIType::UINT64, -2, -2);
1632                 }
1633                 case TIType::INT16 :
1634                 {
1635                     if (in0.rows == 1 && in0.cols == 1)
1636                     {
1637                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
1638                     }
1639                     if (in1.rows == 1 && in1.cols == 1)
1640                     {
1641                         return in0;
1642                     }
1643                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1644                     {
1645                         return in0;
1646                     }
1647                     return TIType(gvn, TIType::UINT64, -2, -2);
1648                 }
1649                 case TIType::INT32 :
1650                 {
1651                     if (in0.rows == 1 && in0.cols == 1)
1652                     {
1653                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
1654                     }
1655                     if (in1.rows == 1 && in1.cols == 1)
1656                     {
1657                         return in0;
1658                     }
1659                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1660                     {
1661                         return in0;
1662                     }
1663                     return TIType(gvn, TIType::UINT64, -2, -2);
1664                 }
1665                 case TIType::INT64 :
1666                 {
1667                     if (in0.rows == 1 && in0.cols == 1)
1668                     {
1669                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
1670                     }
1671                     if (in1.rows == 1 && in1.cols == 1)
1672                     {
1673                         return in0;
1674                     }
1675                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1676                     {
1677                         return in0;
1678                     }
1679                     return TIType(gvn, TIType::UINT64, -2, -2);
1680                 }
1681                 case TIType::INT8 :
1682                 {
1683                     if (in0.rows == 1 && in0.cols == 1)
1684                     {
1685                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
1686                     }
1687                     if (in1.rows == 1 && in1.cols == 1)
1688                     {
1689                         return in0;
1690                     }
1691                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1692                     {
1693                         return in0;
1694                     }
1695                     return TIType(gvn, TIType::UINT64, -2, -2);
1696                 }
1697                 case TIType::UINT16 :
1698                 {
1699                     if (in0.rows == 1 && in0.cols == 1)
1700                     {
1701                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
1702                     }
1703                     if (in1.rows == 1 && in1.cols == 1)
1704                     {
1705                         return in0;
1706                     }
1707                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1708                     {
1709                         return in0;
1710                     }
1711                     return TIType(gvn, TIType::UINT64, -2, -2);
1712                 }
1713                 case TIType::UINT32 :
1714                 {
1715                     if (in0.rows == 1 && in0.cols == 1)
1716                     {
1717                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
1718                     }
1719                     if (in1.rows == 1 && in1.cols == 1)
1720                     {
1721                         return in0;
1722                     }
1723                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1724                     {
1725                         return in0;
1726                     }
1727                     return TIType(gvn, TIType::UINT64, -2, -2);
1728                 }
1729                 case TIType::UINT64 :
1730                 {
1731                     if (in0.rows == 1 && in0.cols == 1)
1732                     {
1733                         return in1;
1734                     }
1735                     if (in1.rows == 1 && in1.cols == 1)
1736                     {
1737                         return in0;
1738                     }
1739                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1740                     {
1741                         return in0;
1742                     }
1743                     return TIType(gvn, TIType::UINT64, -2, -2);
1744                 }
1745                 case TIType::UINT8 :
1746                 {
1747                     if (in0.rows == 1 && in0.cols == 1)
1748                     {
1749                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
1750                     }
1751                     if (in1.rows == 1 && in1.cols == 1)
1752                     {
1753                         return in0;
1754                     }
1755                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1756                     {
1757                         return in0;
1758                     }
1759                     return TIType(gvn, TIType::UINT64, -2, -2);
1760                 }
1761                 default :
1762                     return TIType(gvn);
1763             }
1764             return TIType(gvn);
1765         }
1766         case TIType::UINT8 :
1767         {
1768             switch (in1.type)
1769             {
1770                 case TIType::EMPTY :
1771                 {
1772                     return in0;
1773                 }
1774                 case TIType::BOOLEAN :
1775                 {
1776                     if (in0.rows == 1 && in0.cols == 1)
1777                     {
1778                         return TIType(gvn, TIType::UINT8, in1.rows, in1.cols);
1779                     }
1780                     if (in1.rows == 1 && in1.cols == 1)
1781                     {
1782                         return in0;
1783                     }
1784                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1785                     {
1786                         return in0;
1787                     }
1788                     return TIType(gvn, TIType::UINT8, -2, -2);
1789                 }
1790                 case TIType::DOUBLE :
1791                 {
1792                     if (in0.rows == 1 && in0.cols == 1)
1793                     {
1794                         return TIType(gvn, TIType::UINT8, in1.rows, in1.cols);
1795                     }
1796                     if (in1.rows == 1 && in1.cols == 1)
1797                     {
1798                         return in0;
1799                     }
1800                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1801                     {
1802                         return in0;
1803                     }
1804                     return TIType(gvn, TIType::UINT8, -2, -2);
1805                 }
1806                 case TIType::INT16 :
1807                 {
1808                     if (in0.rows == 1 && in0.cols == 1)
1809                     {
1810                         return TIType(gvn, TIType::UINT16, in1.rows, in1.cols);
1811                     }
1812                     if (in1.rows == 1 && in1.cols == 1)
1813                     {
1814                         return TIType(gvn, TIType::UINT16, in0.rows, in0.cols);
1815                     }
1816                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1817                     {
1818                         return TIType(gvn, TIType::UINT16, in0.rows, in0.cols);
1819                     }
1820                     return TIType(gvn, TIType::UINT16, -2, -2);
1821                 }
1822                 case TIType::INT32 :
1823                 {
1824                     if (in0.rows == 1 && in0.cols == 1)
1825                     {
1826                         return TIType(gvn, TIType::UINT32, in1.rows, in1.cols);
1827                     }
1828                     if (in1.rows == 1 && in1.cols == 1)
1829                     {
1830                         return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
1831                     }
1832                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1833                     {
1834                         return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
1835                     }
1836                     return TIType(gvn, TIType::UINT32, -2, -2);
1837                 }
1838                 case TIType::INT64 :
1839                 {
1840                     if (in0.rows == 1 && in0.cols == 1)
1841                     {
1842                         return TIType(gvn, TIType::UINT64, in1.rows, in1.cols);
1843                     }
1844                     if (in1.rows == 1 && in1.cols == 1)
1845                     {
1846                         return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
1847                     }
1848                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1849                     {
1850                         return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
1851                     }
1852                     return TIType(gvn, TIType::UINT64, -2, -2);
1853                 }
1854                 case TIType::INT8 :
1855                 {
1856                     if (in0.rows == 1 && in0.cols == 1)
1857                     {
1858                         return TIType(gvn, TIType::UINT8, in1.rows, in1.cols);
1859                     }
1860                     if (in1.rows == 1 && in1.cols == 1)
1861                     {
1862                         return in0;
1863                     }
1864                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1865                     {
1866                         return in0;
1867                     }
1868                     return TIType(gvn, TIType::UINT8, -2, -2);
1869                 }
1870                 case TIType::UINT16 :
1871                 {
1872                     if (in0.rows == 1 && in0.cols == 1)
1873                     {
1874                         return in1;
1875                     }
1876                     if (in1.rows == 1 && in1.cols == 1)
1877                     {
1878                         return TIType(gvn, TIType::UINT16, in0.rows, in0.cols);
1879                     }
1880                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1881                     {
1882                         return in1;
1883                     }
1884                     return TIType(gvn, TIType::UINT16, -2, -2);
1885                 }
1886                 case TIType::UINT32 :
1887                 {
1888                     if (in0.rows == 1 && in0.cols == 1)
1889                     {
1890                         return in1;
1891                     }
1892                     if (in1.rows == 1 && in1.cols == 1)
1893                     {
1894                         return TIType(gvn, TIType::UINT32, in0.rows, in0.cols);
1895                     }
1896                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1897                     {
1898                         return in1;
1899                     }
1900                     return TIType(gvn, TIType::UINT32, -2, -2);
1901                 }
1902                 case TIType::UINT64 :
1903                 {
1904                     if (in0.rows == 1 && in0.cols == 1)
1905                     {
1906                         return in1;
1907                     }
1908                     if (in1.rows == 1 && in1.cols == 1)
1909                     {
1910                         return TIType(gvn, TIType::UINT64, in0.rows, in0.cols);
1911                     }
1912                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1913                     {
1914                         return in1;
1915                     }
1916                     return TIType(gvn, TIType::UINT64, -2, -2);
1917                 }
1918                 case TIType::UINT8 :
1919                 {
1920                     if (in0.rows == 1 && in0.cols == 1)
1921                     {
1922                         return in1;
1923                     }
1924                     if (in1.rows == 1 && in1.cols == 1)
1925                     {
1926                         return in0;
1927                     }
1928                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1929                     {
1930                         return in0;
1931                     }
1932                     return TIType(gvn, TIType::UINT8, -2, -2);
1933                 }
1934                 default :
1935                     return TIType(gvn);
1936             }
1937             return TIType(gvn);
1938         }
1939         default :
1940             return TIType(gvn);
1941     }
1942 }
1943
1944 } // namespace analysis