Add unsafeShift to Data.Bits
shiftL and shiftR introduce an extra branch to check for overflows (i.e. shifts with an amount larger than 32/64). This branch gets removed if the shift amount is statically known, but otherwise leaves a branch in the optimized code, slowing down bit manipulation code.
unsafeShiftL and unsafeShiftR translate directly to the underlying hardware operation (which is undefined for shift amount larger than the architectures word size).
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.2.1 |
| Type | FeatureRequest |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | libraries/base |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |