Ignore:
Timestamp:
Feb 7, 2019, 4:48:10 PM (3 years ago)
Author:
Aaron Moss <a3moss@…>
Branches:
deferred_resn
Children:
1cc4390
Parents:
e1f7eef
Message:

Add sign element to cost tuple

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/ConversionCost.cc

    re1f7eef r4cf2472  
    2828
    2929namespace ResolvExpr {
    30         const Cost Cost::zero =      Cost{  0,  0,  0,  0,  0,  0 };
    31         const Cost Cost::infinity =  Cost{ -1, -1, -1, -1,  1, -1 };
    32         const Cost Cost::unsafe =    Cost{  1,  0,  0,  0,  0,  0 };
    33         const Cost Cost::poly =      Cost{  0,  1,  0,  0,  0,  0 };
    34         const Cost Cost::safe =      Cost{  0,  0,  1,  0,  0,  0 };
    35         const Cost Cost::var =       Cost{  0,  0,  0,  1,  0,  0 };
    36         const Cost Cost::spec =      Cost{  0,  0,  0,  0, -1,  0 };
    37         const Cost Cost::reference = Cost{  0,  0,  0,  0,  0,  1 };
     30        const Cost Cost::zero =      Cost{  0,  0,  0,  0,  0,  0,  0 };
     31        const Cost Cost::infinity =  Cost{ -1, -1, -1, -1, -1,  1, -1 };
     32        const Cost Cost::unsafe =    Cost{  1,  0,  0,  0,  0,  0,  0 };
     33        const Cost Cost::poly =      Cost{  0,  1,  0,  0,  0,  0,  0 };
     34        const Cost Cost::safe =      Cost{  0,  0,  1,  0,  0,  0,  0 };
     35        const Cost Cost::sign =      Cost{  0,  0,  0,  1,  0,  0,  0 };
     36        const Cost Cost::var =       Cost{  0,  0,  0,  0,  1,  0,  0 };
     37        const Cost Cost::spec =      Cost{  0,  0,  0,  0,  0, -1,  0 };
     38        const Cost Cost::reference = Cost{  0,  0,  0,  0,  0,  0,  1 };
    3839
    3940#if 0
     
    266267        );
    267268
     269        static const int signMatrix[][ BasicType::NUMBER_OF_BASIC_TYPES ] = {
     270        /* Src \ Dest:  Bool    Char    SChar   UChar   Short   UShort  Int     UInt    Long    ULong   LLong   ULLong  Float   Double  LDbl    FCplex  DCplex  LDCplex FImag   DImag   LDImag  I128,   U128, F80, F128 */
     271                /* Bool */      { 0,    1,              1,              0,              1,              0,              1,              0,              1,              0,              1,              0,              0,              0,              0,              0,              0,              0,              -1,             -1,             -1,             1,              0,        0,    0},
     272                /* Char */      { -1,   0,              -1,             1,              0,              1,              0,              1,              0,              1,              0,              1,              0,              0,              0,              0,              0,              0,              -1,             -1,             -1,             0,              1,        0,    0},
     273                /* SChar */ { -1,       -1,             0,              1,              0,              1,              0,              1,              0,              1,              0,              1,              0,              0,              0,              0,              0,              0,              -1,             -1,             -1,             0,              1,        0,    0},
     274                /* UChar */ { -1,       -1,             -1,             0,              1,              0,              1,              0,              1,              0,              1,              0,              0,              0,              0,              0,              0,              0,              -1,             -1,             -1,             1,              0,        0,    0},
     275                /* Short */ { -1,       -1,             -1,             -1,             0,              1,              0,              1,              0,              1,              0,              1,              0,              0,              0,              0,              0,              0,              -1,             -1,             -1,             0,              1,        0,    0},
     276                /* UShort */{ -1,       -1,             -1,             -1,             -1,             0,              1,              0,              1,              0,              1,              0,              0,              0,              0,              0,              0,              0,              -1,             -1,             -1,             1,              0,        0,    0},
     277                /* Int */       { -1,   -1,             -1,             -1,             -1,             -1,             0,              1,              0,              1,              0,              1,              0,              0,              0,              0,              0,              0,              -1,             -1,             -1,             0,              1,        0,    0},
     278                /* UInt */      { -1,   -1,             -1,             -1,             -1,             -1,             -1,             0,              -1,             0,              1,              0,              0,              0,              0,              0,              0,              0,              -1,             -1,             -1,             1,              0,        0,    0},
     279                /* Long */      { -1,   -1,             -1,             -1,             -1,             -1,             -1,             -1,             0,              1,              0,              1,              0,              0,              0,              0,              0,              0,              -1,             -1,             -1,             0,              1,        0,    0},
     280                /* ULong */ { -1,       -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             0,              1,              0,              0,              0,              0,              0,              0,              0,              -1,             -1,             -1,             1,              0,        0,    0},
     281                /* LLong */ { -1,       -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             0,              1,              0,              0,              0,              0,              0,              0,              -1,             -1,             -1,             0,              1,        0,    0},
     282                /* ULLong */{ -1,       -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             0,              0,              0,              0,              0,              0,              0,              -1,             -1,             -1,             1,              0,        0,    0},
     283
     284                /* Float */ { -1,       -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             0,              0,              0,              0,              0,              0,              -1,             -1,             -1,             -1,             -1,       0,    0},
     285                /* Double */{ -1,       -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             0,              0,              -1,             0,              0,              -1,             -1,             -1,             -1,             -1,       0,    0},
     286                /* LDbl */      { -1,   -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             0,              -1,             -1,             0,              -1,             -1,             -1,             -1,             -1,       -1,   0},
     287                /* FCplex */{ -1,       -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             0,              0,              0,              -1,             -1,             -1,             -1,             -1,       -1,   -1},
     288                /* DCplex */{ -1,       -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             0,              0,              -1,             -1,             -1,             -1,             -1,       -1,   -1},
     289                /* LDCplex */{ -1,      -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             0,              -1,             -1,             -1,             -1,             -1,       -1,   -1},
     290                /* FImag */ { -1,       -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             0,              0,              0,              0,              0,              0,              -1,             -1,       -1,   -1},
     291                /* DImag */ { -1,       -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             0,              0,              -1,             0,              0,              -1,             -1,       -1,   -1},
     292                /* LDImag */{ -1,       -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             0,              -1,             -1,             0,              -1,             -1,       -1,   -1},
     293
     294                /* I128 */  { -1,       -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             0,              0,              0,              0,              0,              0,              -1,             -1,             -1,             0,              1,        0,    0},
     295                /* U128 */  { -1,       -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             0,              0,              0,              0,              0,              0,              -1,             -1,             -1,             1,              0,        0,    0},
     296
     297                /* F80 */       { -1,   -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             0,              -1,             -1,             0,              -1,             -1,             -1,             -1,             -1,       0,    0},
     298                /* F128 */      { -1,   -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             -1,             0,              -1,             -1,             -1,             -1,             -1,       -1,   0},
     299        };
     300        static_assert(
     301                sizeof(signMatrix)/sizeof(signMatrix[0][0]) == BasicType::NUMBER_OF_BASIC_TYPES*BasicType::NUMBER_OF_BASIC_TYPES,
     302                "Each basic type kind should have a corresponding row in the sign matrix"
     303        );
     304
    268305
    269306        void ConversionCost::postvisit( VoidType * ) {
     
    279316                                cost = Cost::zero;
    280317                                cost.incSafe( tableResult );
     318                                cost.incSign( signMatrix[ basicType->get_kind() ][ destAsBasic->get_kind() ] );
    281319                        } // if
    282320                } else if ( dynamic_cast< EnumInstType *>( dest ) ) {
     
    422460                                cost = Cost::zero;
    423461                                cost.incSafe( tableResult + 1 );
     462                                cost.incSign( signMatrix[ BasicType::SignedInt ][ destAsBasic->get_kind() ] );
    424463                        }
    425464                } else if ( dynamic_cast< PointerType* >( dest ) ) {
     
    439478                                cost = Cost::zero;
    440479                                cost.incSafe( tableResult + 1 );
     480                                cost.incSign( signMatrix[ BasicType::SignedInt ][ destAsBasic->get_kind() ] );
    441481                        }
    442482                }
Note: See TracChangeset for help on using the changeset viewer.