[LLVMdev] [Caml-list] Ocaml(opt) & llvm
Chris Lattner
sabre at nondot.org
Wed Nov 28 22:24:25 PST 2007
On Nov 28, 2007, at 10:16 PM, Gordon Henriksen wrote:
>> It only works if values are not held in registers across throws
>> though, which is kinda lame ...
>
>
> Though I'm primarily interested in this model only from an
> interoperability perspective, reloading the register file for a throw
> seems a comparatively small price to pay compared to, say,
> symbolically unwinding the stack. :) More importantly, the common case
> through code does not require a register file save/restore.
The issue is in the non-throw case. Consider a function like this:
int x = ...
try {
x++;
foo();
use (x);
} catch (...) {
print x;
}
Because the 'throw' doesn't restore the callee-save registers as the
stack is unwound, the compiler can't put X in a register across the x+
+ and use of x in the try block.
-Chris
More information about the llvm-dev
mailing list