Update clang to r339409b.
Change-Id: Ied8a188bb072c40035320acedc86164b66d920af
diff --git a/linux-x64/clang/include/llvm/XRay/FDRTraceExpander.h b/linux-x64/clang/include/llvm/XRay/FDRTraceExpander.h
new file mode 100644
index 0000000..7f8236b
--- /dev/null
+++ b/linux-x64/clang/include/llvm/XRay/FDRTraceExpander.h
@@ -0,0 +1,61 @@
+//===- FDRTraceExpander.h - XRay FDR Mode Log Expander --------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// We define an FDR record visitor which can re-constitute XRayRecord instances
+// from a sequence of FDR mode records in arrival order into a collection.
+//
+//===----------------------------------------------------------------------===//
+#ifndef INCLUDE_LLVM_XRAY_FDRTRACEEXPANDER_H_
+#define INCLUDE_LLVM_XRAY_FDRTRACEEXPANDER_H_
+
+#include "llvm/ADT/STLExtras.h"
+#include "llvm/XRay/FDRRecords.h"
+#include "llvm/XRay/XRayRecord.h"
+
+namespace llvm {
+namespace xray {
+
+class TraceExpander : public RecordVisitor {
+ // Type-erased callback for handling individual XRayRecord instances.
+ function_ref<void(const XRayRecord &)> C;
+ int32_t PID = 0;
+ int32_t TID = 0;
+ uint64_t BaseTSC = 0;
+ XRayRecord CurrentRecord{0, 0, RecordTypes::ENTER, 0, 0, 0, 0, {}};
+ uint16_t CPUId = 0;
+ uint16_t LogVersion = 0;
+ bool BuildingFunction = false;
+ bool IgnoringRecords = false;
+
+ void resetCurrentRecord();
+
+public:
+ explicit TraceExpander(function_ref<void(const XRayRecord &)> F, uint16_t L)
+ : RecordVisitor(), C(std::move(F)), LogVersion(L) {}
+
+ Error visit(BufferExtents &) override;
+ Error visit(WallclockRecord &) override;
+ Error visit(NewCPUIDRecord &) override;
+ Error visit(TSCWrapRecord &) override;
+ Error visit(CustomEventRecord &) override;
+ Error visit(CallArgRecord &) override;
+ Error visit(PIDRecord &) override;
+ Error visit(NewBufferRecord &) override;
+ Error visit(EndBufferRecord &) override;
+ Error visit(FunctionRecord &) override;
+
+ // Must be called after all the records have been processed, to handle the
+ // most recent record generated.
+ Error flush();
+};
+
+} // namespace xray
+} // namespace llvm
+
+#endif // INCLUDE_LLVM_XRAY_FDRTRACEEXPANDER_H_