Displaying 12 results from an estimated 12 matches for "pred_size".
2010 Oct 07
2
[LLVMdev] [LLVMDev] Has anyone written this?
...) {
if( seen[i] )
continue;
seen[i] = true;
MachineBasicBlock * start, *block;
start = block = mf.getBlockNumbered(i);
std::vector< MachineBasicBlock* > blocks;
while( block->succ_size() == 1 &&
(*block->succ_begin())->pred_size() == 1 ) {
block = *block->succ_begin();
seen[block->getNumber()] = true;
blocks.push_back( block );
}
// TODO:
// For each basic block bb in blocks in order of insersion:
// 1. Remove basic blocks in the block vector from the mach...
2010 Oct 06
2
[LLVMdev] [LLVMDev] Has anyone written this?
Has anyone written a pass at the MachineFunction level which combines
machine basic blocks which is guaranteed to be the single predecessor
to another block? Or is there a reason not to combine them?
- Thanks
Jeff Kunkel
2010 Oct 06
0
[LLVMdev] [LLVMDev] Has anyone written this?
On Oct 6, 2010, at 4:31 PM, Jeff Kunkel wrote:
> Has anyone written a pass at the MachineFunction level which combines
> machine basic blocks which is guaranteed to be the single predecessor
> to another block? Or is there a reason not to combine them?
I'm not sure exactly what transformation you're referring to, but BranchFolder::OptimizeBranches does a lot of things like that.
2010 Oct 07
0
[LLVMdev] [LLVMDev] Has anyone written this?
...;> MachineBasicBlock * start, *block;
>>>> start = block = mf.getBlockNumbered(i);
>>>> std::vector< MachineBasicBlock* > blocks;
>>>> while( block->succ_size() == 1 &&
>>>> (*block->succ_begin())->pred_size() == 1 ) {
>>>> block = *block->succ_begin();
>>>> seen[block->getNumber()] = true;
>>>> blocks.push_back( block );
>>>> }
>>>> // TODO:
>>>> // For each basic block bb in b...
2009 Mar 12
4
[LLVMdev] Shrink Wrapping - RFC and initial implementation
...in the entry block.
The shrink wrap version probably should go to its own function.
Otherwise, it should exit early when the non-shrink wrapping version
is done. That reduces nesting and please those of us who are a bit
picky.
6.
+ // Save entry block, return blocks.
+ if (MBB->pred_size() == 0)
+ entryBlock = MBB;
Entry block is the Fn.front().
7.
+ if (!MBB->empty() && MBB->back().getDesc().isReturn())
+ returnBlocks.push_back(MBB);
PEI::insertPrologEpilogCode also traverse MBBs and get at return
blocks. So these probably ought to be shar...
2009 Mar 05
0
[LLVMdev] Shrink Wrapping - RFC and initial implementation
Here is an updated patch for shrink wrapping with:
- spills/restores done with stack slot stores/loads
- stack adjustment removed
- refactoring (but still in need of more)
- spill/restore insertion code unified with spill/restore placement code
Documentation available
here<http://wiki.github.com/jdmdj/llvm-work/shrink-wrapping-work>
illustrates shrink
wrapping with loops and discusses a
2009 Mar 03
2
[LLVMdev] Shrink Wrapping - RFC and initial implementation
On Mon, Mar 2, 2009 at 10:35 AM, Evan Cheng <echeng at apple.com> wrote:
>
> On Mar 1, 2009, at 2:57 PM, John Mosby wrote:
>
> Obviously, all of this applies only when spills are done with push/pop,
> which is the case on x86. I used this issue to start looking at generalizing
> how spills and restores are handled, before looking too closely at other
> targets, and
2009 Mar 13
0
[LLVMdev] Shrink Wrapping - RFC and initial implementation
...the two behaviors around the idea of placing spills/restores.
I think the versions need to be separate for the reasons you state but the
placement idea should be retained. I will reintroduce the separation.
> 6.
> + // Save entry block, return blocks.
>
>
> + if (MBB->pred_size() == 0)
>
>
> + entryBlock = MBB;
>
> Entry block is the Fn.front().
>
> 7.
> + if (!MBB->empty() && MBB->back().getDesc().isReturn())
>
>
> + returnBlocks.push_back(MBB);
>
> PEI::insertPrologEpilogCode also traverse MBBs...
2012 Nov 01
0
[LLVMdev] : Predication on SIMD architectures and LLVM
On Wed, Oct 31, 2012 at 09:13:43PM +0100, Bjorn De Sutter wrote:
> Hi all,
>
> I am working on a CGRA backend (something like a 2D VLIW), and we also absolutely need predication. I extended the IfConversion pass to allow it to be executed multiple times and to predicate already predicated code. This is necessary to predicate code with nested conditional statements. At this point, we
2009 Mar 18
1
[LLVMdev] Shrink Wrapping - RFC and initial implementation
...ing spills/restores.
> I think the versions need to be separate for the reasons you state but the
> placement idea should be retained. I will reintroduce the separation.
>
>>
>> 6.
>> + // Save entry block, return blocks.
>>
>>
>> + if (MBB->pred_size() == 0)
>>
>>
>> + entryBlock = MBB;
>> Entry block is the Fn.front().
>> 7.
>> + if (!MBB->empty() && MBB->back().getDesc().isReturn())
>>
>>
>> + returnBlocks.push_back(MBB);
>> PEI::insertPrologEpilo...
2007 Aug 19
1
[LLVMdev] MBB Critical edges
...MachineBasicBlock * mbb_succ = *succ;
// necessary and sufficient condition that characterizes a critical
// edge: predecessor with many successors, successor with many
// predecessors.
if( (mbb->succ_size() > 1) && (mbb_succ->pred_size() > 1) ) {
src_blocks.push_back(mbb);
dst_blocks.push_back(mbb_succ);
}
}
}
for(unsigned u = 0; u < src_blocks.size() > 0; u++) {
MachineBasicBlock * src = src_blocks[u];
MachineBasicBlock * dst = dst_blocks[u];...
2012 Oct 31
3
[LLVMdev] : Predication on SIMD architectures and LLVM
Hi all,
I am working on a CGRA backend (something like a 2D VLIW), and we also absolutely need predication. I extended the IfConversion pass to allow it to be executed multiple times and to predicate already predicated code. This is necessary to predicate code with nested conditional statements. At this point, we support or, and, and conditional predicates (see Scott Mahlke's papers on this