[PATCH] D82280: Fix for NVPTX module asm regression
Artem Belevich via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 24 11:21:53 PDT 2020
tra updated this revision to Diff 273107.
tra added a comment.
Updated the test.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D82280/new/
https://reviews.llvm.org/D82280
Files:
llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
llvm/lib/Target/NVPTX/NVPTXAsmPrinter.h
llvm/test/CodeGen/NVPTX/module-inline-asm.ll
Index: llvm/test/CodeGen/NVPTX/module-inline-asm.ll
===================================================================
--- llvm/test/CodeGen/NVPTX/module-inline-asm.ll
+++ llvm/test/CodeGen/NVPTX/module-inline-asm.ll
@@ -2,9 +2,19 @@
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v16:16:16-v32:32:32-v64:64:64-v128:128:128-n16:32:64"
+; module asm must come after PTX version/target directives.
+; CHECK-NOT: .global .b32 val;
+
+; CHECK-DAG: .version
+; CHECK-DAG: .target
+
; CHECK: .global .b32 val;
module asm ".global .b32 val;"
+; module asm must happen before we emit other things.
+; CHECK-LABEL: .visible .func foo
define void @foo() {
ret void
}
+; Make sure it does not show up anywhere else in the output.
+; CHECK-NOT: .global .b32 val;
Index: llvm/lib/Target/NVPTX/NVPTXAsmPrinter.h
===================================================================
--- llvm/lib/Target/NVPTX/NVPTXAsmPrinter.h
+++ llvm/lib/Target/NVPTX/NVPTXAsmPrinter.h
@@ -200,6 +200,7 @@
const Function *F;
std::string CurrentFnName;
+ void emitStartOfAsmFile(Module &M) override;
void emitBasicBlockStart(const MachineBasicBlock &MBB) override;
void emitFunctionEntryLabel() override;
void emitFunctionBodyStart() override;
Index: llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
===================================================================
--- llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
+++ llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
@@ -762,13 +762,21 @@
return InitList->getNumOperands() == 0;
}
-bool NVPTXAsmPrinter::doInitialization(Module &M) {
+void NVPTXAsmPrinter::emitStartOfAsmFile(Module &M) {
// Construct a default subtarget off of the TargetMachine defaults. The
// rest of NVPTX isn't friendly to change subtargets per function and
// so the default TargetMachine will have all of the options.
const NVPTXTargetMachine &NTM = static_cast<const NVPTXTargetMachine &>(TM);
const auto* STI = static_cast<const NVPTXSubtarget*>(NTM.getSubtargetImpl());
+ SmallString<128> Str1;
+ raw_svector_ostream OS1(Str1);
+ // Emit header before any dwarf directives are emitted below.
+ emitHeader(M, OS1, *STI);
+ OutStreamer->emitRawText(OS1.str());
+}
+
+bool NVPTXAsmPrinter::doInitialization(Module &M) {
if (M.alias_size()) {
report_fatal_error("Module has aliases, which NVPTX does not support.");
return true; // error
@@ -784,26 +792,9 @@
return true; // error
}
- SmallString<128> Str1;
- raw_svector_ostream OS1(Str1);
-
// We need to call the parent's one explicitly.
bool Result = AsmPrinter::doInitialization(M);
- // Emit header before any dwarf directives are emitted below.
- emitHeader(M, OS1, *STI);
- OutStreamer->emitRawText(OS1.str());
-
- // Emit module-level inline asm if it exists.
- if (!M.getModuleInlineAsm().empty()) {
- OutStreamer->AddComment("Start of file scope inline assembly");
- OutStreamer->AddBlankLine();
- OutStreamer->emitRawText(StringRef(M.getModuleInlineAsm()));
- OutStreamer->AddBlankLine();
- OutStreamer->AddComment("End of file scope inline assembly");
- OutStreamer->AddBlankLine();
- }
-
GlobalsEmitted = false;
return Result;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D82280.273107.patch
Type: text/x-patch
Size: 3246 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200624/de9356bc/attachment.bin>
More information about the llvm-commits
mailing list