is it impossible to use the external llvm custom pass on windows?

Hello all,

Still, is it impossible to use the external llvm custom pass on windows?

I can build the ‘mypass.dll’ on windows using LLVM libraries. And, I use these 2 way to use my pass.
clang.exe -Xclang -load -Xclang mypass.dll -c test.c
opt.exe -load -Xclang mypass.dll -mypass test.bc -o optimized_test.bc

But, Clang and opt didn’t working well with my pass.

This mean, my pass can dump the llvm::Module in compilation time. and my pass can dump that on Linux. but, my pass didn’t print anything on Windows.

Additionally, i already built the LLVM and Clang on Windows using CMake.

To avoid confusing, i’m writing my source code.

#include
using namespace std;

#include <llvm/Pass.h>
#include <llvm/IR/Module.h>
using namespace llvm;

class SampleIRModule : public llvm::ModulePass {
public:
static char ID;
SampleIRModule() : llvm::ModulePass(ID) {}

bool runOnModule(llvm::Module &M);
};

bool SampleIRModule::runOnModule(llvm::Module &M) {
M.dump();
return false;
}

char SampleIRModule::ID = 0;
static RegisterPass X(“SampleIRModule”, “SampleIRModule Pass”);

And,here is my build command on windows.
cl /EHsc -ID:\LLVM\llvm-3.4.2\build_nmake\output/include -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -wd4146 -wd4180 -wd4244 -wd4267 -wd4345 -wd4351 -wd4355 -wd4503 -wd4624 -wd4800 -wd4291 -w14062 -we4238 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -c testpass.cpp

cl /D_USRDLL /D_WINDLL testpass.obj /link /DLL /OUT:testpass.dll D:\LLVM\llvm-3.4.2\build_nmake\output\lib\LLVMCore.lib … (including other LLVM libraries)

Thanks,
Seok Hong

It would probably help if you explained what happens and how that is different from what you expect…

i want to use the external LLVM pass that built in out-of-source on windows.
and, my sample pass just dump the llvm::Module during compiling some source code.

i use this command.

opt.exe -load -Xclang mypass.dll -mypass test.bc -o optimized_test.bc

so, as my expect,
my pass should dump the llvm::Module of ‘test.bc’,
but, i couldn’t see anything in my console.

one the other hand, i can see the result of dump() on Linux with same source code (testpass.cpp)

Thanks,
Seok Hong

It's currently not possible to use external passes on Windows. You could
hack something together by dllexporting and -importing the PassRegistry
(IIRC there was a patch for this a long time ago), but this fails for
passes with dependencies. You also cannot use any flags like -debug in
this case.

--Nico