aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/AArch64/AArch64MachineLegalizer.cpp
diff options
context:
space:
mode:
authorTim Northover <tnorthover@apple.com>2016-08-23 21:01:26 +0000
committerTim Northover <tnorthover@apple.com>2016-08-23 21:01:26 +0000
commit6cd4b23a0fc9cc2f24d996148e170b0a538079d7 (patch)
treef70e16cf6123f81966b6be1c3a163a3b6a98cb11 /llvm/lib/Target/AArch64/AArch64MachineLegalizer.cpp
parentb3a0be4d38ab08456aa4406e86d1b6c76581245a (diff)
downloadllvm-6cd4b23a0fc9cc2f24d996148e170b0a538079d7.zip
llvm-6cd4b23a0fc9cc2f24d996148e170b0a538079d7.tar.gz
llvm-6cd4b23a0fc9cc2f24d996148e170b0a538079d7.tar.bz2
GlobalISel: legalize integer comparisons on AArch64.
Next step is doing both legalizations at the same time! Marvel at GlobalISel's cunning. llvm-svn: 279566
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64MachineLegalizer.cpp')
-rw-r--r--llvm/lib/Target/AArch64/AArch64MachineLegalizer.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64MachineLegalizer.cpp b/llvm/lib/Target/AArch64/AArch64MachineLegalizer.cpp
index 9d9f0b3..038c3cc 100644
--- a/llvm/lib/Target/AArch64/AArch64MachineLegalizer.cpp
+++ b/llvm/lib/Target/AArch64/AArch64MachineLegalizer.cpp
@@ -73,6 +73,19 @@ AArch64MachineLegalizer::AArch64MachineLegalizer() {
setAction({TargetOpcode::G_FCONSTANT, s16}, WidenScalar);
+ // Comparisons: we produce a result in s32 with undefined high-bits for
+ // now. Values being compared can be 32 or 64-bits.
+ for (auto CmpOp : { G_ICMP }) {
+ setAction({CmpOp, 0, s32}, Legal);
+ setAction({CmpOp, 1, s32}, Legal);
+ setAction({CmpOp, 1, s64}, Legal);
+
+ for (auto Ty : {s1, s8, s16}) {
+ setAction({CmpOp, 0, Ty}, WidenScalar);
+ setAction({CmpOp, 1, Ty}, WidenScalar);
+ }
+ }
+
// Control-flow
setAction({G_BR, LLT::unsized()}, Legal);
setAction({G_BRCOND, s32}, Legal);