@@ -613,9 +613,9 @@ define i1 @and_or2_wrong_operand(i1 %a, i1 %b, i1 %c, i1 %d) {
613
613
614
614
define i1 @and_or3 (i1 %a , i1 %b , i32 %x , i32 %y ) {
615
615
; CHECK-LABEL: @and_or3(
616
- ; CHECK-NEXT: [[C :%.*]] = icmp ne i32 [[X:%.*]], [[Y:%.*]]
617
- ; CHECK-NEXT: [[TMP1 :%.*]] = select i1 [[C ]], i1 true, i1 [[A:%.*]]
618
- ; CHECK-NEXT: [[R:%.*]] = select i1 [[B:%.*]], i1 [[TMP1 ]], i1 false
616
+ ; CHECK-NEXT: [[TMP1 :%.*]] = icmp ne i32 [[X:%.*]], [[Y:%.*]]
617
+ ; CHECK-NEXT: [[TMP2 :%.*]] = select i1 [[TMP1 ]], i1 true, i1 [[A:%.*]]
618
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[B:%.*]], i1 [[TMP2 ]], i1 false
619
619
; CHECK-NEXT: ret i1 [[R]]
620
620
;
621
621
%c = icmp eq i32 %x , %y
@@ -626,9 +626,9 @@ define i1 @and_or3(i1 %a, i1 %b, i32 %x, i32 %y) {
626
626
627
627
define i1 @and_or3_commuted (i1 %a , i1 %b , i32 %x , i32 %y ) {
628
628
; CHECK-LABEL: @and_or3_commuted(
629
- ; CHECK-NEXT: [[C :%.*]] = icmp ne i32 [[X:%.*]], [[Y:%.*]]
630
- ; CHECK-NEXT: [[TMP1 :%.*]] = select i1 [[C ]], i1 true, i1 [[A:%.*]]
631
- ; CHECK-NEXT: [[R:%.*]] = select i1 [[B:%.*]], i1 [[TMP1 ]], i1 false
629
+ ; CHECK-NEXT: [[TMP1 :%.*]] = icmp ne i32 [[X:%.*]], [[Y:%.*]]
630
+ ; CHECK-NEXT: [[TMP2 :%.*]] = select i1 [[TMP1 ]], i1 true, i1 [[A:%.*]]
631
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[B:%.*]], i1 [[TMP2 ]], i1 false
632
632
; CHECK-NEXT: ret i1 [[R]]
633
633
;
634
634
%c = icmp eq i32 %x , %y
@@ -665,9 +665,9 @@ define i1 @and_or3_multiuse(i1 %a, i1 %b, i32 %x, i32 %y) {
665
665
666
666
define <2 x i1 > @and_or3_vec (<2 x i1 > %a , <2 x i1 > %b , <2 x i32 > %x , <2 x i32 > %y ) {
667
667
; CHECK-LABEL: @and_or3_vec(
668
- ; CHECK-NEXT: [[C :%.*]] = icmp ne <2 x i32> [[X:%.*]], [[Y:%.*]]
669
- ; CHECK-NEXT: [[TMP1 :%.*]] = select <2 x i1> [[C ]], <2 x i1> <i1 true, i1 true>, <2 x i1> [[A:%.*]]
670
- ; CHECK-NEXT: [[R:%.*]] = select <2 x i1> [[B:%.*]], <2 x i1> [[TMP1 ]], <2 x i1> zeroinitializer
668
+ ; CHECK-NEXT: [[TMP1 :%.*]] = icmp ne <2 x i32> [[X:%.*]], [[Y:%.*]]
669
+ ; CHECK-NEXT: [[TMP2 :%.*]] = select <2 x i1> [[TMP1 ]], <2 x i1> <i1 true, i1 true>, <2 x i1> [[A:%.*]]
670
+ ; CHECK-NEXT: [[R:%.*]] = select <2 x i1> [[B:%.*]], <2 x i1> [[TMP2 ]], <2 x i1> zeroinitializer
671
671
; CHECK-NEXT: ret <2 x i1> [[R]]
672
672
;
673
673
%c = icmp eq <2 x i32 > %x , %y
@@ -678,9 +678,9 @@ define <2 x i1> @and_or3_vec(<2 x i1> %a, <2 x i1> %b, <2 x i32> %x, <2 x i32> %
678
678
679
679
define <2 x i1 > @and_or3_vec_commuted (<2 x i1 > %a , <2 x i1 > %b , <2 x i32 > %x , <2 x i32 > %y ) {
680
680
; CHECK-LABEL: @and_or3_vec_commuted(
681
- ; CHECK-NEXT: [[C :%.*]] = icmp ne <2 x i32> [[X:%.*]], [[Y:%.*]]
682
- ; CHECK-NEXT: [[TMP1 :%.*]] = select <2 x i1> [[C ]], <2 x i1> <i1 true, i1 true>, <2 x i1> [[A:%.*]]
683
- ; CHECK-NEXT: [[R:%.*]] = select <2 x i1> [[B:%.*]], <2 x i1> [[TMP1 ]], <2 x i1> zeroinitializer
681
+ ; CHECK-NEXT: [[TMP1 :%.*]] = icmp ne <2 x i32> [[X:%.*]], [[Y:%.*]]
682
+ ; CHECK-NEXT: [[TMP2 :%.*]] = select <2 x i1> [[TMP1 ]], <2 x i1> <i1 true, i1 true>, <2 x i1> [[A:%.*]]
683
+ ; CHECK-NEXT: [[R:%.*]] = select <2 x i1> [[B:%.*]], <2 x i1> [[TMP2 ]], <2 x i1> zeroinitializer
684
684
; CHECK-NEXT: ret <2 x i1> [[R]]
685
685
;
686
686
%c = icmp eq <2 x i32 > %x , %y
@@ -877,9 +877,9 @@ entry:
877
877
878
878
define i1 @or_and3 (i1 %a , i1 %b , i32 %x , i32 %y ) {
879
879
; CHECK-LABEL: @or_and3(
880
- ; CHECK-NEXT: [[C :%.*]] = icmp ne i32 [[X:%.*]], [[Y:%.*]]
881
- ; CHECK-NEXT: [[TMP1 :%.*]] = select i1 [[C ]], i1 [[B:%.*]], i1 false
882
- ; CHECK-NEXT: [[R:%.*]] = select i1 [[A:%.*]], i1 true, i1 [[TMP1 ]]
880
+ ; CHECK-NEXT: [[TMP1 :%.*]] = icmp ne i32 [[X:%.*]], [[Y:%.*]]
881
+ ; CHECK-NEXT: [[TMP2 :%.*]] = select i1 [[TMP1 ]], i1 [[B:%.*]], i1 false
882
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[A:%.*]], i1 true, i1 [[TMP2 ]]
883
883
; CHECK-NEXT: ret i1 [[R]]
884
884
;
885
885
%c = icmp eq i32 %x , %y
@@ -890,9 +890,9 @@ define i1 @or_and3(i1 %a, i1 %b, i32 %x, i32 %y) {
890
890
891
891
define i1 @or_and3_commuted (i1 %a , i1 %b , i32 %x , i32 %y ) {
892
892
; CHECK-LABEL: @or_and3_commuted(
893
- ; CHECK-NEXT: [[C :%.*]] = icmp ne i32 [[X:%.*]], [[Y:%.*]]
894
- ; CHECK-NEXT: [[TMP1 :%.*]] = select i1 [[C ]], i1 [[B:%.*]], i1 false
895
- ; CHECK-NEXT: [[R:%.*]] = select i1 [[A:%.*]], i1 true, i1 [[TMP1 ]]
893
+ ; CHECK-NEXT: [[TMP1 :%.*]] = icmp ne i32 [[X:%.*]], [[Y:%.*]]
894
+ ; CHECK-NEXT: [[TMP2 :%.*]] = select i1 [[TMP1 ]], i1 [[B:%.*]], i1 false
895
+ ; CHECK-NEXT: [[R:%.*]] = select i1 [[A:%.*]], i1 true, i1 [[TMP2 ]]
896
896
; CHECK-NEXT: ret i1 [[R]]
897
897
;
898
898
%c = icmp eq i32 %x , %y
@@ -929,9 +929,9 @@ define i1 @or_and3_multiuse(i1 %a, i1 %b, i32 %x, i32 %y) {
929
929
930
930
define <2 x i1 > @or_and3_vec (<2 x i1 > %a , <2 x i1 > %b , <2 x i32 > %x , <2 x i32 > %y ) {
931
931
; CHECK-LABEL: @or_and3_vec(
932
- ; CHECK-NEXT: [[C :%.*]] = icmp ne <2 x i32> [[X:%.*]], [[Y:%.*]]
933
- ; CHECK-NEXT: [[TMP1 :%.*]] = select <2 x i1> [[C ]], <2 x i1> [[B:%.*]], <2 x i1> zeroinitializer
934
- ; CHECK-NEXT: [[R:%.*]] = select <2 x i1> [[A:%.*]], <2 x i1> <i1 true, i1 true>, <2 x i1> [[TMP1 ]]
932
+ ; CHECK-NEXT: [[TMP1 :%.*]] = icmp ne <2 x i32> [[X:%.*]], [[Y:%.*]]
933
+ ; CHECK-NEXT: [[TMP2 :%.*]] = select <2 x i1> [[TMP1 ]], <2 x i1> [[B:%.*]], <2 x i1> zeroinitializer
934
+ ; CHECK-NEXT: [[R:%.*]] = select <2 x i1> [[A:%.*]], <2 x i1> <i1 true, i1 true>, <2 x i1> [[TMP2 ]]
935
935
; CHECK-NEXT: ret <2 x i1> [[R]]
936
936
;
937
937
%c = icmp eq <2 x i32 > %x , %y
@@ -942,9 +942,9 @@ define <2 x i1> @or_and3_vec(<2 x i1> %a, <2 x i1> %b, <2 x i32> %x, <2 x i32> %
942
942
943
943
define <2 x i1 > @or_and3_vec_commuted (<2 x i1 > %a , <2 x i1 > %b , <2 x i32 > %x , <2 x i32 > %y ) {
944
944
; CHECK-LABEL: @or_and3_vec_commuted(
945
- ; CHECK-NEXT: [[C :%.*]] = icmp ne <2 x i32> [[X:%.*]], [[Y:%.*]]
946
- ; CHECK-NEXT: [[TMP1 :%.*]] = select <2 x i1> [[C ]], <2 x i1> [[B:%.*]], <2 x i1> zeroinitializer
947
- ; CHECK-NEXT: [[R:%.*]] = select <2 x i1> [[A:%.*]], <2 x i1> <i1 true, i1 true>, <2 x i1> [[TMP1 ]]
945
+ ; CHECK-NEXT: [[TMP1 :%.*]] = icmp ne <2 x i32> [[X:%.*]], [[Y:%.*]]
946
+ ; CHECK-NEXT: [[TMP2 :%.*]] = select <2 x i1> [[TMP1 ]], <2 x i1> [[B:%.*]], <2 x i1> zeroinitializer
947
+ ; CHECK-NEXT: [[R:%.*]] = select <2 x i1> [[A:%.*]], <2 x i1> <i1 true, i1 true>, <2 x i1> [[TMP2 ]]
948
948
; CHECK-NEXT: ret <2 x i1> [[R]]
949
949
;
950
950
%c = icmp eq <2 x i32 > %x , %y
@@ -965,3 +965,203 @@ define i1 @or_and3_wrong_operand(i1 %a, i1 %b, i32 %x, i32 %y, i1 %d) {
965
965
%r = select i1 %cond , i1 %d , i1 %b
966
966
ret i1 %r
967
967
}
968
+
969
+ define i32 @or_eq_a_b (i1 %other_cond , i32 %a , i32 %b ) {
970
+ ; CHECK-LABEL: @or_eq_a_b(
971
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], [[B:%.*]]
972
+ ; CHECK-NEXT: [[COND:%.*]] = or i1 [[CMP]], [[OTHER_COND:%.*]]
973
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[COND]], i32 [[A]], i32 [[B]]
974
+ ; CHECK-NEXT: ret i32 [[SELECT]]
975
+ ;
976
+ %cmp = icmp eq i32 %a , %b
977
+ %cond = or i1 %other_cond , %cmp
978
+ %select = select i1 %cond , i32 %a , i32 %b
979
+ ret i32 %select
980
+ }
981
+
982
+ define i32 @and_ne_a_b (i1 %other_cond , i32 %a , i32 %b ) {
983
+ ; CHECK-LABEL: @and_ne_a_b(
984
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A:%.*]], [[B:%.*]]
985
+ ; CHECK-NEXT: [[COND:%.*]] = and i1 [[CMP]], [[OTHER_COND:%.*]]
986
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[COND]], i32 [[A]], i32 [[B]]
987
+ ; CHECK-NEXT: ret i32 [[SELECT]]
988
+ ;
989
+ %cmp = icmp ne i32 %a , %b
990
+ %cond = and i1 %other_cond , %cmp
991
+ %select = select i1 %cond , i32 %a , i32 %b
992
+ ret i32 %select
993
+ }
994
+
995
+ define i32 @or_eq_a_b_commuted (i1 %other_cond , i32 %a , i32 %b ) {
996
+ ; CHECK-LABEL: @or_eq_a_b_commuted(
997
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], [[B:%.*]]
998
+ ; CHECK-NEXT: [[COND:%.*]] = or i1 [[CMP]], [[OTHER_COND:%.*]]
999
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[COND]], i32 [[B]], i32 [[A]]
1000
+ ; CHECK-NEXT: ret i32 [[SELECT]]
1001
+ ;
1002
+ %cmp = icmp eq i32 %a , %b
1003
+ %cond = or i1 %other_cond , %cmp
1004
+ %select = select i1 %cond , i32 %b , i32 %a
1005
+ ret i32 %select
1006
+ }
1007
+
1008
+ define i32 @and_ne_a_b_commuted (i1 %other_cond , i32 %a , i32 %b ) {
1009
+ ; CHECK-LABEL: @and_ne_a_b_commuted(
1010
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A:%.*]], [[B:%.*]]
1011
+ ; CHECK-NEXT: [[COND:%.*]] = and i1 [[CMP]], [[OTHER_COND:%.*]]
1012
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[COND]], i32 [[B]], i32 [[A]]
1013
+ ; CHECK-NEXT: ret i32 [[SELECT]]
1014
+ ;
1015
+ %cmp = icmp ne i32 %a , %b
1016
+ %cond = and i1 %other_cond , %cmp
1017
+ %select = select i1 %cond , i32 %b , i32 %a
1018
+ ret i32 %select
1019
+ }
1020
+
1021
+ define i32 @or_eq_different_operands (i32 %a , i32 %b , i32 %c ) {
1022
+ ; CHECK-LABEL: @or_eq_different_operands(
1023
+ ; CHECK-NEXT: entry:
1024
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], [[C:%.*]]
1025
+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i32 [[B:%.*]], [[A]]
1026
+ ; CHECK-NEXT: [[COND:%.*]] = or i1 [[CMP]], [[CMP1]]
1027
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[COND]], i32 [[A]], i32 [[B]]
1028
+ ; CHECK-NEXT: ret i32 [[SELECT]]
1029
+ ;
1030
+ entry:
1031
+ %cmp = icmp eq i32 %a , %c
1032
+ %cmp1 = icmp eq i32 %b , %a
1033
+ %cond = or i1 %cmp , %cmp1
1034
+ %select = select i1 %cond , i32 %a , i32 %b
1035
+ ret i32 %select
1036
+ }
1037
+
1038
+ define i32 @or_eq_a_b_multi_use (i1 %other_cond , i32 %a , i32 %b ) {
1039
+ ; CHECK-LABEL: @or_eq_a_b_multi_use(
1040
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], [[B:%.*]]
1041
+ ; CHECK-NEXT: [[COND:%.*]] = or i1 [[CMP]], [[OTHER_COND:%.*]]
1042
+ ; CHECK-NEXT: call void @use(i1 [[CMP]])
1043
+ ; CHECK-NEXT: call void @use(i1 [[COND]])
1044
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[COND]], i32 [[A]], i32 [[B]]
1045
+ ; CHECK-NEXT: ret i32 [[SELECT]]
1046
+ ;
1047
+ %cmp = icmp eq i32 %a , %b
1048
+ %cond = or i1 %other_cond , %cmp
1049
+ call void @use (i1 %cmp )
1050
+ call void @use (i1 %cond )
1051
+ %select = select i1 %cond , i32 %a , i32 %b
1052
+ ret i32 %select
1053
+ }
1054
+
1055
+ define <2 x i32 > @or_eq_a_b_vec (<2 x i1 > %other_cond ,<2 x i32 > %a , <2 x i32 > %b ) {
1056
+ ; CHECK-LABEL: @or_eq_a_b_vec(
1057
+ ; CHECK-NEXT: entry:
1058
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i32> [[A:%.*]], [[B:%.*]]
1059
+ ; CHECK-NEXT: [[COND:%.*]] = or <2 x i1> [[CMP]], [[OTHER_COND:%.*]]
1060
+ ; CHECK-NEXT: [[SELECT:%.*]] = select <2 x i1> [[COND]], <2 x i32> [[A]], <2 x i32> [[B]]
1061
+ ; CHECK-NEXT: ret <2 x i32> [[SELECT]]
1062
+ ;
1063
+ entry:
1064
+ %cmp = icmp eq <2 x i32 > %a , %b
1065
+ %cond = or <2 x i1 > %other_cond , %cmp
1066
+ %select = select <2 x i1 > %cond , <2 x i32 > %a , <2 x i32 > %b
1067
+ ret <2 x i32 > %select
1068
+ }
1069
+
1070
+ define i32 @or_slt_a_b_fail (i1 %other_cond ,i32 %a , i32 %b ) {
1071
+ ; CHECK-LABEL: @or_slt_a_b_fail(
1072
+ ; CHECK-NEXT: entry:
1073
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[A:%.*]], [[B:%.*]]
1074
+ ; CHECK-NEXT: [[COND:%.*]] = or i1 [[CMP]], [[OTHER_COND:%.*]]
1075
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[COND]], i32 [[A]], i32 [[B]]
1076
+ ; CHECK-NEXT: ret i32 [[SELECT]]
1077
+ ; CHECK: 0:
1078
+ ; CHECK-NEXT: ret i32 [[SELECT]]
1079
+ ;
1080
+ entry:
1081
+ %cmp = icmp slt i32 %a , %b
1082
+ %cond = or i1 %other_cond , %cmp
1083
+ %select = select i1 %cond , i32 %a , i32 %b
1084
+ ret i32 %select ret i32 %select
1085
+ }
1086
+
1087
+ define i32 @or_ne_a_b_fail (i1 %other_cond , i32 %a , i32 %b ) {
1088
+ ; CHECK-LABEL: @or_ne_a_b_fail(
1089
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A:%.*]], [[B:%.*]]
1090
+ ; CHECK-NEXT: [[COND:%.*]] = or i1 [[CMP]], [[OTHER_COND:%.*]]
1091
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[COND]], i32 [[A]], i32 [[B]]
1092
+ ; CHECK-NEXT: ret i32 [[SELECT]]
1093
+ ;
1094
+ %cmp = icmp ne i32 %a , %b
1095
+ %cond = or i1 %other_cond , %cmp
1096
+ %select = select i1 %cond , i32 %a , i32 %b
1097
+ ret i32 %select
1098
+ }
1099
+
1100
+ define i32 @and_ne_different_operands_fail (i32 %a , i32 %b , i32 %c ) {
1101
+ ; CHECK-LABEL: @and_ne_different_operands_fail(
1102
+ ; CHECK-NEXT: entry:
1103
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A:%.*]], [[C:%.*]]
1104
+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[B:%.*]], [[C]]
1105
+ ; CHECK-NEXT: [[COND:%.*]] = and i1 [[CMP]], [[CMP1]]
1106
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[COND]], i32 [[B]], i32 [[A]]
1107
+ ; CHECK-NEXT: ret i32 [[SELECT]]
1108
+ ;
1109
+ entry:
1110
+ %cmp = icmp ne i32 %a , %c
1111
+ %cmp1 = icmp ne i32 %b , %c
1112
+ %cond = and i1 %cmp , %cmp1
1113
+ %select = select i1 %cond , i32 %b , i32 %a
1114
+ ret i32 %select
1115
+ }
1116
+
1117
+ define i32 @logical_or_eq_a_b (i1 %other_cond , i32 %a , i32 %b ) {
1118
+ ; CHECK-LABEL: @logical_or_eq_a_b(
1119
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], [[B:%.*]]
1120
+ ; CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[OTHER_COND:%.*]], i1 true, i1 [[CMP]]
1121
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[OR_COND]], i32 [[A]], i32 [[B]]
1122
+ ; CHECK-NEXT: ret i32 [[SELECT]]
1123
+ ;
1124
+ %cmp = icmp eq i32 %a , %b
1125
+ %or.cond = select i1 %other_cond , i1 true , i1 %cmp
1126
+ %select = select i1 %or.cond , i32 %a , i32 %b
1127
+ ret i32 %select
1128
+ }
1129
+
1130
+ define i32 @logical_commuted_or_eq_a_b (i1 %other_cond , i32 %a , i32 %b ) {
1131
+ ; CHECK-LABEL: @logical_commuted_or_eq_a_b(
1132
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], [[B:%.*]]
1133
+ ; CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[CMP]], i1 true, i1 [[OTHER_COND:%.*]]
1134
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[OR_COND]], i32 [[A]], i32 [[B]]
1135
+ ; CHECK-NEXT: ret i32 [[SELECT]]
1136
+ ;
1137
+ %cmp = icmp eq i32 %a , %b
1138
+ %or.cond = select i1 %cmp , i1 true , i1 %other_cond
1139
+ %select = select i1 %or.cond , i32 %a , i32 %b
1140
+ ret i32 %select
1141
+ }
1142
+
1143
+ define i32 @logical_and_ne_a_b (i1 %other_cond , i32 %a , i32 %b ) {
1144
+ ; CHECK-LABEL: @logical_and_ne_a_b(
1145
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A:%.*]], [[B:%.*]]
1146
+ ; CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[OTHER_COND:%.*]], i1 [[CMP]], i1 false
1147
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[OR_COND]], i32 [[A]], i32 [[B]]
1148
+ ; CHECK-NEXT: ret i32 [[SELECT]]
1149
+ ;
1150
+ %cmp = icmp ne i32 %a , %b
1151
+ %or.cond = select i1 %other_cond , i1 %cmp , i1 false
1152
+ %select = select i1 %or.cond , i32 %a , i32 %b
1153
+ ret i32 %select
1154
+ }
1155
+
1156
+ define i32 @logical_commuted_and_ne_a_b (i1 %other_cond , i32 %a , i32 %b ) {
1157
+ ; CHECK-LABEL: @logical_commuted_and_ne_a_b(
1158
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A:%.*]], [[B:%.*]]
1159
+ ; CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[CMP]], i1 [[OTHER_COND:%.*]], i1 false
1160
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[OR_COND]], i32 [[A]], i32 [[B]]
1161
+ ; CHECK-NEXT: ret i32 [[SELECT]]
1162
+ ;
1163
+ %cmp = icmp ne i32 %a , %b
1164
+ %or.cond = select i1 %cmp , i1 %other_cond , i1 false
1165
+ %select = select i1 %or.cond , i32 %a , i32 %b
1166
+ ret i32 %select
1167
+ }
0 commit comments