2

我正在观看 Herb Sutter 在 CppCon 2019 上的演讲,其中一个想法是使用控制标志寄存器位来标记在函数调用期间产生了异常。例如(假设 x86 目标)一个引发错误的函数可以stc在返回之前发出一条指令,调用者可以在它返回后立即执行条件跳转以检查是否应该处理错误。它很聪明,很高效(比在单独的寄存器中返回条件标志要好得多),而且很简单。

但是,如何在 LLVM 中实现这样的功能呢?我想可以MachineBasicBlock用来发出标志集指令,但是是否可以保证 LLVM 之后不会插入可能会更改标志值的指令?另外,如何测试标志值并跳转到 LLVM IR 块?

请注意,我的动机纯粹是出于好奇。我实际上并不是在研究编译器——我只是想知道这些东西是如何工作的。

4

0 回答 0