Skip to content

Commit 7683b54

Browse files
committed
[AArch64][GlobalISel] Don't crash when legalising vector G_SHL
1 parent 53dfdf7 commit 7683b54

File tree

2 files changed

+33
-4
lines changed

2 files changed

+33
-4
lines changed

llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -216,15 +216,15 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
216216
.widenScalarToNextPow2(0)
217217
.clampScalar(1, s32, s64)
218218
.clampScalar(0, s32, s64)
219+
.minScalarSameAs(1, 0)
220+
.minScalarEltSameAsIf(isVector(0), 1, 0)
221+
.maxScalarEltSameAsIf(isVector(0), 1, 0)
219222
.clampNumElements(0, v8s8, v16s8)
220223
.clampNumElements(0, v4s16, v8s16)
221224
.clampNumElements(0, v2s32, v4s32)
222225
.clampNumElements(0, v2s64, v2s64)
223226
.moreElementsToNextPow2(0)
224-
.minScalarSameAs(1, 0)
225-
.scalarizeIf(scalarOrEltWiderThan(0, 64), 0)
226-
.minScalarEltSameAsIf(isVector(0), 1, 0)
227-
.maxScalarEltSameAsIf(isVector(0), 1, 0);
227+
.scalarizeIf(scalarOrEltWiderThan(0, 64), 0);
228228

229229
getActionDefinitionsBuilder(G_PTR_ADD)
230230
.legalFor({{p0, s64}, {v2p0, v2s64}})
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
2+
; RUN: llc -global-isel -o - %s | FileCheck %s
3+
4+
target triple = "aarch64-unknown-unknown"
5+
6+
; Check we don't crash here.
7+
8+
define <2 x i8> @test() {
9+
; CHECK-LABEL: test:
10+
; CHECK: // %bb.0: // %entry
11+
; CHECK-NEXT: mov w8, #1 // =0x1
12+
; CHECK-NEXT: mov w9, #0 // =0x0
13+
; CHECK-NEXT: fmov s0, w8
14+
; CHECK-NEXT: fmov s1, w9
15+
; CHECK-NEXT: mov v0.b[1], w8
16+
; CHECK-NEXT: mov v1.b[1], w9
17+
; CHECK-NEXT: ushl v0.8b, v0.8b, v1.8b
18+
; CHECK-NEXT: umov w8, v0.b[0]
19+
; CHECK-NEXT: umov w9, v0.b[1]
20+
; CHECK-NEXT: fmov s0, w8
21+
; CHECK-NEXT: mov v0.s[1], w9
22+
; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
23+
; CHECK-NEXT: ret
24+
entry:
25+
%zeroes = zext <2 x i1> zeroinitializer to <2 x i32>
26+
%ones = shl <2 x i32> splat (i32 1), %zeroes
27+
%ones.trunc = trunc <2 x i32> %ones to <2 x i8>
28+
ret <2 x i8> %ones.trunc
29+
}

0 commit comments

Comments
 (0)