23 #ifndef LLVM_BUILD_GLOBAL_ISEL
24 #error "You shouldn't build this"
28 using namespace TargetOpcode;
39 for (
auto BinOp : {G_ADD, G_SUB, G_MUL, G_AND, G_OR, G_XOR, G_SHL}) {
42 for (
auto Ty : {s1, s8, s16, s32, s64, v2s32, v4s32, v2s64})
49 for (
auto Ty : {s1, s8, s16, s32})
52 for (
auto BinOp : {G_LSHR, G_ASHR, G_SDIV, G_UDIV}) {
53 for (
auto Ty : {s32, s64})
56 for (
auto Ty : {s1, s8, s16})
60 for (
auto BinOp : { G_SREM, G_UREM })
61 for (
auto Ty : { s1, s8, s16, s32, s64 })
64 for (
auto Op : { G_UADDE, G_USUBE, G_SADDO, G_SSUBO, G_SMULO, G_UMULO }) {
65 for (
auto Ty : { s32, s64 })
71 for (
auto BinOp : {G_FADD, G_FSUB, G_FMUL, G_FDIV})
72 for (
auto Ty : {s32, s64})
78 for (
auto MemOp : {G_LOAD, G_STORE}) {
79 for (
auto Ty : {s8, s16, s32, s64, p0, v2s32})
89 for (
auto Ty : {s32, s64}) {
96 for (
auto Ty : {s1, s8, s16})
106 for (
auto Ty : {s1, s8, s16}) {
115 for (
auto Ty : { s1, s8, s16, s32, s64 }) {
121 for (
auto Ty : { s1, s8, s16, s32 }) {
131 for (
auto Ty : { s16, s32 })
134 for (
auto Ty : { s32, s64 })
137 for (
auto Ty : { s1, s8, s16, s32 })
140 for (
auto Ty : { s8, s16, s32, s64 })
144 for (
auto Ty : { s1, s8, s16, s32, s64 }) {
151 for (
auto Ty : { s32, s64 }) {
159 for (
auto Ty : {s1, s8, s16, s32})
163 for (
auto Ty : {s1, s8, s16, s32, s64})
172 for (
auto Ty : {s1, s8, s16, s32, s64})
181 for (
auto Ty : {s1, s8, s16, s32, s64}) {
188 for (
int EltSize = 8; EltSize <= 64; EltSize *= 2) {
This file declares the targeting of the Machinelegalizer class for AArch64.
void computeTables()
Compute any ancillary tables needed to quickly decide how an operation should be handled.
static LLT scalar(unsigned SizeInBits)
Get a low-level scalar or aggregate "bag of bits".
The operation should be implemented as a call to some kind of runtime support library.
The operation should be implemented in terms of a wider scalar base-type.
The operation itself must be expressed in terms of simpler actions on this target.
The operation is expected to be selectable directly by the target, and no transformation is necessary...
static LLT pointer(uint16_t AddressSpace, unsigned SizeInBits)
Get a low-level pointer in the given address space (defaulting to 0).
static LLT vector(uint16_t NumElements, unsigned ScalarSizeInBits)
Get a low-level vector of some number of elements and element width.
void setAction(const InstrAspect &Aspect, LegalizeAction Action)
More friendly way to set an action for common types that have an LLT representation.