Uh oh!
There was an error while loading. Please reload this page.
[mono][interp] Lower div.un to shr.un.imm - #83498
Conversation
Generate sub opcode instead which is detected by other optimizations.
ghost
commented
Mar 16, 2023
Tagging subscribers to this area: @BrzVlad, @kotlarmilos Issue DetailsIf divisor is power of 2.
|
| #endif | ||
| td->sp -= 2; | ||
| interp_ins_set_sregs2 (td->last_ins, td->sp [1].local, td->sp [0].local); | ||
| push_simple_type (td, STACK_TYPE_I); |
There was a problem hiding this comment.
The original interp opcode looks like it was storing the result of a signed pointer subtraction into an unsigned int (mono_u), but I assume this will behave correctly as-is?
| interp_clear_ins (def); | ||
| interp_clear_ins (ins); | ||
| local_ref_count [sreg_imm]--; |
There was a problem hiding this comment.
Probably mono_interp_stats.super_instructions++; is missing
There was a problem hiding this comment.
Some of these stats are not that useful anymore, I will probably get rid of them in the future. Also this is more of a peephole optimization. This pass will probably end up being rebranded.
If divisor is power of 2.