recognize dotimes (#310)

This commit is contained in:
water111
2021-03-05 21:46:39 -05:00
committed by GitHub
parent 65ffe83468
commit b352dcefa9
10 changed files with 408 additions and 337 deletions
+26 -50
View File
@@ -650,13 +650,7 @@ TEST_F(FormRegressionTest, ExprRef) {
std::string type = "(function object int object)";
std::string expected =
"(begin\n"
" (let\n"
" ((v1-0 0))\n"
" (while (< v1-0 arg1) (nop!) (nop!) (set! arg0 (cdr arg0)) (+! v1-0 1))\n"
" )\n"
" (car arg0)\n"
" )";
"(begin (dotimes (v1-0 arg1) (nop!) (nop!) (set! arg0 (cdr arg0))) (car arg0))";
test_with_expr(func, type, expected, true, "");
}
@@ -1862,15 +1856,11 @@ TEST_F(FormRegressionTest, ExprMemCopy) {
std::string expected =
"(let\n"
" ((v0-0 arg0))\n"
" (let\n"
" ((v1-0 0))\n"
" (while\n"
" (< v1-0 arg2)\n"
" (set! (-> (the-as (pointer int8) arg0)) (-> (the-as (pointer uint8) arg1)))\n"
" (&+! arg0 1)\n"
" (&+! arg1 1)\n"
" (+! v1-0 1)\n"
" )\n"
" (dotimes\n"
" (v1-0 arg2)\n"
" (set! (-> (the-as (pointer int8) arg0)) (-> (the-as (pointer uint8) arg1)))\n"
" (&+! arg0 1)\n"
" (&+! arg1 1)\n"
" )\n"
" v0-0\n"
" )";
@@ -1905,15 +1895,11 @@ TEST_F(FormRegressionTest, ExprMemSet32) {
std::string expected =
"(let\n"
" ((v0-0 arg0))\n"
" (let\n"
" ((v1-0 0))\n"
" (while\n"
" (< v1-0 arg1)\n"
" (set! (-> (the-as (pointer int32) arg0)) arg2)\n"
" (&+! arg0 4)\n"
" (nop!)\n"
" (+! v1-0 1)\n"
" )\n"
" (dotimes\n"
" (v1-0 arg1)\n"
" (set! (-> (the-as (pointer int32) arg0)) arg2)\n"
" (&+! arg0 4)\n"
" (nop!)\n"
" )\n"
" v0-0\n"
" )";
@@ -1951,21 +1937,17 @@ TEST_F(FormRegressionTest, ExprMemOr) {
std::string expected =
"(let\n"
" ((v0-0 arg0))\n"
" (let\n"
" ((v1-0 0))\n"
" (while\n"
" (< v1-0 arg2)\n"
" (set!\n"
" (-> (the-as (pointer int8) arg0))\n"
" (logior\n"
" (-> (the-as (pointer uint8) arg0))\n"
" (-> (the-as (pointer uint8) arg1))\n"
" )\n"
" (dotimes\n"
" (v1-0 arg2)\n"
" (set!\n"
" (-> (the-as (pointer int8) arg0))\n"
" (logior\n"
" (-> (the-as (pointer uint8) arg0))\n"
" (-> (the-as (pointer uint8) arg1))\n"
" )\n"
" (&+! arg0 1)\n"
" (&+! arg1 1)\n"
" (+! v1-0 1)\n"
" )\n"
" (&+! arg0 1)\n"
" (&+! arg1 1)\n"
" )\n"
" v0-0\n"
" )";
@@ -2171,14 +2153,10 @@ TEST_F(FormRegressionTest, ExprPrintTreeBitmask) {
std::string expected =
"(begin\n"
" (let\n"
" ((s4-0 0))\n"
" (while\n"
" (< s4-0 arg1)\n"
" (if (zero? (logand arg0 1)) (format #t \" \") (format #t \"| \"))\n"
" (set! arg0 (shr arg0 1))\n"
" (+! s4-0 1)\n"
" )\n"
" (dotimes\n"
" (s4-0 arg1)\n"
" (if (zero? (logand arg0 1)) (format #t \" \") (format #t \"| \"))\n"
" (set! arg0 (shr arg0 1))\n"
" )\n"
" #f\n"
" )";
@@ -2494,15 +2472,13 @@ TEST_F(FormRegressionTest, StringLt) {
" ((method-of-type string length) arg1)\n"
" )\n"
" )\n"
" (v1-4 0)\n"
" )\n"
" (while\n"
" (< v1-4 s4-1)\n"
" (dotimes\n"
" (v1-4 s4-1)\n"
" (cond\n"
" ((< (-> arg0 data v1-4) (-> arg1 data v1-4)) (return #t))\n"
" ((< (-> arg1 data v1-4) (-> arg0 data v1-4)) (return #f))\n"
" )\n"
" (+! v1-4 1)\n"
" )\n"
" )\n"
" #f\n"