Changeset 4049 in CLRX


Ignore:
Timestamp:
Apr 24, 2018, 10:28:13 PM (3 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Fix stupid bug in createSSAData: do not ssaId when no reduced SSAid but no reduction for this regvar but no ssaId changes (no writes). Fixed testcases (livenesses). Fixed insert in Liveness class: use max k2 (end of region) instead simple replacing.
Correct condition for adding 1 to region start while putting liveness through previous blocks. Add new testcase with empty blocks (no reg or regvar usage) (livenesses).

Location:
CLRadeonExtender/trunk
Files:
4 edited

Legend:

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

    r4047 r4049  
    763763                // if begin at some point at last block
    764764                lastPos = sinfoIt->second.lastPos;
    765                 lv.insert(lastPos + (!sinfoIt->second.readBeforeWrite),
     765                lv.insert(lastPos + (sinfoIt->second.ssaIdChange!=0),
    766766                          lastBlk.end);
    767767                ++flit; // skip last block in stack
  • CLRadeonExtender/trunk/amdasm/AsmRegAlloc.h

    r4047 r4049  
    306306        auto res = l.insert(std::make_pair(k, k2));
    307307        if (!res.second)
    308             res.first->second = k2;
     308            res.first->second = std::max(res.first->second, k2);
    309309        join(res.first);
    310310    }
  • CLRadeonExtender/trunk/amdasm/AsmRegAllocSSAData.cpp

    r4045 r4049  
    799799        // just remove, if some change without read before
    800800        retSSAIdMap.erase(ssaIdsIt);
    801     }
    802     return false;
     801        return false;
     802    }
     803    // no reduced, but no reduction for this var
     804    return (ssaIdsIt == retSSAIdMap.end());
    803805}
    804806
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAlloc3.cpp

    r4048 r4049  
    296296                { { 21, 22 } }, // 7: sa[3]'1
    297297                { { 1, 5 } }, // 8: sa[4]'0
    298                 { { 5, 20 }, { 44, 45 } }, // 9: sa[4]'1
     298                { { 5, 21 }, { 44, 45 } }, // 9: sa[4]'1
    299299                { { 0, 20 }, { 32, 33 } }  // 10: sa[5]
    300300            },
     
    355355        s_endpgm                            # 104
    356356)ffDXD",
    357         {
    358             // livenesses
     357        {   // livenesses
    359358            {   // for SGPRs
    360359                { { 0, 21 } }, // 0: S0
     
    389388                { { 0, 24 }, { 80, 93 } }, // 8: va[4]'0
    390389                { { 73, 74 } }  // 10: va[5]'0
     390            },
     391            { },
     392            { }
     393        },
     394        {   // linearDepMaps
     395            {   // for SGPRs
     396                { 0, { 0, { }, { 1 } } },
     397                { 1, { 0, { 0 }, { } } }
     398            },
     399            { },
     400            { },
     401            { }
     402        },
     403        true, ""
     404    },
     405    {   // 7 - empty blocks
     406        R"ffDXD(.regvar sa:s:8, va:v:10
     407        s_mov_b32 sa[0], sa[2]              # 0
     408        s_add_u32 sa[1], sa[3], s3          # 4
     409        v_mad_f32 va[0], va[1], va[2], v0   # 8
     410        s_xor_b32 sa[2], sa[4], sa[3]       # 16
     411        .cf_jump a0,a1
     412        s_setpc_b64 s[0:1]                  # 20
     413       
     414a0:     s_mul_i32 sa[1], sa[2], s3          # 24
     415        s_nop 7                             # 28
     416        s_cbranch_scc1 a01                  # 32
     417        s_nop 7                             # 36
     418        s_cbranch_execz a02                 # 40
     419        s_nop 7                             # 44
     420        s_cbranch_vccz a03                  # 48
     421        s_nop 7                             # 52
     422        s_cbranch_vccnz a04                 # 56
     423        s_nop 7                             # 60
     424        s_mul_i32 s2, sa[4], sa[2]          # 64
     425        s_cbranch_scc0 a05                  # 68
     426        s_endpgm                            # 72
     427       
     428a01:    s_mul_i32 sa[0], s2, s3             # 76
     429        s_endpgm                            # 80
     430       
     431a02:    s_mul_i32 sa[1], s2, sa[4]          # 84
     432        s_endpgm                            # 88
     433       
     434a03:    v_add_f32 va[3], va[1], va[0]       # 92
     435        s_endpgm                            # 96
     436       
     437a04:    v_add_f32 va[3], va[3], va[4]       # 100
     438        s_endpgm                            # 104
     439       
     440a05:    s_mul_i32 sa[5], s4, sa[6]          # 108
     441        s_endpgm                            # 112
     442
     443a1:     v_mul_f32 va[1], sa[1], va[1]       # 116
     444        v_nop                               # 120
     445        s_cbranch_scc1 a11                  # 124
     446        v_nop                               # 128
     447        s_cbranch_execz a12                 # 132
     448        v_nop                               # 136
     449        s_cbranch_vccz a13                  # 140
     450        v_nop                               # 144
     451        s_cbranch_vccnz a14                 # 148
     452        v_nop                               # 152
     453        s_mul_i32 s2, sa[4], sa[2]          # 156
     454        s_cbranch_scc0 a15                  # 160
     455        s_endpgm                            # 164
     456
     457a11:    v_add_f32 v2, va[2], va[3]          # 168
     458        s_endpgm                            # 172
     459       
     460a12:    v_add_f32 v2, va[0], va[3]          # 176
     461        s_endpgm                            # 180
     462       
     463a13:    v_nop                               # 184
     464        s_endpgm                            # 188
     465       
     466a14:    v_nop                               # 192
     467        s_endpgm                            # 196
     468       
     469a15:    s_mul_i32 sa[5], s4, sa[1]          # 200
     470        s_endpgm                            # 204
     471)ffDXD",
     472        {   // livenesses
     473            {   // for SGPRs
     474                { { 0, 21 } }, // 0: S0
     475                { { 0, 21 } }, // 1: S1
     476                { { 0, 44 }, { 65, 66 }, { 76, 77 },
     477                        { 84, 85 }, { 157, 158 } }, // 2: S2
     478                { { 0, 36 }, { 76, 77 } }, // 3: S3
     479                { { 0, 72 }, { 108, 109 }, { 116, 164 }, { 200, 201 } }, // 4: S4
     480                { { 1, 2 } }, // 5: sa[0]'0
     481                { { 77, 78 } }, // 6: sa[0]'1
     482                { { 5, 24 }, { 116, 164 }, { 200, 201 } }, // 7: sa[1]'0
     483                { { 25, 26 } }, // 8: sa[1]'1
     484                { { 85, 86 } }, // 9: sa[1]'2
     485                { { 0, 1 } }, // 10: sa[2]'0
     486                { { 17, 65 }, { 116, 157 } }, // 11: sa[2]'1
     487                { { 0, 17 } }, // 12: sa[3]'0
     488                { { 0, 65 }, { 84, 85 }, { 116, 157 } }, // 13: sa[4]'0
     489                { { 109, 110 } }, // 14: sa[5]'0
     490                { { 201, 202 } }, // 15: sa[5]'1
     491                { { 0, 72 }, { 108, 109 } }  // 16: sa[6]'0
     492            },
     493            {   // for VGPRs
     494                { { 0, 9 } }, // 0: V0
     495                { { 169, 170 }, { 177, 178 } }, // 1: V2
     496                { { 9, 52 }, { 92, 93 }, { 116, 136 }, { 176, 177 } }, // 2: va[0]'0
     497                { { 0, 52 }, { 92, 93 }, { 116, 117 } }, // 3: va[1]'0
     498                { { 117, 118 } }, // 4: va[1]'1
     499                { { 0, 24 }, { 116, 128 }, { 168, 169 } }, // 5: va[2]'0
     500                { { 0, 60 }, { 100, 101 }, { 116, 136 },
     501                        { 168, 169 }, { 176, 177 } }, // 6: va[3]'0
     502                { { 101, 102 } }, // 7: va[3]'1
     503                { { 93, 94 } }, // 8: va[3]'2
     504                { { 0, 60 }, { 100, 101 } }  // 9: va[4]'0
    391505            },
    392506            { },
Note: See TracChangeset for help on using the changeset viewer.