|
LLVM 22.0.0git
|
#include "EHStreamer.h"#include "llvm/ADT/SmallVector.h"#include "llvm/ADT/Twine.h"#include "llvm/BinaryFormat/Dwarf.h"#include "llvm/CodeGen/AsmPrinter.h"#include "llvm/CodeGen/MachineFunction.h"#include "llvm/CodeGen/MachineInstr.h"#include "llvm/CodeGen/MachineOperand.h"#include "llvm/IR/Function.h"#include "llvm/MC/MCAsmInfo.h"#include "llvm/MC/MCContext.h"#include "llvm/MC/MCStreamer.h"#include "llvm/MC/MCSymbol.h"#include "llvm/Support/Casting.h"#include "llvm/Support/LEB128.h"#include "llvm/Target/TargetLoweringObjectFile.h"#include <algorithm>#include <cassert>#include <cstdint>#include <vector>Go to the source code of this file.
Variables | |
| MarkedNoUnwind = false | |
| Return ‘true’ if this is a call to a function marked ‘nounwind’. | |
| break | |
| SawFunc = true | |
| break |
Definition at line 176 of file EHStreamer.cpp.
| return MarkedNoUnwind = false |
Return ‘true’ if this is a call to a function marked ‘nounwind’.
Return ‘false’ otherwise. bool EHStreamer::callToNoUnwindFunction(const MachineInstr *MI) { assert(MI->isCall() && "This should be a call instruction!");
bool MarkedNoUnwind = false; bool SawFunc = false;
for (const MachineOperand &MO : MI->operands()) { if (!MO.isGlobal()) continue;
const Function *F = dyn_cast<Function>(MO.getGlobal()); if (!F) continue;
if (SawFunc) { Be conservative. If we have more than one function operand for this call, then we can't make the assumption that it's the callee and not a parameter to the call.
FIXME: Determine if there's a way to say that ‘F’ is the callee or
Definition at line 175 of file EHStreamer.cpp.
| SawFunc = true |
Definition at line 180 of file EHStreamer.cpp.