diff options
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/include/llvm/CodeGen/CommandFlags.h | 2 | ||||
-rw-r--r-- | llvm/include/llvm/CodeGen/MIRYamlMapping.h | 3 | ||||
-rw-r--r-- | llvm/include/llvm/CodeGen/MachineFunction.h | 2 | ||||
-rw-r--r-- | llvm/include/llvm/Target/TargetOptions.h | 12 | ||||
-rw-r--r-- | llvm/lib/CodeGen/CommandFlags.cpp | 7 | ||||
-rw-r--r-- | llvm/lib/CodeGen/MIRParser/MIRParser.cpp | 14 | ||||
-rw-r--r-- | llvm/lib/CodeGen/MIRPrinter.cpp | 12 | ||||
-rw-r--r-- | llvm/lib/CodeGen/MachineFunction.cpp | 2 | ||||
-rw-r--r-- | llvm/test/CodeGen/MIR/X86/call-site-info-ambiguous-indirect-call-typeid.mir | 31 | ||||
-rw-r--r-- | llvm/test/CodeGen/MIR/X86/call-site-info-direct-calls-typeid.mir | 54 | ||||
-rw-r--r-- | llvm/test/CodeGen/MIR/X86/call-site-info-typeid.mir | 28 |
11 files changed, 11 insertions, 156 deletions
diff --git a/llvm/include/llvm/CodeGen/CommandFlags.h b/llvm/include/llvm/CodeGen/CommandFlags.h index d500e94..aefdb53 100644 --- a/llvm/include/llvm/CodeGen/CommandFlags.h +++ b/llvm/include/llvm/CodeGen/CommandFlags.h @@ -133,8 +133,6 @@ LLVM_ABI bool getEnableStackSizeSection(); LLVM_ABI bool getEnableAddrsig(); -LLVM_ABI bool getEnableCallGraphSection(); - LLVM_ABI bool getEmitCallSiteInfo(); LLVM_ABI bool getEnableMachineFunctionSplitter(); diff --git a/llvm/include/llvm/CodeGen/MIRYamlMapping.h b/llvm/include/llvm/CodeGen/MIRYamlMapping.h index 0f3f945..119786f 100644 --- a/llvm/include/llvm/CodeGen/MIRYamlMapping.h +++ b/llvm/include/llvm/CodeGen/MIRYamlMapping.h @@ -482,8 +482,6 @@ struct CallSiteInfo { MachineInstrLoc CallLocation; std::vector<ArgRegPair> ArgForwardingRegs; - /// Numeric callee type identifiers for the callgraph section. - std::vector<uint64_t> CalleeTypeIds; bool operator==(const CallSiteInfo &Other) const { return CallLocation.BlockNum == Other.CallLocation.BlockNum && @@ -513,7 +511,6 @@ template <> struct MappingTraits<CallSiteInfo> { YamlIO.mapRequired("offset", CSInfo.CallLocation.Offset); YamlIO.mapOptional("fwdArgRegs", CSInfo.ArgForwardingRegs, std::vector<CallSiteInfo::ArgRegPair>()); - YamlIO.mapOptional("calleeTypeIds", CSInfo.CalleeTypeIds); } static const bool flow = true; diff --git a/llvm/include/llvm/CodeGen/MachineFunction.h b/llvm/include/llvm/CodeGen/MachineFunction.h index 7f88323..e5958ec 100644 --- a/llvm/include/llvm/CodeGen/MachineFunction.h +++ b/llvm/include/llvm/CodeGen/MachineFunction.h @@ -515,8 +515,6 @@ public: struct CallSiteInfo { /// Vector of call argument and its forwarding register. SmallVector<ArgRegPair, 1> ArgRegPairs; - /// Callee type ids. - SmallVector<ConstantInt *, 4> CalleeTypeIds; }; struct CalledGlobalInfo { diff --git a/llvm/include/llvm/Target/TargetOptions.h b/llvm/include/llvm/Target/TargetOptions.h index db90f2e..f420798 100644 --- a/llvm/include/llvm/Target/TargetOptions.h +++ b/llvm/include/llvm/Target/TargetOptions.h @@ -133,11 +133,10 @@ public: EmitStackSizeSection(false), EnableMachineOutliner(false), EnableMachineFunctionSplitter(false), EnableStaticDataPartitioning(false), SupportsDefaultOutlining(false), - EmitAddrsig(false), BBAddrMap(false), EmitCallGraphSection(false), - EmitCallSiteInfo(false), SupportsDebugEntryValues(false), - EnableDebugEntryValues(false), ValueTrackingVariableLocations(false), - ForceDwarfFrameSection(false), XRayFunctionIndex(true), - DebugStrictDwarf(false), Hotpatch(false), + EmitAddrsig(false), BBAddrMap(false), EmitCallSiteInfo(false), + SupportsDebugEntryValues(false), EnableDebugEntryValues(false), + ValueTrackingVariableLocations(false), ForceDwarfFrameSection(false), + XRayFunctionIndex(true), DebugStrictDwarf(false), Hotpatch(false), PPCGenScalarMASSEntries(false), JMCInstrument(false), EnableCFIFixup(false), MisExpect(false), XCOFFReadOnlyPointers(false), VerifyArgABICompliance(true), @@ -320,9 +319,6 @@ public: /// to selectively generate basic block sections. std::shared_ptr<MemoryBuffer> BBSectionsFuncListBuf; - /// Emit section containing call graph metadata. - unsigned EmitCallGraphSection : 1; - /// The flag enables call site info production. It is used only for debug /// info, and it is restricted only to optimized code. This can be used for /// something else, so that should be controlled in the frontend. diff --git a/llvm/lib/CodeGen/CommandFlags.cpp b/llvm/lib/CodeGen/CommandFlags.cpp index 810dc29..9512f79 100644 --- a/llvm/lib/CodeGen/CommandFlags.cpp +++ b/llvm/lib/CodeGen/CommandFlags.cpp @@ -101,7 +101,6 @@ CGOPT(EABI, EABIVersion) CGOPT(DebuggerKind, DebuggerTuningOpt) CGOPT(bool, EnableStackSizeSection) CGOPT(bool, EnableAddrsig) -CGOPT(bool, EnableCallGraphSection) CGOPT(bool, EmitCallSiteInfo) CGOPT(bool, EnableMachineFunctionSplitter) CGOPT(bool, EnableStaticDataPartitioning) @@ -462,11 +461,6 @@ codegen::RegisterCodeGenFlags::RegisterCodeGenFlags() { cl::init(false)); CGBINDOPT(EnableAddrsig); - static cl::opt<bool> EnableCallGraphSection( - "call-graph-section", cl::desc("Emit a call graph section"), - cl::init(false)); - CGBINDOPT(EnableCallGraphSection); - static cl::opt<bool> EmitCallSiteInfo( "emit-call-site-info", cl::desc( @@ -601,7 +595,6 @@ codegen::InitTargetOptionsFromCodeGenFlags(const Triple &TheTriple) { Options.EnableMachineFunctionSplitter = getEnableMachineFunctionSplitter(); Options.EnableStaticDataPartitioning = getEnableStaticDataPartitioning(); Options.EmitAddrsig = getEnableAddrsig(); - Options.EmitCallGraphSection = getEnableCallGraphSection(); Options.EmitCallSiteInfo = getEmitCallSiteInfo(); Options.EnableDebugEntryValues = getEnableDebugEntryValues(); Options.ForceDwarfFrameSection = getForceDwarfFrameSection(); diff --git a/llvm/lib/CodeGen/MIRParser/MIRParser.cpp b/llvm/lib/CodeGen/MIRParser/MIRParser.cpp index 3e99e57..1e9fcf3 100644 --- a/llvm/lib/CodeGen/MIRParser/MIRParser.cpp +++ b/llvm/lib/CodeGen/MIRParser/MIRParser.cpp @@ -504,21 +504,13 @@ bool MIRParserImpl::initializeCallSiteInfo( return error(Error, ArgRegPair.Reg.SourceRange); CSInfo.ArgRegPairs.emplace_back(Reg, ArgRegPair.ArgNo); } - if (!YamlCSInfo.CalleeTypeIds.empty()) { - for (auto CalleeTypeId : YamlCSInfo.CalleeTypeIds) { - IntegerType *Int64Ty = Type::getInt64Ty(Context); - CSInfo.CalleeTypeIds.push_back(ConstantInt::get(Int64Ty, CalleeTypeId, - /*isSigned=*/false)); - } - } - if (TM.Options.EmitCallSiteInfo || TM.Options.EmitCallGraphSection) + if (TM.Options.EmitCallSiteInfo) MF.addCallSiteInfo(&*CallI, std::move(CSInfo)); } - if (!YamlMF.CallSitesInfo.empty() && - !(TM.Options.EmitCallSiteInfo || TM.Options.EmitCallGraphSection)) - return error("call site info provided but not used"); + if (YamlMF.CallSitesInfo.size() && !TM.Options.EmitCallSiteInfo) + return error(Twine("Call site info provided but not used")); return false; } diff --git a/llvm/lib/CodeGen/MIRPrinter.cpp b/llvm/lib/CodeGen/MIRPrinter.cpp index 8d5aa9aa..7710b50 100644 --- a/llvm/lib/CodeGen/MIRPrinter.cpp +++ b/llvm/lib/CodeGen/MIRPrinter.cpp @@ -525,30 +525,24 @@ static void convertCallSiteObjects(yaml::MachineFunction &YMF, const MachineFunction &MF, ModuleSlotTracker &MST) { const auto *TRI = MF.getSubtarget().getRegisterInfo(); - for (auto [MI, CallSiteInfo] : MF.getCallSitesInfo()) { + for (auto CSInfo : MF.getCallSitesInfo()) { yaml::CallSiteInfo YmlCS; yaml::MachineInstrLoc CallLocation; // Prepare instruction position. - MachineBasicBlock::const_instr_iterator CallI = MI->getIterator(); + MachineBasicBlock::const_instr_iterator CallI = CSInfo.first->getIterator(); CallLocation.BlockNum = CallI->getParent()->getNumber(); // Get call instruction offset from the beginning of block. CallLocation.Offset = std::distance(CallI->getParent()->instr_begin(), CallI); YmlCS.CallLocation = CallLocation; - - auto [ArgRegPairs, CalleeTypeIds] = CallSiteInfo; // Construct call arguments and theirs forwarding register info. - for (auto ArgReg : ArgRegPairs) { + for (auto ArgReg : CSInfo.second.ArgRegPairs) { yaml::CallSiteInfo::ArgRegPair YmlArgReg; YmlArgReg.ArgNo = ArgReg.ArgNo; printRegMIR(ArgReg.Reg, YmlArgReg.Reg, TRI); YmlCS.ArgForwardingRegs.emplace_back(YmlArgReg); } - // Get type ids. - for (auto *CalleeTypeId : CalleeTypeIds) { - YmlCS.CalleeTypeIds.push_back(CalleeTypeId->getZExtValue()); - } YMF.CallSitesInfo.push_back(std::move(YmlCS)); } diff --git a/llvm/lib/CodeGen/MachineFunction.cpp b/llvm/lib/CodeGen/MachineFunction.cpp index 468849c7..429a17a 100644 --- a/llvm/lib/CodeGen/MachineFunction.cpp +++ b/llvm/lib/CodeGen/MachineFunction.cpp @@ -920,7 +920,7 @@ MachineFunction::getCallSiteInfo(const MachineInstr *MI) { assert(MI->isCandidateForAdditionalCallInfo() && "Call site info refers only to call (MI) candidates"); - if (!Target.Options.EmitCallSiteInfo && !Target.Options.EmitCallGraphSection) + if (!Target.Options.EmitCallSiteInfo) return CallSitesInfo.end(); return CallSitesInfo.find(MI); } diff --git a/llvm/test/CodeGen/MIR/X86/call-site-info-ambiguous-indirect-call-typeid.mir b/llvm/test/CodeGen/MIR/X86/call-site-info-ambiguous-indirect-call-typeid.mir deleted file mode 100644 index 75585da..0000000 --- a/llvm/test/CodeGen/MIR/X86/call-site-info-ambiguous-indirect-call-typeid.mir +++ /dev/null @@ -1,31 +0,0 @@ -# Test MIR printer and parser to check if a call instruction with multiple -# callee types are handled correctly. - -# RUN: llc --call-graph-section %s -run-pass=none -o - | FileCheck --match-full-lines %s -# CHECK: name: ambiguous_caller -# CHECK: callSites: -# CHECK-NEXT: - { bb: {{.*}}, offset: {{.*}}, fwdArgRegs: {{.*}}, calleeTypeIds: -# CHECK-NEXT: [ 1234, 5678 ] } - ---- | - define ptr @ambiguous_caller() { - entry: - %fn = alloca ptr, align 8 - %call1 = call ptr %fn(i64 4), !callee_type !0 - ret ptr %call1 - } - - !0 = !{!1, !2} - !1 = !{i64 0, !"callee_type0.generalized"} - !2 = !{i64 0, !"callee_type2.generalized"} -... ---- -name: ambiguous_caller -callSites: - - { bb: 0, offset: 1, fwdArgRegs: [], calleeTypeIds: [ 1234, 5678 ] } -body: | - bb.0.entry: - %0:gr64 = MOV32ri64 4 - CALL64r killed %0, csr_64, implicit $rsp, implicit $ssp, implicit $rdi, implicit-def $rsp, implicit-def $ssp, implicit-def $rax - RET 0, $rax -... diff --git a/llvm/test/CodeGen/MIR/X86/call-site-info-direct-calls-typeid.mir b/llvm/test/CodeGen/MIR/X86/call-site-info-direct-calls-typeid.mir deleted file mode 100644 index f4decf2..0000000 --- a/llvm/test/CodeGen/MIR/X86/call-site-info-direct-calls-typeid.mir +++ /dev/null @@ -1,54 +0,0 @@ -# Test MIR printer and parser to NOT have `CalleeTypeIds` field in callSites. -# `CalleeTypeId` is used for propagating call site type identifiers for -# indirect targets only. This test does not contain any indirect targets. - -# RUN: llc --call-graph-section %s -run-pass=none -o - | FileCheck --match-full-lines %s -# CHECK-NOT: calleeTypeIds -# CHECK: name: bar -# CHECK: callSites: -# CHECK-NEXT: - { bb: {{.*}}, offset: {{.*}}, fwdArgRegs: [] } -# CHECK-NEXT: - { bb: {{.*}}, offset: {{.*}}, fwdArgRegs: [] } -# CHECK: name: foo -# CHECK: callSites: -# CHECK-NEXT: - { bb: {{.*}}, offset: {{.*}}, fwdArgRegs: [] } - ---- | - declare i32 @fizz(i32, i32) - - declare i32 @buzz(i32, i32) - - define i32 @bar(i32 %x, i32 %y) !type !0 { - entry: - %call = call i32 @buzz(i32 %x, i32 %x) - %call1 = call i32 @fizz(i32 %x, i32 %x) - ret i32 0 - } - - define i32 @foo(i32 %x, i32 %y) !type !0 { - entry: - %call1 = call i32 @bar(i32 %x, i32 %x) - ret i32 0 - } - - !0 = !{i64 0, !"_ZTSFiiiE.generalized"} -... ---- -name: bar -callSites: - - { bb: 0, offset: 0, fwdArgRegs: [] } - - { bb: 0, offset: 1, fwdArgRegs: [] } -body: | - bb.0.entry: - CALL64pcrel32 target-flags(x86-plt) @buzz, csr_64, implicit $rsp, implicit $ssp, implicit $edi, implicit $esi, implicit-def $rsp, implicit-def $ssp, implicit-def $eax - CALL64pcrel32 target-flags(x86-plt) @fizz, csr_64, implicit $rsp, implicit $ssp, implicit $edi, implicit $esi, implicit-def $rsp, implicit-def $ssp, implicit-def $eax - -... ---- -name: foo -callSites: - - { bb: 0, offset: 0, fwdArgRegs: [] } -body: | - bb.0.entry: - CALL64pcrel32 target-flags(x86-plt) @bar, csr_64, implicit $rsp, implicit $ssp, implicit $edi, implicit $esi, implicit-def $rsp, implicit-def $ssp, implicit-def $eax - -... diff --git a/llvm/test/CodeGen/MIR/X86/call-site-info-typeid.mir b/llvm/test/CodeGen/MIR/X86/call-site-info-typeid.mir deleted file mode 100644 index c646699..0000000 --- a/llvm/test/CodeGen/MIR/X86/call-site-info-typeid.mir +++ /dev/null @@ -1,28 +0,0 @@ -# Test MIR printer and parser for type id field in callSites. It is used -# for propagating call site type identifiers to emit in the call graph section. - -# RUN: llc --call-graph-section %s -run-pass=none -o - | FileCheck --match-full-lines %s -# CHECK: name: call_foo -# CHECK: callSites: -# CHECK-NEXT: - { bb: {{.*}}, offset: {{.*}}, fwdArgRegs: [], calleeTypeIds: -# CHECK-NEXT: [ 123456789 ] } - ---- | - define i32 @call_foo() { - entry: - %0 = load ptr, ptr null, align 8 - call void %0(i8 0), !callee_type !0 - ret i32 0 - } - - !0 = !{!1} - !1 = !{i64 0, !"_ZTSFvcE.generalized"} -... ---- -name: call_foo -callSites: - - { bb: 0, offset: 0, fwdArgRegs: [], calleeTypeIds: [ 123456789 ] } -body: | - bb.0.entry: - CALL64m $noreg, 1, $noreg, 0, $noreg, csr_64, implicit $rsp, implicit $ssp, implicit $edi, implicit-def $rsp, implicit-def $ssp :: (load (s64) from `ptr null`) -... |