Skip to content

Commit 24c35a9

Browse files
Undo legalizer changes and keep commit to fold
1 parent ab016f1 commit 24c35a9

File tree

10 files changed

+507
-251
lines changed

10 files changed

+507
-251
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -678,8 +678,8 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
678678
.widenScalarToNextPow2(0)
679679
.clampScalar(0, s8, s64);
680680
getActionDefinitionsBuilder(G_FCONSTANT)
681-
// Always legalize S16 to prevent G_FCONSTANT being widened to G_CONSTANT
682-
.legalFor({s16, s32, s64, s128})
681+
.legalFor({s32, s64, s128})
682+
.legalFor(HasFP16, {s16})
683683
.clampScalar(0, MinFPScalar, s128);
684684

685685
// FIXME: fix moreElementsToNextPow2

llvm/test/CodeGen/AArch64/GlobalISel/legalize-constant.mir

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,8 @@ body: |
4848
; CHECK-NEXT: $w0 = COPY [[C]](s32)
4949
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_FCONSTANT double 2.000000e+00
5050
; CHECK-NEXT: $x0 = COPY [[C1]](s64)
51-
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s16) = G_FCONSTANT half 0xH0000
52-
; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[C2]](s16)
53-
; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)
51+
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
52+
; CHECK-NEXT: $w0 = COPY [[C2]](s32)
5453
%0:_(s32) = G_FCONSTANT float 1.0
5554
$w0 = COPY %0
5655
%1:_(s64) = G_FCONSTANT double 2.0

llvm/test/CodeGen/AArch64/GlobalISel/legalize-fp16-fconstant.mir

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ tracksRegLiveness: true
88
body: |
99
bb.0:
1010
; NO-FP16-LABEL: name: fp16
11-
; NO-FP16: %cst:_(s16) = G_FCONSTANT half 0xH0000
11+
; NO-FP16: %cst:_(s16) = G_CONSTANT i16 0
1212
; NO-FP16-NEXT: $h0 = COPY %cst(s16)
1313
; NO-FP16-NEXT: RET_ReallyLR implicit $h0
1414
;
@@ -26,7 +26,7 @@ tracksRegLiveness: true
2626
body: |
2727
bb.0:
2828
; NO-FP16-LABEL: name: fp16_non_zero
29-
; NO-FP16: %cst:_(s16) = G_FCONSTANT half 0xH4000
29+
; NO-FP16: %cst:_(s16) = G_CONSTANT i16 16384
3030
; NO-FP16-NEXT: $h0 = COPY %cst(s16)
3131
; NO-FP16-NEXT: RET_ReallyLR implicit $h0
3232
;
@@ -44,7 +44,7 @@ tracksRegLiveness: true
4444
body: |
4545
bb.1.entry:
4646
; NO-FP16-LABEL: name: nan
47-
; NO-FP16: %cst:_(s16) = G_FCONSTANT half 0xH7C01
47+
; NO-FP16: %cst:_(s16) = G_CONSTANT i16 31745
4848
; NO-FP16-NEXT: %ext:_(s32) = G_FPEXT %cst(s16)
4949
; NO-FP16-NEXT: $w0 = COPY %ext(s32)
5050
; NO-FP16-NEXT: RET_ReallyLR implicit $w0

