🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: gnu.gcc.bug
Article #2917

extra labels not optimized away

#2917
From: Ken Raeburn
Date: Wed, 28 Feb 1990 20:12
58 lines
1639 bytes
(1.37,vax)

Source file:

    extern int i;
    int foo (void) {
	switch (i) {
	case 2:
	    i = 12;
	    return 9;
	case 1:
	    i = 3;
	    return 9;
	case 3:
	    i = 3;
	    return 9;
	default:
	    i = 3;
	    return 9;
	}
    }

Assembly code produced with "-O -fcombine-regs -fstrength-reduce
-fforce-mem" (our default -O configuration for vax):

	#NO_APP
	gcc_compiled.:
	.text
		.align 1
	.globl _foo
	_foo:
		.word 0x0
		movl _i,r0
		cmpl r0,$2
		jeql L2
		jleq L5
		cmpl r0,$3	# unnecessary distinction
		jeql L4
		jbr L5
	L2:
		movl $12,_i
		movl $9,r0
		ret
	L4:			# no code between labels
	L5:
		movl $3,_i
		movl $9,r0
		ret

In the case where `I' is 3 (but not 1), extra comparison code is
generated, and two branches -- one conditional, one unconditional --
transfer to the same instruction regardless of the comparison result.

This doesn't happen in all cases; in fact, in most cases (like `1'
above), the extra labels and code are removed.  However, there are
some pieces of code (with lots of labels, not switch statements) not
entirely unlike this in gcc's own insn-recog routines (vax version),
for example, so it may improve the compiler itself to fix this.
Technical Details
Message-ID: <9002282012.AA12485@prometheus.MIT.EDU>
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!cs.utexas.edu!tut.cis.ohio-state.edu!ATHENA.MIT.EDU!Raeburn

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!cs.utexas.edu!tut.cis.ohio-state.edu!ATHENA.MIT.EDU!Raeburn
From: Raeburn@ATHENA.MIT.EDU (Ken Raeburn)
Newsgroups: gnu.gcc.bug
Subject: extra labels not optimized away
Message-ID: <9002282012.AA12485@prometheus.MIT.EDU>
Date: 28 Feb 90 20:12:46 GMT
Sender: daemon@tut.cis.ohio-state.edu
Distribution: gnu
Organization: GNUs Not Usenet
Lines: 58