Index: lib/Target/AArch64/AArch64LegalizerInfo.cpp =================================================================== --- lib/Target/AArch64/AArch64LegalizerInfo.cpp +++ lib/Target/AArch64/AArch64LegalizerInfo.cpp @@ -167,7 +167,7 @@ .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 @@ .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); Index: test/CodeGen/AArch64/GlobalISel/legalize-load-v4s32.mir =================================================================== --- /dev/null +++ test/CodeGen/AArch64/GlobalISel/legalize-load-v4s32.mir @@ -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: G_LOAD +# 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) + +...