Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 20 Oct 2001 13:02:44 -0700
From:      Marcel Moolenaar <marcel@xcllnt.net>
To:        Doug Rabson <dfr@nlsystems.com>
Cc:        ia64@freebsd.org
Subject:   Hazards [was: Re: cvs commit: src/sys/ia64/ia64 sal.c]
Message-ID:  <20011020130244.A25443@kayak.xcllnt.net>
In-Reply-To: <20011020144512.W549-100000@salmon.nlsystems.com>
References:  <20011020031327.A6752@dhcp01.pn.xcllnt.net> <20011020144512.W549-100000@salmon.nlsystems.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, Oct 20, 2001 at 02:46:01PM +0100, Doug Rabson wrote:
> 
> I have run all our code through GAS' dependancy checker FWIW. It still
> missed some problems though.
> 

I run our hazard checker on sbin/umount (random pick):
50 unlikely hazards
128 potential hazards
28 certain hazards

Normally you can ignore the unlikely and potential hazards, because they
are mostly caused by insufficient static information.

27 of the 28 certain hazards are no hazards at all, because our
hazard checker was disassembling data.

Which leaves:
HAZARD (certain) WAW Dependency between 400000000003e500.0 and 400000000003e510.2 on p6

According to ski this gives:
   400000000003e500       cmp.ge           p6=r0,r33                                 MIB
                          nop.i            0x0
 !                  (p6)  br.ret.spnt.few  b0
   400000000003e510       nop.m            0x0                                       MII
                          mov.i            r14=ar.lc
                          cmp.ltu          p6=17,r33

This is clearly a hazard.

Since bin/csh seems to hang, I repeated the exercise for bin/csh:
145 certain hazards, of which 143 look like bogus hazards. This leaves:
1) HAZARD (certain) WAW Dependency between 40000000000d1940.2 and 40000000000d1960.0 on p6
2) HAZARD (certain) WAW Dependency between 400000000013dec0.0 and 400000000013ded0.2 on p6

Ad 1) Same problem as above:
   40000000000d1940       adds             r15=66,r0                                 MII
                          break.i          0x100000;;
                          cmp.ne           p6=r0,r10
   40000000000d1950       nop.m            0x0                                       MIB
                          nop.i            0x0
 !                  (p6)  br.cond.sptk.few 0x4000000000153a70
   40000000000d1960       cmp.ne           p6=r9,r0;;                                MMI
 !                  (p6)  mov              r8=r0
                          nop.i            0x0

Ad 2) Same problem here:
   400000000013dec0       cmp.ge           p6=r0,r33                                 MIB
                          nop.i            0x0
 !                  (p6)  br.ret.spnt.few  b0
   400000000013ded0       nop.m            0x0                                       MII
                          mov.i            r14=ar.lc
                          cmp.ltu          p6=17,r33

This looks like a (structural) compiler bug in GCC-2.9-ia64-final
that GAS isn't catching. We should keep our eyes open for this in
GCC 3.x.

-- 
 Marcel Moolenaar	  USPA: A-39004		 marcel@xcllnt.net

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-ia64" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20011020130244.A25443>