-
Alberto García Hierro authored
The final condition (db.maxIdleConnsLocked() > db.freeConn.Len()) can only be true iff db.maxIdleConnsLocked() is greater than 0, so previously checking if it's greater than 0 is a waste, specially when that involves a method call which (ATM) can't be inlined and includes a switch. Dissasembly follows (test for err == nil has been omitted for clarity): Before: 43c357: cmp $0x0,%bl 43c35a: jne 43c3ce <database/sql.(*DB).putConnDBLocked+0x1ce> 43c35c: mov %rax,(%rsp) 43c360: callq 43aec0 <database/sql.(*DB).maxIdleConnsLocked> 43c365: mov 0x8(%rsp),%rbx 43c36a: cmp $0x0,%rbx 43c36e: jle 43c3ce <database/sql.(*DB).putConnDBLocked+0x1ce> 43c370: mov 0x30(%rsp),%rbx 43c375: mov %rbx,(%rsp) 43c379: callq 43aec0 <database/sql.(*DB).maxIdleConnsLocked> 43c37e: mov 0x30(%rsp),%rdx 43c383: mov 0x8(%rsp),%rcx 43c388: mov 0x28(%rdx),%rbp 43c38c: mov 0x28(%rbp),%rbx 43c390: cmp %rcx,%rbx 43c393: jge 43c3ce <database/sql.(*DB).putConnDBLocked+0x1ce> 43c395: mov 0x28(%rdx),%rbp 43c399: mov %rbp,(%rsp) 43c39d: mov 0x38(%rsp),%rcx 43c3a2: mov $0x556c60,%eax 43c3a7: mov %rax,0x8(%rsp) 43c3ac: mov %rcx,0x10(%rsp) 43c3b1: callq 4db5b0 <container/list.(*List).PushFront> After: 43c357: cmp $0x0,%bl 43c35a: jne 43c3b5 <database/sql.(*DB).putConnDBLocked+0x1b5> 43c35c: mov %rax,(%rsp) 43c360: callq 43aec0 <database/sql.(*DB).maxIdleConnsLocked> 43c365: mov 0x30(%rsp),%rdx 43c36a: mov 0x8(%rsp),%rcx 43c36f: mov 0x28(%rdx),%rbp 43c373: mov 0x28(%rbp),%rbx 43c377: cmp %rcx,%rbx 43c37a: jge 43c3b5 <database/sql.(*DB).putConnDBLocked+0x1b5> 43c37c: mov 0x28(%rdx),%rbp 43c380: mov %rbp,(%rsp) 43c384: mov 0x38(%rsp),%rcx 43c389: mov $0x556c60,%eax 43c38e: mov %rax,0x8(%rsp) 43c393: mov %rcx,0x10(%rsp) 43c398: callq 4db590 <container/list.(*List).PushFront> R=golang-dev, bradfitz, iant CC=golang-dev https://golang.org/cl/14656044
c8869e9c