VALUE_CODEGENOPT(WarnStackSize , 32, UINT_MAX) ///< Set via -fwarn-stack-size.
CODEGENOPT(NoStackArgProbe, 1, 0) ///< Set when -mno-stack-arg-probe is used
CODEGENOPT(DebugStrictDwarf, 1, 1) ///< Whether or not to use strict DWARF info.
+
+CODEGENOPT(EnableAssignmentTracking, 1,0) ///< Enable the Assignment Tracking
+ ///< debug info feature feature.
+
CODEGENOPT(DebugColumnInfo, 1, 0) ///< Whether or not to use column information
///< in debug info.
} // let Flags = [CC1Option, NoDriverOption]
+def fexperimental_assignment_tracking :
+ Flag<["-"], "fexperimental-assignment-tracking">, Group<f_Group>,
+ HelpText<"Enable assignment tracking debug info">,
+ MarshallingInfoFlag<CodeGenOpts<"EnableAssignmentTracking">>;
+
//===----------------------------------------------------------------------===//
// Dependency Output Options
//===----------------------------------------------------------------------===//
// Forward -Xclang arguments to -cc1, and -mllvm arguments to the LLVM option
// parser.
- // -finclude-default-header flag is for preprocessor,
- // do not pass it to other cc1 commands when save-temps is enabled
- if (C.getDriver().isSaveTempsEnabled() &&
- !isa<PreprocessJobAction>(JA)) {
- for (auto *Arg : Args.filtered(options::OPT_Xclang)) {
- Arg->claim();
- if (StringRef(Arg->getValue()) != "-finclude-default-header")
- CmdArgs.push_back(Arg->getValue());
+ for (auto Arg : Args.filtered(options::OPT_Xclang)) {
+ Arg->claim();
+ // -finclude-default-header flag is for preprocessor,
+ // do not pass it to other cc1 commands when save-temps is enabled
+ if (C.getDriver().isSaveTempsEnabled() &&
+ !isa<PreprocessJobAction>(JA)) {
+ if (StringRef(Arg->getValue()) == "-finclude-default-header")
+ continue;
}
- }
- else {
- Args.AddAllArgValues(CmdArgs, options::OPT_Xclang);
+ if (StringRef(Arg->getValue()) == "-fexperimental-assignment-tracking") {
+ // Add the llvm version of this flag too.
+ CmdArgs.push_back("-mllvm");
+ CmdArgs.push_back("-experimental-assignment-tracking");
+ }
+ CmdArgs.push_back(Arg->getValue());
}
for (const Arg *A : Args.filtered(options::OPT_mllvm)) {
A->claim();
SmallPtrSet<const MDNode *, 32> NodesSeen;
};
+/// Return true if assignment tracking is enabled.
+bool getEnableAssignmentTracking();
} // end namespace llvm
#endif // LLVM_IR_DEBUGINFO_H
using namespace llvm;
using namespace llvm::dwarf;
+static cl::opt<bool>
+ ExperimentalAssignmentTracking("experimental-assignment-tracking",
+ cl::init(false));
+bool llvm::getEnableAssignmentTracking() {
+ return ExperimentalAssignmentTracking;
+}
+
/// Finds all intrinsics declaring local variables as living in the memory that
/// 'V' points to. This may include a mix of dbg.declare and
/// dbg.addr intrinsics.