Displaying 20 results from an estimated 5000 matches similar to: "[LLVMdev] SmallPtrSet patch for MCJIT"
2013 Oct 22
0
[LLVMdev] SmallPtrSet patch for MCJIT
Hi Yaron,
Overall this looks great.
There are a couple of remaining holes. Specifically, MCJIT inherits implementations of the FindFunctionNamed and runStaticConstructorsDestructors methods from ExecutionEngine which use the old Modules vector, so you'll need to override these in MCJIT. (The implementations are fairly trivial.)
Beyond that I just have a couple of questions.
First,
2013 Oct 22
1
[LLVMdev] SmallPtrSet patch for MCJIT
Hi Andy,
I added the runStaticConstructorsDestructors and FindFunctionNamed
functions. This also required making them virtual in EE.h.
I'm not sure about FindFunctionNamed:
In addition to searching finalized modules, should it search Added and
Loaded modules?
If it finds a Function in these, should it compile and finalize it before
returning the Function* ?
I modified the implementation
2016 Feb 24
2
Heap problems with 3.8.0rc2 in combination with vs2015 sp1
I recently upgraded from llvm 3.7.1 to a pre release of llvm (3.8.0rc2) in
order to test some issues regarding bug 24233.
After upgrading I starting to see heap corruption messages in vs 2015 sp1
when my program exits.
"HEAP[ConsoleEngine.exe]: Invalid address specified to RtlValidateHeap(
0000000000290000, 0000000000318698 )"
Initially I only got it in Release build. Debug build seems
2016 Feb 25
0
Heap problems with 3.8.0rc2 in combination with vs2015 sp1
I downloaded 3.8.0rc3 and I also have it in 3.8.0rc3.
I did set a data access breakpoint on the first function ptr that causes
the invalid heap. This would allow me to break whenever someone is touching
that address. It did not show double deletes during debugging. Further more
I managed to narrow it down to 2 function calls:
// stupid code, but its just for triggering heap error
auto func =
2016 Feb 25
2
Heap problems with 3.8.0rc2 in combination with vs2015 sp1
I made the llvm::Function() constructor public (for testing purpose) and
used the non-overloaded new.
auto func = ::new llvm::Function(...)
if (func) func->eraseFromParent();
And the heap corruption is gone! Did something changed in llvm::User::new
between 3.7.1 and 3.8.0 ?
I found a bug in llvm ?
On Thu, Feb 25, 2016 at 12:10 PM, koffie drinker <gekkekoe at gmail.com> wrote:
> I
2013 Oct 18
2
[LLVMdev] EE, JIT, MCJIT class structure
The functionality of MCJIT vs JIT had diverged.
Not only they have different operating models (lazy function vs.
multi-module), the API is almost completely different. There is a set of
functions just for JIT, another set of functions just for MCJIT, with
comments saying which ones work for JIT and which ones work for MCJIT.
It would make sense for the EE to have only the shared functionality
2013 Oct 22
2
[LLVMdev] An enhancement for MCJIT::getFunctionAddress
I don’t follow. Why are we looking at the module at all? That query should work even (especially) after the Module is deleted. We should be able to have a local symbol table that’s a DenseMap or something similar to resolve from names to target addresses. That map would be updated as part of the compilation when the object’s symbol table gets read.
-Jim
On Oct 21, 2013, at 4:55 PM, Kaylor,
2013 Oct 23
3
[LLVMdev] Size limitations in MCJIT / ELF Dynamic Linker/ ELF codegen?
YES, this is the problem!
The program work ok, even a 5x larger version works well.
Clearly the _chkstk calls must be emitted with ELF target on Windows as
well - why not?
I'd like to make a patch and fix this right.
I experimented with both changes and practically only the
lib/Target/X86/X86ISelLowering.cpp fixes the problem. The other change
lib/Target/X86/X86FrameLowering.cpp was not
2013 Oct 22
2
[LLVMdev] Size limitations in MCJIT / ELF Dynamic Linker/ ELF codegen?
OS is Windows 7 64 bit OS, compiler is 32 bit Visual C++ 2012 with 32 bit.
The target which is i686-pc-mingw32-elf so I can use the ELF dynamic
loader.
Code model, relocation model and and memory manager are whatever default
for this - did not modify.
The Module comes from clang. The source is 1000 or more lines repeating C++
code in one big function:
A+1;
A*B.t();
where A and B are
2013 Oct 22
2
[LLVMdev] Size limitations in MCJIT / ELF Dynamic Linker/ ELF codegen?
I'm running in MCJIT a module generated from one C++ function. Every line
of the source function uses C++ classes and may throw an exception. As long
as there are less than (about) 1000 lines, everything works. With more
lines the compiled code crashes when running it, with no sensible stack
trace.
Is there any kind of hard-coded size limitation in MCJIT / ELF Dynamic
Linker / ELF codegen /
2013 Oct 22
2
[LLVMdev] Size limitations in MCJIT / ELF Dynamic Linker/ ELF codegen?
Hi,
Thanks for your ideas.
Memory allocation already exceeds 2x64K in the "working" case so it's not
the condition of allocating more than 64K. To be sure I had modified
SectionMemoryManager::allocateSection to allocate four time the required
memory but it did not trigger more crashes.I debugged through the
allocation code including the Win32 code and it seems to work well. I have
2016 Feb 25
0
Heap problems with 3.8.0rc2 in combination with vs2015 sp1
I found the root cause, but I don't know what's the best approach to fix it.
Under windows, 64 bit, when a function is created the void *User::operator
new(size_t Size) operator allocates space + Use*.
In the Use* the HasHungOffUses is set to true. So the ptr to the use* is
returned as new object. This ptr is NOT the ptr that was allocated by the
system. For that ptr you need ptr - word
2013 Oct 22
2
[LLVMdev] Size limitations in MCJIT / ELF Dynamic Linker/ ELF codegen?
Yes, this is correct code address accessing bad data address.
However, there is no other relocation before .text or near it. I'll send
you the full debug printout, maybe you'll note something.
The problem could be result of something else entirely else than the linker
such as some library initialization code that by chance worked with smaller
code but fails now.
I need to debug and see
2013 Oct 23
2
[LLVMdev] Size limitations in MCJIT / ELF Dynamic Linker/ ELF codegen?
If it's a Windows-only thing the correct tests would be:
if (NumBytes >= 4096 && STI.isOSWindows()) {
and
if (Subtarget->isTargetWindows())
where
bool isOSWindows() const { return TargetTriple.isOSWindows(); }
Yaron
2013/10/23 Andrew MacPherson <andrew.macp at gmail.com>
> Glad that helped! As I understand it __chkstk is always required on
> Windows
2013 Nov 01
2
[LLVMdev] [Proposal] Adding callback mechanism to Execution Engines
Hi Andrew,
I used the latest code from trunk. GlobalSymbolTable is being used in
MCJIT.
I guess it wasn't clear from the proposal that the user program will be
modified to indicate that the callback should happen at that point in the
code. The objective is to call some of the functions which belong to lli or
the ExecutionEngine.
Thanks,
Sumeeth
On Fri, Nov 1, 2013 at 5:40 PM, Kaylor,
2013 Oct 30
1
[LLVMdev] Using MCJIT in a dynamic REPL environment
The new MCJIT is module-oriented, like a classic compiler+linker (which it
is) while the old JIT is function-oriented.
If I understand correctly, the main problems with the old JIT were the
duplication of the debug information code and EH code (both gone now).
Moreover, if we ignore the lazy evaluation mechanism then the current JIT
is actually quite simple module.
Would it be possible to keep
2013 Nov 08
2
[LLVMdev] UNREACHABLE executed at MCJIT.cpp:322!
That makes it more mysterious then since I am indeed only calling a main
function. Perhaps I have to invoke it a different way. Here's my call I
have now:
auto main = linker->getModule()->getFunction( "main" );
std::vector<llvm::GenericValue> args(2);
args[0].IntVal = llvm::APInt( platform::abi_int_size, 0 );
args[1].PointerVal = nullptr;
llvm::GenericValue gv =
2016 Feb 26
2
Heap problems with 3.8.0rc2 in combination with vs2015 sp1
Turns out llvm initializes memory before the constructor is invoked. Visual
studio has /sdl by default on, and the __autoclassinit2 will zero the
memory before the constructor is reached causing all the setters to be
default zero. which clears the hashungoff var and causing the delete to
flow in wrong part.
When /sdl is enabled, the compiler generates code to perform these checks
at run time:
—
2013 Oct 21
2
[LLVMdev] An enhancement for MCJIT::getFunctionAddress
The search is linear? If that’s really true, we should fix that.
On Oct 21, 2013, at 10:14 AM, Kaylor, Andrew <andrew.kaylor at intel.com> wrote:
> I should have read this before sending my previous reply. :-)
>
> I’m not a big fan of default parameters, but some form of what you are suggesting may be useful. See my other comments on this topic in the other reply.
>
>
2013 Nov 14
2
[LLVMdev] (Very) small patch for the jit event listener
Hi Yaron,
I think a lot of what I said in my reply to Gaël also applies to your situation. In particular, I think that it's probably best for your code to manager the function stubs and replacement. I talked last week with a developer who works on the Julia language (which shares a lot of features your situation) and it's my understanding that the Julia runtime handles function stubs