summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/include/llvm/XRay/FDRRecords.h5
-rw-r--r--llvm/lib/XRay/RecordInitializer.cpp9
-rw-r--r--llvm/lib/XRay/RecordPrinter.cpp2
-rw-r--r--llvm/test/tools/llvm-xray/X86/fdr-dump-arg1-version-3.txt4
-rw-r--r--llvm/test/tools/llvm-xray/X86/fdr-dump-arg1.txt2
-rw-r--r--llvm/unittests/XRay/FDRBlockIndexerTest.cpp6
-rw-r--r--llvm/unittests/XRay/FDRBlockVerifierTest.cpp14
-rw-r--r--llvm/unittests/XRay/FDRProducerConsumerTest.cpp2
-rw-r--r--llvm/unittests/XRay/FDRRecordPrinterTest.cpp4
-rw-r--r--llvm/unittests/XRay/FDRRecordsTest.cpp8
-rw-r--r--llvm/unittests/XRay/FDRTraceWriterTest.cpp6
11 files changed, 36 insertions, 26 deletions
diff --git a/llvm/include/llvm/XRay/FDRRecords.h b/llvm/include/llvm/XRay/FDRRecords.h
index ab98a030129..c524dab2a33 100644
--- a/llvm/include/llvm/XRay/FDRRecords.h
+++ b/llvm/include/llvm/XRay/FDRRecords.h
@@ -119,16 +119,19 @@ public:
class NewCPUIDRecord : public MetadataRecord {
uint16_t CPUId = 0;
+ uint64_t TSC = 0;
friend class RecordInitializer;
public:
NewCPUIDRecord() = default;
- explicit NewCPUIDRecord(uint16_t C) : MetadataRecord(), CPUId(C) {}
+ NewCPUIDRecord(uint16_t C, uint64_t T) : MetadataRecord(), CPUId(C), TSC(T) {}
MetadataType metadataType() const override { return MetadataType::NewCPUId; }
uint16_t cpuid() const { return CPUId; }
+ uint64_t tsc() const { return TSC; }
+
Error apply(RecordVisitor &V) override;
};
diff --git a/llvm/lib/XRay/RecordInitializer.cpp b/llvm/lib/XRay/RecordInitializer.cpp
index de4e68bc966..7f9fd4c9627 100644
--- a/llvm/lib/XRay/RecordInitializer.cpp
+++ b/llvm/lib/XRay/RecordInitializer.cpp
@@ -61,13 +61,20 @@ Error RecordInitializer::visit(NewCPUIDRecord &R) {
return createStringError(std::make_error_code(std::errc::bad_address),
"Invalid offset for a new cpu id record (%d).",
OffsetPtr);
+ auto BeginOffset = OffsetPtr;
auto PreReadOffset = OffsetPtr;
R.CPUId = E.getU16(&OffsetPtr);
if (OffsetPtr == PreReadOffset)
return createStringError(std::make_error_code(std::errc::bad_message),
"Cannot read CPU id at offset %d.", OffsetPtr);
- OffsetPtr += MetadataRecord::kMetadataBodySize - (OffsetPtr - PreReadOffset);
+ PreReadOffset = OffsetPtr;
+ R.TSC = E.getU64(&OffsetPtr);
+ if (OffsetPtr == PreReadOffset)
+ return createStringError(std::make_error_code(std::errc::bad_message),
+ "Cannot read CPU TSC at offset %d.", OffsetPtr);
+
+ OffsetPtr += MetadataRecord::kMetadataBodySize - (OffsetPtr - BeginOffset);
return Error::success();
}
diff --git a/llvm/lib/XRay/RecordPrinter.cpp b/llvm/lib/XRay/RecordPrinter.cpp
index d2943e4bad3..09b25ddba25 100644
--- a/llvm/lib/XRay/RecordPrinter.cpp
+++ b/llvm/lib/XRay/RecordPrinter.cpp
@@ -25,7 +25,7 @@ Error RecordPrinter::visit(WallclockRecord &R) {
}
Error RecordPrinter::visit(NewCPUIDRecord &R) {
- OS << formatv("<CPU ID: {0}>", R.cpuid()) << Delim;
+ OS << formatv("<CPU: id = {0}, tsc = {1}>", R.cpuid(), R.tsc()) << Delim;
return Error::success();
}
diff --git a/llvm/test/tools/llvm-xray/X86/fdr-dump-arg1-version-3.txt b/llvm/test/tools/llvm-xray/X86/fdr-dump-arg1-version-3.txt
index de35cfab754..35303016af9 100644
--- a/llvm/test/tools/llvm-xray/X86/fdr-dump-arg1-version-3.txt
+++ b/llvm/test/tools/llvm-xray/X86/fdr-dump-arg1-version-3.txt
@@ -8,8 +8,8 @@
; CHECK-NEXT: <PID: 2631>
; CHECK-EMPTY:
; CHECK-NEXT: Body:
-; CHECK-NEXT: <CPU ID: 6>
-; CHECK-NEXT: <CPU ID: 6>
+; CHECK-NEXT: <CPU: id = 6, tsc = 2034042117104344>
+; CHECK-NEXT: <CPU: id = 6, tsc = 2034042117104344>
; CHECK-NEXT: <TSC Wrap: base = 2034042117104344>
; CHECK-EMPTY:
; CHECK-NEXT: - <Function Enter: #3 delta = +3>
diff --git a/llvm/test/tools/llvm-xray/X86/fdr-dump-arg1.txt b/llvm/test/tools/llvm-xray/X86/fdr-dump-arg1.txt
index 76cd98e7113..df39f6ddd5f 100644
--- a/llvm/test/tools/llvm-xray/X86/fdr-dump-arg1.txt
+++ b/llvm/test/tools/llvm-xray/X86/fdr-dump-arg1.txt
@@ -6,7 +6,7 @@
; CHECK-NEXT: <Wall Time: seconds = 1452786.250689>
; CHECK-EMPTY:
; CHECK-NEXT: Body:
-; CHECK-NEXT: <CPU ID: 49>
+; CHECK-NEXT: <CPU: id = 49, tsc = 18828908666540172>
; CHECK-NEXT: <TSC Wrap: base = 18828908666540172>
; CHECK-EMPTY:
; CHECK-NEXT: - <Function Enter: #1 delta = +1>
diff --git a/llvm/unittests/XRay/FDRBlockIndexerTest.cpp b/llvm/unittests/XRay/FDRBlockIndexerTest.cpp
index 6f9d3eed33f..558840b111a 100644
--- a/llvm/unittests/XRay/FDRBlockIndexerTest.cpp
+++ b/llvm/unittests/XRay/FDRBlockIndexerTest.cpp
@@ -30,7 +30,7 @@ TEST(FDRBlockIndexerTest, IndexBlocksV3) {
.add<NewBufferRecord>(1)
.add<WallclockRecord>(1, 2)
.add<PIDRecord>(1)
- .add<NewCPUIDRecord>(1)
+ .add<NewCPUIDRecord>(1, 2)
.add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
.add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
.consume();
@@ -39,7 +39,7 @@ TEST(FDRBlockIndexerTest, IndexBlocksV3) {
.add<NewBufferRecord>(1)
.add<WallclockRecord>(1, 2)
.add<PIDRecord>(1)
- .add<NewCPUIDRecord>(1)
+ .add<NewCPUIDRecord>(1, 2)
.add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
.add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
.consume();
@@ -48,7 +48,7 @@ TEST(FDRBlockIndexerTest, IndexBlocksV3) {
.add<NewBufferRecord>(2)
.add<WallclockRecord>(1, 2)
.add<PIDRecord>(1)
- .add<NewCPUIDRecord>(2)
+ .add<NewCPUIDRecord>(2, 2)
.add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
.add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
.consume();
diff --git a/llvm/unittests/XRay/FDRBlockVerifierTest.cpp b/llvm/unittests/XRay/FDRBlockVerifierTest.cpp
index bc95d1b9ca1..a6e0a8cd388 100644
--- a/llvm/unittests/XRay/FDRBlockVerifierTest.cpp
+++ b/llvm/unittests/XRay/FDRBlockVerifierTest.cpp
@@ -28,7 +28,7 @@ TEST(FDRBlockVerifierTest, ValidBlocksV3) {
.add<NewBufferRecord>(1)
.add<WallclockRecord>(1, 2)
.add<PIDRecord>(1)
- .add<NewCPUIDRecord>(1)
+ .add<NewCPUIDRecord>(1, 2)
.add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
.add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
.consume();
@@ -37,7 +37,7 @@ TEST(FDRBlockVerifierTest, ValidBlocksV3) {
.add<NewBufferRecord>(1)
.add<WallclockRecord>(1, 2)
.add<PIDRecord>(1)
- .add<NewCPUIDRecord>(1)
+ .add<NewCPUIDRecord>(1, 2)
.add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
.add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
.consume();
@@ -46,7 +46,7 @@ TEST(FDRBlockVerifierTest, ValidBlocksV3) {
.add<NewBufferRecord>(2)
.add<WallclockRecord>(1, 2)
.add<PIDRecord>(1)
- .add<NewCPUIDRecord>(2)
+ .add<NewCPUIDRecord>(2, 2)
.add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
.add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
.consume();
@@ -75,7 +75,7 @@ TEST(FDRBlockVerifierTest, MissingPIDRecord) {
.add<BufferExtents>(20)
.add<NewBufferRecord>(1)
.add<WallclockRecord>(1, 2)
- .add<NewCPUIDRecord>(1)
+ .add<NewCPUIDRecord>(1, 2)
.add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
.add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
.consume();
@@ -89,7 +89,7 @@ TEST(FDRBlockVerifierTest, MissingBufferExtents) {
auto Block = LogBuilder()
.add<NewBufferRecord>(1)
.add<WallclockRecord>(1, 2)
- .add<NewCPUIDRecord>(1)
+ .add<NewCPUIDRecord>(1, 2)
.add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
.add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
.consume();
@@ -103,7 +103,7 @@ TEST(FDRBlockVerifierTest, IgnoreRecordsAfterEOB) {
auto Block = LogBuilder()
.add<NewBufferRecord>(1)
.add<WallclockRecord>(1, 2)
- .add<NewCPUIDRecord>(1)
+ .add<NewCPUIDRecord>(1, 2)
.add<EndBufferRecord>()
.add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
.add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
@@ -118,7 +118,7 @@ TEST(FDRBlockVerifierTest, MalformedV2) {
auto Block = LogBuilder()
.add<NewBufferRecord>(1)
.add<WallclockRecord>(1, 2)
- .add<NewCPUIDRecord>(1)
+ .add<NewCPUIDRecord>(1, 2)
.add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
.add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
.add<NewBufferRecord>(2)
diff --git a/llvm/unittests/XRay/FDRProducerConsumerTest.cpp b/llvm/unittests/XRay/FDRProducerConsumerTest.cpp
index 58e252dd25b..838e6ca9bf1 100644
--- a/llvm/unittests/XRay/FDRProducerConsumerTest.cpp
+++ b/llvm/unittests/XRay/FDRProducerConsumerTest.cpp
@@ -42,7 +42,7 @@ template <> std::unique_ptr<Record> MakeRecord<NewBufferRecord>() {
}
template <> std::unique_ptr<Record> MakeRecord<NewCPUIDRecord>() {
- return make_unique<NewCPUIDRecord>(1);
+ return make_unique<NewCPUIDRecord>(1, 2);
}
template <> std::unique_ptr<Record> MakeRecord<TSCWrapRecord>() {
diff --git a/llvm/unittests/XRay/FDRRecordPrinterTest.cpp b/llvm/unittests/XRay/FDRRecordPrinterTest.cpp
index f4cebf8d1f4..339d4b0d428 100644
--- a/llvm/unittests/XRay/FDRRecordPrinterTest.cpp
+++ b/llvm/unittests/XRay/FDRRecordPrinterTest.cpp
@@ -39,10 +39,10 @@ template <> struct Helper<WallclockRecord> {
template <> struct Helper<NewCPUIDRecord> {
static std::unique_ptr<Record> construct() {
- return make_unique<NewCPUIDRecord>(1);
+ return make_unique<NewCPUIDRecord>(1, 2);
}
- static const char *expected() { return "<CPU ID: 1>"; }
+ static const char *expected() { return "<CPU: id = 1, tsc = 2>"; }
};
template <> struct Helper<TSCWrapRecord> {
diff --git a/llvm/unittests/XRay/FDRRecordsTest.cpp b/llvm/unittests/XRay/FDRRecordsTest.cpp
index 24ff7a5ad51..1cce1c2b2c1 100644
--- a/llvm/unittests/XRay/FDRRecordsTest.cpp
+++ b/llvm/unittests/XRay/FDRRecordsTest.cpp
@@ -75,7 +75,7 @@ TEST(XRayFDRTest, BuilderAndBlockVerifier) {
.add<NewBufferRecord>(1)
.add<WallclockRecord>(1, 1)
.add<PIDRecord>(1)
- .add<NewCPUIDRecord>(1)
+ .add<NewCPUIDRecord>(1, 2)
.consume();
BlockVerifier Verifier;
for (auto &R : Block)
@@ -89,7 +89,7 @@ TEST(XRayFDRTest, IndexAndVerifyBlocks) {
.add<NewBufferRecord>(1)
.add<WallclockRecord>(1, 1)
.add<PIDRecord>(1)
- .add<NewCPUIDRecord>(1)
+ .add<NewCPUIDRecord>(1, 2)
.add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
.add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
.consume();
@@ -98,7 +98,7 @@ TEST(XRayFDRTest, IndexAndVerifyBlocks) {
.add<NewBufferRecord>(1)
.add<WallclockRecord>(1, 1)
.add<PIDRecord>(1)
- .add<NewCPUIDRecord>(1)
+ .add<NewCPUIDRecord>(1, 2)
.add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
.add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
.consume();
@@ -107,7 +107,7 @@ TEST(XRayFDRTest, IndexAndVerifyBlocks) {
.add<NewBufferRecord>(1)
.add<WallclockRecord>(1, 1)
.add<PIDRecord>(1)
- .add<NewCPUIDRecord>(1)
+ .add<NewCPUIDRecord>(1, 2)
.add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
.add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
.consume();
diff --git a/llvm/unittests/XRay/FDRTraceWriterTest.cpp b/llvm/unittests/XRay/FDRTraceWriterTest.cpp
index e9a35fe67b6..e78b71d6ff7 100644
--- a/llvm/unittests/XRay/FDRTraceWriterTest.cpp
+++ b/llvm/unittests/XRay/FDRTraceWriterTest.cpp
@@ -47,7 +47,7 @@ TEST(FDRTraceWriterTest, WriteToStringBufferVersion3) {
.add<NewBufferRecord>(1)
.add<WallclockRecord>(1, 1)
.add<PIDRecord>(1)
- .add<NewCPUIDRecord>(1)
+ .add<NewCPUIDRecord>(1, 2)
.add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
.add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
.consume();
@@ -92,7 +92,7 @@ TEST(FDRTraceWriterTest, WriteToStringBufferVersion2) {
.add<BufferExtents>(64)
.add<NewBufferRecord>(1)
.add<WallclockRecord>(1, 1)
- .add<NewCPUIDRecord>(1)
+ .add<NewCPUIDRecord>(1, 2)
.add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
.add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
.consume();
@@ -143,7 +143,7 @@ TEST(FDRTraceWriterTest, WriteToStringBufferVersion1) {
auto L = LogBuilder()
.add<NewBufferRecord>(1)
.add<WallclockRecord>(1, 1)
- .add<NewCPUIDRecord>(1)
+ .add<NewCPUIDRecord>(1, 2)
.add<FunctionRecord>(RecordTypes::ENTER, 1, 1)
.add<FunctionRecord>(RecordTypes::EXIT, 1, 100)
.add<EndBufferRecord>()
OpenPOWER on IntegriCloud