Go to the documentation of this file.
28 std::unique_ptr<MCDXContainerTargetWriter> TargetObjectWriter;
31 DXContainerObjectWriter(std::unique_ptr<MCDXContainerTargetWriter> MOTW,
35 ~DXContainerObjectWriter()
override {}
63 "Section size too large for DXContainer");
65 PartOffsets.push_back(PartOffset);
70 "Part data too large for DXContainer");
74 uint64_t FileSize = PartStart + PartOffset;
76 "File size too large for DXContainer");
79 W.write<
char>({
'D',
'X',
'B',
'C'});
99 unsigned Start =
W.OS.tell();
105 if (Sec.getName() ==
"DXIL")
110 if (Sec.getName() ==
"DXIL") {
114 const Triple &
TT =
Asm.getContext().getTargetTriple();
119 if (
TT.hasEnvironment())
133 Asm.writeSectionData(
W.OS, &Sec, Layout);
134 unsigned Size =
W.OS.tell() - Start;
142 return std::make_unique<DXContainerObjectWriter>(
std::move(MOTW), OS);
uint64_t alignTo(uint64_t Size, Align A)
Returns a multiple of A needed to store Size bytes.
This is an optimization pass for GlobalISel generic memory operations.
constexpr bool IsBigEndianHost
std::unique_ptr< MCObjectWriter > createDXContainerObjectWriter(std::unique_ptr< MCDXContainerTargetWriter > MOTW, raw_pwrite_stream &OS)
Construct a new DXContainer writer instance.
Target - Wrapper for Target specific information.
Triple - Helper class for working with autoconf configuration names.
Expected< ExpressionValue > max(const ExpressionValue &Lhs, const ExpressionValue &Rhs)
Adapter to write values to a stream in a particular byte order.
Represents a version number in the form major[.minor[.subminor[.build]]].
An abstract base class for streams implementations that also support a pwrite operation.
compiles ldr LCPI1_0 ldr ldr mov lsr tst moveq r1 ldr LCPI1_1 and r0 bx lr It would be better to do something like to fold the shift into the conditional move
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
<%struct.s * > cast struct s *S to sbyte *< sbyte * > sbyte uint cast struct s *agg result to sbyte *< sbyte * > sbyte uint cast struct s *memtmp to sbyte *< sbyte * > sbyte uint ret void llc ends up issuing two memcpy or custom lower memcpy(of small size) to be ldmia/stmia. I think option 2 is better but the current register allocator cannot allocate a chunk of registers at a time. A feasible temporary solution is to use specific physical registers at the lowering time for small(<
virtual ~MCDXContainerTargetWriter()
Defines the object file and target independent interfaces used by the assembler backend to write nati...
Instances of this class represent a uniqued identifier for a section in the current translation unit.
Encapsulates the layout of an assembly file at a particular point in time.
Reimplement select in terms of SEL *We would really like to support but we need to prove that the add doesn t need to overflow between the two bit chunks *Implement pre post increment support(e.g. PR935) *Implement smarter const ant generation for binops with large immediates. A few ARMv6T2 ops should be pattern matched
This represents an "assembler immediate".
uint64_t getSectionAddressSize(const MCSection *Sec) const
Get the address space size of the given section, as it effects layout.
Encode information on a single operation to perform on a byte sequence (e.g., an encoded instruction)...
uint64_t offsetToAlignment(uint64_t Value, Align Alignment)
Returns the offset to the next integer (mod 2**64) that is greater than or equal to Value and is a mu...