Skip to content

Commit 1950507

Browse files
committed
Revert "Re-apply '[AArch64] Enable "sink-and-fold" in MachineSink by default (#67432)'"
This reverts commit dbb9fae. This seems to cause miscompiles on CTMark/sqlite3 and others with GISel.
1 parent ea4cc20 commit 1950507

File tree

4 files changed

+178
-59
lines changed

4 files changed

+178
-59
lines changed

llvm/lib/Target/AArch64/AArch64TargetMachine.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ static cl::opt<bool> EnableGISelLoadStoreOptPostLegal(
200200
static cl::opt<bool>
201201
EnableSinkFold("aarch64-enable-sink-fold",
202202
cl::desc("Enable sinking and folding of instruction copies"),
203-
cl::init(true), cl::Hidden);
203+
cl::init(false), cl::Hidden);
204204

205205
extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeAArch64Target() {
206206
// Register the target.

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

Lines changed: 174 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -727,23 +727,51 @@ define ptr @pretrunc64to8(ptr %ptr, i64 %spacing) {
727727
; Pre-indexed loads
728728
;-----
729729
define ptr @preidxf64(ptr %src, ptr %out) {
730-
; CHECK-LABEL: preidxf64:
731-
; CHECK: ; %bb.0:
732-
; CHECK-NEXT: ldr d0, [x0, #8]!
733-
; CHECK-NEXT: str d0, [x1]
734-
; CHECK-NEXT: ret
730+
; CHECK64-LABEL: preidxf64:
731+
; CHECK64: ; %bb.0:
732+
; CHECK64-NEXT: ldr d0, [x0, #8]!
733+
; CHECK64-NEXT: str d0, [x1]
734+
; CHECK64-NEXT: ret
735+
;
736+
; GISEL-LABEL: preidxf64:
737+
; GISEL: ; %bb.0:
738+
; GISEL-NEXT: add x8, x0, #8
739+
; GISEL-NEXT: ldr d0, [x0, #8]
740+
; GISEL-NEXT: mov x0, x8
741+
; GISEL-NEXT: str d0, [x1]
742+
; GISEL-NEXT: ret
743+
;
744+
; CHECK32-LABEL: preidxf64:
745+
; CHECK32: ; %bb.0:
746+
; CHECK32-NEXT: ldr d0, [x0, #8]!
747+
; CHECK32-NEXT: str d0, [x1]
748+
; CHECK32-NEXT: ret
735749
%ptr = getelementptr inbounds double, ptr %src, i64 1
736750
%tmp = load double, ptr %ptr, align 4
737751
store double %tmp, ptr %out, align 4
738752
ret ptr %ptr
739753
}
740754

741755
define ptr @preidxf32(ptr %src, ptr %out) {
742-
; CHECK-LABEL: preidxf32:
743-
; CHECK: ; %bb.0:
744-
; CHECK-NEXT: ldr s0, [x0, #4]!
745-
; CHECK-NEXT: str s0, [x1]
746-
; CHECK-NEXT: ret
756+
; CHECK64-LABEL: preidxf32:
757+
; CHECK64: ; %bb.0:
758+
; CHECK64-NEXT: ldr s0, [x0, #4]!
759+
; CHECK64-NEXT: str s0, [x1]
760+
; CHECK64-NEXT: ret
761+
;
762+
; GISEL-LABEL: preidxf32:
763+
; GISEL: ; %bb.0:
764+
; GISEL-NEXT: add x8, x0, #4
765+
; GISEL-NEXT: ldr s0, [x0, #4]
766+
; GISEL-NEXT: mov x0, x8
767+
; GISEL-NEXT: str s0, [x1]
768+
; GISEL-NEXT: ret
769+
;
770+
; CHECK32-LABEL: preidxf32:
771+
; CHECK32: ; %bb.0:
772+
; CHECK32-NEXT: ldr s0, [x0, #4]!
773+
; CHECK32-NEXT: str s0, [x1]
774+
; CHECK32-NEXT: ret
747775
%ptr = getelementptr inbounds float, ptr %src, i64 1
748776
%tmp = load float, ptr %ptr, align 4
749777
store float %tmp, ptr %out, align 4
@@ -759,8 +787,9 @@ define ptr @preidxf16(ptr %src, ptr %out) {
759787
;
760788
; GISEL-LABEL: preidxf16:
761789
; GISEL: ; %bb.0:
790+
; GISEL-NEXT: add x8, x0, #2
762791
; GISEL-NEXT: ldr h0, [x0, #2]
763-
; GISEL-NEXT: add x0, x0, #2
792+
; GISEL-NEXT: mov x0, x8
764793
; GISEL-NEXT: str h0, [x1]
765794
; GISEL-NEXT: ret
766795
;
@@ -776,35 +805,77 @@ define ptr @preidxf16(ptr %src, ptr %out) {
776805
}
777806

778807
define ptr @preidx64(ptr %src, ptr %out) {
779-
; CHECK-LABEL: preidx64:
780-
; CHECK: ; %bb.0:
781-
; CHECK-NEXT: ldr x8, [x0, #8]!
782-
; CHECK-NEXT: str x8, [x1]
783-
; CHECK-NEXT: ret
808+
; CHECK64-LABEL: preidx64:
809+
; CHECK64: ; %bb.0:
810+
; CHECK64-NEXT: ldr x8, [x0, #8]!
811+
; CHECK64-NEXT: str x8, [x1]
812+
; CHECK64-NEXT: ret
813+
;
814+
; GISEL-LABEL: preidx64:
815+
; GISEL: ; %bb.0:
816+
; GISEL-NEXT: add x8, x0, #8
817+
; GISEL-NEXT: ldr x9, [x0, #8]
818+
; GISEL-NEXT: mov x0, x8
819+
; GISEL-NEXT: str x9, [x1]
820+
; GISEL-NEXT: ret
821+
;
822+
; CHECK32-LABEL: preidx64:
823+
; CHECK32: ; %bb.0:
824+
; CHECK32-NEXT: ldr x8, [x0, #8]!
825+
; CHECK32-NEXT: str x8, [x1]
826+
; CHECK32-NEXT: ret
784827
%ptr = getelementptr inbounds i64, ptr %src, i64 1
785828
%tmp = load i64, ptr %ptr, align 4
786829
store i64 %tmp, ptr %out, align 4
787830
ret ptr %ptr
788831
}
789832

790833
define ptr @preidx32(ptr %src, ptr %out) {
791-
; CHECK-LABEL: preidx32:
792-
; CHECK: ; %bb.0:
793-
; CHECK-NEXT: ldr w8, [x0, #4]!
794-
; CHECK-NEXT: str w8, [x1]
795-
; CHECK-NEXT: ret
834+
; CHECK64-LABEL: preidx32:
835+
; CHECK64: ; %bb.0:
836+
; CHECK64-NEXT: ldr w8, [x0, #4]!
837+
; CHECK64-NEXT: str w8, [x1]
838+
; CHECK64-NEXT: ret
839+
;
840+
; GISEL-LABEL: preidx32:
841+
; GISEL: ; %bb.0:
842+
; GISEL-NEXT: add x8, x0, #4
843+
; GISEL-NEXT: ldr w9, [x0, #4]
844+
; GISEL-NEXT: mov x0, x8
845+
; GISEL-NEXT: str w9, [x1]
846+
; GISEL-NEXT: ret
847+
;
848+
; CHECK32-LABEL: preidx32:
849+
; CHECK32: ; %bb.0:
850+
; CHECK32-NEXT: ldr w8, [x0, #4]!
851+
; CHECK32-NEXT: str w8, [x1]
852+
; CHECK32-NEXT: ret
796853
%ptr = getelementptr inbounds i32, ptr %src, i64 1
797854
%tmp = load i32, ptr %ptr, align 4
798855
store i32 %tmp, ptr %out, align 4
799856
ret ptr %ptr
800857
}
801858

802859
define ptr @preidx16zext32(ptr %src, ptr %out) {
803-
; CHECK-LABEL: preidx16zext32:
804-
; CHECK: ; %bb.0:
805-
; CHECK-NEXT: ldrh w8, [x0, #2]!
806-
; CHECK-NEXT: str w8, [x1]
807-
; CHECK-NEXT: ret
860+
; CHECK64-LABEL: preidx16zext32:
861+
; CHECK64: ; %bb.0:
862+
; CHECK64-NEXT: ldrh w8, [x0, #2]!
863+
; CHECK64-NEXT: str w8, [x1]
864+
; CHECK64-NEXT: ret
865+
;
866+
; GISEL-LABEL: preidx16zext32:
867+
; GISEL: ; %bb.0:
868+
; GISEL-NEXT: add x8, x0, #2
869+
; GISEL-NEXT: ldrh w9, [x0, #2]
870+
; GISEL-NEXT: mov x0, x8
871+
; GISEL-NEXT: str w9, [x1]
872+
; GISEL-NEXT: ret
873+
;
874+
; CHECK32-LABEL: preidx16zext32:
875+
; CHECK32: ; %bb.0:
876+
; CHECK32-NEXT: ldrh w8, [x0, #2]!
877+
; CHECK32-NEXT: str w8, [x1]
878+
; CHECK32-NEXT: ret
808879
%ptr = getelementptr inbounds i16, ptr %src, i64 1
809880
%tmp = load i16, ptr %ptr, align 4
810881
%ext = zext i16 %tmp to i32
@@ -813,11 +884,25 @@ define ptr @preidx16zext32(ptr %src, ptr %out) {
813884
}
814885

815886
define ptr @preidx16zext64(ptr %src, ptr %out) {
816-
; CHECK-LABEL: preidx16zext64:
817-
; CHECK: ; %bb.0:
818-
; CHECK-NEXT: ldrh w8, [x0, #2]!
819-
; CHECK-NEXT: str x8, [x1]
820-
; CHECK-NEXT: ret
887+
; CHECK64-LABEL: preidx16zext64:
888+
; CHECK64: ; %bb.0:
889+
; CHECK64-NEXT: ldrh w8, [x0, #2]!
890+
; CHECK64-NEXT: str x8, [x1]
891+
; CHECK64-NEXT: ret
892+
;
893+
; GISEL-LABEL: preidx16zext64:
894+
; GISEL: ; %bb.0:
895+
; GISEL-NEXT: add x8, x0, #2
896+
; GISEL-NEXT: ldrh w9, [x0, #2]
897+
; GISEL-NEXT: mov x0, x8
898+
; GISEL-NEXT: str x9, [x1]
899+
; GISEL-NEXT: ret
900+
;
901+
; CHECK32-LABEL: preidx16zext64:
902+
; CHECK32: ; %bb.0:
903+
; CHECK32-NEXT: ldrh w8, [x0, #2]!
904+
; CHECK32-NEXT: str x8, [x1]
905+
; CHECK32-NEXT: ret
821906
%ptr = getelementptr inbounds i16, ptr %src, i64 1
822907
%tmp = load i16, ptr %ptr, align 4
823908
%ext = zext i16 %tmp to i64
@@ -826,11 +911,25 @@ define ptr @preidx16zext64(ptr %src, ptr %out) {
826911
}
827912

828913
define ptr @preidx8zext32(ptr %src, ptr %out) {
829-
; CHECK-LABEL: preidx8zext32:
830-
; CHECK: ; %bb.0:
831-
; CHECK-NEXT: ldrb w8, [x0, #1]!
832-
; CHECK-NEXT: str w8, [x1]
833-
; CHECK-NEXT: ret
914+
; CHECK64-LABEL: preidx8zext32:
915+
; CHECK64: ; %bb.0:
916+
; CHECK64-NEXT: ldrb w8, [x0, #1]!
917+
; CHECK64-NEXT: str w8, [x1]
918+
; CHECK64-NEXT: ret
919+
;
920+
; GISEL-LABEL: preidx8zext32:
921+
; GISEL: ; %bb.0:
922+
; GISEL-NEXT: add x8, x0, #1
923+
; GISEL-NEXT: ldrb w9, [x0, #1]
924+
; GISEL-NEXT: mov x0, x8
925+
; GISEL-NEXT: str w9, [x1]
926+
; GISEL-NEXT: ret
927+
;
928+
; CHECK32-LABEL: preidx8zext32:
929+
; CHECK32: ; %bb.0:
930+
; CHECK32-NEXT: ldrb w8, [x0, #1]!
931+
; CHECK32-NEXT: str w8, [x1]
932+
; CHECK32-NEXT: ret
834933
%ptr = getelementptr inbounds i8, ptr %src, i64 1
835934
%tmp = load i8, ptr %ptr, align 4
836935
%ext = zext i8 %tmp to i32
@@ -839,11 +938,25 @@ define ptr @preidx8zext32(ptr %src, ptr %out) {
839938
}
840939

841940
define ptr @preidx8zext64(ptr %src, ptr %out) {
842-
; CHECK-LABEL: preidx8zext64:
843-
; CHECK: ; %bb.0:
844-
; CHECK-NEXT: ldrb w8, [x0, #1]!
845-
; CHECK-NEXT: str x8, [x1]
846-
; CHECK-NEXT: ret
941+
; CHECK64-LABEL: preidx8zext64:
942+
; CHECK64: ; %bb.0:
943+
; CHECK64-NEXT: ldrb w8, [x0, #1]!
944+
; CHECK64-NEXT: str x8, [x1]
945+
; CHECK64-NEXT: ret
946+
;
947+
; GISEL-LABEL: preidx8zext64:
948+
; GISEL: ; %bb.0:
949+
; GISEL-NEXT: add x8, x0, #1
950+
; GISEL-NEXT: ldrb w9, [x0, #1]
951+
; GISEL-NEXT: mov x0, x8
952+
; GISEL-NEXT: str x9, [x1]
953+
; GISEL-NEXT: ret
954+
;
955+
; CHECK32-LABEL: preidx8zext64:
956+
; CHECK32: ; %bb.0:
957+
; CHECK32-NEXT: ldrb w8, [x0, #1]!
958+
; CHECK32-NEXT: str x8, [x1]
959+
; CHECK32-NEXT: ret
847960
%ptr = getelementptr inbounds i8, ptr %src, i64 1
848961
%tmp = load i8, ptr %ptr, align 4
849962
%ext = zext i8 %tmp to i64
@@ -860,9 +973,10 @@ define ptr @preidx32sext64(ptr %src, ptr %out) {
860973
;
861974
; GISEL-LABEL: preidx32sext64:
862975
; GISEL: ; %bb.0:
863-
; GISEL-NEXT: ldrsw x8, [x0, #4]
864-
; GISEL-NEXT: add x0, x0, #4
865-
; GISEL-NEXT: str x8, [x1]
976+
; GISEL-NEXT: add x8, x0, #4
977+
; GISEL-NEXT: ldrsw x9, [x0, #4]
978+
; GISEL-NEXT: mov x0, x8
979+
; GISEL-NEXT: str x9, [x1]
866980
; GISEL-NEXT: ret
867981
;
868982
; CHECK32-LABEL: preidx32sext64:
@@ -886,9 +1000,10 @@ define ptr @preidx16sext32(ptr %src, ptr %out) {
8861000
;
8871001
; GISEL-LABEL: preidx16sext32:
8881002
; GISEL: ; %bb.0:
889-
; GISEL-NEXT: ldrsh w8, [x0, #2]
890-
; GISEL-NEXT: add x0, x0, #2
891-
; GISEL-NEXT: str w8, [x1]
1003+
; GISEL-NEXT: add x8, x0, #2
1004+
; GISEL-NEXT: ldrsh w9, [x0, #2]
1005+
; GISEL-NEXT: mov x0, x8
1006+
; GISEL-NEXT: str w9, [x1]
8921007
; GISEL-NEXT: ret
8931008
;
8941009
; CHECK32-LABEL: preidx16sext32:
@@ -912,9 +1027,10 @@ define ptr @preidx16sext64(ptr %src, ptr %out) {
9121027
;
9131028
; GISEL-LABEL: preidx16sext64:
9141029
; GISEL: ; %bb.0:
915-
; GISEL-NEXT: ldrsh x8, [x0, #2]
916-
; GISEL-NEXT: add x0, x0, #2
917-
; GISEL-NEXT: str x8, [x1]
1030+
; GISEL-NEXT: add x8, x0, #2
1031+
; GISEL-NEXT: ldrsh x9, [x0, #2]
1032+
; GISEL-NEXT: mov x0, x8
1033+
; GISEL-NEXT: str x9, [x1]
9181034
; GISEL-NEXT: ret
9191035
;
9201036
; CHECK32-LABEL: preidx16sext64:
@@ -938,9 +1054,10 @@ define ptr @preidx8sext32(ptr %src, ptr %out) {
9381054
;
9391055
; GISEL-LABEL: preidx8sext32:
9401056
; GISEL: ; %bb.0:
941-
; GISEL-NEXT: ldrsb w8, [x0, #1]
942-
; GISEL-NEXT: add x0, x0, #1
943-
; GISEL-NEXT: str w8, [x1]
1057+
; GISEL-NEXT: add x8, x0, #1
1058+
; GISEL-NEXT: ldrsb w9, [x0, #1]
1059+
; GISEL-NEXT: mov x0, x8
1060+
; GISEL-NEXT: str w9, [x1]
9441061
; GISEL-NEXT: ret
9451062
;
9461063
; CHECK32-LABEL: preidx8sext32:
@@ -964,9 +1081,10 @@ define ptr @preidx8sext64(ptr %src, ptr %out) {
9641081
;
9651082
; GISEL-LABEL: preidx8sext64:
9661083
; GISEL: ; %bb.0:
967-
; GISEL-NEXT: ldrsb x8, [x0, #1]
968-
; GISEL-NEXT: add x0, x0, #1
969-
; GISEL-NEXT: str x8, [x1]
1084+
; GISEL-NEXT: add x8, x0, #1
1085+
; GISEL-NEXT: ldrsb x9, [x0, #1]
1086+
; GISEL-NEXT: mov x0, x8
1087+
; GISEL-NEXT: str x9, [x1]
9701088
; GISEL-NEXT: ret
9711089
;
9721090
; CHECK32-LABEL: preidx8sext64:

llvm/test/CodeGen/AArch64/machine-sink-cache-invalidation.ll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ define i32 @nsis_BZ2_bzDecompress(ptr %pos.i, i1 %cmp661.not3117.i, i1 %exitcond
2222
; CHECK-NEXT: // in Loop: Header=BB0_2 Depth=1
2323
; CHECK-NEXT: mov x9, xzr
2424
; CHECK-NEXT: ldrb w9, [x9]
25-
; CHECK-NEXT: strb wzr, [x0, x9]
25+
; CHECK-NEXT: add x9, x0, x9
26+
; CHECK-NEXT: strb wzr, [x9]
2627
; CHECK-NEXT: b .LBB0_1
2728
; CHECK-NEXT: .LBB0_4: // %for.end677.i
2829
; CHECK-NEXT: mov w0, wzr

llvm/test/CodeGen/AArch64/sink-and-fold.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2-
; RUN: llc < %s | FileCheck %s
2+
; RUN: llc -aarch64-enable-sink-fold=true < %s | FileCheck %s
33
target triple = "aarch64-linux"
44

55
declare i32 @use(...)

0 commit comments

Comments
 (0)