
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
88 lines
5.8 KiB
LLVM
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}
|