diff --git a/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp b/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp index 019b5ee6ac2f9..5b2391a6a7b67 100644 --- a/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp +++ b/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp @@ -2026,8 +2026,7 @@ bool DevirtModule::tryVirtualConstProp( if (CSByConstantArg.second.isExported()) { ResByArg->TheKind = WholeProgramDevirtResolution::ByArg::VirtualConstProp; - exportConstant(Slot, CSByConstantArg.first, "byte", OffsetByte, - ResByArg->Byte); + ResByArg->Byte = OffsetByte; exportConstant(Slot, CSByConstantArg.first, "bit", 1ULL << OffsetBit, ResByArg->Bit); } @@ -2309,8 +2308,7 @@ void DevirtModule::importResolution(VTableSlot Slot, VTableSlotInfo &SlotInfo) { break; } case WholeProgramDevirtResolution::ByArg::VirtualConstProp: { - Constant *Byte = importConstant(Slot, CSByConstantArg.first, "byte", - Int32Ty, ResByArg.Byte); + Constant *Byte = ConstantInt::get(Int32Ty, ResByArg.Byte); Constant *Bit = importConstant(Slot, CSByConstantArg.first, "bit", Int8Ty, ResByArg.Bit); applyVirtualConstProp(CSByConstantArg.second, "", Byte, Bit); diff --git a/llvm/test/Transforms/WholeProgramDevirt/export-vcp.ll b/llvm/test/Transforms/WholeProgramDevirt/export-vcp.ll index 24aba548ea9ac..a81df69395a20 100644 --- a/llvm/test/Transforms/WholeProgramDevirt/export-vcp.ll +++ b/llvm/test/Transforms/WholeProgramDevirt/export-vcp.ll @@ -23,7 +23,7 @@ target datalayout = "e-p:64:64" ; SUMMARY-NEXT: 12,24: ; SUMMARY-NEXT: Kind: VirtualConstProp ; SUMMARY-NEXT: Info: 0 -; SUMMARY-X86-NEXT: Byte: 0 +; SUMMARY-X86-NEXT: Byte: 4294967295 ; SUMMARY-X86-NEXT: Bit: 0 ; SUMMARY-ARM-NEXT: Byte: 4294967295 ; SUMMARY-ARM-NEXT: Bit: 1 @@ -43,7 +43,7 @@ target datalayout = "e-p:64:64" ; SUMMARY-NEXT: 24,12: ; SUMMARY-NEXT: Kind: VirtualConstProp ; SUMMARY-NEXT: Info: 0 -; SUMMARY-X86-NEXT: Byte: 0 +; SUMMARY-X86-NEXT: Byte: 4294967292 ; SUMMARY-X86-NEXT: Bit: 0 ; SUMMARY-ARM-NEXT: Byte: 4294967292 ; SUMMARY-ARM-NEXT: Bit: 1 @@ -66,9 +66,7 @@ target datalayout = "e-p:64:64" ; CHECK: [[CVT4B:.*]] = private constant { [8 x i8], ptr, [0 x i8] } { [8 x i8] c"\00\00\00\00\02\00\00\00", ptr @vf2i32, [0 x i8] zeroinitializer }, !type !1 @vt4b = constant ptr @vf2i32, !type !1 -; X86: @__typeid_typeid3_0_12_24_byte = hidden alias i8, inttoptr (i32 -1 to ptr) ; X86: @__typeid_typeid3_0_12_24_bit = hidden alias i8, inttoptr (i32 1 to ptr) -; X86: @__typeid_typeid4_0_24_12_byte = hidden alias i8, inttoptr (i32 -4 to ptr) ; X86: @__typeid_typeid4_0_24_12_bit = hidden alias i8, inttoptr (i32 1 to ptr) ; ARM-NOT: alias {{.*}} inttoptr diff --git a/llvm/test/Transforms/WholeProgramDevirt/import.ll b/llvm/test/Transforms/WholeProgramDevirt/import.ll index 812ffbdf7f3fb..d344dd2752434 100644 --- a/llvm/test/Transforms/WholeProgramDevirt/import.ll +++ b/llvm/test/Transforms/WholeProgramDevirt/import.ll @@ -11,10 +11,8 @@ target datalayout = "e-p:64:64" target triple = "x86_64-unknown-linux-gnu" -; VCP-X86: @__typeid_typeid1_0_1_byte = external hidden global [0 x i8], !absolute_symbol !0 -; VCP-X86: @__typeid_typeid1_0_1_bit = external hidden global [0 x i8], !absolute_symbol !1 -; VCP-X86: @__typeid_typeid2_8_3_byte = external hidden global [0 x i8], !absolute_symbol !0 -; VCP-X86: @__typeid_typeid2_8_3_bit = external hidden global [0 x i8], !absolute_symbol !1 +; VCP-X86: @__typeid_typeid1_0_1_bit = external hidden global [0 x i8], !absolute_symbol !0 +; VCP-X86: @__typeid_typeid2_8_3_bit = external hidden global [0 x i8], !absolute_symbol !0 ; Test cases where the argument values are known and we can apply virtual ; constant propagation. @@ -28,8 +26,7 @@ define i32 @call1(ptr %obj) #0 { ; SINGLE-IMPL: call i32 @singleimpl1 %result = call i32 %fptr(ptr %obj, i32 1) ; UNIFORM-RET-VAL: ret i32 42 - ; VCP-X86: [[GEP1:%.*]] = getelementptr i8, ptr %vtable, i32 ptrtoint (ptr @__typeid_typeid1_0_1_byte to i32) - ; VCP-ARM: [[GEP1:%.*]] = getelementptr i8, ptr %vtable, i32 42 + ; VCP: [[GEP1:%.*]] = getelementptr i8, ptr %vtable, i32 42 ; VCP: [[LOAD1:%.*]] = load i32, ptr [[GEP1]] ; VCP: ret i32 [[LOAD1]] ; BRANCH-FUNNEL-NOVCP: call i32 @__typeid_typeid1_0_branch_funnel(ptr nest %vtable, ptr %obj, i32 1) @@ -72,8 +69,7 @@ cont: %result = call i1 %fptr(ptr %obj, i32 3) ; UNIQUE-RET-VAL0: icmp ne ptr %vtable, @__typeid_typeid2_8_3_unique_member ; UNIQUE-RET-VAL1: icmp eq ptr %vtable, @__typeid_typeid2_8_3_unique_member - ; VCP-X86: [[GEP2:%.*]] = getelementptr i8, ptr %vtable, i32 ptrtoint (ptr @__typeid_typeid2_8_3_byte to i32) - ; VCP-ARM: [[GEP2:%.*]] = getelementptr i8, ptr %vtable, i32 43 + ; VCP: [[GEP2:%.*]] = getelementptr i8, ptr %vtable, i32 43 ; VCP: [[LOAD2:%.*]] = load i8, ptr [[GEP2]] ; VCP-X86: [[AND2:%.*]] = and i8 [[LOAD2]], ptrtoint (ptr @__typeid_typeid2_8_3_bit to i8) ; VCP-ARM: [[AND2:%.*]] = and i8 [[LOAD2]], -128 @@ -90,11 +86,8 @@ trap: ; SINGLE-IMPL-DAG: declare void @singleimpl1() ; SINGLE-IMPL-DAG: declare void @singleimpl2() -; VCP32: !0 = !{i32 -1, i32 -1} -; VCP64: !0 = !{i64 0, i64 4294967296} - -; VCP32: !1 = !{i32 0, i32 256} -; VCP64: !1 = !{i64 0, i64 256} +; VCP32: !0 = !{i32 0, i32 256} +; VCP64: !0 = !{i64 0, i64 256} declare void @llvm.assume(i1) declare void @llvm.trap()