[llvm-commits] [llvm] r88806 - /llvm/trunk/lib/CodeGen/MachineFunction.cpp

Evan Cheng evan.cheng at apple.com
Sun Nov 15 19:07:41 PST 2009


Ok. I assume this doesn't happen frequently but we still want to merge jump tables. As a subsequent patch, please teach branch folding pass to merge jump tables when it's safe. We'll need a target hook to determine if it's safe. How does that sound?

Evan

On Nov 14, 2009, at 2:27 PM, Jim Grosbach wrote:

> 
> On Nov 14, 2009, at 2:14 PM, Evan Cheng wrote:
> 
>> Jim, I'd prefer to disable the sharing only when it's known to be unsafe. Is that possible?
>> 
> 
> I don't see a straightforward way to identify when it's appropriate and when it's not at this point. The more I look at it, the more I feel doing the merging here is pre-mature, and if it's useful, it should be done significantly later in the compilation, after any optimizations that may manipulate the tables in other ways have run.
> 
> If we're sharing tables, when we're manipulating the destinations of one jump table branch, we're also potentially changing the destination blocks for other branches which use the same table. That'll cause the CFG to be incorrect for those branches, and things go very badly from there.
> 
> That said, if anyone has suggestions for alternative approaches that clean up the above problem while still allowing us to share the tables this early, that'd be great.
> 
> -Jim
> 
> 
>> On Nov 14, 2009, at 12:15 PM, Jim Grosbach <grosbach at apple.com> wrote:
>> 
>>> Author: grosbach
>>> Date: Sat Nov 14 14:15:03 2009
>>> New Revision: 88806
>>> 
>>> URL: http://llvm.org/viewvc/llvm-project?rev=88806&view=rev
>>> Log:
>>> Do not merge jump tables this early. Branch folding will do any necessary
>>> merges, and until then, it's useful to keep the tables separate for ease
>>> of manipulation.
>>> 
>>> Modified:
>>>  llvm/trunk/lib/CodeGen/MachineFunction.cpp
>>> 
>>> Modified: llvm/trunk/lib/CodeGen/MachineFunction.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineFunction.cpp?rev=88806&r1=88805&r2=88806&view=diff
>>> 
>>> ==============================================================================
>>> --- llvm/trunk/lib/CodeGen/MachineFunction.cpp (original)
>>> +++ llvm/trunk/lib/CodeGen/MachineFunction.cpp Sat Nov 14 14:15:03 2009
>>> @@ -530,10 +530,6 @@
>>> unsigned MachineJumpTableInfo::getJumpTableIndex(
>>>                              const std::vector<MachineBasicBlock*> &DestBBs) {
>>> assert(!DestBBs.empty() && "Cannot create an empty jump table!");
>>> -  for (unsigned i = 0, e = JumpTables.size(); i != e; ++i)
>>> -    if (JumpTables[i].MBBs == DestBBs)
>>> -      return i;
>>> -
>>> JumpTables.push_back(MachineJumpTableEntry(DestBBs));
>>> return JumpTables.size()-1;
>>> }
>>> 
>>> 
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 





More information about the llvm-commits mailing list