LLVM 19.0.0git
DirectXAsmPrinter.cpp
Go to the documentation of this file.
1//===-- DirectXAsmPrinter.cpp - DirectX assembly writer --------*- C++ -*--===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file contains AsmPrinters for the DirectX backend.
10//
11//===----------------------------------------------------------------------===//
12
16#include "llvm/IR/Module.h"
17#include "llvm/MC/MCStreamer.h"
18#include "llvm/MC/SectionKind.h"
21
22using namespace llvm;
23
24#define DEBUG_TYPE "asm-printer"
25
26namespace {
27
28// The DXILAsmPrinter is mostly a stub because DXIL is just LLVM bitcode which
29// gets embedded into a DXContainer file.
30class DXILAsmPrinter : public AsmPrinter {
31public:
32 explicit DXILAsmPrinter(TargetMachine &TM,
33 std::unique_ptr<MCStreamer> Streamer)
34 : AsmPrinter(TM, std::move(Streamer)) {}
35
36 StringRef getPassName() const override { return "DXIL Assembly Printer"; }
37 void emitGlobalVariable(const GlobalVariable *GV) override;
38 bool runOnMachineFunction(MachineFunction &MF) override { return false; }
39};
40} // namespace
41
42void DXILAsmPrinter::emitGlobalVariable(const GlobalVariable *GV) {
43 // If there is no initializer, or no explicit section do nothing
44 if (!GV->hasInitializer() || GV->hasImplicitSection() || !GV->hasSection())
45 return;
46 // Skip the LLVM metadata
47 if (GV->getSection() == "llvm.metadata")
48 return;
50 MCSection *TheSection = getObjFileLowering().SectionForGlobal(GV, GVKind, TM);
51 OutStreamer->switchSection(TheSection);
52 emitGlobalConstant(GV->getParent()->getDataLayout(), GV->getInitializer());
53}
54
57}
#define LLVM_EXTERNAL_VISIBILITY
Definition: Compiler.h:135
LLVM_EXTERNAL_VISIBILITY void LLVMInitializeDirectXAsmPrinter()
static GCMetadataPrinterRegistry::Add< ErlangGCPrinter > X("erlang", "erlang-compatible garbage collector")
Module.h This file contains the declarations for the Module class.
const char LLVMTargetMachineRef TM
This class is intended to be used as a driving class for all asm writers.
Definition: AsmPrinter.h:84
virtual void emitGlobalVariable(const GlobalVariable *GV)
Emit the specified global variable to the .s file.
Definition: AsmPrinter.cpp:720
bool runOnMachineFunction(MachineFunction &MF) override
Emit the specified function out to the OutStreamer.
Definition: AsmPrinter.h:395
StringRef getSection() const
Get the custom section of this global if it has one.
Definition: GlobalObject.h:118
bool hasSection() const
Check if this global has a custom object file section.
Definition: GlobalObject.h:110
Module * getParent()
Get the module that this global value is contained inside of...
Definition: GlobalValue.h:655
const Constant * getInitializer() const
getInitializer - Return the initializer for this global variable.
bool hasInitializer() const
Definitions have initializers, declarations don't.
bool hasImplicitSection() const
Check if section name is present.
Instances of this class represent a uniqued identifier for a section in the current translation unit.
Definition: MCSection.h:39
const DataLayout & getDataLayout() const
Get the data layout for the module's target platform.
Definition: Module.h:275
virtual StringRef getPassName() const
getPassName - Return a nice clean name for a pass.
Definition: Pass.cpp:81
SectionKind - This is a simple POD value that classifies the properties of a section.
Definition: SectionKind.h:22
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
static SectionKind getKindForGlobal(const GlobalObject *GO, const TargetMachine &TM)
Classify the specified global variable into a set of target independent categories embodied in Sectio...
Primary interface to the complete machine description for the target machine.
Definition: TargetMachine.h:78
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
Target & getTheDirectXTarget()
RegisterAsmPrinter - Helper template for registering a target specific assembly printer,...