]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/obj/s390x: cleanup objz.go
authorMichael Munday <munday@ca.ibm.com>
Mon, 20 Mar 2017 21:31:35 +0000 (17:31 -0400)
committerMichael Munday <munday@ca.ibm.com>
Mon, 20 Mar 2017 21:58:27 +0000 (21:58 +0000)
This CL deletes some unnecessary code in objz.go that existed to
support instruction scheduling. It's likely instruction scheduling
will never be done in this part of the backend so this code can
just be deleted.

This file can probably be cleaned up a bit more, but I think this
is a good start.

Passes: go build -toolexec 'toolstash -cmp' -a std.

Change-Id: I1645632ac551a90a4f4be418045c046b488e9469
Reviewed-on: https://go-review.googlesource.com/38394
Run-TryBot: Michael Munday <munday@ca.ibm.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/internal/obj/s390x/a.out.go
src/cmd/internal/obj/s390x/objz.go

index 765b97dadd3d6109c21279b099609d553b7ccc49..9bb035e169c9377d3b864cda75843704b89fc352 100644 (file)
@@ -159,16 +159,8 @@ const (
 
 const (
        // mark flags
-       LABEL   = 1 << 0
-       LEAF    = 1 << 1
-       FLOAT   = 1 << 2
-       BRANCH  = 1 << 3
-       LOAD    = 1 << 4
-       FCMP    = 1 << 5
-       SYNC    = 1 << 6
-       LIST    = 1 << 7
-       FOLL    = 1 << 8
-       NOSCHED = 1 << 9
+       LEAF = 1 << iota
+       BRANCH
 )
 
 const ( // comments from func aclass in asmz.go
index 348c9108ad1ddff6ece9a4643b490618dc89ad8a..a404d7916dade7bd34173e1244f713a6f4fe13b2 100644 (file)
@@ -239,60 +239,20 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
         * find leaf subroutines
         * strip NOPs
         * expand RET
-        * expand BECOME pseudo
         */
        if ctxt.Debugvlog != 0 {
                ctxt.Logf("%5.2f noops\n", obj.Cputime())
        }
 
        var q *obj.Prog
-       var q1 *obj.Prog
        for p := cursym.Text; p != nil; p = p.Link {
                switch p.As {
-               /* too hard, just leave alone */
                case obj.ATEXT:
                        q = p
+                       p.Mark |= LEAF
 
-                       p.Mark |= LABEL | LEAF | SYNC
-                       if p.Link != nil {
-                               p.Link.Mark |= LABEL
-                       }
-
-               case ASYNC,
-                       AWORD:
-                       q = p
-                       p.Mark |= LABEL | SYNC
-                       continue
-
-               case AMOVW, AMOVWZ, AMOVD:
+               case ABL, ABCL:
                        q = p
-                       if p.From.Reg >= REG_RESERVED || p.To.Reg >= REG_RESERVED {
-                               p.Mark |= LABEL | SYNC
-                       }
-                       continue
-
-               case AFABS,
-                       AFADD,
-                       AFDIV,
-                       AFMADD,
-                       AFMOVD,
-                       AFMOVS,
-                       AFMSUB,
-                       AFMUL,
-                       AFNABS,
-                       AFNEG,
-                       ALEDBR,
-                       ALDEBR,
-                       AFSUB:
-                       q = p
-
-                       p.Mark |= FLOAT
-                       continue
-
-               case ABL,
-                       ABCL,
-                       obj.ADUFFZERO,
-                       obj.ADUFFCOPY:
                        cursym.Text.Mark &^= LEAF
                        fallthrough
 
@@ -320,54 +280,26 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
                        ACMPUBLE,
                        ACMPUBLT,
                        ACMPUBNE:
-                       p.Mark |= BRANCH
                        q = p
-                       q1 = p.Pcond
-                       if q1 != nil {
-                               for q1.As == obj.ANOP {
-                                       q1 = q1.Link
-                                       p.Pcond = q1
-                               }
-
-                               if q1.Mark&LEAF == 0 {
-                                       q1.Mark |= LABEL
+                       p.Mark |= BRANCH
+                       if p.Pcond != nil {
+                               q := p.Pcond
+                               for q.As == obj.ANOP {
+                                       q = q.Link
+                                       p.Pcond = q
                                }
-                       } else {
-                               p.Mark |= LABEL
-                       }
-                       q1 = p.Link
-                       if q1 != nil {
-                               q1.Mark |= LABEL
                        }
-                       continue
-
-               case AFCMPO, AFCMPU:
-                       q = p
-                       p.Mark |= FCMP | FLOAT
-                       continue
-
-               case obj.ARET:
-                       q = p
-                       if p.Link != nil {
-                               p.Link.Mark |= LABEL
-                       }
-                       continue
 
                case obj.ANOP:
-                       q1 = p.Link
-                       q.Link = q1 /* q is non-nop */
-                       q1.Mark |= p.Mark
-                       continue
+                       q.Link = p.Link /* q is non-nop */
+                       p.Link.Mark |= p.Mark
 
                default:
                        q = p
-                       continue
                }
        }
 
        autosize := int32(0)
-       var p1 *obj.Prog
-       var p2 *obj.Prog
        var pLast *obj.Prog
        var pPre *obj.Prog
        var pPreempt *obj.Prog
@@ -397,7 +329,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
 
                        p.To.Offset = int64(autosize)
 
-                       q = p
+                       q := p
 
                        if p.From3.Offset&obj.NOSPLIT == 0 {
                                p, pPreempt = stacksplitPre(ctxt, p, autosize) // emit pre part of split check
@@ -476,7 +408,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
                                q = obj.Appendp(ctxt, q)
                                q.As = ABEQ
                                q.To.Type = obj.TYPE_BRANCH
-                               p1 = q
+                               p1 := q
 
                                q = obj.Appendp(ctxt, q)
                                q.As = AMOVD
@@ -504,7 +436,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
                                q = obj.Appendp(ctxt, q)
                                q.As = ABNE
                                q.To.Type = obj.TYPE_BRANCH
-                               p2 = q
+                               p2 := q
 
                                q = obj.Appendp(ctxt, q)
                                q.As = AADD
@@ -530,11 +462,6 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
                        }
 
                case obj.ARET:
-                       if p.From.Type == obj.TYPE_CONST {
-                               ctxt.Diag("using BECOME (%v) is not supported!", p)
-                               break
-                       }
-
                        retTarget := p.To.Sym
 
                        if cursym.Text.Mark&LEAF != 0 {
@@ -608,55 +535,10 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
                }
        }
        if wasSplit {
-               pLast = stacksplitPost(ctxt, pLast, pPre, pPreempt, autosize) // emit post part of split check
+               stacksplitPost(ctxt, pLast, pPre, pPreempt, autosize) // emit post part of split check
        }
 }
 
-/*
-// instruction scheduling
-       if(debug['Q'] == 0)
-               return;
-
-       curtext = nil;
-       q = nil;        // p - 1
-       q1 = firstp;    // top of block
-       o = 0;          // count of instructions
-       for(p = firstp; p != nil; p = p1) {
-               p1 = p->link;
-               o++;
-               if(p->mark & NOSCHED){
-                       if(q1 != p){
-                               sched(q1, q);
-                       }
-                       for(; p != nil; p = p->link){
-                               if(!(p->mark & NOSCHED))
-                                       break;
-                               q = p;
-                       }
-                       p1 = p;
-                       q1 = p;
-                       o = 0;
-                       continue;
-               }
-               if(p->mark & (LABEL|SYNC)) {
-                       if(q1 != p)
-                               sched(q1, q);
-                       q1 = p;
-                       o = 1;
-               }
-               if(p->mark & (BRANCH|SYNC)) {
-                       sched(q1, p);
-                       q1 = p1;
-                       o = 0;
-               }
-               if(o >= NSCHED) {
-                       sched(q1, p);
-                       q1 = p1;
-                       o = 0;
-               }
-               q = p;
-       }
-*/
 func stacksplitPre(ctxt *obj.Link, p *obj.Prog, framesize int32) (*obj.Prog, *obj.Prog) {
        var q *obj.Prog