You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This change replaces the single greedy waterline-bootstrapping pattern with an analysis pass that marks all the places bootstraps should be inserted before a secondary pass that actually mutates the IR.
The original pattern was failing to compile a number of larger programs involving loops: if the op-result of a loop that exhausts all levels was later used as the input to a ct-ct mul, the pattern would not fire and it would try to modreduce after (or before) a level 0 ciphetext. The new analysis pass properly inserts a bootstrap in situations like this.
After this change, the hotword convolutional model successfully compiles in ~70 seconds on my dev machine.
update: this change also required a small change to the scale analysis code, so that it initializes plaintexts to the default scale in the forward pass for multiplications (which should always happen at the default scale), and updated backward exit states to respect function return annotations when present. This hardening step was needed because the change to how bootstraps are inserted necessitated adding additional adjust_scale ops (e.g., a bootstrap just before a modreduce) which don't have forward propagation in scale analysis.
PiperOrigin-RevId: 953572669
0 commit comments