LLVM 22.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;
49 SectionKind GVKind = TargetLoweringObjectFile::getKindForGlobal(GV, TM);
50 MCSection *TheSection = getObjFileLowering().SectionForGlobal(GV, GVKind, TM);
51 OutStreamer->switchSection(TheSection);
52 emitGlobalConstant(GV->getDataLayout(), GV->getInitializer());
53}
54
#define LLVM_ABI
Definition Compiler.h:213
#define LLVM_EXTERNAL_VISIBILITY
Definition Compiler.h:132
LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializeDirectXAsmPrinter()
Module.h This file contains the declarations for the Module class.
static TableGen::Emitter::OptClass< SkeletonEmitter > X("gen-skeleton-class", "Generate example skeleton class")
This class is intended to be used as a driving class for all asm writers.
Definition AsmPrinter.h:91
StringRef getSection() const
Get the custom section of this global if it has one.
bool hasSection() const
Check if this global has a custom object file section.
LLVM_ABI const DataLayout & getDataLayout() const
Get the data layout of the module this global belongs to.
Definition Globals.cpp:132
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.
StringRef - Represent a constant reference to a string, i.e.
Definition StringRef.h:55
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.
This is an optimization pass for GlobalISel generic memory operations.
Definition Types.h:26
Target & getTheDirectXTarget()
RegisterAsmPrinter - Helper template for registering a target specific assembly printer,...