Changeset 4028 in CLRX


Ignore:
Timestamp:
Apr 19, 2018, 8:36:39 PM (8 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Fixes in AsmRegAlloc3 (convert keys to correct indices). Fixed addUsageDeps (createLivenesses).

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

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

    r4027 r4028  
    1919
    2020#include <CLRX/Config.h>
     21#include <assert.h>
    2122#include <iostream>
    2223#include <stack>
     
    903904            std::vector<size_t> vidxes;
    904905            cxuint regType = UINT_MAX;
     906            cxbyte align = rvus[ldeps[pos]].align;
    905907            for (uint16_t k = rvu.rstart; k < rvu.rend; k++)
    906908            {
    907909                AsmSingleVReg svreg = {rvu.regVar, k};
    908910                auto sit = ssaIdIdxMap.find(svreg);
     911                assert(sit != ssaIdIdxMap.end());
    909912                if (regType==UINT_MAX)
    910913                    regType = getRegType(regTypesNum, regRanges, svreg);
     
    915918                vidxes.push_back(ssaIdIndices[sit->second]);
    916919            }
     920            ldepsOut[regType][vidxes[0]].align = align;
    917921            for (size_t j = 1; j < vidxes.size(); j++)
    918922            {
     
    10801084                        hasNext = true;
    10811085                        rvu = usageHandler.nextUsage();
    1082                         if (rvu.offset < cblock.end && !rvu.useRegMode)
    1083                             instrRVUs[instrRVUsCount++] = rvu;
    10841086                    }
    10851087                    size_t liveTime = oldOffset - cblock.start + curLiveTime;
     
    11331135                        instrRVUsCount = 0;
    11341136                    }
     1137                    if (hasNext && rvu.offset < cblock.end && !rvu.useRegMode)
     1138                        instrRVUs[instrRVUsCount++] = rvu;
    11351139                    if (rvu.offset >= cblock.end)
    11361140                        break;
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAlloc3.cpp

    r4027 r4028  
    112112        { },  // equalToDepMaps
    113113        true, ""
    114     }
     114    },
     115    {   // 2 - simple case (linear dep)
     116        R"ffDXD(.regvar sa:s:8, va:v:10
     117        s_mov_b64 sa[4:5], sa[2:3]  # 0
     118        s_and_b64 sa[4:5], sa[4:5], s[4:5]
     119        v_add_f64 va[4:5], va[2:3], v[3:4]
     120)ffDXD",
     121        {   // livenesses
     122            {   // for SGPRs
     123                { { 0, 5 } }, // S4
     124                { { 0, 5 } }, // S5
     125                { { 0, 0 } }, // sa[2]'0
     126                { { 0, 0 } }, // sa[3]'0
     127                { { 4, 5 } }, // sa[4]'0
     128                { { 8, 9 } }, // sa[4]'1
     129                { { 4, 5 } }, // sa[5]'0
     130                { { 8, 9 } }  // sa[4]'1
     131            },
     132            {   // for VGPRs
     133                { { 0, 9 } }, // V3
     134                { { 0, 9 } }, // V4
     135                { { 0, 9 } }, // va[2]'0
     136                { { 0, 9 } }, // va[3]'0
     137                { }, // va[4]'0 : out of range code block
     138                { }  // va[5]'0 : out of range code block
     139            },
     140            { },
     141            { }
     142        },
     143        {   // linearDepMaps
     144            {   // for SGPRs
     145                { 0, { 2, { }, { 1 } } },  // S4
     146                { 1, { 0, { 0 }, { } } },  // S5
     147                { 2, { 2, { }, { 3 } } },  // sa[2]'0
     148                { 3, { 0, { 2 }, { } } },  // sa[3]'0
     149                { 4, { 2, { }, { 6 } } },  // sa[4]'0
     150                { 5, { 2, { }, { 7, 7 } } },  // sa[4]'1
     151                { 6, { 0, { 4 }, { } } },  // sa[5]'0
     152                { 7, { 0, { 5, 5 }, { } } }   // sa[5]'1
     153            },
     154            {   // for VGPRs
     155                { 0, { 1, { }, { 1 } } },  // V3
     156                { 1, { 0, { 0 }, { } } },  // V4
     157                { 2, { 1, { }, { 3 } } },  // va[2]'0
     158                { 3, { 0, { 2 }, { } } },  // va[3]'0
     159                { 4, { 1, { }, { 5 } } },  // va[4]'0
     160                { 5, { 0, { 4 }, { } } },  // va[5]'0
     161            },
     162            { },
     163            { }
     164        },
     165        { },  // equalToDepMaps
     166        true, ""
     167    },
    115168};
    116169
     
    250303            std::string ldname(rtname + lOss.str());
    251304            const auto& expLinearDepEntry = testCase.linearDepMaps[r][di];
    252             auto rlit = resLinearDepMaps[r].find(expLinearDepEntry.first);
     305            auto rlit = resLinearDepMaps[r].find(
     306                            lvIndexCvtTables[r][expLinearDepEntry.first]);
    253307           
    254308            std::ostringstream vOss;
     
    300354            std::string ldname(rtname + lOss.str());
    301355            const auto& expEqualToDepEntry = testCase.equalToDepMaps[r][di];
    302             auto reit = resEqualToDepMaps[r].find(expEqualToDepEntry.first);
     356            auto reit = resEqualToDepMaps[r].find(
     357                            lvIndexCvtTables[r][expEqualToDepEntry.first]);
    303358           
    304359            std::ostringstream vOss;
Note: See TracChangeset for help on using the changeset viewer.