Displaying 20 results from an estimated 8000 matches similar to: "[LLVMdev] Removing Instructions"
2018 Feb 24
2
CallSiteSplitting and musttail calls
Hello!
I've discovered that `CallSiteSplitting` optimization doesn't support
musttail calls. The easiest fix as it stands is disabling it for such call
sites: https://reviews.llvm.org/D43729 . However, I'm not happy with such
contribution.
My more sophisticated attempt has failed due to my poor understanding of
llvm internals. Here is the attempted patch:
2014 Nov 05
3
[LLVMdev] How to lower the intrinsic function 'llvm.objectsize'?
The documentation of LLVM says that "The llvm.objectsize intrinsic is
lowered to a constant representing the size of the object concerned". I'm
attempting to lower this intrinsic function to a constant in a pass. Below
is the code snippet that I wrote:
for (BasicBlock::iterator i = b.begin(), ie = b.end();
(i != ie) && (block_split == false);) {
IntrinsicInst *ii =
2018 Feb 24
0
CallSiteSplitting and musttail calls
Update:
I was able to make progress on it today ( See
https://reviews.llvm.org/D43729 ). Apparently my problems were:
* Iterating through the instruction/block list after erasing
block/instruction
* Trying to split block after removing one predecessor
Regarding the latter, it appears that semantics of
`DuplicateInstructionsInSplitBetween` change significantly in such case,
and it starts to loop
2018 Aug 27
3
Replacing a function from one module into another one
Hello LLVM Developers,
I'm trying to replace a function defined in one module into another module
(different files). The first issue I ran into was that llvm::Function does
not have a method "moveBefore" or "moveAfter" as the llvm::BasicBlock or
llvm::Instruction do, so I figured I would just move the BasicBlocks of the
replacing function into the function that was being
2009 May 08
2
[LLVMdev] Splitting a basic block, replacing it's terminator
Hi,
I want to insert a conditional branch in the middle of a basic block.
To that end, I am doing these steps:
(1) Split the basic block:
bb->splitBasicBlock()
(2) Remove the old terminator:
succ->removePredecessor(bb)
bb->getTerminator()->getParent()
(3) Adding a new terminator:
BranchInst::Create(ifTrue, ifFalse, cnd, "", bb);
That seems to work, but later passes
2009 May 08
0
[LLVMdev] Splitting a basic block, replacing it's terminator
On May 8, 2009, at 4:02 PM, Nick Johnson wrote:
> I want to insert a conditional branch in the middle of a basic block.
> To that end, I am doing these steps:
>
> (1) Split the basic block:
> bb->splitBasicBlock()
>
> (2) Remove the old terminator:
> succ->removePredecessor(bb)
> bb->getTerminator()->getParent()
Assuming that the new block will still be a
2013 Jan 21
0
[LLVMdev] Troubleshooting Internal Garbage Collection
removeFromParent just unlinks it from the basic block and returns the
removed instruction. It does not delete it.
On Sun, Jan 20, 2013 at 9:54 PM, David Waggoner <mathonnapkins at gmail.com>wrote:
>
> Thanks for the suggestion, Duncan.
>
> I recently figured out that it had to do with how I was removing the
> pseudo instruction in my overridden expandPostRAPseudo()
2014 Nov 05
3
[LLVMdev] How to lower the intrinsic function 'llvm.objectsize'?
Thanks for your reply.
I'm attempting to expand KLEE to support this intrinsic function.
That's why I need to handle this myself.
According to the reply, the correct implementation should first find the
definition of the object and then determine the
size of the object.
BTW, can I just refer to the implementation in InstCombineCalls.cpp.
On Wed, Nov 5, 2014 at 2:24 PM, Matt Arsenault
2015 May 18
2
[LLVMdev] [LSR] hoisting loop invariants in reverse order
It's not caused by "the insertion point is set to the default after".
I should mention the reason somewhere earlier. "Reversing the order of
arg0~3 is not intentional. The user list of pixel_idx happens to have
pixel_idx+3, pixel_idx+2, and pixel_idx+1 in this order, so LSR simply
follows this order when collecting the LSRFixups."
I'm not an expert on uselist orders,
2013 Jan 21
2
[LLVMdev] Troubleshooting Internal Garbage Collection
Thanks for the suggestion, Duncan.
I recently figured out that it had to do with how I was removing the pseudo
instruction in my overridden expandPostRAPseudo() implementation.
// member function's signature
bool TheInstrInfo::expandPostRAPseudo(MachineBasicBlock::iterator p_mi)
// works
bb.erase(p_mi);
// produces the assertion / memory leak.
p_mi->removeFromParent();
I should have
2015 Oct 21
2
[RFC] Clean up the way we store optional Function data
I've done some measurements on this.
The test program I have just calls Function::Create(), F->setPersonalityFn(), and then F->eraseFromParent() in a loop 2^20 times.
Results:
pre-patch --- min: 1.10s max: 1.13s avg: 1.11s
post-patch --- min: 1.26s max: 1.35s avg: 1.29s
So we expect to lose 0.2 seconds per 1 million functions (with personality functions) in a
2017 Nov 22
2
Retrieving DbgInfoIntrinsics for a given value
Hi LLVM,
If I have an llvm value "<16 x float> addrspace(1)* %in", and in the LLVM
IR, there is a @llvm.dbg.value like:
call void @llvm.dbg.value(metadata <16 x float> addrspace(1)* %in, i64 0,
metadata !216, metadata !28), !dbg !217
How I can retrieve this @llvm.dbg.value when I have "%in"?
Since Metadata is not a part of the uselist anymore, is there some way
2013 Aug 20
1
[LLVMdev] Question about removeFromParent
I have Function
Function* F;
and one of its basic blocks BB
I want to insert this BB into a new function without remove it from the
original
according that BList is the list of the basic blocks of the newFunction
BList.insert(BB);
but I don't want to call BB->removeFromParent(); and without this method it
give me error that BB is already in a container
is there another function that get
2007 Dec 04
2
[LLVMdev] Memory allocation (or deallocation) model?
On Mon, 2007-12-03 at 18:56 -0800, Chris Lattner wrote:
> Other IR objects (like instructions) have very simple ownership. An
> instruction is owned by its basic block, a bb is owned by the function, a
> function is owned by thet module.
If an instruction is initially allocated with its Instruction
*insertAtEnd parameter defaulted to null, and then later appended to a
BasicBlock,
2015 Feb 11
2
[LLVMdev] deleting or replacing a MachineInst
I'm writing a peephole pass and I'm done with the X86_64 instruction level
detail work. But I'm having difficulty with the basic block surgery
of replacing the old MachineInst.
The peephole pass gets called per MachineFunction and then iterates over
each MachineBasicBlock and in turn over each MachineInst. When it finds an
instruction which should be replaced, it builds a new
2015 Oct 16
2
[RFC] Clean up the way we store optional Function data
Here is a WIP patch as promised:
http://reviews.llvm.org/D13829
It uses a hungoff uselist to store optional data as needed.
Some early objections from Duncan:
- An extra one-time malloc() is required to set personality functions.
- We get and set personality functions frequently. This patch introduces a level of indirection which slows the common case down.
Is this overhead
2015 Jan 31
2
[LLVMdev] debug info for llvm::IntrinsicInst ???
When trying to display and do anything with a variable of type
IntrinsicInst, gdb thinks that it's an incomplete
type and kind find any member functions or even display the class.
(gdb) list 1337
1332
1333 // Finish off the call including any return values.
1334 return finishCall(CLI, RetVT, NumBytes);
1335 }
1336
1337 bool MipsFastISel::fastLowerIntrinsicCall(const
2018 May 02
0
Generating function definition for function that's only called during unwinding
Hmmm... It seems like I should check out how the UseList on Value (and its
child BasicBlock) work.
On Tue, May 1, 2018 at 8:34 PM, Keith Wyss <wyssman at gmail.com> wrote:
> Hi,
>
> I'm trying to understand how clang keeps track of which declarations are
> called within a translation unit and decides to codegen their definitions.
>
> DeclBase.h has a markUsed to keep
2020 Jun 17
2
InstCombine doesn't delete instructions with token
Yes, it's still respected in this case, as the only instructions that will
be deleted have been RAUW with undef.
Originally, all instructions where RAUW but only non-EHPad were deleted
(that means EHPad were RAUW but not deleted).
Then it was later patched by not RAUW token instructions and now not
deleting EHPad nor token instructions.
My assumption is that the instructions we wanted to
2008 Apr 16
2
[LLVMdev] Problems in removing a cloned instruction.
Hi all,
I am trying to write a pass where i am creating a clone of a
function (the only difference being, the new function returns void ,
instead of any value).
I am creating a new Function Type with a void return type (rest being
the same as original function), and using this i am creating a new
function body. Then, i clone the body of the old function into new
function, but when ever i