cp0: don't drop 'ignored if with multiple values

Closes racket/racket#3092

original commit: 9e928cf79caf536744491e6889e5c71bcd14c264
This commit is contained in:
Matthew Flatt 2020-05-18 13:40:20 -06:00
parent a8b3c8b608
commit a820e425d6
2 changed files with 28 additions and 16 deletions

View File

@ -369,6 +369,14 @@
(y))))
(error? (apply zero? 0))
(error? (if (apply eof-object 1 2) 3 4))
(equivalent-expansion?
(expand/optimize '(lambda (t) (#3%$value (if t 1 (values 3 3 3))) #t))
(if (eqv? (optimize-level) 3)
'(lambda (x) #t)
'(lambda (x)
(#3%$value (if x 1 (#2%values 3 3 3)))
#t)))
)
(cp0-mat cp0-mrvs

View File

@ -662,7 +662,7 @@
(let ((opnd (car unused)))
(let ((e (operand-value opnd)))
(if e
(if (simple? e)
(if (simple1? e)
(if (operand-singly-referenced-score opnd)
; singly-referenced integration attempt in copy2 succeeded
(f (cdr unused) (fx+ (operand-singly-referenced-score opnd) n) todo)
@ -2007,8 +2007,12 @@
(define record-equal?
; not very ambitious
(lambda (e1 e2 ctxt)
(if (unused-value-context? ctxt)
(and (simple? e1) (simple? e2))
(cond
[(eq? ctxt 'effect)
(and (simple? e1) (simple? e2))]
[(eq? ctxt 'ignored)
(and (simple1? e1) (simple1? e2))]
[else
(nanopass-case (Lsrc Expr) e1
[(ref ,maybe-src1 ,x1)
(nanopass-case (Lsrc Expr) e2
@ -2021,7 +2025,7 @@
(if d1 d2 (not d2))
(eq? d1 d2))]
[else #f])]
[else #f]))))
[else #f])])))
(module ()
(define-syntax define-inline