[llvm] 9f6acb1 - [AArch64][GlobalISel] Merge G_SHL, G_ASHR and G_LSHR legalizer rules together.
Amara Emerson via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 1 14:03:11 PDT 2020
Author: Amara Emerson
Date: 2020-10-01T14:02:45-07:00
New Revision: 9f6acb13586b0b3b4e83dc03648ced02517bd236
URL: https://github.com/llvm/llvm-project/commit/9f6acb13586b0b3b4e83dc03648ced02517bd236
DIFF: https://github.com/llvm/llvm-project/commit/9f6acb13586b0b3b4e83dc03648ced02517bd236.diff
LOG: [AArch64][GlobalISel] Merge G_SHL, G_ASHR and G_LSHR legalizer rules together.
There's no need for any difference between these.
Added:
Modified:
llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp
llvm/test/CodeGen/AArch64/GlobalISel/legalize-shift.mir
llvm/test/CodeGen/AArch64/GlobalISel/legalizer-info-validation.mir
Removed:
################################################################################
diff --git a/llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp b/llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp
index ffa49ad15b4c..31dde5d76ac7 100644
--- a/llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp
+++ b/llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp
@@ -113,7 +113,7 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
.clampNumElements(0, v2s64, v2s64)
.moreElementsToNextPow2(0);
- getActionDefinitionsBuilder(G_SHL)
+ getActionDefinitionsBuilder({G_SHL, G_ASHR, G_LSHR})
.customIf([=](const LegalityQuery &Query) {
const auto &SrcTy = Query.Types[0];
const auto &AmtTy = Query.Types[1];
@@ -153,26 +153,6 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
.widenScalarToNextPow2(0)
.scalarize(0);
- getActionDefinitionsBuilder({G_LSHR, G_ASHR})
- .customIf([=](const LegalityQuery &Query) {
- const auto &SrcTy = Query.Types[0];
- const auto &AmtTy = Query.Types[1];
- return !SrcTy.isVector() && SrcTy.getSizeInBits() == 32 &&
- AmtTy.getSizeInBits() == 32;
- })
- .legalFor({{s32, s32},
- {s32, s64},
- {s64, s64},
- {v2s32, v2s32},
- {v4s32, v4s32},
- {v2s64, v2s64},
- {v16s8, v16s8},
- {v4s16, v4s16},
- {v8s16, v8s16}})
- .clampScalar(1, s32, s64)
- .clampScalar(0, s32, s64)
- .minScalarSameAs(1, 0);
-
getActionDefinitionsBuilder({G_SREM, G_UREM})
.lowerFor({s1, s8, s16, s32, s64});
@@ -346,6 +326,7 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
.legalFor({s32, s64})
.clampScalar(0, s32, s64);
+
getActionDefinitionsBuilder(G_ICMP)
.legalFor({{s32, s32},
{s32, s64},
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-shift.mir b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-shift.mir
index 467f38672b70..8a28012766ef 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-shift.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-shift.mir
@@ -1,6 +1,6 @@
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
# RUN: llc -O0 -march=aarch64 -run-pass=legalizer %s -o - | FileCheck %s
-# RUN: llc -O0 -debugify-and-strip-all-safe -march=aarch64 -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK
+# R UN: llc -O0 -debugify-and-strip-all-safe -march=aarch64 -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK
---
name: test_shift
body: |
@@ -410,3 +410,24 @@ body: |
%2:_(<4 x s16>) = G_ASHR %0, %1
$d0 = COPY %2
...
+---
+name: test_ashr_v8s32
+body: |
+ bb.0:
+ ; CHECK-LABEL: name: test_ashr_v8s32
+ ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
+ ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
+ ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
+ ; CHECK: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
+ ; CHECK: [[BUILD_VECTOR3:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
+ ; CHECK: [[ASHR:%[0-9]+]]:_(<4 x s32>) = G_ASHR [[BUILD_VECTOR]], [[BUILD_VECTOR2]](<4 x s32>)
+ ; CHECK: [[ASHR1:%[0-9]+]]:_(<4 x s32>) = G_ASHR [[BUILD_VECTOR1]], [[BUILD_VECTOR3]](<4 x s32>)
+ ; CHECK: $q0 = COPY [[ASHR]](<4 x s32>)
+ ; CHECK: $q1 = COPY [[ASHR1]](<4 x s32>)
+ %0:_(<8 x s32>) = G_IMPLICIT_DEF
+ %1:_(<8 x s32>) = G_IMPLICIT_DEF
+ %2:_(<8 x s32>) = G_ASHR %0, %1
+ %3:_(<4 x s32>), %4:_(<4 x s32>) = G_UNMERGE_VALUES %2
+ $q0 = COPY %3(<4 x s32>)
+ $q1 = COPY %4(<4 x s32>)
+...
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/legalizer-info-validation.mir b/llvm/test/CodeGen/AArch64/GlobalISel/legalizer-info-validation.mir
index e4da0beb3022..357eb8b981c5 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/legalizer-info-validation.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/legalizer-info-validation.mir
@@ -269,6 +269,7 @@
# DEBUG-NEXT: .. type index coverage check SKIPPED: user-defined predicate detected
# DEBUG-NEXT: .. imm index coverage check SKIPPED: user-defined predicate detected
# DEBUG-NEXT: G_LSHR (opcode {{[0-9]+}}): 2 type indices, 0 imm indices
+# DEBUG-NEXT: .. opcode {{[0-9]+}} is aliased to {{[0-9]+}}
# DEBUG-NEXT: .. type index coverage check SKIPPED: user-defined predicate detected
# DEBUG-NEXT: .. imm index coverage check SKIPPED: user-defined predicate detected
# DEBUG-NEXT: G_ASHR (opcode {{[0-9]+}}): 2 type indices, 0 imm indices
More information about the llvm-commits
mailing list