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_____neq____(GVN & gvn,const TIType & in0,const TIType & in1)22 TIType Checkers::check_____neq____(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 TIType(gvn, TIType::BOOLEAN, 1, 1);
33                 }
34                 case TIType::BOOLEAN :
35                 {
36                     if (in1.rows == 1 && in1.cols == 1)
37                     {
38                         return in1;
39                     }
40                     return TIType(gvn);
41                 }
42                 case TIType::COMPLEX :
43                 {
44                     if (in1.rows == 1 && in1.cols == 1)
45                     {
46                         return TIType(gvn, TIType::BOOLEAN, 1, 1);
47                     }
48                     return TIType(gvn);
49                 }
50                 case TIType::DOUBLE :
51                 {
52                     if (in1.rows == 1 && in1.cols == 1)
53                     {
54                         return TIType(gvn, TIType::BOOLEAN, 1, 1);
55                     }
56                     return TIType(gvn);
57                 }
58                 case TIType::INT16 :
59                 {
60                     if (in1.rows == 1 && in1.cols == 1)
61                     {
62                         return TIType(gvn, TIType::BOOLEAN, 1, 1);
63                     }
64                     return TIType(gvn);
65                 }
66                 case TIType::INT32 :
67                 {
68                     if (in1.rows == 1 && in1.cols == 1)
69                     {
70                         return TIType(gvn, TIType::BOOLEAN, 1, 1);
71                     }
72                     return TIType(gvn);
73                 }
74                 case TIType::INT64 :
75                 {
76                     if (in1.rows == 1 && in1.cols == 1)
77                     {
78                         return TIType(gvn, TIType::BOOLEAN, 1, 1);
79                     }
80                     return TIType(gvn);
81                 }
82                 case TIType::INT8 :
83                 {
84                     if (in1.rows == 1 && in1.cols == 1)
85                     {
86                         return TIType(gvn, TIType::BOOLEAN, 1, 1);
87                     }
88                     return TIType(gvn);
89                 }
90                 case TIType::STRING :
91                 {
92                     if (in1.rows == 1 && in1.cols == 1)
93                     {
94                         return TIType(gvn, TIType::BOOLEAN, 1, 1);
95                     }
96                     return TIType(gvn);
97                 }
98                 case TIType::UINT16 :
99                 {
100                     if (in1.rows == 1 && in1.cols == 1)
101                     {
102                         return TIType(gvn, TIType::BOOLEAN, 1, 1);
103                     }
104                     return TIType(gvn);
105                 }
106                 case TIType::UINT32 :
107                 {
108                     if (in1.rows == 1 && in1.cols == 1)
109                     {
110                         return TIType(gvn, TIType::BOOLEAN, 1, 1);
111                     }
112                     return TIType(gvn);
113                 }
114                 case TIType::UINT64 :
115                 {
116                     if (in1.rows == 1 && in1.cols == 1)
117                     {
118                         return TIType(gvn, TIType::BOOLEAN, 1, 1);
119                     }
120                     return TIType(gvn);
121                 }
122                 case TIType::UINT8 :
123                 {
124                     if (in1.rows == 1 && in1.cols == 1)
125                     {
126                         return TIType(gvn, TIType::BOOLEAN, 1, 1);
127                     }
128                     return TIType(gvn);
129                 }
130                 default :
131                     return TIType(gvn);
132             }
133         }
134         case TIType::BOOLEAN :
135         {
136             switch (in1.type)
137             {
138                 case TIType::EMPTY :
139                 {
140                     if (in0.rows == 1 && in0.cols == 1)
141                     {
142                         return in0;
143                     }
144                     return TIType(gvn);
145                 }
146                 case TIType::BOOLEAN :
147                 {
148                     if (in0.rows == 1 && in0.cols == 1)
149                     {
150                         return in1;
151                     }
152                     if (in1.rows == 1 && in1.cols == 1)
153                     {
154                         return in0;
155                     }
156                     if (in1.rows == in0.rows && in1.cols == in0.cols)
157                     {
158                         return in0;
159                     }
160                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
161                 }
162                 case TIType::COMPLEX :
163                 {
164                     if (in0.rows == 1 && in0.cols == 1)
165                     {
166                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
167                     }
168                     if (in1.rows == 1 && in1.cols == 1)
169                     {
170                         return in0;
171                     }
172                     if (in1.rows == in0.rows && in1.cols == in0.cols)
173                     {
174                         return in0;
175                     }
176                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
177                 }
178                 case TIType::DOUBLE :
179                 {
180                     if (in0.rows == 1 && in0.cols == 1)
181                     {
182                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
183                     }
184                     if (in1.rows == 1 && in1.cols == 1)
185                     {
186                         return in0;
187                     }
188                     if (in1.rows == in0.rows && in1.cols == in0.cols)
189                     {
190                         return in0;
191                     }
192                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
193                 }
194                 case TIType::INT16 :
195                 {
196                     if (in0.rows == 1 && in0.cols == 1)
197                     {
198                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
199                     }
200                     if (in1.rows == 1 && in1.cols == 1)
201                     {
202                         return in0;
203                     }
204                     if (in1.rows == in0.rows && in1.cols == in0.cols)
205                     {
206                         return in0;
207                     }
208                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
209                 }
210                 case TIType::INT32 :
211                 {
212                     if (in0.rows == 1 && in0.cols == 1)
213                     {
214                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
215                     }
216                     if (in1.rows == 1 && in1.cols == 1)
217                     {
218                         return in0;
219                     }
220                     if (in1.rows == in0.rows && in1.cols == in0.cols)
221                     {
222                         return in0;
223                     }
224                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
225                 }
226                 case TIType::INT64 :
227                 {
228                     if (in0.rows == 1 && in0.cols == 1)
229                     {
230                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
231                     }
232                     if (in1.rows == 1 && in1.cols == 1)
233                     {
234                         return in0;
235                     }
236                     if (in1.rows == in0.rows && in1.cols == in0.cols)
237                     {
238                         return in0;
239                     }
240                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
241                 }
242                 case TIType::INT8 :
243                 {
244                     if (in0.rows == 1 && in0.cols == 1)
245                     {
246                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
247                     }
248                     if (in1.rows == 1 && in1.cols == 1)
249                     {
250                         return in0;
251                     }
252                     if (in1.rows == in0.rows && in1.cols == in0.cols)
253                     {
254                         return in0;
255                     }
256                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
257                 }
258                 case TIType::STRING :
259                 {
260                     if (in0.rows == 1 && in0.cols == 1)
261                     {
262                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
263                     }
264                     if (in1.rows == 1 && in1.cols == 1)
265                     {
266                         return in0;
267                     }
268                     if (in1.rows == in0.rows && in1.cols == in0.cols)
269                     {
270                         return in0;
271                     }
272                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
273                 }
274                 case TIType::UINT16 :
275                 {
276                     if (in0.rows == 1 && in0.cols == 1)
277                     {
278                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
279                     }
280                     if (in1.rows == 1 && in1.cols == 1)
281                     {
282                         return in0;
283                     }
284                     if (in1.rows == in0.rows && in1.cols == in0.cols)
285                     {
286                         return in0;
287                     }
288                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
289                 }
290                 case TIType::UINT32 :
291                 {
292                     if (in0.rows == 1 && in0.cols == 1)
293                     {
294                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
295                     }
296                     if (in1.rows == 1 && in1.cols == 1)
297                     {
298                         return in0;
299                     }
300                     if (in1.rows == in0.rows && in1.cols == in0.cols)
301                     {
302                         return in0;
303                     }
304                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
305                 }
306                 case TIType::UINT64 :
307                 {
308                     if (in0.rows == 1 && in0.cols == 1)
309                     {
310                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
311                     }
312                     if (in1.rows == 1 && in1.cols == 1)
313                     {
314                         return in0;
315                     }
316                     if (in1.rows == in0.rows && in1.cols == in0.cols)
317                     {
318                         return in0;
319                     }
320                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
321                 }
322                 case TIType::UINT8 :
323                 {
324                     if (in0.rows == 1 && in0.cols == 1)
325                     {
326                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
327                     }
328                     if (in1.rows == 1 && in1.cols == 1)
329                     {
330                         return in0;
331                     }
332                     if (in1.rows == in0.rows && in1.cols == in0.cols)
333                     {
334                         return in0;
335                     }
336                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
337                 }
338                 default :
339                     return TIType(gvn);
340             }
341         }
342         case TIType::COMPLEX :
343         {
344             switch (in1.type)
345             {
346                 case TIType::EMPTY :
347                 {
348                     if (in0.rows == 1 && in0.cols == 1)
349                     {
350                         return TIType(gvn, TIType::BOOLEAN, 1, 1);
351                     }
352                     return TIType(gvn);
353                 }
354                 case TIType::BOOLEAN :
355                 {
356                     if (in0.rows == 1 && in0.cols == 1)
357                     {
358                         return in1;
359                     }
360                     if (in1.rows == 1 && in1.cols == 1)
361                     {
362                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
363                     }
364                     if (in1.rows == in0.rows && in1.cols == in0.cols)
365                     {
366                         return in1;
367                     }
368                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
369                 }
370                 case TIType::COMPLEX :
371                 {
372                     if (in0.rows == 1 && in0.cols == 1)
373                     {
374                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
375                     }
376                     if (in1.rows == 1 && in1.cols == 1)
377                     {
378                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
379                     }
380                     if (in1.rows == in0.rows && in1.cols == in0.cols)
381                     {
382                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
383                     }
384                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
385                 }
386                 case TIType::DOUBLE :
387                 {
388                     if (in0.rows == 1 && in0.cols == 1)
389                     {
390                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
391                     }
392                     if (in1.rows == 1 && in1.cols == 1)
393                     {
394                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
395                     }
396                     if (in1.rows == in0.rows && in1.cols == in0.cols)
397                     {
398                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
399                     }
400                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
401                 }
402                 case TIType::INT16 :
403                 {
404                     if (in0.rows == 1 && in0.cols == 1)
405                     {
406                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
407                     }
408                     if (in1.rows == 1 && in1.cols == 1)
409                     {
410                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
411                     }
412                     if (in1.rows == in0.rows && in1.cols == in0.cols)
413                     {
414                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
415                     }
416                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
417                 }
418                 case TIType::INT32 :
419                 {
420                     if (in0.rows == 1 && in0.cols == 1)
421                     {
422                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
423                     }
424                     if (in1.rows == 1 && in1.cols == 1)
425                     {
426                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
427                     }
428                     if (in1.rows == in0.rows && in1.cols == in0.cols)
429                     {
430                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
431                     }
432                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
433                 }
434                 case TIType::INT64 :
435                 {
436                     if (in0.rows == 1 && in0.cols == 1)
437                     {
438                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
439                     }
440                     if (in1.rows == 1 && in1.cols == 1)
441                     {
442                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
443                     }
444                     if (in1.rows == in0.rows && in1.cols == in0.cols)
445                     {
446                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
447                     }
448                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
449                 }
450                 case TIType::INT8 :
451                 {
452                     if (in0.rows == 1 && in0.cols == 1)
453                     {
454                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
455                     }
456                     if (in1.rows == 1 && in1.cols == 1)
457                     {
458                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
459                     }
460                     if (in1.rows == in0.rows && in1.cols == in0.cols)
461                     {
462                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
463                     }
464                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
465                 }
466                 case TIType::STRING :
467                 {
468                     if (in0.rows == 1 && in0.cols == 1)
469                     {
470                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
471                     }
472                     if (in1.rows == 1 && in1.cols == 1)
473                     {
474                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
475                     }
476                     if (in1.rows == in0.rows && in1.cols == in0.cols)
477                     {
478                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
479                     }
480                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
481                 }
482                 case TIType::UINT16 :
483                 {
484                     if (in0.rows == 1 && in0.cols == 1)
485                     {
486                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
487                     }
488                     if (in1.rows == 1 && in1.cols == 1)
489                     {
490                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
491                     }
492                     if (in1.rows == in0.rows && in1.cols == in0.cols)
493                     {
494                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
495                     }
496                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
497                 }
498                 case TIType::UINT32 :
499                 {
500                     if (in0.rows == 1 && in0.cols == 1)
501                     {
502                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
503                     }
504                     if (in1.rows == 1 && in1.cols == 1)
505                     {
506                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
507                     }
508                     if (in1.rows == in0.rows && in1.cols == in0.cols)
509                     {
510                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
511                     }
512                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
513                 }
514                 case TIType::UINT64 :
515                 {
516                     if (in0.rows == 1 && in0.cols == 1)
517                     {
518                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
519                     }
520                     if (in1.rows == 1 && in1.cols == 1)
521                     {
522                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
523                     }
524                     if (in1.rows == in0.rows && in1.cols == in0.cols)
525                     {
526                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
527                     }
528                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
529                 }
530                 case TIType::UINT8 :
531                 {
532                     if (in0.rows == 1 && in0.cols == 1)
533                     {
534                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
535                     }
536                     if (in1.rows == 1 && in1.cols == 1)
537                     {
538                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
539                     }
540                     if (in1.rows == in0.rows && in1.cols == in0.cols)
541                     {
542                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
543                     }
544                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
545                 }
546                 default :
547                     return TIType(gvn);
548             }
549         }
550         case TIType::DOUBLE :
551         {
552             switch (in1.type)
553             {
554                 case TIType::EMPTY :
555                 {
556                     if (in0.rows == 1 && in0.cols == 1)
557                     {
558                         return TIType(gvn, TIType::BOOLEAN, 1, 1);
559                     }
560                     return TIType(gvn);
561                 }
562                 case TIType::BOOLEAN :
563                 {
564                     if (in0.rows == 1 && in0.cols == 1)
565                     {
566                         return in1;
567                     }
568                     if (in1.rows == 1 && in1.cols == 1)
569                     {
570                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
571                     }
572                     if (in1.rows == in0.rows && in1.cols == in0.cols)
573                     {
574                         return in1;
575                     }
576                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
577                 }
578                 case TIType::COMPLEX :
579                 {
580                     if (in0.rows == 1 && in0.cols == 1)
581                     {
582                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
583                     }
584                     if (in1.rows == 1 && in1.cols == 1)
585                     {
586                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
587                     }
588                     if (in1.rows == in0.rows && in1.cols == in0.cols)
589                     {
590                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
591                     }
592                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
593                 }
594                 case TIType::DOUBLE :
595                 {
596                     if (in0.rows == 1 && in0.cols == 1)
597                     {
598                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
599                     }
600                     if (in1.rows == 1 && in1.cols == 1)
601                     {
602                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
603                     }
604                     if (in1.rows == in0.rows && in1.cols == in0.cols)
605                     {
606                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
607                     }
608                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
609                 }
610                 case TIType::INT16 :
611                 {
612                     if (in0.rows == 1 && in0.cols == 1)
613                     {
614                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
615                     }
616                     if (in1.rows == 1 && in1.cols == 1)
617                     {
618                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
619                     }
620                     if (in1.rows == in0.rows && in1.cols == in0.cols)
621                     {
622                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
623                     }
624                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
625                 }
626                 case TIType::INT32 :
627                 {
628                     if (in0.rows == 1 && in0.cols == 1)
629                     {
630                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
631                     }
632                     if (in1.rows == 1 && in1.cols == 1)
633                     {
634                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
635                     }
636                     if (in1.rows == in0.rows && in1.cols == in0.cols)
637                     {
638                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
639                     }
640                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
641                 }
642                 case TIType::INT64 :
643                 {
644                     if (in0.rows == 1 && in0.cols == 1)
645                     {
646                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
647                     }
648                     if (in1.rows == 1 && in1.cols == 1)
649                     {
650                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
651                     }
652                     if (in1.rows == in0.rows && in1.cols == in0.cols)
653                     {
654                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
655                     }
656                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
657                 }
658                 case TIType::INT8 :
659                 {
660                     if (in0.rows == 1 && in0.cols == 1)
661                     {
662                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
663                     }
664                     if (in1.rows == 1 && in1.cols == 1)
665                     {
666                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
667                     }
668                     if (in1.rows == in0.rows && in1.cols == in0.cols)
669                     {
670                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
671                     }
672                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
673                 }
674                 case TIType::STRING :
675                 {
676                     if (in0.rows == 1 && in0.cols == 1)
677                     {
678                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
679                     }
680                     if (in1.rows == 1 && in1.cols == 1)
681                     {
682                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
683                     }
684                     if (in1.rows == in0.rows && in1.cols == in0.cols)
685                     {
686                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
687                     }
688                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
689                 }
690                 case TIType::UINT16 :
691                 {
692                     if (in0.rows == 1 && in0.cols == 1)
693                     {
694                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
695                     }
696                     if (in1.rows == 1 && in1.cols == 1)
697                     {
698                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
699                     }
700                     if (in1.rows == in0.rows && in1.cols == in0.cols)
701                     {
702                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
703                     }
704                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
705                 }
706                 case TIType::UINT32 :
707                 {
708                     if (in0.rows == 1 && in0.cols == 1)
709                     {
710                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
711                     }
712                     if (in1.rows == 1 && in1.cols == 1)
713                     {
714                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
715                     }
716                     if (in1.rows == in0.rows && in1.cols == in0.cols)
717                     {
718                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
719                     }
720                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
721                 }
722                 case TIType::UINT64 :
723                 {
724                     if (in0.rows == 1 && in0.cols == 1)
725                     {
726                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
727                     }
728                     if (in1.rows == 1 && in1.cols == 1)
729                     {
730                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
731                     }
732                     if (in1.rows == in0.rows && in1.cols == in0.cols)
733                     {
734                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
735                     }
736                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
737                 }
738                 case TIType::UINT8 :
739                 {
740                     if (in0.rows == 1 && in0.cols == 1)
741                     {
742                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
743                     }
744                     if (in1.rows == 1 && in1.cols == 1)
745                     {
746                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
747                     }
748                     if (in1.rows == in0.rows && in1.cols == in0.cols)
749                     {
750                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
751                     }
752                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
753                 }
754                 default :
755                     return TIType(gvn);
756             }
757         }
758         case TIType::INT16 :
759         {
760             switch (in1.type)
761             {
762                 case TIType::EMPTY :
763                 {
764                     if (in0.rows == 1 && in0.cols == 1)
765                     {
766                         return TIType(gvn, TIType::BOOLEAN, 1, 1);
767                     }
768                     return TIType(gvn);
769                 }
770                 case TIType::BOOLEAN :
771                 {
772                     if (in0.rows == 1 && in0.cols == 1)
773                     {
774                         return in1;
775                     }
776                     if (in1.rows == 1 && in1.cols == 1)
777                     {
778                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
779                     }
780                     if (in1.rows == in0.rows && in1.cols == in0.cols)
781                     {
782                         return in1;
783                     }
784                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
785                 }
786                 case TIType::COMPLEX :
787                 {
788                     if (in0.rows == 1 && in0.cols == 1)
789                     {
790                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
791                     }
792                     if (in1.rows == 1 && in1.cols == 1)
793                     {
794                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
795                     }
796                     if (in1.rows == in0.rows && in1.cols == in0.cols)
797                     {
798                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
799                     }
800                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
801                 }
802                 case TIType::DOUBLE :
803                 {
804                     if (in0.rows == 1 && in0.cols == 1)
805                     {
806                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
807                     }
808                     if (in1.rows == 1 && in1.cols == 1)
809                     {
810                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
811                     }
812                     if (in1.rows == in0.rows && in1.cols == in0.cols)
813                     {
814                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
815                     }
816                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
817                 }
818                 case TIType::INT16 :
819                 {
820                     if (in0.rows == 1 && in0.cols == 1)
821                     {
822                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
823                     }
824                     if (in1.rows == 1 && in1.cols == 1)
825                     {
826                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
827                     }
828                     if (in1.rows == in0.rows && in1.cols == in0.cols)
829                     {
830                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
831                     }
832                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
833                 }
834                 case TIType::INT32 :
835                 {
836                     if (in0.rows == 1 && in0.cols == 1)
837                     {
838                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
839                     }
840                     if (in1.rows == 1 && in1.cols == 1)
841                     {
842                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
843                     }
844                     if (in1.rows == in0.rows && in1.cols == in0.cols)
845                     {
846                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
847                     }
848                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
849                 }
850                 case TIType::INT64 :
851                 {
852                     if (in0.rows == 1 && in0.cols == 1)
853                     {
854                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
855                     }
856                     if (in1.rows == 1 && in1.cols == 1)
857                     {
858                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
859                     }
860                     if (in1.rows == in0.rows && in1.cols == in0.cols)
861                     {
862                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
863                     }
864                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
865                 }
866                 case TIType::INT8 :
867                 {
868                     if (in0.rows == 1 && in0.cols == 1)
869                     {
870                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
871                     }
872                     if (in1.rows == 1 && in1.cols == 1)
873                     {
874                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
875                     }
876                     if (in1.rows == in0.rows && in1.cols == in0.cols)
877                     {
878                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
879                     }
880                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
881                 }
882                 case TIType::STRING :
883                 {
884                     if (in0.rows == 1 && in0.cols == 1)
885                     {
886                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
887                     }
888                     if (in1.rows == 1 && in1.cols == 1)
889                     {
890                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
891                     }
892                     if (in1.rows == in0.rows && in1.cols == in0.cols)
893                     {
894                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
895                     }
896                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
897                 }
898                 case TIType::UINT16 :
899                 {
900                     if (in0.rows == 1 && in0.cols == 1)
901                     {
902                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
903                     }
904                     if (in1.rows == 1 && in1.cols == 1)
905                     {
906                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
907                     }
908                     if (in1.rows == in0.rows && in1.cols == in0.cols)
909                     {
910                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
911                     }
912                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
913                 }
914                 case TIType::UINT32 :
915                 {
916                     if (in0.rows == 1 && in0.cols == 1)
917                     {
918                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
919                     }
920                     if (in1.rows == 1 && in1.cols == 1)
921                     {
922                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
923                     }
924                     if (in1.rows == in0.rows && in1.cols == in0.cols)
925                     {
926                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
927                     }
928                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
929                 }
930                 case TIType::UINT64 :
931                 {
932                     if (in0.rows == 1 && in0.cols == 1)
933                     {
934                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
935                     }
936                     if (in1.rows == 1 && in1.cols == 1)
937                     {
938                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
939                     }
940                     if (in1.rows == in0.rows && in1.cols == in0.cols)
941                     {
942                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
943                     }
944                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
945                 }
946                 case TIType::UINT8 :
947                 {
948                     if (in0.rows == 1 && in0.cols == 1)
949                     {
950                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
951                     }
952                     if (in1.rows == 1 && in1.cols == 1)
953                     {
954                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
955                     }
956                     if (in1.rows == in0.rows && in1.cols == in0.cols)
957                     {
958                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
959                     }
960                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
961                 }
962                 default :
963                     return TIType(gvn);
964             }
965         }
966         case TIType::INT32 :
967         {
968             switch (in1.type)
969             {
970                 case TIType::EMPTY :
971                 {
972                     if (in0.rows == 1 && in0.cols == 1)
973                     {
974                         return TIType(gvn, TIType::BOOLEAN, 1, 1);
975                     }
976                     return TIType(gvn);
977                 }
978                 case TIType::BOOLEAN :
979                 {
980                     if (in0.rows == 1 && in0.cols == 1)
981                     {
982                         return in1;
983                     }
984                     if (in1.rows == 1 && in1.cols == 1)
985                     {
986                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
987                     }
988                     if (in1.rows == in0.rows && in1.cols == in0.cols)
989                     {
990                         return in1;
991                     }
992                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
993                 }
994                 case TIType::COMPLEX :
995                 {
996                     if (in0.rows == 1 && in0.cols == 1)
997                     {
998                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
999                     }
1000                     if (in1.rows == 1 && in1.cols == 1)
1001                     {
1002                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1003                     }
1004                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1005                     {
1006                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1007                     }
1008                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1009                 }
1010                 case TIType::DOUBLE :
1011                 {
1012                     if (in0.rows == 1 && in0.cols == 1)
1013                     {
1014                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1015                     }
1016                     if (in1.rows == 1 && in1.cols == 1)
1017                     {
1018                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1019                     }
1020                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1021                     {
1022                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1023                     }
1024                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1025                 }
1026                 case TIType::INT16 :
1027                 {
1028                     if (in0.rows == 1 && in0.cols == 1)
1029                     {
1030                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1031                     }
1032                     if (in1.rows == 1 && in1.cols == 1)
1033                     {
1034                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1035                     }
1036                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1037                     {
1038                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1039                     }
1040                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1041                 }
1042                 case TIType::INT32 :
1043                 {
1044                     if (in0.rows == 1 && in0.cols == 1)
1045                     {
1046                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1047                     }
1048                     if (in1.rows == 1 && in1.cols == 1)
1049                     {
1050                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1051                     }
1052                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1053                     {
1054                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1055                     }
1056                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1057                 }
1058                 case TIType::INT64 :
1059                 {
1060                     if (in0.rows == 1 && in0.cols == 1)
1061                     {
1062                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1063                     }
1064                     if (in1.rows == 1 && in1.cols == 1)
1065                     {
1066                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1067                     }
1068                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1069                     {
1070                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1071                     }
1072                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1073                 }
1074                 case TIType::INT8 :
1075                 {
1076                     if (in0.rows == 1 && in0.cols == 1)
1077                     {
1078                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1079                     }
1080                     if (in1.rows == 1 && in1.cols == 1)
1081                     {
1082                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1083                     }
1084                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1085                     {
1086                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1087                     }
1088                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1089                 }
1090                 case TIType::STRING :
1091                 {
1092                     if (in0.rows == 1 && in0.cols == 1)
1093                     {
1094                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1095                     }
1096                     if (in1.rows == 1 && in1.cols == 1)
1097                     {
1098                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1099                     }
1100                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1101                     {
1102                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1103                     }
1104                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1105                 }
1106                 case TIType::UINT16 :
1107                 {
1108                     if (in0.rows == 1 && in0.cols == 1)
1109                     {
1110                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1111                     }
1112                     if (in1.rows == 1 && in1.cols == 1)
1113                     {
1114                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1115                     }
1116                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1117                     {
1118                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1119                     }
1120                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1121                 }
1122                 case TIType::UINT32 :
1123                 {
1124                     if (in0.rows == 1 && in0.cols == 1)
1125                     {
1126                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1127                     }
1128                     if (in1.rows == 1 && in1.cols == 1)
1129                     {
1130                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1131                     }
1132                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1133                     {
1134                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1135                     }
1136                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1137                 }
1138                 case TIType::UINT64 :
1139                 {
1140                     if (in0.rows == 1 && in0.cols == 1)
1141                     {
1142                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1143                     }
1144                     if (in1.rows == 1 && in1.cols == 1)
1145                     {
1146                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1147                     }
1148                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1149                     {
1150                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1151                     }
1152                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1153                 }
1154                 case TIType::UINT8 :
1155                 {
1156                     if (in0.rows == 1 && in0.cols == 1)
1157                     {
1158                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1159                     }
1160                     if (in1.rows == 1 && in1.cols == 1)
1161                     {
1162                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1163                     }
1164                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1165                     {
1166                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1167                     }
1168                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1169                 }
1170                 default :
1171                     return TIType(gvn);
1172             }
1173         }
1174         case TIType::INT64 :
1175         {
1176             switch (in1.type)
1177             {
1178                 case TIType::EMPTY :
1179                 {
1180                     if (in0.rows == 1 && in0.cols == 1)
1181                     {
1182                         return TIType(gvn, TIType::BOOLEAN, 1, 1);
1183                     }
1184                     return TIType(gvn);
1185                 }
1186                 case TIType::BOOLEAN :
1187                 {
1188                     if (in0.rows == 1 && in0.cols == 1)
1189                     {
1190                         return in1;
1191                     }
1192                     if (in1.rows == 1 && in1.cols == 1)
1193                     {
1194                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1195                     }
1196                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1197                     {
1198                         return in1;
1199                     }
1200                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1201                 }
1202                 case TIType::COMPLEX :
1203                 {
1204                     if (in0.rows == 1 && in0.cols == 1)
1205                     {
1206                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1207                     }
1208                     if (in1.rows == 1 && in1.cols == 1)
1209                     {
1210                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1211                     }
1212                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1213                     {
1214                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1215                     }
1216                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1217                 }
1218                 case TIType::DOUBLE :
1219                 {
1220                     if (in0.rows == 1 && in0.cols == 1)
1221                     {
1222                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1223                     }
1224                     if (in1.rows == 1 && in1.cols == 1)
1225                     {
1226                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1227                     }
1228                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1229                     {
1230                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1231                     }
1232                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1233                 }
1234                 case TIType::INT16 :
1235                 {
1236                     if (in0.rows == 1 && in0.cols == 1)
1237                     {
1238                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1239                     }
1240                     if (in1.rows == 1 && in1.cols == 1)
1241                     {
1242                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1243                     }
1244                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1245                     {
1246                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1247                     }
1248                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1249                 }
1250                 case TIType::INT32 :
1251                 {
1252                     if (in0.rows == 1 && in0.cols == 1)
1253                     {
1254                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1255                     }
1256                     if (in1.rows == 1 && in1.cols == 1)
1257                     {
1258                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1259                     }
1260                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1261                     {
1262                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1263                     }
1264                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1265                 }
1266                 case TIType::INT64 :
1267                 {
1268                     if (in0.rows == 1 && in0.cols == 1)
1269                     {
1270                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1271                     }
1272                     if (in1.rows == 1 && in1.cols == 1)
1273                     {
1274                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1275                     }
1276                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1277                     {
1278                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1279                     }
1280                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1281                 }
1282                 case TIType::INT8 :
1283                 {
1284                     if (in0.rows == 1 && in0.cols == 1)
1285                     {
1286                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1287                     }
1288                     if (in1.rows == 1 && in1.cols == 1)
1289                     {
1290                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1291                     }
1292                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1293                     {
1294                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1295                     }
1296                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1297                 }
1298                 case TIType::STRING :
1299                 {
1300                     if (in0.rows == 1 && in0.cols == 1)
1301                     {
1302                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1303                     }
1304                     if (in1.rows == 1 && in1.cols == 1)
1305                     {
1306                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1307                     }
1308                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1309                     {
1310                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1311                     }
1312                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1313                 }
1314                 case TIType::UINT16 :
1315                 {
1316                     if (in0.rows == 1 && in0.cols == 1)
1317                     {
1318                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1319                     }
1320                     if (in1.rows == 1 && in1.cols == 1)
1321                     {
1322                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1323                     }
1324                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1325                     {
1326                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1327                     }
1328                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1329                 }
1330                 case TIType::UINT32 :
1331                 {
1332                     if (in0.rows == 1 && in0.cols == 1)
1333                     {
1334                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1335                     }
1336                     if (in1.rows == 1 && in1.cols == 1)
1337                     {
1338                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1339                     }
1340                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1341                     {
1342                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1343                     }
1344                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1345                 }
1346                 case TIType::UINT64 :
1347                 {
1348                     if (in0.rows == 1 && in0.cols == 1)
1349                     {
1350                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1351                     }
1352                     if (in1.rows == 1 && in1.cols == 1)
1353                     {
1354                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1355                     }
1356                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1357                     {
1358                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1359                     }
1360                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1361                 }
1362                 case TIType::UINT8 :
1363                 {
1364                     if (in0.rows == 1 && in0.cols == 1)
1365                     {
1366                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1367                     }
1368                     if (in1.rows == 1 && in1.cols == 1)
1369                     {
1370                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1371                     }
1372                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1373                     {
1374                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1375                     }
1376                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1377                 }
1378                 default :
1379                     return TIType(gvn);
1380             }
1381         }
1382         case TIType::INT8 :
1383         {
1384             switch (in1.type)
1385             {
1386                 case TIType::EMPTY :
1387                 {
1388                     if (in0.rows == 1 && in0.cols == 1)
1389                     {
1390                         return TIType(gvn, TIType::BOOLEAN, 1, 1);
1391                     }
1392                     return TIType(gvn);
1393                 }
1394                 case TIType::BOOLEAN :
1395                 {
1396                     if (in0.rows == 1 && in0.cols == 1)
1397                     {
1398                         return in1;
1399                     }
1400                     if (in1.rows == 1 && in1.cols == 1)
1401                     {
1402                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1403                     }
1404                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1405                     {
1406                         return in1;
1407                     }
1408                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1409                 }
1410                 case TIType::COMPLEX :
1411                 {
1412                     if (in0.rows == 1 && in0.cols == 1)
1413                     {
1414                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1415                     }
1416                     if (in1.rows == 1 && in1.cols == 1)
1417                     {
1418                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1419                     }
1420                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1421                     {
1422                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1423                     }
1424                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1425                 }
1426                 case TIType::DOUBLE :
1427                 {
1428                     if (in0.rows == 1 && in0.cols == 1)
1429                     {
1430                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1431                     }
1432                     if (in1.rows == 1 && in1.cols == 1)
1433                     {
1434                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1435                     }
1436                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1437                     {
1438                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1439                     }
1440                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1441                 }
1442                 case TIType::INT16 :
1443                 {
1444                     if (in0.rows == 1 && in0.cols == 1)
1445                     {
1446                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1447                     }
1448                     if (in1.rows == 1 && in1.cols == 1)
1449                     {
1450                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1451                     }
1452                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1453                     {
1454                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1455                     }
1456                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1457                 }
1458                 case TIType::INT32 :
1459                 {
1460                     if (in0.rows == 1 && in0.cols == 1)
1461                     {
1462                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1463                     }
1464                     if (in1.rows == 1 && in1.cols == 1)
1465                     {
1466                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1467                     }
1468                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1469                     {
1470                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1471                     }
1472                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1473                 }
1474                 case TIType::INT64 :
1475                 {
1476                     if (in0.rows == 1 && in0.cols == 1)
1477                     {
1478                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1479                     }
1480                     if (in1.rows == 1 && in1.cols == 1)
1481                     {
1482                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1483                     }
1484                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1485                     {
1486                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1487                     }
1488                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1489                 }
1490                 case TIType::INT8 :
1491                 {
1492                     if (in0.rows == 1 && in0.cols == 1)
1493                     {
1494                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1495                     }
1496                     if (in1.rows == 1 && in1.cols == 1)
1497                     {
1498                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1499                     }
1500                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1501                     {
1502                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1503                     }
1504                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1505                 }
1506                 case TIType::STRING :
1507                 {
1508                     if (in0.rows == 1 && in0.cols == 1)
1509                     {
1510                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1511                     }
1512                     if (in1.rows == 1 && in1.cols == 1)
1513                     {
1514                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1515                     }
1516                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1517                     {
1518                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1519                     }
1520                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1521                 }
1522                 case TIType::UINT16 :
1523                 {
1524                     if (in0.rows == 1 && in0.cols == 1)
1525                     {
1526                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1527                     }
1528                     if (in1.rows == 1 && in1.cols == 1)
1529                     {
1530                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1531                     }
1532                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1533                     {
1534                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1535                     }
1536                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1537                 }
1538                 case TIType::UINT32 :
1539                 {
1540                     if (in0.rows == 1 && in0.cols == 1)
1541                     {
1542                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1543                     }
1544                     if (in1.rows == 1 && in1.cols == 1)
1545                     {
1546                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1547                     }
1548                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1549                     {
1550                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1551                     }
1552                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1553                 }
1554                 case TIType::UINT64 :
1555                 {
1556                     if (in0.rows == 1 && in0.cols == 1)
1557                     {
1558                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1559                     }
1560                     if (in1.rows == 1 && in1.cols == 1)
1561                     {
1562                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1563                     }
1564                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1565                     {
1566                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1567                     }
1568                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1569                 }
1570                 case TIType::UINT8 :
1571                 {
1572                     if (in0.rows == 1 && in0.cols == 1)
1573                     {
1574                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1575                     }
1576                     if (in1.rows == 1 && in1.cols == 1)
1577                     {
1578                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1579                     }
1580                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1581                     {
1582                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1583                     }
1584                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1585                 }
1586                 default :
1587                     return TIType(gvn);
1588             }
1589         }
1590         case TIType::STRING :
1591         {
1592             switch (in1.type)
1593             {
1594                 case TIType::EMPTY :
1595                 {
1596                     if (in0.rows == 1 && in0.cols == 1)
1597                     {
1598                         return TIType(gvn, TIType::BOOLEAN, 1, 1);
1599                     }
1600                     return TIType(gvn);
1601                 }
1602                 case TIType::BOOLEAN :
1603                 {
1604                     if (in0.rows == 1 && in0.cols == 1)
1605                     {
1606                         return in1;
1607                     }
1608                     if (in1.rows == 1 && in1.cols == 1)
1609                     {
1610                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1611                     }
1612                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1613                     {
1614                         return in1;
1615                     }
1616                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1617                 }
1618                 case TIType::COMPLEX :
1619                 {
1620                     if (in0.rows == 1 && in0.cols == 1)
1621                     {
1622                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1623                     }
1624                     if (in1.rows == 1 && in1.cols == 1)
1625                     {
1626                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1627                     }
1628                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1629                     {
1630                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1631                     }
1632                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1633                 }
1634                 case TIType::DOUBLE :
1635                 {
1636                     if (in0.rows == 1 && in0.cols == 1)
1637                     {
1638                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1639                     }
1640                     if (in1.rows == 1 && in1.cols == 1)
1641                     {
1642                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1643                     }
1644                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1645                     {
1646                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1647                     }
1648                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1649                 }
1650                 case TIType::INT16 :
1651                 {
1652                     if (in0.rows == 1 && in0.cols == 1)
1653                     {
1654                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1655                     }
1656                     if (in1.rows == 1 && in1.cols == 1)
1657                     {
1658                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1659                     }
1660                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1661                     {
1662                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1663                     }
1664                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1665                 }
1666                 case TIType::INT32 :
1667                 {
1668                     if (in0.rows == 1 && in0.cols == 1)
1669                     {
1670                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1671                     }
1672                     if (in1.rows == 1 && in1.cols == 1)
1673                     {
1674                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1675                     }
1676                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1677                     {
1678                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1679                     }
1680                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1681                 }
1682                 case TIType::INT64 :
1683                 {
1684                     if (in0.rows == 1 && in0.cols == 1)
1685                     {
1686                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1687                     }
1688                     if (in1.rows == 1 && in1.cols == 1)
1689                     {
1690                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1691                     }
1692                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1693                     {
1694                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1695                     }
1696                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1697                 }
1698                 case TIType::INT8 :
1699                 {
1700                     if (in0.rows == 1 && in0.cols == 1)
1701                     {
1702                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1703                     }
1704                     if (in1.rows == 1 && in1.cols == 1)
1705                     {
1706                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1707                     }
1708                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1709                     {
1710                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1711                     }
1712                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1713                 }
1714                 case TIType::STRING :
1715                 {
1716                     if (in0.rows == 1 && in0.cols == 1)
1717                     {
1718                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1719                     }
1720                     if (in1.rows == 1 && in1.cols == 1)
1721                     {
1722                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1723                     }
1724                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1725                     {
1726                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1727                     }
1728                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1729                 }
1730                 case TIType::UINT16 :
1731                 {
1732                     if (in0.rows == 1 && in0.cols == 1)
1733                     {
1734                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1735                     }
1736                     if (in1.rows == 1 && in1.cols == 1)
1737                     {
1738                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1739                     }
1740                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1741                     {
1742                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1743                     }
1744                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1745                 }
1746                 case TIType::UINT32 :
1747                 {
1748                     if (in0.rows == 1 && in0.cols == 1)
1749                     {
1750                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1751                     }
1752                     if (in1.rows == 1 && in1.cols == 1)
1753                     {
1754                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1755                     }
1756                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1757                     {
1758                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1759                     }
1760                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1761                 }
1762                 case TIType::UINT64 :
1763                 {
1764                     if (in0.rows == 1 && in0.cols == 1)
1765                     {
1766                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1767                     }
1768                     if (in1.rows == 1 && in1.cols == 1)
1769                     {
1770                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1771                     }
1772                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1773                     {
1774                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1775                     }
1776                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1777                 }
1778                 case TIType::UINT8 :
1779                 {
1780                     if (in0.rows == 1 && in0.cols == 1)
1781                     {
1782                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1783                     }
1784                     if (in1.rows == 1 && in1.cols == 1)
1785                     {
1786                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1787                     }
1788                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1789                     {
1790                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1791                     }
1792                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1793                 }
1794                 default :
1795                     return TIType(gvn);
1796             }
1797         }
1798         case TIType::UINT16 :
1799         {
1800             switch (in1.type)
1801             {
1802                 case TIType::EMPTY :
1803                 {
1804                     if (in0.rows == 1 && in0.cols == 1)
1805                     {
1806                         return TIType(gvn, TIType::BOOLEAN, 1, 1);
1807                     }
1808                     return TIType(gvn);
1809                 }
1810                 case TIType::BOOLEAN :
1811                 {
1812                     if (in0.rows == 1 && in0.cols == 1)
1813                     {
1814                         return in1;
1815                     }
1816                     if (in1.rows == 1 && in1.cols == 1)
1817                     {
1818                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1819                     }
1820                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1821                     {
1822                         return in1;
1823                     }
1824                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1825                 }
1826                 case TIType::COMPLEX :
1827                 {
1828                     if (in0.rows == 1 && in0.cols == 1)
1829                     {
1830                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1831                     }
1832                     if (in1.rows == 1 && in1.cols == 1)
1833                     {
1834                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1835                     }
1836                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1837                     {
1838                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1839                     }
1840                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1841                 }
1842                 case TIType::DOUBLE :
1843                 {
1844                     if (in0.rows == 1 && in0.cols == 1)
1845                     {
1846                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1847                     }
1848                     if (in1.rows == 1 && in1.cols == 1)
1849                     {
1850                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1851                     }
1852                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1853                     {
1854                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1855                     }
1856                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1857                 }
1858                 case TIType::INT16 :
1859                 {
1860                     if (in0.rows == 1 && in0.cols == 1)
1861                     {
1862                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1863                     }
1864                     if (in1.rows == 1 && in1.cols == 1)
1865                     {
1866                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1867                     }
1868                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1869                     {
1870                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1871                     }
1872                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1873                 }
1874                 case TIType::INT32 :
1875                 {
1876                     if (in0.rows == 1 && in0.cols == 1)
1877                     {
1878                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1879                     }
1880                     if (in1.rows == 1 && in1.cols == 1)
1881                     {
1882                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1883                     }
1884                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1885                     {
1886                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1887                     }
1888                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1889                 }
1890                 case TIType::INT64 :
1891                 {
1892                     if (in0.rows == 1 && in0.cols == 1)
1893                     {
1894                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1895                     }
1896                     if (in1.rows == 1 && in1.cols == 1)
1897                     {
1898                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1899                     }
1900                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1901                     {
1902                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1903                     }
1904                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1905                 }
1906                 case TIType::INT8 :
1907                 {
1908                     if (in0.rows == 1 && in0.cols == 1)
1909                     {
1910                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1911                     }
1912                     if (in1.rows == 1 && in1.cols == 1)
1913                     {
1914                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1915                     }
1916                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1917                     {
1918                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1919                     }
1920                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1921                 }
1922                 case TIType::STRING :
1923                 {
1924                     if (in0.rows == 1 && in0.cols == 1)
1925                     {
1926                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1927                     }
1928                     if (in1.rows == 1 && in1.cols == 1)
1929                     {
1930                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1931                     }
1932                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1933                     {
1934                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1935                     }
1936                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1937                 }
1938                 case TIType::UINT16 :
1939                 {
1940                     if (in0.rows == 1 && in0.cols == 1)
1941                     {
1942                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1943                     }
1944                     if (in1.rows == 1 && in1.cols == 1)
1945                     {
1946                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1947                     }
1948                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1949                     {
1950                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1951                     }
1952                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1953                 }
1954                 case TIType::UINT32 :
1955                 {
1956                     if (in0.rows == 1 && in0.cols == 1)
1957                     {
1958                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1959                     }
1960                     if (in1.rows == 1 && in1.cols == 1)
1961                     {
1962                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1963                     }
1964                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1965                     {
1966                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1967                     }
1968                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1969                 }
1970                 case TIType::UINT64 :
1971                 {
1972                     if (in0.rows == 1 && in0.cols == 1)
1973                     {
1974                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1975                     }
1976                     if (in1.rows == 1 && in1.cols == 1)
1977                     {
1978                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1979                     }
1980                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1981                     {
1982                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1983                     }
1984                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
1985                 }
1986                 case TIType::UINT8 :
1987                 {
1988                     if (in0.rows == 1 && in0.cols == 1)
1989                     {
1990                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
1991                     }
1992                     if (in1.rows == 1 && in1.cols == 1)
1993                     {
1994                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1995                     }
1996                     if (in1.rows == in0.rows && in1.cols == in0.cols)
1997                     {
1998                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
1999                     }
2000                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2001                 }
2002                 default :
2003                     return TIType(gvn);
2004             }
2005         }
2006         case TIType::UINT32 :
2007         {
2008             switch (in1.type)
2009             {
2010                 case TIType::EMPTY :
2011                 {
2012                     if (in0.rows == 1 && in0.cols == 1)
2013                     {
2014                         return TIType(gvn, TIType::BOOLEAN, 1, 1);
2015                     }
2016                     return TIType(gvn);
2017                 }
2018                 case TIType::BOOLEAN :
2019                 {
2020                     if (in0.rows == 1 && in0.cols == 1)
2021                     {
2022                         return in1;
2023                     }
2024                     if (in1.rows == 1 && in1.cols == 1)
2025                     {
2026                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2027                     }
2028                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2029                     {
2030                         return in1;
2031                     }
2032                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2033                 }
2034                 case TIType::COMPLEX :
2035                 {
2036                     if (in0.rows == 1 && in0.cols == 1)
2037                     {
2038                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2039                     }
2040                     if (in1.rows == 1 && in1.cols == 1)
2041                     {
2042                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2043                     }
2044                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2045                     {
2046                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2047                     }
2048                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2049                 }
2050                 case TIType::DOUBLE :
2051                 {
2052                     if (in0.rows == 1 && in0.cols == 1)
2053                     {
2054                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2055                     }
2056                     if (in1.rows == 1 && in1.cols == 1)
2057                     {
2058                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2059                     }
2060                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2061                     {
2062                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2063                     }
2064                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2065                 }
2066                 case TIType::INT16 :
2067                 {
2068                     if (in0.rows == 1 && in0.cols == 1)
2069                     {
2070                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2071                     }
2072                     if (in1.rows == 1 && in1.cols == 1)
2073                     {
2074                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2075                     }
2076                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2077                     {
2078                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2079                     }
2080                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2081                 }
2082                 case TIType::INT32 :
2083                 {
2084                     if (in0.rows == 1 && in0.cols == 1)
2085                     {
2086                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2087                     }
2088                     if (in1.rows == 1 && in1.cols == 1)
2089                     {
2090                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2091                     }
2092                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2093                     {
2094                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2095                     }
2096                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2097                 }
2098                 case TIType::INT64 :
2099                 {
2100                     if (in0.rows == 1 && in0.cols == 1)
2101                     {
2102                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2103                     }
2104                     if (in1.rows == 1 && in1.cols == 1)
2105                     {
2106                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2107                     }
2108                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2109                     {
2110                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2111                     }
2112                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2113                 }
2114                 case TIType::INT8 :
2115                 {
2116                     if (in0.rows == 1 && in0.cols == 1)
2117                     {
2118                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2119                     }
2120                     if (in1.rows == 1 && in1.cols == 1)
2121                     {
2122                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2123                     }
2124                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2125                     {
2126                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2127                     }
2128                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2129                 }
2130                 case TIType::STRING :
2131                 {
2132                     if (in0.rows == 1 && in0.cols == 1)
2133                     {
2134                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2135                     }
2136                     if (in1.rows == 1 && in1.cols == 1)
2137                     {
2138                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2139                     }
2140                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2141                     {
2142                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2143                     }
2144                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2145                 }
2146                 case TIType::UINT16 :
2147                 {
2148                     if (in0.rows == 1 && in0.cols == 1)
2149                     {
2150                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2151                     }
2152                     if (in1.rows == 1 && in1.cols == 1)
2153                     {
2154                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2155                     }
2156                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2157                     {
2158                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2159                     }
2160                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2161                 }
2162                 case TIType::UINT32 :
2163                 {
2164                     if (in0.rows == 1 && in0.cols == 1)
2165                     {
2166                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2167                     }
2168                     if (in1.rows == 1 && in1.cols == 1)
2169                     {
2170                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2171                     }
2172                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2173                     {
2174                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2175                     }
2176                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2177                 }
2178                 case TIType::UINT64 :
2179                 {
2180                     if (in0.rows == 1 && in0.cols == 1)
2181                     {
2182                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2183                     }
2184                     if (in1.rows == 1 && in1.cols == 1)
2185                     {
2186                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2187                     }
2188                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2189                     {
2190                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2191                     }
2192                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2193                 }
2194                 case TIType::UINT8 :
2195                 {
2196                     if (in0.rows == 1 && in0.cols == 1)
2197                     {
2198                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2199                     }
2200                     if (in1.rows == 1 && in1.cols == 1)
2201                     {
2202                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2203                     }
2204                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2205                     {
2206                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2207                     }
2208                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2209                 }
2210                 default :
2211                     return TIType(gvn);
2212             }
2213         }
2214         case TIType::UINT64 :
2215         {
2216             switch (in1.type)
2217             {
2218                 case TIType::EMPTY :
2219                 {
2220                     if (in0.rows == 1 && in0.cols == 1)
2221                     {
2222                         return TIType(gvn, TIType::BOOLEAN, 1, 1);
2223                     }
2224                     return TIType(gvn);
2225                 }
2226                 case TIType::BOOLEAN :
2227                 {
2228                     if (in0.rows == 1 && in0.cols == 1)
2229                     {
2230                         return in1;
2231                     }
2232                     if (in1.rows == 1 && in1.cols == 1)
2233                     {
2234                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2235                     }
2236                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2237                     {
2238                         return in1;
2239                     }
2240                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2241                 }
2242                 case TIType::COMPLEX :
2243                 {
2244                     if (in0.rows == 1 && in0.cols == 1)
2245                     {
2246                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2247                     }
2248                     if (in1.rows == 1 && in1.cols == 1)
2249                     {
2250                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2251                     }
2252                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2253                     {
2254                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2255                     }
2256                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2257                 }
2258                 case TIType::DOUBLE :
2259                 {
2260                     if (in0.rows == 1 && in0.cols == 1)
2261                     {
2262                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2263                     }
2264                     if (in1.rows == 1 && in1.cols == 1)
2265                     {
2266                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2267                     }
2268                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2269                     {
2270                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2271                     }
2272                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2273                 }
2274                 case TIType::INT16 :
2275                 {
2276                     if (in0.rows == 1 && in0.cols == 1)
2277                     {
2278                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2279                     }
2280                     if (in1.rows == 1 && in1.cols == 1)
2281                     {
2282                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2283                     }
2284                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2285                     {
2286                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2287                     }
2288                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2289                 }
2290                 case TIType::INT32 :
2291                 {
2292                     if (in0.rows == 1 && in0.cols == 1)
2293                     {
2294                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2295                     }
2296                     if (in1.rows == 1 && in1.cols == 1)
2297                     {
2298                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2299                     }
2300                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2301                     {
2302                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2303                     }
2304                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2305                 }
2306                 case TIType::INT64 :
2307                 {
2308                     if (in0.rows == 1 && in0.cols == 1)
2309                     {
2310                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2311                     }
2312                     if (in1.rows == 1 && in1.cols == 1)
2313                     {
2314                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2315                     }
2316                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2317                     {
2318                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2319                     }
2320                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2321                 }
2322                 case TIType::INT8 :
2323                 {
2324                     if (in0.rows == 1 && in0.cols == 1)
2325                     {
2326                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2327                     }
2328                     if (in1.rows == 1 && in1.cols == 1)
2329                     {
2330                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2331                     }
2332                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2333                     {
2334                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2335                     }
2336                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2337                 }
2338                 case TIType::STRING :
2339                 {
2340                     if (in0.rows == 1 && in0.cols == 1)
2341                     {
2342                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2343                     }
2344                     if (in1.rows == 1 && in1.cols == 1)
2345                     {
2346                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2347                     }
2348                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2349                     {
2350                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2351                     }
2352                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2353                 }
2354                 case TIType::UINT16 :
2355                 {
2356                     if (in0.rows == 1 && in0.cols == 1)
2357                     {
2358                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2359                     }
2360                     if (in1.rows == 1 && in1.cols == 1)
2361                     {
2362                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2363                     }
2364                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2365                     {
2366                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2367                     }
2368                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2369                 }
2370                 case TIType::UINT32 :
2371                 {
2372                     if (in0.rows == 1 && in0.cols == 1)
2373                     {
2374                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2375                     }
2376                     if (in1.rows == 1 && in1.cols == 1)
2377                     {
2378                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2379                     }
2380                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2381                     {
2382                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2383                     }
2384                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2385                 }
2386                 case TIType::UINT64 :
2387                 {
2388                     if (in0.rows == 1 && in0.cols == 1)
2389                     {
2390                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2391                     }
2392                     if (in1.rows == 1 && in1.cols == 1)
2393                     {
2394                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2395                     }
2396                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2397                     {
2398                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2399                     }
2400                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2401                 }
2402                 case TIType::UINT8 :
2403                 {
2404                     if (in0.rows == 1 && in0.cols == 1)
2405                     {
2406                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2407                     }
2408                     if (in1.rows == 1 && in1.cols == 1)
2409                     {
2410                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2411                     }
2412                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2413                     {
2414                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2415                     }
2416                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2417                 }
2418                 default :
2419                     return TIType(gvn);
2420             }
2421         }
2422         case TIType::UINT8 :
2423         {
2424             switch (in1.type)
2425             {
2426                 case TIType::EMPTY :
2427                 {
2428                     if (in0.rows == 1 && in0.cols == 1)
2429                     {
2430                         return TIType(gvn, TIType::BOOLEAN, 1, 1);
2431                     }
2432                     return TIType(gvn);
2433                 }
2434                 case TIType::BOOLEAN :
2435                 {
2436                     if (in0.rows == 1 && in0.cols == 1)
2437                     {
2438                         return in1;
2439                     }
2440                     if (in1.rows == 1 && in1.cols == 1)
2441                     {
2442                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2443                     }
2444                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2445                     {
2446                         return in1;
2447                     }
2448                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2449                 }
2450                 case TIType::COMPLEX :
2451                 {
2452                     if (in0.rows == 1 && in0.cols == 1)
2453                     {
2454                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2455                     }
2456                     if (in1.rows == 1 && in1.cols == 1)
2457                     {
2458                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2459                     }
2460                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2461                     {
2462                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2463                     }
2464                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2465                 }
2466                 case TIType::DOUBLE :
2467                 {
2468                     if (in0.rows == 1 && in0.cols == 1)
2469                     {
2470                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2471                     }
2472                     if (in1.rows == 1 && in1.cols == 1)
2473                     {
2474                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2475                     }
2476                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2477                     {
2478                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2479                     }
2480                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2481                 }
2482                 case TIType::INT16 :
2483                 {
2484                     if (in0.rows == 1 && in0.cols == 1)
2485                     {
2486                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2487                     }
2488                     if (in1.rows == 1 && in1.cols == 1)
2489                     {
2490                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2491                     }
2492                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2493                     {
2494                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2495                     }
2496                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2497                 }
2498                 case TIType::INT32 :
2499                 {
2500                     if (in0.rows == 1 && in0.cols == 1)
2501                     {
2502                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2503                     }
2504                     if (in1.rows == 1 && in1.cols == 1)
2505                     {
2506                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2507                     }
2508                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2509                     {
2510                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2511                     }
2512                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2513                 }
2514                 case TIType::INT64 :
2515                 {
2516                     if (in0.rows == 1 && in0.cols == 1)
2517                     {
2518                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2519                     }
2520                     if (in1.rows == 1 && in1.cols == 1)
2521                     {
2522                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2523                     }
2524                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2525                     {
2526                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2527                     }
2528                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2529                 }
2530                 case TIType::INT8 :
2531                 {
2532                     if (in0.rows == 1 && in0.cols == 1)
2533                     {
2534                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2535                     }
2536                     if (in1.rows == 1 && in1.cols == 1)
2537                     {
2538                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2539                     }
2540                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2541                     {
2542                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2543                     }
2544                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2545                 }
2546                 case TIType::STRING :
2547                 {
2548                     if (in0.rows == 1 && in0.cols == 1)
2549                     {
2550                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2551                     }
2552                     if (in1.rows == 1 && in1.cols == 1)
2553                     {
2554                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2555                     }
2556                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2557                     {
2558                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2559                     }
2560                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2561                 }
2562                 case TIType::UINT16 :
2563                 {
2564                     if (in0.rows == 1 && in0.cols == 1)
2565                     {
2566                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2567                     }
2568                     if (in1.rows == 1 && in1.cols == 1)
2569                     {
2570                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2571                     }
2572                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2573                     {
2574                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2575                     }
2576                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2577                 }
2578                 case TIType::UINT32 :
2579                 {
2580                     if (in0.rows == 1 && in0.cols == 1)
2581                     {
2582                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2583                     }
2584                     if (in1.rows == 1 && in1.cols == 1)
2585                     {
2586                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2587                     }
2588                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2589                     {
2590                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2591                     }
2592                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2593                 }
2594                 case TIType::UINT64 :
2595                 {
2596                     if (in0.rows == 1 && in0.cols == 1)
2597                     {
2598                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2599                     }
2600                     if (in1.rows == 1 && in1.cols == 1)
2601                     {
2602                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2603                     }
2604                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2605                     {
2606                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2607                     }
2608                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2609                 }
2610                 case TIType::UINT8 :
2611                 {
2612                     if (in0.rows == 1 && in0.cols == 1)
2613                     {
2614                         return TIType(gvn, TIType::BOOLEAN, in1.rows, in1.cols);
2615                     }
2616                     if (in1.rows == 1 && in1.cols == 1)
2617                     {
2618                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2619                     }
2620                     if (in1.rows == in0.rows && in1.cols == in0.cols)
2621                     {
2622                         return TIType(gvn, TIType::BOOLEAN, in0.rows, in0.cols);
2623                     }
2624                     return TIType(gvn, TIType::BOOLEAN, -2, -2);
2625                 }
2626                 default :
2627                     return TIType(gvn);
2628             }
2629         }
2630         default :
2631             return TIType(gvn);
2632     }
2633 }
2634 
2635 } // namespace analysis