From af677ebb41036e950f0405becee6b530907bae41 Mon Sep 17 00:00:00 2001 From: "Duncan P. N. Exon Smith" Date: Fri, 6 Feb 2015 22:50:13 +0000 Subject: [PATCH] IR: Allow 32-bits for lines in debug location Remove unnecessary restriction of 24-bits for line numbers in `MDLocation`. The rest of the debug info schema (with the exception of local variables) uses 32-bits for line numbers. As I introduce the specialized nodes, it makes sense to canonicalize on one size or the other. llvm-svn: 228455 --- llvm/lib/AsmParser/LLParser.cpp | 2 +- llvm/lib/IR/DebugInfoMetadata.cpp | 10 +--------- llvm/test/Assembler/invalid-mdlocation-overflow-line.ll | 6 +++--- llvm/test/Assembler/mdlocation.ll | 4 ++-- llvm/unittests/IR/MetadataTest.cpp | 13 ++++++------- 5 files changed, 13 insertions(+), 22 deletions(-) diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp index 6562709..6bf3d80 100644 --- a/llvm/lib/AsmParser/LLParser.cpp +++ b/llvm/lib/AsmParser/LLParser.cpp @@ -2946,7 +2946,7 @@ struct MDUnsignedField : public MDFieldImpl { : ImplTy(Default), Max(Max) {} }; struct LineField : public MDUnsignedField { - LineField() : MDUnsignedField(0, UINT32_MAX >> 8) {} + LineField() : MDUnsignedField(0, UINT32_MAX) {} }; struct ColumnField : public MDUnsignedField { ColumnField() : MDUnsignedField(0, UINT16_MAX) {} diff --git a/llvm/lib/IR/DebugInfoMetadata.cpp b/llvm/lib/IR/DebugInfoMetadata.cpp index 467d21a..c540cc4 100644 --- a/llvm/lib/IR/DebugInfoMetadata.cpp +++ b/llvm/lib/IR/DebugInfoMetadata.cpp @@ -24,19 +24,12 @@ MDLocation::MDLocation(LLVMContext &C, StorageType Storage, unsigned Line, "Expected a scope and optional inlined-at"); // Set line and column. - assert(Line < (1u << 24) && "Expected 24-bit line"); assert(Column < (1u << 16) && "Expected 16-bit column"); SubclassData32 = Line; SubclassData16 = Column; } -static void adjustLine(unsigned &Line) { - // Set to unknown on overflow. Still use 24 bits for now. - if (Line >= (1u << 24)) - Line = 0; -} - static void adjustColumn(unsigned &Column) { // Set to unknown on overflow. We only have 16 bits to play with here. if (Column >= (1u << 16)) @@ -47,8 +40,7 @@ MDLocation *MDLocation::getImpl(LLVMContext &Context, unsigned Line, unsigned Column, Metadata *Scope, Metadata *InlinedAt, StorageType Storage, bool ShouldCreate) { - // Fixup line/column. - adjustLine(Line); + // Fixup column. adjustColumn(Column); if (Storage == Uniqued) { diff --git a/llvm/test/Assembler/invalid-mdlocation-overflow-line.ll b/llvm/test/Assembler/invalid-mdlocation-overflow-line.ll index 8e19f69..535b4c9 100644 --- a/llvm/test/Assembler/invalid-mdlocation-overflow-line.ll +++ b/llvm/test/Assembler/invalid-mdlocation-overflow-line.ll @@ -3,7 +3,7 @@ !0 = !{} ; CHECK-NOT: error -!1 = !MDLocation(line: 16777215, scope: !0) +!1 = !MDLocation(line: 4294967295, scope: !0) -; CHECK: :[[@LINE+1]]:24: error: value for 'line' too large, limit is 16777215 -!2 = !MDLocation(line: 16777216, scope: !0) +; CHECK: :[[@LINE+1]]:24: error: value for 'line' too large, limit is 4294967295 +!2 = !MDLocation(line: 4294967296, scope: !0) diff --git a/llvm/test/Assembler/mdlocation.ll b/llvm/test/Assembler/mdlocation.ll index c0a7b24..e095d90 100644 --- a/llvm/test/Assembler/mdlocation.ll +++ b/llvm/test/Assembler/mdlocation.ll @@ -19,5 +19,5 @@ !5 = !MDLocation(scope: !0) !6 = !MDLocation(scope: !0, column: 0, line: 0) -; CHECK-NEXT: !4 = !MDLocation(line: 16777215, column: 65535, scope: !0) -!7 = !MDLocation(line: 16777215, column: 65535, scope: !0) +; CHECK-NEXT: !4 = !MDLocation(line: 4294967295, column: 65535, scope: !0) +!7 = !MDLocation(line: 4294967295, column: 65535, scope: !0) diff --git a/llvm/unittests/IR/MetadataTest.cpp b/llvm/unittests/IR/MetadataTest.cpp index 8282017..ce55d95 100644 --- a/llvm/unittests/IR/MetadataTest.cpp +++ b/llvm/unittests/IR/MetadataTest.cpp @@ -538,21 +538,20 @@ TEST_F(MDLocationTest, Overflow) { EXPECT_EQ(2u, L->getLine()); EXPECT_EQ(7u, L->getColumn()); } - unsigned U24 = 1u << 24; unsigned U16 = 1u << 16; { - MDLocation *L = MDLocation::get(Context, U24 - 1, U16 - 1, N); - EXPECT_EQ(U24 - 1, L->getLine()); + MDLocation *L = MDLocation::get(Context, UINT32_MAX, U16 - 1, N); + EXPECT_EQ(UINT32_MAX, L->getLine()); EXPECT_EQ(U16 - 1, L->getColumn()); } { - MDLocation *L = MDLocation::get(Context, U24, U16, N); - EXPECT_EQ(0u, L->getLine()); + MDLocation *L = MDLocation::get(Context, UINT32_MAX, U16, N); + EXPECT_EQ(UINT32_MAX, L->getLine()); EXPECT_EQ(0u, L->getColumn()); } { - MDLocation *L = MDLocation::get(Context, U24 + 1, U16 + 1, N); - EXPECT_EQ(0u, L->getLine()); + MDLocation *L = MDLocation::get(Context, UINT32_MAX, U16 + 1, N); + EXPECT_EQ(UINT32_MAX, L->getLine()); EXPECT_EQ(0u, L->getColumn()); } } -- 2.7.4