]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Cherry pick b9df4c8dec4d3154257818eb81111df43f2a7bf2 from master.
authorIvo Raisr <ivosh@ivosh.net>
Sat, 16 Sep 2017 20:22:53 +0000 (22:22 +0200)
committerIvo Raisr <ivosh@ivosh.net>
Sat, 16 Sep 2017 20:22:53 +0000 (22:22 +0200)
Fix a typo bug in VEX register allocator v3.
Also scanning a few more instructions ahead helps producing better code.

VEX/priv/host_generic_reg_alloc3.c

index ef8f583924c142254e394cc9e38c6737f4ea10e3..7e1e6099d39792802f34a5136c4d166c3c17a09d 100644 (file)
@@ -509,7 +509,7 @@ static inline HReg find_vreg_to_spill(
       - reg_usage[scan_forward_end], where scan_forward_end
            = MIN(scan_forward_max, scan_forward_start + FEW_INSTRUCTIONS).
       reg_usage uses chunk instruction numbering. */
-#  define FEW_INSTRUCTIONS 5
+#  define FEW_INSTRUCTIONS 20
    Short scan_forward_end
       = (scan_forward_max <= scan_forward_start + FEW_INSTRUCTIONS) ?
         scan_forward_max : scan_forward_start + FEW_INSTRUCTIONS;
@@ -532,10 +532,10 @@ static inline HReg find_vreg_to_spill(
                }
             }
 
-            if (ii_chunk - scan_forward_start > distance_so_far) {
-               distance_so_far = ii_chunk - scan_forward_start;
+            if (ii_chunk >= distance_so_far) {
+               distance_so_far = ii_chunk;
                vreg_found = vreg;
-               if (ii_chunk + distance_so_far == scan_forward_end) {
+               if (distance_so_far == scan_forward_end) {
                   break; /* We are at the end. Nothing could be better. */
                }
             }