OSDN Git Service

* rtl-c.scm (s-parallel): Use map-in-order instead of map.
authordevans <devans>
Fri, 13 Nov 2009 01:05:29 +0000 (01:05 +0000)
committerdevans <devans>
Fri, 13 Nov 2009 01:05:29 +0000 (01:05 +0000)
* rtl-xform.scm (/rtx-trim-for-doc): Handle set-quiet, nop,
eq, ne, lt, le, gt, ge, ltu, leu, gtu, geu, index-of.

cgen/ChangeLog
cgen/rtl-c.scm
cgen/rtl-xform.scm

index f0554cc..09dd954 100644 (file)
@@ -1,3 +1,9 @@
+2009-11-12  Doug Evans  <dje@sebabeach.org>
+
+       * rtl-c.scm (s-parallel): Use map-in-order instead of map.
+       * rtl-xform.scm (/rtx-trim-for-doc): Handle set-quiet, nop,
+       eq, ne, lt, le, gt, ge, ltu, leu, gtu, geu, index-of.
+
 2009-11-11  Doug Evans  <dje@sebabeach.org>
 
        * html.scm (gen-insn-docs): Add logging message.
index 878f27a..a10d09f 100644 (file)
     (set! /par-temp-list nil)
 
     (let* ((set-dest-exprs
-           (map (lambda (expr)
-                  (rtx-traverse (estate-context estate)
-                                (estate-owner estate)
-                                expr
-                                /par-replace-set-dest-expr-fn
-                                #f))
-                exprs))
+           ;; Use map-in-order because we need temp creation and usage to
+           ;; follow the same order.
+           (map-in-order (lambda (expr)
+                           (rtx-traverse (estate-context estate)
+                                         (estate-owner estate)
+                                         expr
+                                         /par-replace-set-dest-expr-fn
+                                         #f))
+                         exprs))
           (set-dests (string-map (lambda (expr)
                                    (rtl-c-with-estate estate VOID expr))
                                  set-dest-exprs))
       (set! /par-temp-list temps)
 
       (let* ((set-src-exprs
-             (map (lambda (expr)
-                    (rtx-traverse (estate-context estate)
-                                  (estate-owner estate)
-                                  expr
-                                  /par-replace-set-src-expr-fn
-                                  #f))
-                  exprs))
+             ;; Use map-in-order because we need temp creation and usage to
+             ;; follow the same order.
+             (map-in-order (lambda (expr)
+                             (rtx-traverse (estate-context estate)
+                                           (estate-owner estate)
+                                           expr
+                                           /par-replace-set-src-expr-fn
+                                           #f))
+                           exprs))
             (set-srcs (string-map (lambda (expr)
                                     (rtl-c-with-estate estate VOID expr))
                                    set-src-exprs)))
index 1ff896e..4790eda 100644 (file)
 )
 
 ; Subroutine of /rtx-trim-for-doc to simplify it.
-; Trim all the arguments of rtx NAME.
+; Trim the arguments of rtx NAME.
+; ARGS has already had options,mode removed.
 
 (define (/rtx-trim-args name args)
+  (logit 4 "Trimming args of " name ": " args "\n")
   (let* ((rtx-obj (rtx-lookup name))
         (arg-types (rtx-arg-types rtx-obj)))
 
 ; Examples of things to remove:
 ; - empty options list
 ; - ifield/operand/local/const wrappers
+; - modes of operations that don't need them to convey meaning
 ;
 ; NOTE: While having to trim the result of rtx-simplify may seem ironic,
 ; it isn't.  You need to keep separate the notions of simplifying "1+1" to "2"
               (car rest)
               rtx))
 
-         ((set)
+         ((set set-quiet)
+          (let ((trimmed-args (/rtx-trim-args name rest)))
+            (if (null? options)
+                (cons name trimmed-args)
+                (cons name (cons options (cons mode trimmed-args))))))
+
+         ((eq ne lt le gt ge ltu leu gtu geu index-of)
           (let ((trimmed-args (/rtx-trim-args name rest)))
             (if (null? options)
                 (cons name trimmed-args)
                     (cons name (cons mode (reverse result))))
                 (cons name (cons options (cons mode (reverse result)))))))
 
+         ((nop)
+          (list 'nop))
+
          ((closure)
           ;; Remove outer closures, they are artificially added, and are
           ;; basically noise to the human trying to understand the semantics.