[llvm-dev] llvm-link is creating 32 and 64-bit versions of a struct

Ray Wang via llvm-dev llvm-dev at lists.llvm.org
Thu Jun 28 21:01:45 PDT 2018


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?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180629/37f78fe4/attachment.html>


More information about the llvm-dev mailing list