[llvm-commits] [llvm] r94726 - in /llvm/trunk: docs/ExceptionHandling.html include/llvm/CodeGen/MachineModuleInfo.h include/llvm/Intrinsics.td lib/CodeGen/AsmPrinter/DwarfException.cpp lib/CodeGen/MachineModuleInfo.cpp lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp lib/CodeGen/SjLjEHPrepare.cpp
Duncan Sands
baldrick at free.fr
Fri Jan 29 06:49:20 PST 2010
Hi Jim,
>>> Update of 94055 to track the IR level call site information via an intrinsic.
>>> This allows code gen and the exception table writer to cooperate to make sure
>>> landing pads are associated with the correct invoke locations.
>> I didn't get what this is for, can you please explain. Also, some testcases
>> would be good. Finally, it sounds like you are introducing yet another eh
>> intrinsic that will get shifted around by the optimizers causing endless
>> trouble - please tell me it ain't so!
>>
>
> SJLJ needs to assign the call site numbering earlier than the DWARF assembly printer since it needs to create create a dispatch table and insert code to assign the value into the function context. After SJLJ has run, there's no guarantee the landing pads and/or invoke containing BBs won't be reordered, so there needs to be a way to make sure that when we construct the call site table in the LSDA, we associate the proper landing pad with its associated call site number.
>
> My first pass at this didn't use an intrinsic, but rather used a side-table. The best place I found for it, however, was the Function object, which Chris correctly pointed out isn't a very good place at all. After code-gen, the information is kept in MachineModuleInfo, which is where other similar side-table information is kept. There doesn't seem to be an equivalent place before that, though. If you have a suggestion, I'm all ears! Practically speaking, I don't expect this intrinsic to get moved around. It's inserted very late, right before code-gen, and is then removed by the selection DAG build process. That said, there's no theoretical reason it couldn't be, which you're right, is a bad thing, and is why I shied away from doing it this way the first time around. At this point, though, I think it's the lesser of two evils.
remind me again why the SJLJ logic isn't part of the code that builds
the SDag?
Thanks,
Duncan.
More information about the llvm-commits
mailing list