Go to the documentation of this file.
21 static_assert((
uint64_t)dxbc::FeatureFlags::NextUnusedBit <= 1ull << 63,
22 "Shader flag bits exceed enum size.");
25 #define SHADER_FLAG(Num, Val, Str) \
26 Val = (FlagData & (uint64_t)dxbc::FeatureFlags::Val) > 0;
27 #include "llvm/BinaryFormat/DXContainerConstants.def"
32 #define SHADER_FLAG(Num, Val, Str) \
34 Flag |= (uint64_t)dxbc::FeatureFlags::Val;
35 #include "llvm/BinaryFormat/DXContainerConstants.def"
50 IO.mapRequired(
"Major",
Version.Major);
51 IO.mapRequired(
"Minor",
Version.Minor);
56 IO.mapRequired(
"Hash", Header.Hash);
57 IO.mapRequired(
"Version", Header.Version);
58 IO.mapOptional(
"FileSize", Header.FileSize);
59 IO.mapRequired(
"PartCount", Header.PartCount);
60 IO.mapOptional(
"PartOffsets", Header.PartOffsets);
67 IO.mapRequired(
"ShaderKind", Program.
ShaderKind);
68 IO.mapOptional(
"Size", Program.
Size);
71 IO.mapOptional(
"DXILSize", Program.
DXILSize);
72 IO.mapOptional(
"DXIL", Program.
DXIL);
77 #define SHADER_FLAG(Num, Val, Str) IO.mapRequired(#Val, Flags.Val);
78 #include "llvm/BinaryFormat/DXContainerConstants.def"
84 IO.mapRequired(
"Digest", Hash.
Digest);
89 IO.mapRequired(
"Name",
P.Name);
90 IO.mapRequired(
"Size",
P.Size);
91 IO.mapOptional(
"Program",
P.Program);
92 IO.mapOptional(
"Flags",
P.Flags);
93 IO.mapOptional(
"Hash",
P.Hash);
98 IO.mapTag(
"!dxcontainer",
true);
99 IO.mapRequired(
"Header", Obj.
Header);
100 IO.mapRequired(
"Parts", Obj.
Parts);
This is an optimization pass for GlobalISel generic memory operations.
This currently compiles esp xmm0 movsd esp eax eax esp ret We should use not the dag combiner This is because dagcombine2 needs to be able to see through the X86ISD::Wrapper which DAGCombine can t really do The code for turning x load into a single vector load is target independent and should be moved to the dag combiner The code for turning x load into a vector load can only handle a direct load from a global or a direct load from the stack It should be generalized to handle any load from P
std::vector< Part > Parts
std::optional< uint32_t > DXILSize
Flag
These should be considered private to the implementation of the MCInstrDesc class.
std::optional< std::vector< llvm::yaml::Hex8 > > DXIL
uint16_t DXILMinorVersion
uint64_t getEncodedFlags()
<%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(<
std::optional< uint32_t > Size
std::vector< llvm::yaml::Hex8 > Digest
uint16_t DXILMajorVersion