[llvm-dev] Problem with local context getType() == global context getType()
John Criswell via llvm-dev
llvm-dev at lists.llvm.org
Wed Aug 26 10:51:48 PDT 2015
On 8/26/15 3:01 AM, koffie drinker wrote:
> Thanks for your reply. I did verify that all my calls are using the
> correct *InContext api calls.
> I discovered that the types were in different context by testing with:
> auto t1 = LLVMInt1TypeInContext(context);
> auto t2 = LLVMInt1Type();
> The substituted value type in GVN.cpp equals to t2 instead of t1. So
> It somehow is using a global context instead of my own during the GVN
> pass. So I think it's a bug. It could be C api related.
> I willing to spend time on it and patch it if someone can point me to
> the part where this might happen. I'm quite new to LLVM and unfamiliar
> with the source tree.
I don't know where the C bindings are located in the source tree.
However, if you think the GVN pass is causing the issue, its source code
is in the lib/Transforms/Scalar/GVN.cpp file.
> On Wed, Aug 26, 2015 at 2:18 AM, John Criswell <jtcriswel at gmail.com
> <mailto:jtcriswel at gmail.com>> wrote:
> On 8/25/15 10:28 AM, koffie drinker via llvm-dev wrote:
>> I'm experiencing a weird problem with llvm 3.7(rc2/rc3) that did
>> not occur in llvm 3.6.2
>> I created a bug for it: https://llvm.org/bugs/show_bug.cgi?id=24521
>> I'm building a app where multiple code gen can happen in
>> parallel. The documentation state that I need to use separate
>> context. Each thread has it's own context.
>> When code generating a constant number I use the *InContext()
>> calls to create the types. The assert fails since the optimizer
>> replaces some numbers with a global type. The values are equal
>> but the types are not. I did patch some calls to compare on
>> getTypeID() but got another assert a couple of days later in
>> another source file.
> It sounds like the two values (or the types of the values) are in
> different contexts. If you are creating the Types, make sure each
> type is created in the correct context. If some LLVM API function
> is creating the type for you, then it may be creating it in the
> wrong context (i.e., you have found a bug) or the LLVM API
> function has to assume a context (i.e., there is a limitation in
> the API for your application).
> If you determine that it is a bug, you should file a bug report.
> If it's a limitation, you should file an enhancement request.
> Sorry I can't be more helpful than that; I haven't used LLVM 3.7
> yet, and I haven't used multiple contexts within a multi-threaded
> application. These are educated guesses on my part.
> John Criswell
>> I needed 3.7 because of the LLVMAddGlobalMapping C api fixes.
>> Could someone help me out ? Or point me in the right direction?
>> I'm using the C api.
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
> John Criswell
> Assistant Professor
> Department of Computer Science, University of Rochester
Department of Computer Science, University of Rochester
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-dev