
procedures with large numbers of variables: - added pass-time tracking for pre-cpnanopass passes to compile. compile.ss - added inline handler for fxdiv-and-mod cp0.ss, primdata.ss - changed order in which return-point operations are done (adjust sfp first, then store return values, then restore local saves) to avoid storing return values to homes beyond the end of the stack in cases where adjusting sfp might result in a call to dooverflood. cpnanopass.ss, np-languages.ss - removed unused {make-,}asm-return-registers bindings cpnanopass.ss - corrected the max-fv value field of the lambda produced by the hand-coded bytevector=? handler. cpnanopass.ss - reduced live-pointer and inspector free-variable mask computation overhead cpnanopass.ss - moved regvec cset copies to driver so they aren't copied each time a uvar is assigned to a register. removed checks for missing register csets, since registers always have csets. cpnanopass.ss - added closure-rep else clause in record-inspector-information!. cpnanopass.ss - augmented tree representation with a constant representation for full trees to reduce the overhead of manipulating trees or subtress with all bits set. cpnanopass.ss - tree-for-each now takes start and end offsets; this cuts the cost of traversing and applying the action when the range of applicable offsets is other than 0..tree-size. cpnanopass.ss - introduced the notion of poison variables to reduce the cost of register/frame allocation for procedures with large sets of local variables. When the number of local variables exceeds a given limit (currently hardwired to 1000), each variable with a large live range is considered poison. A reasonable set of variables with large live ranges (the set of poison variables) is computed by successive approximation to avoid excessive overhead. Poison variables directly conflict with all spillables, and all non-poison spillables indirectly conflict with all poison spillables through a shared poison-cset. Thus poison variables cannot live in the same location as any other variable, i.e., they poison the location. Conflicts between frame locations and poison variables are handled normally, which allows poison variables to be assigned to move-related frame homes. Poison variables are spilled prior to register allocation, so conflicts between registers and poison variables are not represented. move relations between poison variables and frame variables are recorded as usual, but other move relations involving poison variables are not recorded. cpnanopass.ss, np-languages.ss - changed the way a uvar's degree is decremented by remove-victim!. instead of checking for a conflict between each pair of victim and keeper and decrementing when the conflict is found, remove-victim! now decrements the degree of each var in each victim's conflict set. while this might decrement other victims' degrees unnecessarily, it can be much less expensive when large numbers of variables are involved, since the number of conflicts between two non-poison variables should be small due to the selection process for (non-)poison variables and the fact that the unspillables introduced by instruction selection should also have few conflicts. That is, it reduces the worst-case complexity of decrementing degrees from O(n^2) to O(n). cpnanopass.ss - took advice in compute-degree! comment to increment the uvars in each registers csets rather than looping over the registers for each uvar asking whether the register conflicts with the uvar. cpnanopass.ss - assign-new-frame! now zeros out save-weight for local saves, since once they are explicitly saved and restored, they are no longer call-live and thus have no save cost. cpnanopass.ss - desensitized the let-values source-caching timing test slightly 8.ms - updated allx, bullyx patches patch* original commit: 3a49d0193ae57b8e31ec6a00b5b49db31a52373f
33 lines
3.4 KiB
Plaintext
33 lines
3.4 KiB
Plaintext
*** errors-compile-3-t-f-f 2017-10-27 02:41:58.000000000 -0400
|
|
--- errors-interpret-3-t-f-f 2017-10-27 03:47:08.000000000 -0400
|
|
***************
|
|
*** 1,3 ****
|
|
--- 1,9 ----
|
|
+ 6.mo:Bug in mat cp1in-verify-format-warnings clause 1 at line 1005, char 4 of 6.ms
|
|
+ 6.mo:Bug in mat cp1in-verify-format-warnings clause 2 at line 1007, char 4 of 6.ms
|
|
+ 6.mo:Bug in mat cp1in-verify-format-warnings clause 5 at line 1014, char 4 of 6.ms
|
|
+ 6.mo:Bug in mat cp1in-verify-format-warnings clause 6 at line 1016, char 4 of 6.ms
|
|
+ 6.mo:Bug in mat cp1in-verify-format-warnings clause 9 at line 1023, char 4 of 6.ms
|
|
+ 6.mo:Bug in mat cp1in-verify-format-warnings clause 10 at line 1025, char 4 of 6.ms
|
|
3.mo:Expected warning in mat cpvalid: "possible attempt to reference undefined variable x".
|
|
3.mo:Expected warning in mat cpvalid: "possible attempt to reference undefined variable x at line 1, char 19 of testfile.ss".
|
|
misc.mo:Expected warning in mat compile-profile: "profile-dump-list: unmodified source file "testfile.ss" not found in source directories".
|
|
***************
|
|
*** 12,26 ****
|
|
misc.mo:Expected warning in mat (argcnt compile-warning): "compile: possible incorrect argument count in call (car (quote (a b)) (quote (c d))) at line 3, char 38 of testfile.ss".
|
|
misc.mo:Expected warning in mat (argcnt compile-warning): "compile: possible incorrect argument count in call (g 7) at line 3, char 47 of testfile.ss".
|
|
misc.mo:Expected warning in mat (argcnt compile-warning): "compile: possible incorrect argument count in call (g) at line 3, char 48 of testfile.ss".
|
|
- 6.mo:Expected warning in mat cp1in-verify-format-warnings: "compile: too few arguments for control string "~a~~~s" in call to format".
|
|
- 6.mo:Expected warning in mat cp1in-verify-format-warnings: "compile: too many arguments for control string "~a~a~a~s" in call to format".
|
|
6.mo:Expected warning in mat cp1in-verify-format-warnings: "compile: too few arguments for control string "~a~~~s" in call to format at line 1, char 28 of testfile.ss".
|
|
6.mo:Expected warning in mat cp1in-verify-format-warnings: "compile: too many arguments for control string "~a~a~a~s" in call to format at line 1, char 28 of testfile.ss".
|
|
- 6.mo:Expected warning in mat cp1in-verify-format-warnings: "compile: too few arguments for control string "abc~s" in call to printf".
|
|
- 6.mo:Expected warning in mat cp1in-verify-format-warnings: "compile: too many arguments for control string "~%~abc~adef~ag~s~~~%" in call to printf".
|
|
6.mo:Expected warning in mat cp1in-verify-format-warnings: "compile: too few arguments for control string "abc~s" in call to printf at line 1, char 28 of testfile.ss".
|
|
6.mo:Expected warning in mat cp1in-verify-format-warnings: "compile: too many arguments for control string "~%~abc~adef~ag~s~~~%" in call to printf at line 1, char 28 of testfile.ss".
|
|
- 6.mo:Expected warning in mat cp1in-verify-format-warnings: "compile: too few arguments for control string "abc~s" in call to fprintf".
|
|
- 6.mo:Expected warning in mat cp1in-verify-format-warnings: "compile: too many arguments for control string "~%~abc~adef~ag~s~~~%" in call to fprintf".
|
|
6.mo:Expected warning in mat cp1in-verify-format-warnings: "compile: too few arguments for control string "abc~s" in call to fprintf at line 1, char 29 of testfile.ss".
|
|
6.mo:Expected warning in mat cp1in-verify-format-warnings: "compile: too many arguments for control string "~%~abc~adef~ag~s~~~%" in call to fprintf at line 1, char 29 of testfile.ss".
|
|
--- 18,26 ----
|