I have two bitcode files that I want to link together, using the command
llvm-link -o llvm-helpers.bc1 target/arm/op_helper.bc2 target/arm/helper.bc2
Both files define the struct %struct.ARMCPRegInfo
. However, when I link them together, the resulting bitcode has two structs of different bitsizes, one ending with .32
. As a result, some functions use the .32
type as an argument, which is not intended.
%struct.ARMCPRegInfo.32 = type { i8*, i8, i8, i8, i8, i8, i8, i32, i32, i32, i32, i8*, i64, i64, [2 x i64], i32 (%struct.CPUARMState*, %struct.ARMCPRegInfo.32*, i1), {}, void (%struct.CPUARMState*, %struct.ARMCPRegInfo.32*, i64), {}, void (%struct.CPUARMState*, %struct.ARMCPRegInfo.32*, i64), void (%struct.CPUARMState, %struct.ARMCPRegInfo. 32*)* }
%struct.ARMCPRegInfo = type { i8*, i8, i8, i8, i8, i8, i8, i32, i32, i32, i32, i8*, i64, i64, [2 x i64], i32 (%struct.CPUARMState*, %struct.ARMCPRegInfo*, i1), i64 (%struct.CPUARMState, %struct.ARMCPRegInfo*), void (%struct.CPUARMState, %struct.ARMCPRegInfo*, i64), i64 (%struct.CPUARMState, %struct.ARMCPRegInfo*), void (%struct. CPUARMState, %struct.ARMCPRegInfo*, i64), void (%struct.CPUARMState, %struct.ARMCPRegInfo*)* }
Why are two structs being created, and how do I prevent this from happening?