Missed optimization in (if (typep ...) ...)

Bug #1841938 reported by Paul F. Dietz
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
SBCL
Fix Released
Undecided
Unassigned

Bug Description

(defun g (x) (declare (optimize (safety 0) (speed 3))) (if (typep x '(member 1 3)) t nil))

* (disassemble 'g)
; disassembly for G
; Size: 53 bytes. Origin: #x52D05D36
; 36: 4883FA02 CMP RDX, 2 ; no-arg-parsing entry point
; 3A: 750B JNE L1
; 3C: BA4F001050 MOV EDX, #x5010004F ; T
; 41: L0: 488BE5 MOV RSP, RBP
; 44: F8 CLC
; 45: 5D POP RBP
; 46: C3 RET
; 47: L1: 4883FA06 CMP RDX, 6
; 4B: B817001050 MOV EAX, #x50100017 ; NIL
; 50: 41BB4F001050 MOV R11D, #x5010004F ; T
; 56: 490F44C3 CMOVEQ RAX, R11
; 5A: 483D17001050 CMP RAX, #x50100017 ; NIL
; 60: BA4F001050 MOV EDX, #x5010004F ; T
; 65: 480F44D0 CMOVEQ RDX, RAX
; 69: EBD6 JMP L0

But:

(defun g (x) (declare (optimize (safety 0) (speed 3))) (typep x '(member 1 3)))

* (disassemble 'g)
; disassembly for G
; Size: 40 bytes. Origin: #x52CE96F6
; 6F6: 4883FA02 CMP RDX, 2 ; no-arg-parsing entry point
; 6FA: 750B JNE L1
; 6FC: BA4F001050 MOV EDX, #x5010004F ; T
; 701: L0: 488BE5 MOV RSP, RBP
; 704: F8 CLC
; 705: 5D POP RBP
; 706: C3 RET
; 707: L1: 4883FA06 CMP RDX, 6
; 70B: BA17001050 MOV EDX, #x50100017 ; NIL
; 710: 41BB4F001050 MOV R11D, #x5010004F ; T
; 716: 490F44D3 CMOVEQ RDX, R11
; 71A: EBE5 JMP L0
; 71C: EBE3 JMP L0

Also, I don't understand the two JMP instructions at the end of this second disassemble.

Revision history for this message
Stas Boukarev (stassats) wrote :

1c47b581042613152dd29756e518b937766f31ad

Changed in sbcl:
status: New → Fix Committed
Stas Boukarev (stassats)
Changed in sbcl:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.