[PATCH] D83423: [MC, NVPTX] Add MCAsmPrinter support for unsigned-only data directives.
Artem Belevich via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 13 19:27:46 PDT 2020
tra updated this revision to Diff 277639.
tra added a comment.
Use std::make_unsigned to find the matching unsigned type.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D83423/new/
https://reviews.llvm.org/D83423
Files:
llvm/include/llvm/MC/MCAsmInfo.h
llvm/lib/MC/MCExpr.cpp
llvm/lib/Target/NVPTX/MCTargetDesc/NVPTXMCAsmInfo.cpp
llvm/test/DebugInfo/NVPTX/packed_bitfields.ll
Index: llvm/test/DebugInfo/NVPTX/packed_bitfields.ll
===================================================================
--- llvm/test/DebugInfo/NVPTX/packed_bitfields.ll
+++ llvm/test/DebugInfo/NVPTX/packed_bitfields.ll
@@ -14,7 +14,8 @@
; CHECK: .b8 3 // DW_AT_decl_line
; CHECK-NEXT: .b8 1 // DW_AT_byte_size
; CHECK-NEXT: .b8 6 // DW_AT_bit_size
-; CHECK-NEXT: .b64 -1 // DW_AT_bit_offset
+; Negative offset must be encoded as an unsigned integer.
+; CHECK-NEXT: .b64 18446744073709551615 // DW_AT_bit_offset
; CHECK-NEXT: .b8 2 // DW_AT_data_member_location
%struct.anon = type { i16 }
Index: llvm/lib/Target/NVPTX/MCTargetDesc/NVPTXMCAsmInfo.cpp
===================================================================
--- llvm/lib/Target/NVPTX/MCTargetDesc/NVPTXMCAsmInfo.cpp
+++ llvm/lib/Target/NVPTX/MCTargetDesc/NVPTXMCAsmInfo.cpp
@@ -47,6 +47,7 @@
AscizDirective = nullptr; // not supported
SupportsQuotedNames = false;
SupportsExtendedDwarfLocDirective = false;
+ SupportsSignedData = false;
// @TODO: Can we just disable this?
WeakDirective = "\t// .weak\t";
Index: llvm/lib/MC/MCExpr.cpp
===================================================================
--- llvm/lib/MC/MCExpr.cpp
+++ llvm/lib/MC/MCExpr.cpp
@@ -65,7 +65,10 @@
OS << format("0x%016" PRIx64, Value);
break;
}
- else
+ else if (MAI && !MAI->supportsSignedData()) {
+ using unsigned_t = typename std::make_unsigned<decltype(Value)>::type;
+ OS << static_cast<unsigned_t>(Value);
+ } else
OS << Value;
return;
}
Index: llvm/include/llvm/MC/MCAsmInfo.h
===================================================================
--- llvm/include/llvm/MC/MCAsmInfo.h
+++ llvm/include/llvm/MC/MCAsmInfo.h
@@ -209,6 +209,9 @@
const char *Data32bitsDirective;
const char *Data64bitsDirective;
+ /// True if data directives support signed values
+ bool SupportsSignedData = true;
+
/// If non-null, a directive that is used to emit a word which should be
/// relocated as a 64-bit GP-relative offset, e.g. .gpdword on Mips. Defaults
/// to nullptr.
@@ -436,6 +439,7 @@
const char *getData16bitsDirective() const { return Data16bitsDirective; }
const char *getData32bitsDirective() const { return Data32bitsDirective; }
const char *getData64bitsDirective() const { return Data64bitsDirective; }
+ bool supportsSignedData() const { return SupportsSignedData; }
const char *getGPRel64Directive() const { return GPRel64Directive; }
const char *getGPRel32Directive() const { return GPRel32Directive; }
const char *getDTPRel64Directive() const { return DTPRel64Directive; }
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D83423.277639.patch
Type: text/x-patch
Size: 2668 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200714/4695df61/attachment.bin>
More information about the llvm-commits
mailing list