Changeset 3913 in CLRX


Ignore:
Timestamp:
Mar 20, 2018, 5:41:05 PM (6 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: yet another stupid bug in joinLastSSAIdMap (skipping inserting src ssaIds if no src in later routine part) has been fixed.
Add new testcase to test loops inside routines.

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

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

    r3912 r3913  
    11791179                    continue; // otherwise, skip
    11801180            }
    1181             else
    1182                 continue;
    11831181        }
    11841182        std::cout << "  entry: " << entry.first.regVar << ":" <<
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAllocCase2.cpp

    r3912 r3913  
    29122912        true, ""
    29132913    },
     2914    {   // 17 - routine with two consecutive complex loops
     2915        R"ffDXD(.regvar sa:s:10, va:v:8
     2916        s_mov_b32 sa[2], s4
     2917        s_mov_b32 sa[3], s5
     2918        s_mov_b32 sa[4], s6
     2919        s_mov_b32 sa[5], s7
     2920        s_mov_b32 sa[6], s8
     2921        .cf_call routine
     2922        s_swappc_b64 s[0:1], s[2:3]
     2923       
     2924        s_xor_b32 sa[2], sa[2], sa[0]
     2925        s_xor_b32 sa[3], sa[3], sa[0]
     2926        s_xor_b32 sa[4], sa[4], sa[1]
     2927        s_xor_b32 sa[5], sa[5], sa[1]
     2928        s_xor_b32 sa[6], sa[6], sa[0]
     2929        s_endpgm
     2930       
     2931routine:
     2932        s_xor_b32 sa[2], sa[2], sa[0]
     2933        s_xor_b32 sa[3], sa[3], sa[0]
     2934        s_xor_b32 sa[5], sa[5], sa[0]
     2935        s_cbranch_vccz  subr1
     2936       
     2937loop0:  s_xor_b32 sa[2], sa[2], sa[0]
     2938        s_cbranch_scc0 end1
     2939       
     2940        s_xor_b32 sa[3], sa[3], sa[0]
     2941        s_cbranch_scc0 end2
     2942       
     2943        s_xor_b32 sa[4], sa[4], sa[1]
     2944        s_cbranch_scc0 end3
     2945       
     2946        s_xor_b32 sa[5], sa[5], sa[1]
     2947        s_cbranch_vccnz loop0
     2948       
     2949        s_xor_b32 sa[3], sa[3], sa[0]
     2950        s_xor_b32 sa[4], sa[4], sa[0]
     2951        s_xor_b32 sa[6], sa[6], sa[0]
     2952        s_cbranch_vccz  subr2
     2953
     2954loop1:  s_xor_b32 sa[4], sa[4], sa[0]
     2955        s_cbranch_scc0 end4
     2956       
     2957        s_xor_b32 sa[5], sa[5], sa[0]
     2958        s_cbranch_scc0 end5
     2959       
     2960        s_xor_b32 sa[6], sa[6], sa[1]
     2961        s_cbranch_scc0 end6
     2962       
     2963        s_xor_b32 sa[3], sa[3], sa[1]
     2964        s_branch loop1
     2965       
     2966end1:   s_xor_b32 sa[2], sa[2], sa[0]
     2967        .cf_ret
     2968        s_setpc_b64 s[0:1]
     2969       
     2970end2:   s_xor_b32 sa[3], sa[3], sa[0]
     2971        .cf_ret
     2972        s_setpc_b64 s[0:1]
     2973       
     2974end3:   s_xor_b32 sa[4], sa[4], sa[0]
     2975        .cf_ret
     2976        s_setpc_b64 s[0:1]
     2977       
     2978end4:   s_xor_b32 sa[4], sa[4], sa[0]
     2979        .cf_ret
     2980        s_setpc_b64 s[0:1]
     2981       
     2982end5:   s_xor_b32 sa[5], sa[5], sa[0]
     2983        .cf_ret
     2984        s_setpc_b64 s[0:1]
     2985       
     2986end6:   s_xor_b32 sa[6], sa[6], sa[0]
     2987        .cf_ret
     2988        s_setpc_b64 s[0:1]
     2989       
     2990subr1:
     2991        s_xor_b32 sa[2], sa[2], sa[0]
     2992        s_xor_b32 sa[3], sa[3], sa[0]
     2993        s_xor_b32 sa[4], sa[4], sa[0]
     2994        s_xor_b32 sa[5], sa[5], sa[1]
     2995        s_xor_b32 sa[6], sa[6], sa[0]
     2996        s_cbranch_execnz loop0
     2997       
     2998subr2:
     2999        s_xor_b32 sa[2], sa[2], sa[0]
     3000        s_xor_b32 sa[3], sa[3], sa[0]
     3001        s_xor_b32 sa[4], sa[4], sa[1]
     3002        s_xor_b32 sa[5], sa[5], sa[1]
     3003        s_xor_b32 sa[6], sa[6], sa[0]
     3004        s_cbranch_execnz loop1
     3005       
     3006        s_xor_b32 sa[2], sa[2], sa[0]
     3007        s_xor_b32 sa[3], sa[3], sa[0]
     3008        s_xor_b32 sa[4], sa[4], sa[1]
     3009        s_xor_b32 sa[5], sa[5], sa[1]
     3010        s_xor_b32 sa[6], sa[6], sa[0]
     3011        .cf_ret
     3012        s_setpc_b64 s[0:1]
     3013)ffDXD",
     3014        {
     3015            {   // block 0 - start
     3016                0, 24,
     3017                { { 2, true } },
     3018                {
     3019                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, false) },
     3020                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, false) },
     3021                    { { "", 2 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3022                    { { "", 3 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3023                    { { "", 4 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3024                    { { "", 5 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3025                    { { "", 6 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3026                    { { "", 7 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3027                    { { "", 8 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3028                    { { "sa", 2 }, SSAInfo(0, 1, 1, 1, 1, false) },
     3029                    { { "sa", 3 }, SSAInfo(0, 1, 1, 1, 1, false) },
     3030                    { { "sa", 4 }, SSAInfo(0, 1, 1, 1, 1, false) },
     3031                    { { "sa", 5 }, SSAInfo(0, 1, 1, 1, 1, false) },
     3032                    { { "sa", 6 }, SSAInfo(0, 1, 1, 1, 1, false) }
     3033                }, true, false, false },
     3034            {   // block 1 - end
     3035                24, 48,
     3036                { },
     3037                {
     3038                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3039                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3040                    { { "sa", 2 }, SSAInfo(3, 8, 8, 8, 1, true) },
     3041                    { { "sa", 3 }, SSAInfo(2, 10, 10, 10, 1, true) },
     3042                    { { "sa", 4 }, SSAInfo(1, 10, 10, 10, 1, true) },
     3043                    { { "sa", 5 }, SSAInfo(2, 9, 9, 9, 1, true) },
     3044                    { { "sa", 6 }, SSAInfo(1, 8, 8, 8, 1, true) }
     3045                }, false, false, true },
     3046            {   // block 2 - routine
     3047                48, 64,
     3048                { { 3, false }, { 18, false } },
     3049                {
     3050                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3051                    { { "sa", 2 }, SSAInfo(1, 2, 2, 2, 1, true) },
     3052                    { { "sa", 3 }, SSAInfo(1, 2, 2, 2, 1, true) },
     3053                    { { "sa", 5 }, SSAInfo(1, 2, 2, 2, 1, true) }
     3054                }, false, false, false },
     3055            {   // block 3 - loop0
     3056                64, 72,
     3057                { { 4, false }, { 12, false } },
     3058                {
     3059                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3060                    { { "sa", 2 }, SSAInfo(2, 3, 3, 3, 1, true) }
     3061                }, false, false, false },
     3062            {   // block 4 - to end2
     3063                72, 80,
     3064                { { 5, false }, { 13, false } },
     3065                {
     3066                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3067                    { { "sa", 3 }, SSAInfo(2, 3, 3, 3, 1, true) }
     3068                }, false, false, false },
     3069            {   // block 5 - to end3
     3070                80, 88,
     3071                { { 6, false }, { 14, false } },
     3072                {
     3073                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3074                    { { "sa", 4 }, SSAInfo(1, 2, 2, 2, 1, true) }
     3075                }, false, false, false },
     3076            {   // block 6 - loop0 end
     3077                88, 96,
     3078                { { 3, false }, { 7, false } },
     3079                {
     3080                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3081                    { { "sa", 5 }, SSAInfo(2, 3, 3, 3, 1, true) }
     3082                }, false, false, false },
     3083            {   // block 7 - after loop0
     3084                96, 112,
     3085                { { 8, false }, { 19, false } },
     3086                {
     3087                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3088                    { { "sa", 3 }, SSAInfo(3, 4, 4, 4, 1, true) },
     3089                    { { "sa", 4 }, SSAInfo(2, 3, 3, 3, 1, true) },
     3090                    { { "sa", 6 }, SSAInfo(1, 2, 2, 2, 1, true) }
     3091                }, false, false, false },
     3092            {   // block 8 - loop1
     3093                112, 120,
     3094                { { 9, false }, { 15, false } },
     3095                {
     3096                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3097                    { { "sa", 4 }, SSAInfo(3, 4, 4, 4, 1, true) }
     3098                }, false, false, false },
     3099            {   // block 9 - to end5
     3100                120, 128,
     3101                { { 10, false }, { 16, false } },
     3102                {
     3103                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3104                    { { "sa", 5 }, SSAInfo(3, 4, 4, 4, 1, true) }
     3105                }, false, false, false },
     3106            {   // block 10 - to end6
     3107                128, 136,
     3108                { { 11, false }, { 17, false } },
     3109                {
     3110                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3111                    { { "sa", 6 }, SSAInfo(2, 3, 3, 3, 1, true) }
     3112                }, false, false, false },
     3113            {   // block 11 - loop1 end
     3114                136, 144,
     3115                { { 8, false } },
     3116                {
     3117                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3118                    { { "sa", 3 }, SSAInfo(4, 5, 5, 5, 1, true) }
     3119                }, false, false, true },
     3120            {   // block 12 - end1
     3121                144, 152,
     3122                { },
     3123                {
     3124                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3125                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3126                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3127                    { { "sa", 2 }, SSAInfo(3, 6, 6, 6, 1, true) }
     3128                }, false, true, true },
     3129            {   // block 13 - end2
     3130                152, 160,
     3131                { },
     3132                {
     3133                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3134                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3135                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3136                    { { "sa", 3 }, SSAInfo(3, 8, 8, 8, 1, true) }
     3137                }, false, true, true },
     3138            {   // block 14 - end3
     3139                160, 168,
     3140                { },
     3141                {
     3142                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3143                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3144                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3145                    { { "sa", 4 }, SSAInfo(2, 8, 8, 8, 1, true) }
     3146                }, false, true, true },
     3147            {   // block 15 - end4
     3148                168, 176,
     3149                { },
     3150                {
     3151                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3152                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3153                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3154                    { { "sa", 4 }, SSAInfo(4, 5, 5, 5, 1, true) }
     3155                }, false, true, true },
     3156            {   // block 16 - end5
     3157                176, 184,
     3158                { },
     3159                {
     3160                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3161                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3162                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3163                    { { "sa", 5 }, SSAInfo(4, 5, 5, 5, 1, true) }
     3164                }, false, true, true },
     3165            {   // block 17 - end6
     3166                184, 192,
     3167                { },
     3168                {
     3169                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3170                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3171                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3172                    { { "sa", 6 }, SSAInfo(3, 4, 4, 4, 1, true) }
     3173                }, false, true, true },
     3174            {   // block 18 - subr1
     3175                192, 216,
     3176                { { 3, false }, { 19, false } },
     3177                {
     3178                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3179                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3180                    { { "sa", 2 }, SSAInfo(2, 7, 7, 7, 1, true) },
     3181                    { { "sa", 3 }, SSAInfo(2, 9, 9, 9, 1, true) },
     3182                    { { "sa", 4 }, SSAInfo(1, 9, 9, 9, 1, true) },
     3183                    { { "sa", 5 }, SSAInfo(2, 8, 8, 8, 1, true) },
     3184                    { { "sa", 6 }, SSAInfo(1, 7, 7, 7, 1, true) }
     3185                }, false, false, false },
     3186            {   // block 19 - subr2
     3187                216, 240,
     3188                { { 8, false }, { 20, false } },
     3189                {
     3190                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3191                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3192                    { { "sa", 2 }, SSAInfo(3, 4, 4, 4, 1, true) },
     3193                    { { "sa", 3 }, SSAInfo(4, 6, 6, 6, 1, true) },
     3194                    { { "sa", 4 }, SSAInfo(3, 6, 6, 6, 1, true) },
     3195                    { { "sa", 5 }, SSAInfo(3, 6, 6, 6, 1, true) },
     3196                    { { "sa", 6 }, SSAInfo(2, 5, 5, 5, 1, true) }
     3197                }, false, false, false },
     3198            {   // block 20 - after subr2
     3199                240, 264,
     3200                { },
     3201                {
     3202                    { { "", 0 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3203                    { { "", 1 }, SSAInfo(0, 0, 0, 0, 0, true) },
     3204                    { { "sa", 0 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3205                    { { "sa", 1 }, SSAInfo(0, SIZE_MAX, 1, SIZE_MAX, 0, true) },
     3206                    { { "sa", 2 }, SSAInfo(4, 5, 5, 5, 1, true) },
     3207                    { { "sa", 3 }, SSAInfo(6, 7, 7, 7, 1, true) },
     3208                    { { "sa", 4 }, SSAInfo(6, 7, 7, 7, 1, true) },
     3209                    { { "sa", 5 }, SSAInfo(6, 7, 7, 7, 1, true) },
     3210                    { { "sa", 6 }, SSAInfo(5, 6, 6, 6, 1, true) }
     3211                }, false, true, true }
     3212        },
     3213        {   // SSA replaces
     3214            { { "sa", 2 }, { { 4, 3 }, { 5, 3 }, { 6, 3 }, { 7, 3 }, { 3, 2 }, { 7, 2 } } },
     3215            { { "sa", 3 }, { { 3, 2 }, { 4, 2 }, { 5, 2 }, { 6, 2 }, { 7, 2 }, { 8, 2 },
     3216                        { 9, 2 }, { 5, 4 }, { 6, 4 }, { 9, 4 } } },
     3217            { { "sa", 4 }, { { 2, 1 }, { 4, 1 }, { 5, 1 }, { 7, 1 }, { 8, 1 }, { 9, 1 },
     3218                        { 4, 3 }, { 6, 3 }, { 9, 3 } } },
     3219            { { "sa", 5 }, { { 3, 2 }, { 4, 2 }, { 5, 2 }, { 6, 2 }, { 7, 2 }, { 8, 2 },
     3220                        { 4, 3 }, { 6, 3 }, { 8, 3 } } },
     3221            { { "sa", 6 }, { { 2, 1 }, { 3, 1 }, { 4, 1 }, { 5, 1 }, { 6, 1 }, { 7, 1 },
     3222                        { 3, 2 }, { 5, 2 }, { 7, 2 } } }
     3223        },
     3224        true, ""
     3225    },
    29143226    { nullptr }
    29153227};
Note: See TracChangeset for help on using the changeset viewer.