[LLVMdev] MAJOR API CHANGE: Pass initialization without static constructors

Howell, Nathan nhowell at ebay.com
Fri Oct 8 14:17:11 PDT 2010


If gcc/ld sort sections alphabetically you could use a technique similar to OBJECT_ENTRY_AUTO [1], perhaps like this:

Initializer* llvm_reg_start __attribute__ ((section "_llvm_reg__a")) = NULL;
Initializer* llvm_reg_end __attribute__ ((section "_llvm_reg__z")) = NULL;

#define INITIALIZE_LLVM_PASS (passname, pass) void* llvm_reg_passname __attribute__ ((section "_llvm_reg__m")) = &pass;

void InitializeAllPasses() {
  // since a < m < z, all of the registered pass pointers should live in (llvm_reg_start, llvm_reg_end) after linking
  for (Initializer** i = ++(&llvm_reg_start); i < &llvm_reg_end); ++i) {
    Pass::Initialize(*i);
  }
}

[1] http://msdn.microsoft.com/en-us/library/exx3wywe(VS.80).aspx

-----Original Message-----
From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On Behalf Of John Criswell
Sent: Friday, October 08, 2010 1:55 PM
To: Owen Anderson
Cc: llvmdev
Subject: Re: [LLVMdev] MAJOR API CHANGE: Pass initialization without static constructors

  On 10/8/10 3:44 PM, Owen Anderson wrote:
> [snip]
>
>> Hrm.  I see.
>>
>> I still don't like the idea of having every statically-linked tool explicitly initializing every library that gets linked in.  Just dumping the library into the Makefile and being done with it was much nicer.
>>
>> If you can find a reasonable way to support that, it would be nice.  However, if you can't, it's not that big a deal.  As I mentioned before, as long as out-of-tree passes don't have to modify LLVM source files to work properly, I'll live.
> I don't especially like it either, but the abundance of static constructors in LLVM has been a long-standing performance concern.  I wouldn't be going this way if I had a better solution.

Okay.  Thanks, Owen.

-- John T.

> --Owen
>

_______________________________________________
LLVM Developers mailing list
LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev




More information about the llvm-dev mailing list