Displaying 20 results from an estimated 1000 matches similar to: "[LLVMdev] [LLVMDev] Has anyone written this?"
2010 Oct 07
2
[LLVMdev] [LLVMDev] Has anyone written this?
It would go something like like the code below. The goal would be to
turn the basic blocks which the graph looks like "...->x->y->..."
where the instructions of x and y could live in the same basic block
without a jump or fall through in between.
bool runOnMachineFunction(MachineFunction &mf) {
BitVector seen( mf.size() );
for( unsigned i = 0, e = mf.size();
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?
I forgot to CC the forum.
I found what was happening. The BranchFolder documentation says:
// Note that this pass must be run after register allocation, it cannot handle
// SSA form.
> On Wed, Oct 6, 2010 at 8:05 PM, Jeff Kunkel <jdkunk3 at gmail.com> wrote:
>> No, I just noticed that blocks were separated.
>>
>>
>> On Wed, Oct 6, 2010 at 8:04 PM, Bob Wilson
2014 Nov 06
2
[LLVMdev] Should the MachineVerifier accept a MBB with a single (landing pad) successor?
Hi all,
I've been investigating a machine verifier failure on the attached
testcase, and I'm tempted to say the verifier is wrong and should
accept it. Skip the description for the proposed change.
On AArch64, the verifier complains with:
*** Bad machine code: MBB exits via unconditional branch but
doesn't have exactly one CFG successor! ***
- function: t4
- basic
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 12
4
[LLVMdev] Shrink Wrapping - RFC and initial implementation
Hi John,
It looks pretty good. Thanks for working on this. Some comments:
1. Some of the functions that you introduced, e.g. stringifyCSRegSet
probably ought to be "static" and ifdef'ed out when NDEBUG is defined.
2. + // DEBUG
+ if (! MBB->empty() && ! CSRUsed[MBB].intersects(restore)) {
+ MachineInstr* MI = BeforeI;
+ DOUT <<
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
Hi Evan,
Thanks very much for the review, I am implementing your suggestions today
and will have the next patch together this weekend.
A few questions/comments:
On Thu, Mar 12, 2009 at 10:05 AM, Evan Cheng <echeng at apple.com> wrote:
>
> 1. Some of the functions that you introduced, e.g. stringifyCSRegSet
> probably ought to be "static" and ifdef'ed out when NDEBUG
2006 Jul 04
2
[LLVMdev] Critical edges
On Tue, 4 Jul 2006, Fernando Magno Quintao Pereira wrote:
> However, it does not remove all the critical edges. I am getting a very
> weird dataflow graph (even without the Break Critical edges pass). The
> dataflow generated by MachineFunction::dump() for the program below is
> given here:
> http://compilers.cs.ucla.edu/fernando/projects/soc/images/loop_no_crit2.pdf
...
> The
2008 Oct 14
3
[LLVMdev] CFG modifcations and code gen
As stated in an earlier email, I am working on getting break/continue to
work correctly for my backend, but I ran into another issue with codegen
and the CFG. It seems that code gen is not done based on the CFG, but
rather on the block numbers, and the function call
MachineFunction::RenumberBlocks doesn't renumber the blocks based on the
CFG. So how can I modify the CFG so that when codegen
2008 Oct 14
0
[LLVMdev] CFG modifcations and code gen
On Oct 13, 2008, at 5:14 PMPDT, Villmow, Micah wrote:
> As stated in an earlier email, I am working on getting break/
> continue to work correctly for my backend, but I ran into another
> issue with codegen and the CFG. It seems that code gen is not done
> based on the CFG, but rather on the block numbers, and the function
> call MachineFunction::RenumberBlocks doesn’t
2020 Mar 10
4
RFC: Making a common successor/predecessor interface
Hi Dave,
It may be possible to do this with the current API, but what I was looking
for is a common API for existing block types. For example there is no
succ_begin for Machine BasicBlock.
I'm looking to make the CFGSuccessors and CFGPredecessors classes in
CFGDiff.h templated, and this needs a common API for all types
instantiations.
Does this clarify your question or did I misunderstand
2020 Mar 10
2
RFC: Making a common successor/predecessor interface
On Tue, Mar 10, 2020 at 2:30 PM David Blaikie <dblaikie at gmail.com> wrote:
>
>
> On Tue, Mar 10, 2020 at 8:31 AM Alina Sbirlea <alina.sbirlea at gmail.com>
> wrote:
>
>> Hi Dave,
>>
>> It may be possible to do this with the current API, but what I was
>> looking for is a common API for existing block types. For example there is
>> no
2020 Mar 09
3
RFC: Making a common successor/predecessor interface
Hi,
As part of an ongoing work to extend the GraphDiff (this models a CFG
view), I came across the need to have a common interface for accessing
successors/predecessors in various IR units, such that a type such as
`typename NodeT::succ_iterator` could be used in templated code.
In particular, the need arose for BasicBlocks, MachineBasicBlocks,
VPBlockBase and clang::CFGBlock.
The least invasive
2007 Aug 19
1
[LLVMdev] MBB Critical edges
Hi,
This pass is similar to the one in BreakCriticalEdges.cpp, but it works
for MachineFunction's, instead of Functions. The existence of critical
edges complicates many optimizations. When doing register allocation, you
don't necessarily have to remove critical edges (you can use conventional
SSA-form, for instance. See "Translating Out of Static Single Assignment
Form. SAS
2008 May 23
3
[LLVMdev] Iterator issue in BranchFolder::RemoveBlocksWithHash?
Hi all,
I updated from 2.2 to the latest SVN head and I now get a debug assert in
BranchFolder::RemoveBlocksWithHash: "vector iterators incompatible". I'm
using Visual C++ 2005. I think this is the culprit code:
MergePotentials.erase(CurMPIter);
if (CurMPIter==B)
break;
The erase clears the _Mycont field (i.e. the iterator's container), while
the ==
2006 Oct 24
1
[LLVMdev] InsertBranch called unconditionally?
According to the docs, InsertBranch should only be called if
AnalyzeBranch returns success. But in targets (like ARM or Sparc) that
don't implement them, the following test fails:
-----------------------------------
void %__gcov_init() {
entry:
switch uint 0, label %cond_true.i [
uint 0, label %UnifiedReturnBlock
uint 875573313, label
2011 Jan 20
4
[LLVMdev] [LLVMDev] Live Intervals and Finding the next usage
I have a live interval, and I would like to find out what SlotIndex the next
use the register will occur? Is there any way to map a live interval back
into instructions or SlotIndexes or blocks used by?
- Thanks
Jeff Kunkel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110120/fd429dbd/attachment.html>
2008 May 23
0
[LLVMdev] Iterator issue in BranchFolder::RemoveBlocksWithHash?
On May 23, 2008, at 4:10 AM, Nicolas Capens wrote:
> Hi all,
>
> I updated from 2.2 to the latest SVN head and I now get a debug
> assert in BranchFolder::RemoveBlocksWithHash: “vector iterators
> incompatible”. I’m using Visual C++ 2005. I think this is the
> culprit code:
>
> MergePotentials.erase(CurMPIter);
> if (CurMPIter==B)
> break;
>
2010 Sep 28
2
[LLVMdev] [LLVMDev] Profiling information
How do I find the profiling or run time information for machine basic
blocks from a machine function? There are quite a few optimization
that may be preformed with this information, when it exists.
Thanks,
Jeff Kunkel