forked from OSchip/llvm-project
[AArch64][GlobalISel] Fix the LegalityPredicate for lowerIf for G_LOAD/G_STORE
Summary: Currently, Legalizer is trying to lower G_LOAD with a vector type that has more than two elements due to the incorrect LegalityPredicate. This patch fixes the issue by removing the multiplication by 8 as `MemDesc.Size` already contains the size in bits. Reviewers: dsanders, aemerson Reviewed By: dsanders Subscribers: rovka, javed.absar, kristof.beyls, llvm-commits Differential Revision: https://reviews.llvm.org/D53679 llvm-svn: 345282
This commit is contained in:
parent
f25b75b91b
commit
3a103b1d25
|
@ -167,7 +167,7 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST) {
|
|||
.unsupportedIfMemSizeNotPow2()
|
||||
// Lower any any-extending loads left into G_ANYEXT and G_LOAD
|
||||
.lowerIf([=](const LegalityQuery &Query) {
|
||||
return Query.Types[0].getSizeInBits() != Query.MMODescrs[0].Size * 8;
|
||||
return Query.Types[0].getSizeInBits() != Query.MMODescrs[0].Size;
|
||||
})
|
||||
.clampNumElements(0, v2s32, v2s32);
|
||||
|
||||
|
@ -185,7 +185,7 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST) {
|
|||
.unsupportedIfMemSizeNotPow2()
|
||||
.lowerIf([=](const LegalityQuery &Query) {
|
||||
return Query.Types[0].isScalar() &&
|
||||
Query.Types[0].getSizeInBits() != Query.MMODescrs[0].Size * 8;
|
||||
Query.Types[0].getSizeInBits() != Query.MMODescrs[0].Size;
|
||||
})
|
||||
.clampNumElements(0, v2s32, v2s32);
|
||||
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
# RUN: not llc -march=aarch64 -o - -run-pass=legalizer -debug-only=legalizer 2>&1 %s | FileCheck %s
|
||||
# REQUIRES: asserts
|
||||
|
||||
# CHECK: Legalize Machine IR for: load_v4s32
|
||||
# CHECK-NEXT: %{{[0-9]+}}:_(<4 x s32>) = G_LOAD %{{[0-9]+}}:_(p0)
|
||||
# CHECK-NOT: Lower
|
||||
# CHECK: unable to legalize instruction
|
||||
---
|
||||
name: load_v4s32
|
||||
legalized: false
|
||||
tracksRegLiveness: true
|
||||
body: |
|
||||
bb.1:
|
||||
liveins: $x0
|
||||
|
||||
%0:_(p0) = COPY $x0
|
||||
%1:_(<4 x s32>) = G_LOAD %0(p0) :: (load 16, align 4)
|
||||
%2:_(s32), %3:_(s32), %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %1(<4 x s32>)
|
||||
$w0 = COPY %5(s32)
|
||||
|
||||
...
|
Loading…
Reference in New Issue