llvm/test/CodeGen/AArch64/arm64-indexed-memory.ll

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -739,12 +739,15 @@ define ptr @postidx32_shalf(ptr %src, ptr %out, half %a) {
739739
;
740740
; GISEL-LABEL: postidx32_shalf:
741741
; GISEL: ; %bb.0:
742+
; GISEL-NEXT: mov w8, #0 ; =0x0
742743
; GISEL-NEXT: ldr h1, [x0], #4
744+
; GISEL-NEXT: fmov s2, w8
743745
; GISEL-NEXT: ; kill: def $h0 killed $h0 def $s0
744746
; GISEL-NEXT: fmov w9, s0
745-
; GISEL-NEXT: fcvt s2, h1
747+
; GISEL-NEXT: fcvt s3, h1
746748
; GISEL-NEXT: fmov w8, s1
747-
; GISEL-NEXT: fcmp s2, #0.0
749+
; GISEL-NEXT: fcvt s2, h2
750+
; GISEL-NEXT: fcmp s3, s2
748751
; GISEL-NEXT: csel w8, w8, w9, mi
749752
; GISEL-NEXT: strh w8, [x1]
750753
; GISEL-NEXT: ret

llvm/test/CodeGen/AArch64/dup.ll

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1469,9 +1469,8 @@ define <2 x half> @loaddup_str_v2half(ptr %p) {
14691469
; CHECK-GI-LABEL: loaddup_str_v2half:
14701470
; CHECK-GI: // %bb.0: // %entry
14711471
; CHECK-GI-NEXT: ldr h0, [x0]
1472-
; CHECK-GI-NEXT: movi d1, #0000000000000000
1472+
; CHECK-GI-NEXT: strh wzr, [x0]
14731473
; CHECK-GI-NEXT: dup v0.4h, v0.h[0]
1474-
; CHECK-GI-NEXT: str h1, [x0]
14751474
; CHECK-GI-NEXT: ret
14761475
entry:
14771476
%a = load half, ptr %p
@@ -1527,9 +1526,8 @@ define <3 x half> @loaddup_str_v3half(ptr %p) {
15271526
; CHECK-GI-LABEL: loaddup_str_v3half:
15281527
; CHECK-GI: // %bb.0: // %entry
15291528
; CHECK-GI-NEXT: ldr h0, [x0]
1530-
; CHECK-GI-NEXT: movi d1, #0000000000000000
1529+
; CHECK-GI-NEXT: strh wzr, [x0]
15311530
; CHECK-GI-NEXT: dup v0.4h, v0.h[0]
1532-
; CHECK-GI-NEXT: str h1, [x0]
15331531
; CHECK-GI-NEXT: ret
15341532
entry:
15351533
%a = load half, ptr %p
@@ -1585,9 +1583,8 @@ define <4 x half> @loaddup_str_v4half(ptr %p) {
15851583
; CHECK-GI-LABEL: loaddup_str_v4half:
15861584
; CHECK-GI: // %bb.0: // %entry
15871585
; CHECK-GI-NEXT: ldr h0, [x0]
1588-
; CHECK-GI-NEXT: movi d1, #0000000000000000
1586+
; CHECK-GI-NEXT: strh wzr, [x0]
15891587
; CHECK-GI-NEXT: dup v0.4h, v0.h[0]
1590-
; CHECK-GI-NEXT: str h1, [x0]
15911588
; CHECK-GI-NEXT: ret
15921589
entry:
15931590
%a = load half, ptr %p
@@ -1642,9 +1639,8 @@ define <8 x half> @loaddup_str_v8half(ptr %p) {
16421639
; CHECK-GI-LABEL: loaddup_str_v8half:
16431640
; CHECK-GI: // %bb.0: // %entry
16441641
; CHECK-GI-NEXT: ldr h0, [x0]
1645-
; CHECK-GI-NEXT: movi d1, #0000000000000000
1642+
; CHECK-GI-NEXT: strh wzr, [x0]
16461643
; CHECK-GI-NEXT: dup v0.8h, v0.h[0]
1647-
; CHECK-GI-NEXT: str h1, [x0]
16481644
; CHECK-GI-NEXT: ret
16491645
entry:
16501646
%a = load half, ptr %p
@@ -1717,10 +1713,9 @@ define <16 x half> @loaddup_str_v16half(ptr %p) {
17171713
; CHECK-GI-LABEL: loaddup_str_v16half:
17181714
; CHECK-GI: // %bb.0: // %entry
17191715
; CHECK-GI-NEXT: ldr h1, [x0]
1720-
; CHECK-GI-NEXT: movi d2, #0000000000000000
1716+
; CHECK-GI-NEXT: strh wzr, [x0]
17211717
; CHECK-GI-NEXT: dup v0.8h, v1.h[0]
17221718
; CHECK-GI-NEXT: dup v1.8h, v1.h[0]
1723-
; CHECK-GI-NEXT: str h2, [x0]
17241719
; CHECK-GI-NEXT: ret
17251720
entry:
17261721
%a = load half, ptr %p
@@ -1776,9 +1771,8 @@ define <2 x bfloat> @loaddup_str_v2bfloat(ptr %p) {
17761771
; CHECK-GI-LABEL: loaddup_str_v2bfloat:
17771772
; CHECK-GI: // %bb.0: // %entry
17781773
; CHECK-GI-NEXT: ldr h0, [x0]
1779-
; CHECK-GI-NEXT: movi d1, #0000000000000000
1774+
; CHECK-GI-NEXT: strh wzr, [x0]
17801775
; CHECK-GI-NEXT: dup v0.4h, v0.h[0]
1781-
; CHECK-GI-NEXT: str h1, [x0]
17821776
; CHECK-GI-NEXT: ret
17831777
entry:
17841778
%a = load bfloat, ptr %p
@@ -1834,9 +1828,8 @@ define <3 x bfloat> @loaddup_str_v3bfloat(ptr %p) {
18341828
; CHECK-GI-LABEL: loaddup_str_v3bfloat:
18351829
; CHECK-GI: // %bb.0: // %entry
18361830
; CHECK-GI-NEXT: ldr h0, [x0]
1837-
; CHECK-GI-NEXT: movi d1, #0000000000000000
1831+
; CHECK-GI-NEXT: strh wzr, [x0]
18381832
; CHECK-GI-NEXT: dup v0.4h, v0.h[0]
1839-
; CHECK-GI-NEXT: str h1, [x0]
18401833
; CHECK-GI-NEXT: ret
18411834
entry:
18421835
%a = load bfloat, ptr %p
@@ -1892,9 +1885,8 @@ define <4 x bfloat> @loaddup_str_v4bfloat(ptr %p) {
18921885
; CHECK-GI-LABEL: loaddup_str_v4bfloat:
18931886
; CHECK-GI: // %bb.0: // %entry
18941887
; CHECK-GI-NEXT: ldr h0, [x0]
1895-
; CHECK-GI-NEXT: movi d1, #0000000000000000
1888+
; CHECK-GI-NEXT: strh wzr, [x0]
18961889
; CHECK-GI-NEXT: dup v0.4h, v0.h[0]
1897-
; CHECK-GI-NEXT: str h1, [x0]
18981890
; CHECK-GI-NEXT: ret
18991891
entry:
19001892
%a = load bfloat, ptr %p
@@ -1949,9 +1941,8 @@ define <8 x bfloat> @loaddup_str_v8bfloat(ptr %p) {
19491941
; CHECK-GI-LABEL: loaddup_str_v8bfloat:
19501942
; CHECK-GI: // %bb.0: // %entry
19511943
; CHECK-GI-NEXT: ldr h0, [x0]
1952-
; CHECK-GI-NEXT: movi d1, #0000000000000000
1944+
; CHECK-GI-NEXT: strh wzr, [x0]
19531945
; CHECK-GI-NEXT: dup v0.8h, v0.h[0]
1954-
; CHECK-GI-NEXT: str h1, [x0]
19551946
; CHECK-GI-NEXT: ret
19561947
entry:
19571948
%a = load bfloat, ptr %p
@@ -2024,10 +2015,9 @@ define <16 x bfloat> @loaddup_str_v16bfloat(ptr %p) {
20242015
; CHECK-GI-LABEL: loaddup_str_v16bfloat:
20252016
; CHECK-GI: // %bb.0: // %entry
20262017
; CHECK-GI-NEXT: ldr h1, [x0]
2027-
; CHECK-GI-NEXT: movi d2, #0000000000000000
2018+
; CHECK-GI-NEXT: strh wzr, [x0]
20282019
; CHECK-GI-NEXT: dup v0.8h, v1.h[0]
20292020
; CHECK-GI-NEXT: dup v1.8h, v1.h[0]
2030-
; CHECK-GI-NEXT: str h2, [x0]
20312021
; CHECK-GI-NEXT: ret
20322022
entry:
20332023
%a = load bfloat, ptr %p

llvm/test/CodeGen/AArch64/f16-instructions.ll

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -782,17 +782,18 @@ define void @test_fccmp(half %in, ptr %out) {
782782
;
783783
; CHECK-CVT-GI-LABEL: test_fccmp:
784784
; CHECK-CVT-GI: // %bb.0:
785+
; CHECK-CVT-GI-NEXT: mov w8, #17664 // =0x4500
786+
; CHECK-CVT-GI-NEXT: mov w9, #18432 // =0x4800
785787
; CHECK-CVT-GI-NEXT: // kill: def $h0 killed $h0 def $s0
786-
; CHECK-CVT-GI-NEXT: fcvt s1, h0
787-
; CHECK-CVT-GI-NEXT: fmov s2, #5.00000000
788-
; CHECK-CVT-GI-NEXT: adrp x8, .LCPI29_0
789-
; CHECK-CVT-GI-NEXT: fmov s3, #8.00000000
790-
; CHECK-CVT-GI-NEXT: fcmp s1, s2
791-
; CHECK-CVT-GI-NEXT: ldr h2, [x8, :lo12:.LCPI29_0]
792-
; CHECK-CVT-GI-NEXT: fmov w8, s0
793-
; CHECK-CVT-GI-NEXT: fmov w9, s2
794-
; CHECK-CVT-GI-NEXT: fccmp s1, s3, #4, mi
795-
; CHECK-CVT-GI-NEXT: csel w8, w8, w9, gt
788+
; CHECK-CVT-GI-NEXT: fcvt s2, h0
789+
; CHECK-CVT-GI-NEXT: fmov s1, w8
790+
; CHECK-CVT-GI-NEXT: fmov s3, w9
791+
; CHECK-CVT-GI-NEXT: fmov w9, s0
792+
; CHECK-CVT-GI-NEXT: fcvt s1, h1
793+
; CHECK-CVT-GI-NEXT: fcvt s3, h3
794+
; CHECK-CVT-GI-NEXT: fcmp s2, s1
795+
; CHECK-CVT-GI-NEXT: fccmp s2, s3, #4, mi
796+
; CHECK-CVT-GI-NEXT: csel w8, w9, w8, gt
796797
; CHECK-CVT-GI-NEXT: strh w8, [x0]
797798
; CHECK-CVT-GI-NEXT: ret
798799
;

0 commit comments

Comments
 (0)