Problem with 32 and 64bit binaries

Hi, all.

I am generating LLVM IR code for x64 platform using LLVM 64bit libraries , and for some reason I need to move to 32bit.

But after building 32bit libraries I found that IR code generates incorrectly and it causes segfault.

For example, instead of generating function call it generates function phi.

64bit libs:

init: ; preds = %pre_entry

call void @Init()

br label %entry

32bit libs:

init:

phi void [ @Init(), <null operand!> ]

br label entry

Or other example. Instead of this:

lpad: ; preds = %entry

%lpad1 = landingpad { i8*, i32 } personality i32 (…)* @__gxx_personality_v0

catch i8* bitcast (i8** @_ZTIPKc to i8*)

%exn = extractvalue { i8*, i32 } %lpad1, 0 <------

store i8* %exn, i8** %exn.slot

%ehselector = extractvalue { i8*, i32 } %lpad1, 1

store i32 %ehselector, i32* %ehselector.slot

br label %catch

catch: ; preds = %lpad

%exn2 = load i8** %exn.slot

%1 = call i8* @__cxa_begin_catch(i8* %exn2)

call void (i8*, …)* @_printf(i8* %1) <--------

br label %ret

I get this code:

lpad: ; preds = %entry

%lpad1 = landingpad { i8*, i32 } personality i32 (…)* @__gxx_personality_v0

catch i8* bitcast (i8** @_ZTIPKc to i8*)

%exn = shufflevector { i8*, i32 } %lpad1 <---------

store i8* %exn, i8** %exn.slot

%ehselector = shufflevector { i8*, i32 } %lpad1

store i32 %ehselector, i32* %ehselector.slot

br label %catch

catch: ; preds = %lpad

%exn2 = load i8** %exn.slot

%1 = phi i8* [ %exn2, <null operand!> ], [ @__cxa_begin_catch, Segmentation fault (core dumped)

Anyone can tell me what is it? Is it a bug of LLVM or our codegen?