Changeset 4042 in CLRX


Ignore:
Timestamp:
Apr 21, 2018, 3:56:18 PM (6 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Fixed segfaults if regular register used in destination (liveness and ssaIdIndex was not allocated in this case).
Add new testcase (single liveness with many regions).

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/amdasm/AsmRegAlloc.cpp

    r4039 r4042  
    716716    cxuint regType = getRegType(regTypesNum, regRanges, svreg); // regtype
    717717    const VarIndexMap& vregIndexMap = vregIndexMaps[regType];
    718     const std::vector<size_t>& ssaIdIndices =
    719                 vregIndexMap.find(svreg)->second;
     718    const std::vector<size_t>& ssaIdIndices = vregIndexMap.find(svreg)->second;
    720719    ARDOut << "lvn[" << regType << "][" << ssaIdIndices[ssaId] << "]. ssaIdIdx: " <<
    721720            ssaIdIdx << ". ssaId: " << ssaId << ". svreg: " << svreg.regVar << ":" <<
     
    945944                ssaIdCount = std::max(ssaIdCount, sinfo.ssaIdFirst+1);
    946945            }
     946            if (entry.first.regVar==nullptr)
     947                ssaIdCount = 1;
    947948            if (ssaIdIndices.size() < ssaIdCount)
    948949                ssaIdIndices.resize(ssaIdCount, SIZE_MAX);
     
    964965                    ssaIdIndices[sinfo.ssaIdLast] = graphVregsCount++;
    965966            }
     967            if (entry.first.regVar==nullptr && ssaIdIndices[0] == SIZE_MAX)
     968                ssaIdIndices[0] = graphVregsCount++;
    966969        }
    967970   
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAlloc3.cpp

    r4039 r4042  
    5555static const AsmLivenessesCase createLivenessesCasesTbl[] =
    5656{
     57#if 0
    5758    {   // 0 - simple case
    5859        R"ffDXD(.regvar sa:s:8, va:v:10
     
    215216        { }, // linearDepMaps
    216217        true, ""
     218    },
     219#endif
     220    {   // 4 - next test case
     221        R"ffDXD(.regvar sa:s:8, va:v:10
     222        s_mov_b32 sa[4], sa[2]  # 0
     223        s_add_u32 sa[4], sa[4], s3  # 4
     224       
     225        v_xor_b32 v4, va[2], v3         # 8
     226        v_xor_b32 va[5], v4, va[5]      # 12
     227       
     228        s_sub_u32 sa[4], sa[4], sa[3]   # 16
     229       
     230        v_xor_b32 v4, va[5], v3         # 20
     231        v_xor_b32 va[6], v4, va[6]      # 24
     232       
     233        s_mul_i32 sa[4], sa[4], sa[1]   # 28
     234        s_mul_i32 sa[4], sa[4], sa[0]   # 32
     235       
     236        v_xor_b32 v4, va[6], v3         # 36
     237        v_xor_b32 va[7], v4, va[7]      # 40
     238)ffDXD",
     239        {   // livenesses
     240            {   // for SGPRs
     241                { { 0, 5 } },   // 0: S3
     242                { { 0, 33 } },  // 1: sa[0]'0
     243                { { 0, 29 } },  // 2: sa[1]'0
     244                { { 0, 1 } },   // 3: sa[2]'0
     245                { { 0, 17 } },  // 4: sa[3]'0
     246                { { 1, 5 } },   // 5: sa[4]'0
     247                { { 5, 17 } },  // 6: sa[4]'1
     248                { { 17, 29 } }, // 7: sa[4]'2
     249                { { 29, 33 } }, // 8: sa[4]'3
     250                { { 33, 34 } }  // 9: sa[4]'4
     251            },
     252            {   // for VGPRs
     253                { { 0, 37 } },   // 0: v3
     254                { { 9, 13 }, { 21, 25 }, { 37, 41 } }, // 1: v4
     255                { { 0, 9 } },    // 2: va[2]'0
     256                { { 0, 13 } },   // 3: va[5]'0
     257                { { 13, 21 } },  // 4: va[5]'1
     258                { { 0, 25 } },   // 5: va[6]'0
     259                { { 25, 37 } },  // 6: va[6]'1
     260                { { 0, 41 } },   // 7: va[7]'0
     261                { { 41, 42 } }   // 8: va[7]'1
     262            },
     263            { },
     264            { }
     265        },
     266        { }, // linearDepMaps
     267        true, ""
    217268    }
    218269};
Note: See TracChangeset for help on using the changeset viewer.