3
3
; RUN: opt < %s -mtriple=x86_64 -mattr=+cf -passes='simplifycfg<hoist-loads-stores-with-cond-faulting>' -simplifycfg-require-and-preserve-domtree=1 -disable-cload-cstore=0 -S | FileCheck %s --check-prefixes=CHECK,LOADSTORE
4
4
; RUN: opt < %s -mtriple=x86_64 -mattr=+cf -passes='simplifycfg<hoist-loads-stores-with-cond-faulting>' -simplifycfg-require-and-preserve-domtree=1 -disable-cload-cstore=1 -S | FileCheck %s --check-prefixes=CHECK,NONE,STOREONLY
5
5
; RUN: opt < %s -mtriple=x86_64 -mattr=+cf -passes='simplifycfg<hoist-loads-stores-with-cond-faulting>' -simplifycfg-require-and-preserve-domtree=1 -disable-cload-cstore=2 -S | FileCheck %s --check-prefixes=CHECK,NONE,LOADONLY
6
- ; RUN: opt < %s -mtriple=x86_64 -mattr=+cf -passes='simplifycfg<hoist-loads-stores-with-cond-faulting>' -simplifycfg-require-and-preserve-domtree=1 -disable-cload-cstore=3 -S | FileCheck %s --check-prefixes=NONE,NONEONLY
6
+ ; RUN: opt < %s -mtriple=x86_64 -mattr=+cf -passes='simplifycfg<hoist-loads-stores-with-cond-faulting>' -simplifycfg-require-and-preserve-domtree=1 -disable-cload-cstore=3 -S | FileCheck %s --check-prefixes=CHECK, NONE,NONEONLY
7
7
8
8
;; Basic case: check masked.load/store is generated for i16/i32/i64.
9
9
define void @basic (i1 %cond , ptr %b , ptr %p , ptr %q ) {
@@ -629,21 +629,6 @@ define void @threshold_7(i1 %cond, ptr %p1, ptr %p2, ptr %p3, ptr %p4, ptr %p5,
629
629
; CHECK: if.false:
630
630
; CHECK-NEXT: ret void
631
631
;
632
- ; NONE-LABEL: @threshold_7(
633
- ; NONE-NEXT: entry:
634
- ; NONE-NEXT: br i1 [[COND:%.*]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
635
- ; NONE: if.true:
636
- ; NONE-NEXT: store i32 1, ptr [[P1:%.*]], align 4
637
- ; NONE-NEXT: store i32 2, ptr [[P2:%.*]], align 4
638
- ; NONE-NEXT: store i32 3, ptr [[P3:%.*]], align 4
639
- ; NONE-NEXT: store i32 4, ptr [[P4:%.*]], align 4
640
- ; NONE-NEXT: store i32 5, ptr [[P5:%.*]], align 4
641
- ; NONE-NEXT: store i32 6, ptr [[P6:%.*]], align 4
642
- ; NONE-NEXT: store i32 7, ptr [[P7:%.*]], align 4
643
- ; NONE-NEXT: br label [[IF_FALSE]]
644
- ; NONE: if.false:
645
- ; NONE-NEXT: ret void
646
- ;
647
632
entry:
648
633
br i1 %cond , label %if.true , label %if.false
649
634
@@ -683,26 +668,6 @@ define i32 @not_cheap_to_hoist(i32 %a, ptr %b, ptr %p, ptr %q, i32 %v0, i32 %v1,
683
668
; CHECK-NEXT: store i32 [[TMP0]], ptr [[P]], align 4
684
669
; CHECK-NEXT: br label [[COMMON_RET]]
685
670
;
686
- ; NONE-LABEL: @not_cheap_to_hoist(
687
- ; NONE-NEXT: entry:
688
- ; NONE-NEXT: [[COND:%.*]] = icmp eq i32 [[A:%.*]], 0
689
- ; NONE-NEXT: br i1 [[COND]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
690
- ; NONE: common.ret:
691
- ; NONE-NEXT: [[COMMON_RET_OP:%.*]] = phi i32 [ [[VVVV:%.*]], [[IF_FALSE]] ], [ 0, [[IF_TRUE]] ]
692
- ; NONE-NEXT: ret i32 [[COMMON_RET_OP]]
693
- ; NONE: if.false:
694
- ; NONE-NEXT: store i64 1, ptr [[P:%.*]], align 8
695
- ; NONE-NEXT: store i16 2, ptr [[Q:%.*]], align 2
696
- ; NONE-NEXT: [[V:%.*]] = udiv i32 [[A]], 12345
697
- ; NONE-NEXT: [[VV:%.*]] = mul i32 [[V]], [[V0:%.*]]
698
- ; NONE-NEXT: [[VVV:%.*]] = mul i32 [[VV]], [[V1:%.*]]
699
- ; NONE-NEXT: [[VVVV]] = select i1 [[CC:%.*]], i32 [[V2:%.*]], i32 [[VVV]]
700
- ; NONE-NEXT: br label [[COMMON_RET:%.*]]
701
- ; NONE: if.true:
702
- ; NONE-NEXT: [[TMP0:%.*]] = load i32, ptr [[B:%.*]], align 4
703
- ; NONE-NEXT: store i32 [[TMP0]], ptr [[P]], align 4
704
- ; NONE-NEXT: br label [[COMMON_RET]]
705
- ;
706
671
entry:
707
672
%cond = icmp eq i32 %a , 0
708
673
br i1 %cond , label %if.true , label %if.false
@@ -739,17 +704,6 @@ define void @not_single_predecessor(ptr %p, ptr %q, i32 %a) {
739
704
; CHECK-NEXT: store i32 [[TMP0]], ptr [[P:%.*]], align 4
740
705
; CHECK-NEXT: br label [[IF_END]]
741
706
;
742
- ; NONE-LABEL: @not_single_predecessor(
743
- ; NONE-NEXT: entry:
744
- ; NONE-NEXT: [[TOBOOL:%.*]] = icmp ne i32 [[A:%.*]], 0
745
- ; NONE-NEXT: br i1 [[TOBOOL]], label [[IF_END:%.*]], label [[IF_THEN:%.*]]
746
- ; NONE: if.end:
747
- ; NONE-NEXT: br label [[IF_THEN]]
748
- ; NONE: if.then:
749
- ; NONE-NEXT: [[TMP0:%.*]] = load i32, ptr [[Q:%.*]], align 4
750
- ; NONE-NEXT: store i32 [[TMP0]], ptr [[P:%.*]], align 4
751
- ; NONE-NEXT: br label [[IF_END]]
752
- ;
753
707
entry:
754
708
%tobool = icmp ne i32 %a , 0
755
709
br i1 %tobool , label %if.end , label %if.then
@@ -779,20 +733,6 @@ define void @not_supported_type(i8 %a, ptr %b, ptr %p, ptr %q) {
779
733
; CHECK: if.end:
780
734
; CHECK-NEXT: ret void
781
735
;
782
- ; NONE-LABEL: @not_supported_type(
783
- ; NONE-NEXT: entry:
784
- ; NONE-NEXT: [[COND:%.*]] = icmp eq i8 [[A:%.*]], 0
785
- ; NONE-NEXT: br i1 [[COND]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
786
- ; NONE: if.false:
787
- ; NONE-NEXT: store i8 1, ptr [[Q:%.*]], align 1
788
- ; NONE-NEXT: br label [[IF_END:%.*]]
789
- ; NONE: if.true:
790
- ; NONE-NEXT: [[TMP0:%.*]] = load i8, ptr [[B:%.*]], align 1
791
- ; NONE-NEXT: store i8 [[TMP0]], ptr [[P:%.*]], align 1
792
- ; NONE-NEXT: br label [[IF_END]]
793
- ; NONE: if.end:
794
- ; NONE-NEXT: ret void
795
- ;
796
736
entry:
797
737
%cond = icmp eq i8 %a , 0
798
738
br i1 %cond , label %if.true , label %if.false
@@ -828,22 +768,6 @@ define void @not_br_terminator(i32 %a, ptr %b, ptr %p, ptr %q) {
828
768
; CHECK: if.end:
829
769
; CHECK-NEXT: ret void
830
770
;
831
- ; NONE-LABEL: @not_br_terminator(
832
- ; NONE-NEXT: entry:
833
- ; NONE-NEXT: switch i32 [[A:%.*]], label [[IF_END:%.*]] [
834
- ; NONE-NEXT: i32 1, label [[IF_FALSE:%.*]]
835
- ; NONE-NEXT: i32 2, label [[IF_TRUE:%.*]]
836
- ; NONE-NEXT: ]
837
- ; NONE: if.false:
838
- ; NONE-NEXT: store i32 1, ptr [[Q:%.*]], align 4
839
- ; NONE-NEXT: br label [[IF_END]]
840
- ; NONE: if.true:
841
- ; NONE-NEXT: [[TMP0:%.*]] = load i32, ptr [[B:%.*]], align 4
842
- ; NONE-NEXT: store i32 [[TMP0]], ptr [[P:%.*]], align 4
843
- ; NONE-NEXT: br label [[IF_FALSE]]
844
- ; NONE: if.end:
845
- ; NONE-NEXT: ret void
846
- ;
847
771
entry:
848
772
switch i32 %a , label %if.end [
849
773
i32 1 , label %if.false
@@ -874,15 +798,6 @@ define void @not_atomic(i1 %cond, ptr %p) {
874
798
; CHECK: if.true:
875
799
; CHECK-NEXT: ret void
876
800
;
877
- ; NONE-LABEL: @not_atomic(
878
- ; NONE-NEXT: entry:
879
- ; NONE-NEXT: br i1 [[COND:%.*]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
880
- ; NONE: if.false:
881
- ; NONE-NEXT: store atomic i32 1, ptr [[P:%.*]] seq_cst, align 4
882
- ; NONE-NEXT: br label [[IF_TRUE]]
883
- ; NONE: if.true:
884
- ; NONE-NEXT: ret void
885
- ;
886
801
entry:
887
802
br i1 %cond , label %if.true , label %if.false
888
803
@@ -905,15 +820,6 @@ define void @not_volatile(i1 %cond, ptr %p) {
905
820
; CHECK: if.true:
906
821
; CHECK-NEXT: ret void
907
822
;
908
- ; NONE-LABEL: @not_volatile(
909
- ; NONE-NEXT: entry:
910
- ; NONE-NEXT: br i1 [[COND:%.*]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
911
- ; NONE: if.false:
912
- ; NONE-NEXT: [[TMP0:%.*]] = load volatile i32, ptr [[P:%.*]], align 4
913
- ; NONE-NEXT: br label [[IF_TRUE]]
914
- ; NONE: if.true:
915
- ; NONE-NEXT: ret void
916
- ;
917
823
entry:
918
824
br i1 %cond , label %if.true , label %if.false
919
825
@@ -937,16 +843,6 @@ define void @not_hoistable_sideeffect(i1 %cond, ptr %p, ptr %q) {
937
843
; CHECK: if.true:
938
844
; CHECK-NEXT: ret void
939
845
;
940
- ; NONE-LABEL: @not_hoistable_sideeffect(
941
- ; NONE-NEXT: entry:
942
- ; NONE-NEXT: br i1 [[COND:%.*]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
943
- ; NONE: if.false:
944
- ; NONE-NEXT: [[RMW:%.*]] = atomicrmw xchg ptr [[Q:%.*]], double 4.000000e+00 seq_cst, align 8
945
- ; NONE-NEXT: store i32 1, ptr [[P:%.*]], align 4
946
- ; NONE-NEXT: br label [[IF_TRUE]]
947
- ; NONE: if.true:
948
- ; NONE-NEXT: ret void
949
- ;
950
846
entry:
951
847
br i1 %cond , label %if.true , label %if.false
952
848
@@ -1042,26 +938,6 @@ define void @not_alloca(ptr %p, ptr %q, i32 %a) {
1042
938
; CHECK: if.end:
1043
939
; CHECK-NEXT: ret void
1044
940
;
1045
- ; NONE-LABEL: @not_alloca(
1046
- ; NONE-NEXT: entry:
1047
- ; NONE-NEXT: [[P_ADDR:%.*]] = alloca ptr, align 8
1048
- ; NONE-NEXT: [[Q_ADDR:%.*]] = alloca ptr, align 8
1049
- ; NONE-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4
1050
- ; NONE-NEXT: store ptr [[P:%.*]], ptr [[P_ADDR]], align 8
1051
- ; NONE-NEXT: store ptr [[Q:%.*]], ptr [[Q_ADDR]], align 8
1052
- ; NONE-NEXT: store i32 [[A:%.*]], ptr [[A_ADDR]], align 4
1053
- ; NONE-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4
1054
- ; NONE-NEXT: [[TOBOOL:%.*]] = icmp ne i32 [[TMP0]], 0
1055
- ; NONE-NEXT: br i1 [[TOBOOL]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
1056
- ; NONE: if.then:
1057
- ; NONE-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Q_ADDR]], align 8
1058
- ; NONE-NEXT: [[TMP2:%.*]] = load i32, ptr [[TMP1]], align 4
1059
- ; NONE-NEXT: [[TMP3:%.*]] = load ptr, ptr [[P_ADDR]], align 8
1060
- ; NONE-NEXT: store i32 [[TMP2]], ptr [[TMP3]], align 4
1061
- ; NONE-NEXT: br label [[IF_END]]
1062
- ; NONE: if.end:
1063
- ; NONE-NEXT: ret void
1064
- ;
1065
941
entry:
1066
942
%p.addr = alloca ptr
1067
943
%q.addr = alloca ptr
@@ -1095,15 +971,6 @@ define void @not_maximum_alignment(i1 %cond, ptr %p) {
1095
971
; CHECK: if.false:
1096
972
; CHECK-NEXT: ret void
1097
973
;
1098
- ; NONE-LABEL: @not_maximum_alignment(
1099
- ; NONE-NEXT: entry:
1100
- ; NONE-NEXT: br i1 [[COND:%.*]], label [[IF_TRUE:%.*]], label [[IF_FALSE:%.*]]
1101
- ; NONE: if.true:
1102
- ; NONE-NEXT: store i32 0, ptr [[P:%.*]], align 4294967296
1103
- ; NONE-NEXT: br label [[IF_FALSE]]
1104
- ; NONE: if.false:
1105
- ; NONE-NEXT: ret void
1106
- ;
1107
974
entry:
1108
975
br i1 %cond , label %if.true , label %if.false
1109
976
@@ -1284,21 +1151,6 @@ define i32 @not_multi_successors(i1 %c1, i32 %c2, ptr %p) {
1284
1151
; CHECK: sw.bb:
1285
1152
; CHECK-NEXT: br label [[COMMON_RET]]
1286
1153
;
1287
- ; NONE-LABEL: @not_multi_successors(
1288
- ; NONE-NEXT: entry:
1289
- ; NONE-NEXT: br i1 [[C1:%.*]], label [[ENTRY_IF:%.*]], label [[COMMON_RET:%.*]]
1290
- ; NONE: entry.if:
1291
- ; NONE-NEXT: [[VAL:%.*]] = load i32, ptr [[P:%.*]], align 4
1292
- ; NONE-NEXT: switch i32 [[C2:%.*]], label [[COMMON_RET]] [
1293
- ; NONE-NEXT: i32 0, label [[SW_BB:%.*]]
1294
- ; NONE-NEXT: i32 1, label [[SW_BB]]
1295
- ; NONE-NEXT: ]
1296
- ; NONE: common.ret:
1297
- ; NONE-NEXT: [[COMMON_RET_OP:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[VAL]], [[ENTRY_IF]] ], [ 0, [[SW_BB]] ]
1298
- ; NONE-NEXT: ret i32 [[COMMON_RET_OP]]
1299
- ; NONE: sw.bb:
1300
- ; NONE-NEXT: br label [[COMMON_RET]]
1301
- ;
1302
1154
entry:
1303
1155
br i1 %c1 , label %entry.if , label %entry.else
1304
1156
0 commit comments