Skip to content

Commit 712ef7d

Browse files
committed
[AArch64][GlobalISel] Fix smull and umull intrinsics.
These were the wrong way around somehow, with aarch64_neon_umull being converted to G_SMULL.
1 parent 74392bd commit 712ef7d

File tree

2 files changed

+15
-15
lines changed

2 files changed

+15
-15
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1727,9 +1727,9 @@ bool AArch64LegalizerInfo::legalizeIntrinsic(LegalizerHelper &Helper,
17271727
case Intrinsic::aarch64_neon_fminnm:
17281728
return LowerBinOp(TargetOpcode::G_FMINNUM);
17291729
case Intrinsic::aarch64_neon_smull:
1730-
return LowerBinOp(AArch64::G_UMULL);
1731-
case Intrinsic::aarch64_neon_umull:
17321730
return LowerBinOp(AArch64::G_SMULL);
1731+
case Intrinsic::aarch64_neon_umull:
1732+
return LowerBinOp(AArch64::G_UMULL);
17331733
case Intrinsic::aarch64_neon_abs: {
17341734
// Lower the intrinsic to G_ABS.
17351735
MachineIRBuilder MIB(MI);

llvm/test/CodeGen/AArch64/aarch64-smull.ll

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2032,7 +2032,7 @@ define void @smlsl2_v8i16_uzp1(<16 x i8> %0, <8 x i16> %1, ptr %2, ptr %3) {
20322032
; CHECK-GI-NEXT: ldr q2, [x1, #16]
20332033
; CHECK-GI-NEXT: mov d0, v0.d[1]
20342034
; CHECK-GI-NEXT: xtn v2.8b, v2.8h
2035-
; CHECK-GI-NEXT: umlsl v1.8h, v0.8b, v2.8b
2035+
; CHECK-GI-NEXT: smlsl v1.8h, v0.8b, v2.8b
20362036
; CHECK-GI-NEXT: str q1, [x0]
20372037
; CHECK-GI-NEXT: ret
20382038
%5 = getelementptr inbounds i32, ptr %3, i64 4
@@ -2067,7 +2067,7 @@ define void @umlsl2_v8i16_uzp1(<16 x i8> %0, <8 x i16> %1, ptr %2, ptr %3) {
20672067
; CHECK-GI-NEXT: ldr q2, [x1, #16]
20682068
; CHECK-GI-NEXT: mov d0, v0.d[1]
20692069
; CHECK-GI-NEXT: xtn v2.8b, v2.8h
2070-
; CHECK-GI-NEXT: smlsl v1.8h, v0.8b, v2.8b
2070+
; CHECK-GI-NEXT: umlsl v1.8h, v0.8b, v2.8b
20712071
; CHECK-GI-NEXT: str q1, [x0]
20722072
; CHECK-GI-NEXT: ret
20732073
%5 = getelementptr inbounds i32, ptr %3, i64 4
@@ -2102,7 +2102,7 @@ define void @smlsl2_v4i32_uzp1(<8 x i16> %0, <4 x i32> %1, ptr %2, ptr %3) {
21022102
; CHECK-GI-NEXT: ldr q2, [x1, #16]
21032103
; CHECK-GI-NEXT: mov d0, v0.d[1]
21042104
; CHECK-GI-NEXT: xtn v2.4h, v2.4s
2105-
; CHECK-GI-NEXT: umlsl v1.4s, v0.4h, v2.4h
2105+
; CHECK-GI-NEXT: smlsl v1.4s, v0.4h, v2.4h
21062106
; CHECK-GI-NEXT: str q1, [x0]
21072107
; CHECK-GI-NEXT: ret
21082108
%5 = getelementptr inbounds i32, ptr %3, i64 4
@@ -2137,7 +2137,7 @@ define void @umlsl2_v4i32_uzp1(<8 x i16> %0, <4 x i32> %1, ptr %2, ptr %3) {
21372137
; CHECK-GI-NEXT: ldr q2, [x1, #16]
21382138
; CHECK-GI-NEXT: mov d0, v0.d[1]
21392139
; CHECK-GI-NEXT: xtn v2.4h, v2.4s
2140-
; CHECK-GI-NEXT: smlsl v1.4s, v0.4h, v2.4h
2140+
; CHECK-GI-NEXT: umlsl v1.4s, v0.4h, v2.4h
21412141
; CHECK-GI-NEXT: str q1, [x0]
21422142
; CHECK-GI-NEXT: ret
21432143
%5 = getelementptr inbounds i32, ptr %3, i64 4
@@ -2202,8 +2202,8 @@ define void @smlsl_smlsl2_v8i16_uzp1(<16 x i8> %0, <8 x i16> %1, ptr %2, ptr %3,
22022202
; CHECK-GI-NEXT: mov d3, v0.d[1]
22032203
; CHECK-GI-NEXT: xtn v2.8b, v2.8h
22042204
; CHECK-GI-NEXT: xtn v4.8b, v4.8h
2205-
; CHECK-GI-NEXT: umull v2.8h, v3.8b, v2.8b
2206-
; CHECK-GI-NEXT: umlal v2.8h, v0.8b, v4.8b
2205+
; CHECK-GI-NEXT: smull v2.8h, v3.8b, v2.8b
2206+
; CHECK-GI-NEXT: smlal v2.8h, v0.8b, v4.8b
22072207
; CHECK-GI-NEXT: sub v0.8h, v1.8h, v2.8h
22082208
; CHECK-GI-NEXT: str q0, [x0]
22092209
; CHECK-GI-NEXT: ret
@@ -2248,8 +2248,8 @@ define void @umlsl_umlsl2_v8i16_uzp1(<16 x i8> %0, <8 x i16> %1, ptr %2, ptr %3,
22482248
; CHECK-GI-NEXT: mov d3, v0.d[1]
22492249
; CHECK-GI-NEXT: xtn v2.8b, v2.8h
22502250
; CHECK-GI-NEXT: xtn v4.8b, v4.8h
2251-
; CHECK-GI-NEXT: smull v2.8h, v3.8b, v2.8b
2252-
; CHECK-GI-NEXT: smlal v2.8h, v0.8b, v4.8b
2251+
; CHECK-GI-NEXT: umull v2.8h, v3.8b, v2.8b
2252+
; CHECK-GI-NEXT: umlal v2.8h, v0.8b, v4.8b
22532253
; CHECK-GI-NEXT: sub v0.8h, v1.8h, v2.8h
22542254
; CHECK-GI-NEXT: str q0, [x0]
22552255
; CHECK-GI-NEXT: ret
@@ -2294,8 +2294,8 @@ define void @smlsl_smlsl2_v4i32_uzp1(<8 x i16> %0, <4 x i32> %1, ptr %2, ptr %3,
22942294
; CHECK-GI-NEXT: mov d3, v0.d[1]
22952295
; CHECK-GI-NEXT: xtn v2.4h, v2.4s
22962296
; CHECK-GI-NEXT: xtn v4.4h, v4.4s
2297-
; CHECK-GI-NEXT: umull v2.4s, v3.4h, v2.4h
2298-
; CHECK-GI-NEXT: umlal v2.4s, v0.4h, v4.4h
2297+
; CHECK-GI-NEXT: smull v2.4s, v3.4h, v2.4h
2298+
; CHECK-GI-NEXT: smlal v2.4s, v0.4h, v4.4h
22992299
; CHECK-GI-NEXT: sub v0.4s, v1.4s, v2.4s
23002300
; CHECK-GI-NEXT: str q0, [x0]
23012301
; CHECK-GI-NEXT: ret
@@ -2340,8 +2340,8 @@ define void @umlsl_umlsl2_v4i32_uzp1(<8 x i16> %0, <4 x i32> %1, ptr %2, ptr %3,
23402340
; CHECK-GI-NEXT: mov d3, v0.d[1]
23412341
; CHECK-GI-NEXT: xtn v2.4h, v2.4s
23422342
; CHECK-GI-NEXT: xtn v4.4h, v4.4s
2343-
; CHECK-GI-NEXT: smull v2.4s, v3.4h, v2.4h
2344-
; CHECK-GI-NEXT: smlal v2.4s, v0.4h, v4.4h
2343+
; CHECK-GI-NEXT: umull v2.4s, v3.4h, v2.4h
2344+
; CHECK-GI-NEXT: umlal v2.4s, v0.4h, v4.4h
23452345
; CHECK-GI-NEXT: sub v0.4s, v1.4s, v2.4s
23462346
; CHECK-GI-NEXT: str q0, [x0]
23472347
; CHECK-GI-NEXT: ret
@@ -2382,7 +2382,7 @@ define <2 x i32> @do_stuff(<2 x i64> %0, <2 x i64> %1) {
23822382
; CHECK-GI: // %bb.0:
23832383
; CHECK-GI-NEXT: xtn v0.2s, v0.2d
23842384
; CHECK-GI-NEXT: mov d2, v1.d[1]
2385-
; CHECK-GI-NEXT: umull v0.2d, v2.2s, v0.2s
2385+
; CHECK-GI-NEXT: smull v0.2d, v2.2s, v0.2s
23862386
; CHECK-GI-NEXT: xtn v0.2s, v0.2d
23872387
; CHECK-GI-NEXT: add v0.2s, v0.2s, v1.2s
23882388
; CHECK-GI-NEXT: ret

0 commit comments

Comments
 (0)