Comments (4)
i dont think these transformations are valid when the number is negative. depending on what youre doing and what you can guarantee, using @divExact
or adding if (num < 0) unreachable;
will give the codegen youre asking for. in any case unless you see an inefficiency in the LLVM IR zig emits, optimizations like this are generally on LLVM not us
for comparison heres the equivalent in C https://godbolt.org/z/EnP6MEaP1 in all cases its identical when you use the builtins that map to what C does
from zig.
that's not quite the same, these transformations work for negative numerators as well (note that it's using sar
instead of shr
), I can't speak for the LLVM IR as I'm not as well versed in it. In any case, I'm not sure we should expect LLVM to be able to find a transformation like that.
from zig.
hm yeah my bad that looks right. i dont know where the logic in zig is for this stuff or if it generally attempts any kind of optimization on its own.
from zig.
In case it helps, I uploaded the code I was writing when I found this to a repo, which has 2 branches, one uses the builtins and the other uses the alternatives mentioned here.
from zig.
Related Issues (20)
- Unsure how to handle duplicate symbol linker error
- SIGTRAP When attempting to write to a runtime index in comptime variable HOT 1
- Undefined struct fields are initialized to 0 instead of 0xAA in debug mode (with llvm backend)
- zig fetch -h should include examples
- Zig build system incorrectly parses some depfiles generated by Rust on Windows
- implement std.Progress for single-threaded mode
- std.Progress: add byte unit flag and resource scope; support throughput calculation
- implement std.Progress IPC for WASI
- implement std.Progress IPC for Windows
- add support for targeting glibc 2.39
- Progress display is cut off horizontally HOT 2
- `zig fmt` outputs invalid syntax when formatting an error set with doc comments onto one line
- Latest master tarball is unable to build a stage4 zig HOT 3
- upperBound and lowerBound has inconsistent callback types HOT 1
- "offsetof" from C header does not handle union within struct HOT 2
- x86_64 backend miscomp
- When compiling for android, and linking libc, you will always hit a @compileError HOT 1
- Progress cuts off prints to the terminal HOT 5
- x86_64 backend `genSetReg called with a value larger than dst_reg`
- Crash when using ArrayList init with ArenaAllocator HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from zig.