@@ -968,9 +968,7 @@ define i1 @or_and3_wrong_operand(i1 %a, i1 %b, i32 %x, i32 %y, i1 %d) {
968
968
969
969
define i32 @or_eq_a_b (i1 %other_cond , i32 %a , i32 %b ) {
970
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]]
971
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[OTHER_COND:%.*]], i32 [[A:%.*]], i32 [[B:%.*]]
974
972
; CHECK-NEXT: ret i32 [[SELECT]]
975
973
;
976
974
%cmp = icmp eq i32 %a , %b
@@ -981,9 +979,7 @@ define i32 @or_eq_a_b(i1 %other_cond, i32 %a, i32 %b) {
981
979
982
980
define i32 @and_ne_a_b (i1 %other_cond , i32 %a , i32 %b ) {
983
981
; 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]]
982
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[OTHER_COND:%.*]], i32 [[A:%.*]], i32 [[B:%.*]]
987
983
; CHECK-NEXT: ret i32 [[SELECT]]
988
984
;
989
985
%cmp = icmp ne i32 %a , %b
@@ -994,9 +990,7 @@ define i32 @and_ne_a_b(i1 %other_cond, i32 %a, i32 %b) {
994
990
995
991
define i32 @or_eq_a_b_commuted (i1 %other_cond , i32 %a , i32 %b ) {
996
992
; 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]]
993
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[OTHER_COND:%.*]], i32 [[B:%.*]], i32 [[A:%.*]]
1000
994
; CHECK-NEXT: ret i32 [[SELECT]]
1001
995
;
1002
996
%cmp = icmp eq i32 %a , %b
@@ -1007,9 +1001,7 @@ define i32 @or_eq_a_b_commuted(i1 %other_cond, i32 %a, i32 %b) {
1007
1001
1008
1002
define i32 @and_ne_a_b_commuted (i1 %other_cond , i32 %a , i32 %b ) {
1009
1003
; 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]]
1004
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[OTHER_COND:%.*]], i32 [[B:%.*]], i32 [[A:%.*]]
1013
1005
; CHECK-NEXT: ret i32 [[SELECT]]
1014
1006
;
1015
1007
%cmp = icmp ne i32 %a , %b
@@ -1022,9 +1014,7 @@ define i32 @or_eq_different_operands(i32 %a, i32 %b, i32 %c) {
1022
1014
; CHECK-LABEL: @or_eq_different_operands(
1023
1015
; CHECK-NEXT: entry:
1024
1016
; 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]]
1017
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[CMP]], i32 [[A]], i32 [[B:%.*]]
1028
1018
; CHECK-NEXT: ret i32 [[SELECT]]
1029
1019
;
1030
1020
entry:
@@ -1041,7 +1031,7 @@ define i32 @or_eq_a_b_multi_use(i1 %other_cond, i32 %a, i32 %b) {
1041
1031
; CHECK-NEXT: [[COND:%.*]] = or i1 [[CMP]], [[OTHER_COND:%.*]]
1042
1032
; CHECK-NEXT: call void @use(i1 [[CMP]])
1043
1033
; CHECK-NEXT: call void @use(i1 [[COND]])
1044
- ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[COND ]], i32 [[A]], i32 [[B]]
1034
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[OTHER_COND ]], i32 [[A]], i32 [[B]]
1045
1035
; CHECK-NEXT: ret i32 [[SELECT]]
1046
1036
;
1047
1037
%cmp = icmp eq i32 %a , %b
@@ -1055,9 +1045,7 @@ define i32 @or_eq_a_b_multi_use(i1 %other_cond, i32 %a, i32 %b) {
1055
1045
define <2 x i32 > @or_eq_a_b_vec (<2 x i1 > %other_cond ,<2 x i32 > %a , <2 x i32 > %b ) {
1056
1046
; CHECK-LABEL: @or_eq_a_b_vec(
1057
1047
; 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]]
1048
+ ; CHECK-NEXT: [[SELECT:%.*]] = select <2 x i1> [[OTHER_COND:%.*]], <2 x i32> [[A:%.*]], <2 x i32> [[B:%.*]]
1061
1049
; CHECK-NEXT: ret <2 x i32> [[SELECT]]
1062
1050
;
1063
1051
entry:
@@ -1116,9 +1104,7 @@ entry:
1116
1104
1117
1105
define i32 @logical_or_eq_a_b (i1 %other_cond , i32 %a , i32 %b ) {
1118
1106
; 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]]
1107
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[OTHER_COND:%.*]], i32 [[A:%.*]], i32 [[B:%.*]]
1122
1108
; CHECK-NEXT: ret i32 [[SELECT]]
1123
1109
;
1124
1110
%cmp = icmp eq i32 %a , %b
@@ -1129,9 +1115,8 @@ define i32 @logical_or_eq_a_b(i1 %other_cond, i32 %a, i32 %b) {
1129
1115
1130
1116
define i32 @logical_commuted_or_eq_a_b (i1 %other_cond , i32 %a , i32 %b ) {
1131
1117
; 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]]
1118
+ ; CHECK-NEXT: [[TMP1:%.*]] = freeze i1 [[OTHER_COND:%.*]]
1119
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[TMP1]], i32 [[A:%.*]], i32 [[B:%.*]]
1135
1120
; CHECK-NEXT: ret i32 [[SELECT]]
1136
1121
;
1137
1122
%cmp = icmp eq i32 %a , %b
@@ -1142,9 +1127,7 @@ define i32 @logical_commuted_or_eq_a_b(i1 %other_cond, i32 %a, i32 %b) {
1142
1127
1143
1128
define i32 @logical_and_ne_a_b (i1 %other_cond , i32 %a , i32 %b ) {
1144
1129
; 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]]
1130
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[OTHER_COND:%.*]], i32 [[A:%.*]], i32 [[B:%.*]]
1148
1131
; CHECK-NEXT: ret i32 [[SELECT]]
1149
1132
;
1150
1133
%cmp = icmp ne i32 %a , %b
@@ -1155,9 +1138,8 @@ define i32 @logical_and_ne_a_b(i1 %other_cond, i32 %a, i32 %b) {
1155
1138
1156
1139
define i32 @logical_commuted_and_ne_a_b (i1 %other_cond , i32 %a , i32 %b ) {
1157
1140
; 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]]
1141
+ ; CHECK-NEXT: [[TMP1:%.*]] = freeze i1 [[OTHER_COND:%.*]]
1142
+ ; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[TMP1]], i32 [[A:%.*]], i32 [[B:%.*]]
1161
1143
; CHECK-NEXT: ret i32 [[SELECT]]
1162
1144
;
1163
1145
%cmp = icmp ne i32 %a , %b
0 commit comments