Nikita Popov e45cf47923 [Bitcode] Remove auto-detection for typed pointers
Always read bitcode according to the -opaque-pointers mode. Do not
perform auto-detection to implicitly switch to typed pointers.

This is a step towards removing typed pointer support, and also
eliminates the class of problems where linking may fail if a typed
pointer module is loaded before an opaque pointer module. (The
latest place where this was encountered is D139924, but this has
previously been fixed in other places doing bitcode linking as well.)

Differential Revision: https://reviews.llvm.org/D139940
2022-12-14 13:38:20 +01:00

88 lines
5.8 KiB
LLVM

; RUN: llvm-as < %s | llvm-dis -disable-output
%0 = type { %object.ModuleInfo.__vtbl*, i8*, %"byte[]", %1, %"ClassInfo[]", i32, void ()*, void ()*, void ()*, i8*, void ()* } ; type %0
%1 = type { i64, %object.ModuleInfo* } ; type %1
%2 = type { i32, void ()*, i8* } ; type %2
%"ClassInfo[]" = type { i64, %object.ClassInfo** }
%"Interface[]" = type { i64, %object.Interface* }
%"ModuleInfo[]" = type { i64, %object.ModuleInfo** }
%ModuleReference = type { %ModuleReference*, %object.ModuleInfo* }
%"OffsetTypeInfo[]" = type { i64, %object.OffsetTypeInfo* }
%"byte[]" = type { i64, i8* }
%object.ClassInfo = type { %object.ClassInfo.__vtbl*, i8*, %"byte[]", %"byte[]", %"void*[]", %"Interface[]", %object.ClassInfo*, i8*, i8*, i32, i8*, %"OffsetTypeInfo[]", i8*, %object.TypeInfo* }
%object.ClassInfo.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i64 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %object.Object* (%object.ClassInfo*)* }
%object.Interface = type { %object.ClassInfo*, %"void*[]", i64 }
%object.ModuleInfo = type { %object.ModuleInfo.__vtbl*, i8*, %"byte[]", %"ModuleInfo[]", %"ClassInfo[]", i32, void ()*, void ()*, void ()*, i8*, void ()* }
%object.ModuleInfo.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i64 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)* }
%object.Object = type { %object.ModuleInfo.__vtbl*, i8* }
%object.OffsetTypeInfo = type { i64, %object.TypeInfo* }
%object.TypeInfo = type { %object.TypeInfo.__vtbl*, i8* }
%object.TypeInfo.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i64 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i64 (%object.TypeInfo*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i64 (%object.TypeInfo*)*, void (%object.TypeInfo*, i8*, i8*)*, %object.TypeInfo* (%object.TypeInfo*)*, %"byte[]" (%object.TypeInfo*)*, i32 (%object.TypeInfo*)*, %"OffsetTypeInfo[]" (%object.TypeInfo*)* }
%"void*[]" = type { i64, i8** }
@_D10ModuleInfo6__vtblZ = external constant %object.ModuleInfo.__vtbl ; <ptr> [#uses=1]
@.str = internal constant [20 x i8] c"tango.core.BitManip\00" ; <ptr> [#uses=1]
@_D5tango4core8BitManip8__ModuleZ = global %0 { %object.ModuleInfo.__vtbl* @_D10ModuleInfo6__vtblZ, i8* null, %"byte[]" { i64 19, i8* getelementptr ([20 x i8], [20 x i8]* @.str, i32 0, i32 0) }, %1 zeroinitializer, %"ClassInfo[]" zeroinitializer, i32 4, void ()* null, void ()* null, void ()* null, i8* null, void ()* null } ; <ptr> [#uses=1]
@_D5tango4core8BitManip11__moduleRefZ = internal global %ModuleReference { %ModuleReference* null, %object.ModuleInfo* bitcast (%0* @_D5tango4core8BitManip8__ModuleZ to %object.ModuleInfo*) } ; <ptr> [#uses=2]
@_Dmodule_ref = external global %ModuleReference* ; <ptr> [#uses=2]
@llvm.global_ctors = appending constant [1 x %2] [%2 { i32 65535, void ()* @_D5tango4core8BitManip16__moduleinfoCtorZ, i8* null }] ; <ptr> [#uses=0]
define fastcc i32 @_D5tango4core8BitManip6popcntFkZi(i32 %x_arg) nounwind readnone {
entry:
%tmp1 = lshr i32 %x_arg, 1 ; <i32> [#uses=1]
%tmp2 = and i32 %tmp1, 1431655765 ; <i32> [#uses=1]
%tmp4 = sub i32 %x_arg, %tmp2 ; <i32> [#uses=2]
%tmp6 = lshr i32 %tmp4, 2 ; <i32> [#uses=1]
%tmp7 = and i32 %tmp6, 858993459 ; <i32> [#uses=1]
%tmp9 = and i32 %tmp4, 858993459 ; <i32> [#uses=1]
%tmp10 = add i32 %tmp7, %tmp9 ; <i32> [#uses=2]
%tmp12 = lshr i32 %tmp10, 4 ; <i32> [#uses=1]
%tmp14 = add i32 %tmp12, %tmp10 ; <i32> [#uses=1]
%tmp16 = and i32 %tmp14, 252645135 ; <i32> [#uses=2]
%tmp18 = lshr i32 %tmp16, 8 ; <i32> [#uses=1]
%tmp20 = add i32 %tmp18, %tmp16 ; <i32> [#uses=1]
%tmp22 = and i32 %tmp20, 16711935 ; <i32> [#uses=2]
%tmp24 = lshr i32 %tmp22, 16 ; <i32> [#uses=1]
%tmp26 = add i32 %tmp24, %tmp22 ; <i32> [#uses=1]
%tmp28 = and i32 %tmp26, 65535 ; <i32> [#uses=1]
ret i32 %tmp28
}
define fastcc i32 @_D5tango4core8BitManip7bitswapFkZk(i32 %x_arg) nounwind readnone {
entry:
%tmp1 = lshr i32 %x_arg, 1 ; <i32> [#uses=1]
%tmp2 = and i32 %tmp1, 1431655765 ; <i32> [#uses=1]
%tmp4 = shl i32 %x_arg, 1 ; <i32> [#uses=1]
%tmp5 = and i32 %tmp4, -1431655766 ; <i32> [#uses=1]
%tmp6 = or i32 %tmp2, %tmp5 ; <i32> [#uses=2]
%tmp8 = lshr i32 %tmp6, 2 ; <i32> [#uses=1]
%tmp9 = and i32 %tmp8, 858993459 ; <i32> [#uses=1]
%tmp11 = shl i32 %tmp6, 2 ; <i32> [#uses=1]
%tmp12 = and i32 %tmp11, -858993460 ; <i32> [#uses=1]
%tmp13 = or i32 %tmp9, %tmp12 ; <i32> [#uses=2]
%tmp15 = lshr i32 %tmp13, 4 ; <i32> [#uses=1]
%tmp16 = and i32 %tmp15, 252645135 ; <i32> [#uses=1]
%tmp18 = shl i32 %tmp13, 4 ; <i32> [#uses=1]
%tmp19 = and i32 %tmp18, -252645136 ; <i32> [#uses=1]
%tmp20 = or i32 %tmp16, %tmp19 ; <i32> [#uses=2]
%tmp22 = lshr i32 %tmp20, 8 ; <i32> [#uses=1]
%tmp23 = and i32 %tmp22, 16711935 ; <i32> [#uses=1]
%tmp25 = shl i32 %tmp20, 8 ; <i32> [#uses=1]
%tmp26 = and i32 %tmp25, -16711936 ; <i32> [#uses=1]
%tmp27 = or i32 %tmp23, %tmp26 ; <i32> [#uses=2]
%tmp29 = lshr i32 %tmp27, 16 ; <i32> [#uses=1]
%tmp31 = shl i32 %tmp27, 16 ; <i32> [#uses=1]
%tmp32 = or i32 %tmp29, %tmp31 ; <i32> [#uses=1]
ret i32 %tmp32
}
define internal void @_D5tango4core8BitManip16__moduleinfoCtorZ() nounwind {
moduleinfoCtorEntry:
%current = load %ModuleReference*, %ModuleReference** @_Dmodule_ref ; <ptr> [#uses=1]
store %ModuleReference* %current, %ModuleReference** getelementptr (%ModuleReference, %ModuleReference* @_D5tango4core8BitManip11__moduleRefZ, i32 0, i32 0)
store %ModuleReference* @_D5tango4core8BitManip11__moduleRefZ, %ModuleReference** @_Dmodule_ref
ret void
}
!llvm.ldc.classinfo._D6Object7__ClassZ = !{!0}
!llvm.ldc.classinfo._D10ModuleInfo7__ClassZ = !{!1}
!0 = !{%object.Object undef, i1 false, i1 false}
!1 = !{%object.ModuleInfo undef, i1 false, i1 false}