Changeset 4031 in CLRX


Ignore:
Timestamp:
Apr 20, 2018, 12:48:14 PM (4 weeks ago)
Author:
matszpk
Message:

CLRadeonExtender: GCNAsm: Fixed condition for counting SGPRs in VOP3 encoding. Add instruction with equalTo dependencies.

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

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

    r4025 r4031  
    24432443        if (src2Op && src2Op.range.isSGPR())
    24442444        {
    2445             bool equalS0S2 = regRangeCanEqual(src0Op.range, src2Op.range);
    2446             bool equalS1S2 = regRangeCanEqual(src1Op.range, src2Op.range);
    2447             if((!equalS0S2 && !equalS1S2) ||
    2448                 (!src2Op.range.isRegVar() &&
    2449                 ((!equalS0S2 && equalS1S2 && src1Op.range.isRegVar()) ||
    2450                  (equalS0S2 && !equalS1S2 && src0Op.range.isRegVar()))) ||
    2451                 (src2Op.range.isRegVar() &&
    2452                  ((!equalS0S2 && equalS1S2 && !src1Op.range.isRegVar()) ||
    2453                  (equalS0S2 && !equalS1S2 && !src0Op.range.isRegVar()))))
    2454                 numSgprToRead++;
     2445            if (src0Op.range.isSGPR())
     2446            {
     2447                if (src1Op.range.isSGPR())
     2448                {   // SRC0 - SGPR, SRC1 - SGPR, SRC2 - SGPR
     2449                    if (!regRangeCanEqual(src0Op.range, src2Op.range) &&
     2450                        !regRangeCanEqual(src1Op.range, src2Op.range))
     2451                        numSgprToRead++;
     2452                }
     2453                // SRC0 - SGPR, SRC1 - VGPR, SRC2 - SGPR
     2454                else if (!regRangeCanEqual(src0Op.range, src2Op.range))
     2455                    numSgprToRead++;
     2456            }
     2457            else
     2458            {
     2459                if (src1Op.range.isSGPR())
     2460                {    // SRC0 - VGPR, SRC1 - SGPR, SRC2 - SGPR
     2461                    if (!regRangeCanEqual(src1Op.range, src2Op.range))
     2462                        numSgprToRead++;
     2463                }
     2464                else // SRC0 - VGPR, SRC1 - VGPR, SRC2 - SGPR
     2465                    numSgprToRead++;
     2466            }
    24552467        }
    24562468       
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAlloc3.cpp

    r4030 r4031  
    114114    },
    115115    {   // 2 - simple case (linear dep)
    116         R"ffDXD(.regvar sa:s:8, va:v:10
     116        R"ffDXD(.regvar sa:s:10, va:v:10
    117117        .regvar sbuf:s:4, rbx4:v:6
    118118        s_mov_b64 sa[4:5], sa[2:3]  # 0
     
    120120        v_add_f64 va[4:5], va[2:3], v[3:4]
    121121        buffer_load_dwordx4 rbx4[1:5], va[6], sbuf[0:3], sa[7] idxen offset:603 tfe
     122        v_mad_f32 va[7], sa[8], va[8], s10
    122123)ffDXD",
    123124        {   // livenesses
     
    125126                { { 0, 5 } }, // S4
    126127                { { 0, 5 } }, // S5
     128                { { 0, 25 } }, // S10
    127129                { { 0, 0 } }, // sa[2]'0
    128130                { { 0, 0 } }, // sa[3]'0
     
    132134                { { 8, 9 } }, // sa[5]'1
    133135                { { 0, 17 } }, // sa[7]'0
     136                { { 0, 25 } }, // sa[8]'0
    134137                { { 0, 17 } }, // sbuf[0]'0
    135138                { { 0, 17 } }, // sbuf[1]'0
    136139                { { 0, 17 } }, // sbuf[2]'0
    137                 { { 0, 17 } }, // sbuf[3]'0
     140                { { 0, 17 } }  // sbuf[3]'0
    138141            },
    139142            {   // for VGPRs
    140143                { { 0, 9 } }, // V3
    141144                { { 0, 9 } }, // V4
    142                 { }, // rbx4[1]'0
    143                 { }, // rbx4[2]'0
    144                 { }, // rbx4[3]'0
    145                 { }, // rbx4[4]'0
     145                { { 24, 25 } }, // rbx4[1]'0
     146                { { 24, 25 } }, // rbx4[2]'0
     147                { { 24, 25 } }, // rbx4[3]'0
     148                { { 24, 25 } }, // rbx4[4]'0
    146149                { { 0, 17 } }, // rbx4[5]'0: tfe - read before write
    147150                { { 0, 9 } }, // va[2]'0
     
    149152                { { 16, 17 } }, // va[4]'0 : out of range code block
    150153                { { 16, 17 } }, // va[5]'0 : out of range code block
    151                 { { 0, 17 } } // va[6]'0
     154                { { 0, 17 } }, // va[6]'0
     155                { }, // va[7]'0
     156                { { 0, 25 } }  // va[8]'0
    152157            },
    153158            { },
     
    158163                { 0, { 0, { }, { 1 } } },  // S4
    159164                { 1, { 0, { 0 }, { } } },  // S5
    160                 { 2, { 2, { }, { 3 } } },  // sa[2]'0
    161                 { 3, { 0, { 2 }, { } } },  // sa[3]'0
    162                 { 4, { 2, { }, { 6 } } },  // sa[4]'0
    163                 { 5, { 2, { }, { 7, 7 } } },  // sa[4]'1
    164                 { 6, { 0, { 4 }, { } } },  // sa[5]'0
    165                 { 7, { 0, { 5, 5 }, { } } },   // sa[5]'1
    166                 { 9, { 4, { }, { 10 } } }, // sbuf[0]'0
    167                 { 10, { 0, { 9 }, { 11 } } }, // sbuf[1]'0
    168                 { 11, { 0, { 10 }, { 12 } } }, // sbuf[2]'0
    169                 { 12, { 0, { 11 }, { } } }  // sbuf[3]'0
     165                { 3, { 2, { }, { 4 } } },  // sa[2]'0
     166                { 4, { 0, { 3 }, { } } },  // sa[3]'0
     167                { 5, { 2, { }, { 7 } } },  // sa[4]'0
     168                { 6, { 2, { }, { 8, 8 } } },  // sa[4]'1
     169                { 7, { 0, { 5 }, { } } },  // sa[5]'0
     170                { 8, { 0, { 6, 6 }, { } } },   // sa[5]'1
     171                { 11, { 4, { }, { 12 } } }, // sbuf[0]'0
     172                { 12, { 0, { 11 }, { 13 } } }, // sbuf[1]'0
     173                { 13, { 0, { 12 }, { 14 } } }, // sbuf[2]'0
     174                { 14, { 0, { 13 }, { } } }  // sbuf[3]'0
    170175            },
    171176            {   // for VGPRs
     
    185190            { }
    186191        },
    187         { },  // equalToDepMaps
     192        {   // equalToDepMaps
     193            {   // for SGPRs
     194                { 2, { { 10 }, { } } },  // S10
     195                { 10, { { }, { 2 } } }   // sa[8]'0
     196            },
     197            { },
     198            { },
     199            { }
     200        },
    188201        true, ""
    189202    }
Note: See TracChangeset for help on using the changeset viewer.