This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author steve.dower
Recipients brian.curtin, loewis, nadeem.vawda, skrah, steve.dower, vstinner
Date 2014-06-23.21:47:48
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1403560068.94.0.0568006564865.issue15993@psf.upfronthosting.co.za>
In-reply-to
Content
This has been confirmed as a bug in VC14 (and earlier) and there'll be a fix going in soon.

For those interested, here's a brief rundown of the root cause:

* the switch in build_filter_spec() switches on a 64-bit value
* one case is 0x4000000000000001 and the rest are <=0x21
* PGO detects that 0x4000000000000001 is the hot case
(bug starts here)
* PGO detects that the cold cases are 32-bits or less and so enables an optimisation to skip comparing the high DWORD
* PGO adds check for the hot case, but using the 32-bit optimisation
 - it checks for "0x1" rather than the full value
(bug ends here)
* PGO adds checks for cold cases

The fix will be to check both hot and cold cases to see whether the 32-bit optimisation can be used. A "workaround" (that I wouldn't dream of using, but it illustrates the issue) would be to add a dead case that requires 64-bits. This would show up in the list of cold cases and prevent the 32-bit optimisation from being used.

No indication of when the fix will go in, but it should be in the next public release, and I'll certainly be able to test it in advance of that.
History
Date User Action Args
2014-06-23 21:47:48steve.dowersetrecipients: + steve.dower, loewis, vstinner, nadeem.vawda, brian.curtin, skrah
2014-06-23 21:47:48steve.dowersetmessageid: <1403560068.94.0.0568006564865.issue15993@psf.upfronthosting.co.za>
2014-06-23 21:47:48steve.dowerlinkissue15993 messages
2014-06-23 21:47:48steve.dowercreate