summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AArch64/AArch64MachineLegalizer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64MachineLegalizer.cpp')
-rw-r--r--llvm/lib/Target/AArch64/AArch64MachineLegalizer.cpp35
1 files changed, 21 insertions, 14 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64MachineLegalizer.cpp b/llvm/lib/Target/AArch64/AArch64MachineLegalizer.cpp
index 2a56ecd6b5b..901bbf1b9b9 100644
--- a/llvm/lib/Target/AArch64/AArch64MachineLegalizer.cpp
+++ b/llvm/lib/Target/AArch64/AArch64MachineLegalizer.cpp
@@ -26,6 +26,7 @@ using namespace llvm;
AArch64MachineLegalizer::AArch64MachineLegalizer() {
using namespace TargetOpcode;
+ const LLT p0 = LLT::pointer(0);
const LLT s1 = LLT::scalar(1);
const LLT s8 = LLT::scalar(8);
const LLT s16 = LLT::scalar(16);
@@ -37,43 +38,49 @@ AArch64MachineLegalizer::AArch64MachineLegalizer() {
for (auto BinOp : {G_ADD, G_SUB, G_MUL, G_AND, G_OR, G_XOR}) {
for (auto Ty : {s32, s64, v2s32, v4s32, v2s64})
- setAction(BinOp, Ty, Legal);
+ setAction({BinOp, Ty}, Legal);
for (auto Ty : {s8, s16})
- setAction(BinOp, Ty, WidenScalar);
+ setAction({BinOp, Ty}, WidenScalar);
}
for (auto BinOp : {G_SHL, G_LSHR, G_ASHR, G_SDIV, G_UDIV})
for (auto Ty : {s32, s64})
- setAction(BinOp, Ty, Legal);
+ setAction({BinOp, Ty}, Legal);
for (auto BinOp : {G_FADD, G_FSUB, G_FMUL, G_FDIV})
for (auto Ty : {s32, s64})
- setAction(BinOp, Ty, Legal);
+ setAction({BinOp, Ty}, Legal);
for (auto MemOp : {G_LOAD, G_STORE}) {
for (auto Ty : {s8, s16, s32, s64})
- setAction(MemOp, Ty, Legal);
+ setAction({MemOp, Ty}, Legal);
- setAction(MemOp, s1, WidenScalar);
+ setAction({MemOp, s1}, WidenScalar);
+
+ // And everything's fine in addrspace 0.
+ setAction({MemOp, 1, p0}, Legal);
}
for (auto Ty : {s32, s64}) {
- setAction(TargetOpcode::G_CONSTANT, Ty, Legal);
- setAction(TargetOpcode::G_FCONSTANT, Ty, Legal);
+ setAction({TargetOpcode::G_CONSTANT, Ty}, Legal);
+ setAction({TargetOpcode::G_FCONSTANT, Ty}, Legal);
}
for (auto Ty : {s1, s8, s16})
- setAction(TargetOpcode::G_CONSTANT, Ty, WidenScalar);
+ setAction({TargetOpcode::G_CONSTANT, Ty}, WidenScalar);
+
+ setAction({TargetOpcode::G_FCONSTANT, s16}, WidenScalar);
- setAction(TargetOpcode::G_FCONSTANT, s16, WidenScalar);
+ setAction({G_BR, LLT::unsized()}, Legal);
- setAction(G_BR, LLT::unsized(), Legal);
+ setAction({G_FRAME_INDEX, p0}, Legal);
- setAction(G_FRAME_INDEX, LLT::pointer(0), Legal);
+ setAction({G_PTRTOINT, 0, s64}, Legal);
+ setAction({G_PTRTOINT, 1, p0}, Legal);
- setAction(G_PTRTOINT, s64, Legal);
- setAction(G_INTTOPTR, LLT::pointer(0), Legal);
+ setAction({G_INTTOPTR, 0, p0}, Legal);
+ setAction({G_INTTOPTR, 1, s64}, Legal);
computeTables();
}
OpenPOWER on IntegriCloud