@@ -1069,12 +1069,9 @@ define i32 @or_not_and_wrong_b(i32 %a, i32 %b, i32 %c, i32 %d) {
1069
1069
1070
1070
define i32 @or_and_not_not (i32 %a , i32 %b , i32 %c ) {
1071
1071
; CHECK-LABEL: @or_and_not_not(
1072
- ; CHECK-NEXT: [[OR1:%.*]] = or i32 [[B:%.*]], [[A:%.*]]
1073
- ; CHECK-NEXT: [[NOT1:%.*]] = xor i32 [[OR1]], -1
1074
- ; CHECK-NEXT: [[OR2:%.*]] = or i32 [[A]], [[C:%.*]]
1075
- ; CHECK-NEXT: [[NOT2:%.*]] = xor i32 [[OR2]], -1
1076
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[NOT2]], [[B]]
1077
- ; CHECK-NEXT: [[OR3:%.*]] = or i32 [[AND]], [[NOT1]]
1072
+ ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[C:%.*]], [[B:%.*]]
1073
+ ; CHECK-NEXT: [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
1074
+ ; CHECK-NEXT: [[OR3:%.*]] = xor i32 [[TMP2]], -1
1078
1075
; CHECK-NEXT: ret i32 [[OR3]]
1079
1076
;
1080
1077
%or1 = or i32 %b , %a
@@ -1089,12 +1086,9 @@ define i32 @or_and_not_not(i32 %a, i32 %b, i32 %c) {
1089
1086
define i32 @or_and_not_not_commute1 (i32 %a , i32 %b0 , i32 %c ) {
1090
1087
; CHECK-LABEL: @or_and_not_not_commute1(
1091
1088
; CHECK-NEXT: [[B:%.*]] = sdiv i32 42, [[B0:%.*]]
1092
- ; CHECK-NEXT: [[OR1:%.*]] = or i32 [[B]], [[A:%.*]]
1093
- ; CHECK-NEXT: [[NOT1:%.*]] = xor i32 [[OR1]], -1
1094
- ; CHECK-NEXT: [[OR2:%.*]] = or i32 [[A]], [[C:%.*]]
1095
- ; CHECK-NEXT: [[NOT2:%.*]] = xor i32 [[OR2]], -1
1096
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[B]], [[NOT2]]
1097
- ; CHECK-NEXT: [[OR3:%.*]] = or i32 [[AND]], [[NOT1]]
1089
+ ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[B]], [[C:%.*]]
1090
+ ; CHECK-NEXT: [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
1091
+ ; CHECK-NEXT: [[OR3:%.*]] = xor i32 [[TMP2]], -1
1098
1092
; CHECK-NEXT: ret i32 [[OR3]]
1099
1093
;
1100
1094
%b = sdiv i32 42 , %b0 ; thwart complexity-based canonicalization
@@ -1109,12 +1103,9 @@ define i32 @or_and_not_not_commute1(i32 %a, i32 %b0, i32 %c) {
1109
1103
1110
1104
define i32 @or_and_not_not_commute2 (i32 %a , i32 %b , i32 %c ) {
1111
1105
; CHECK-LABEL: @or_and_not_not_commute2(
1112
- ; CHECK-NEXT: [[OR1:%.*]] = or i32 [[B:%.*]], [[A:%.*]]
1113
- ; CHECK-NEXT: [[NOT1:%.*]] = xor i32 [[OR1]], -1
1114
- ; CHECK-NEXT: [[OR2:%.*]] = or i32 [[A]], [[C:%.*]]
1115
- ; CHECK-NEXT: [[NOT2:%.*]] = xor i32 [[OR2]], -1
1116
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[NOT2]], [[B]]
1117
- ; CHECK-NEXT: [[OR3:%.*]] = or i32 [[AND]], [[NOT1]]
1106
+ ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[C:%.*]], [[B:%.*]]
1107
+ ; CHECK-NEXT: [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
1108
+ ; CHECK-NEXT: [[OR3:%.*]] = xor i32 [[TMP2]], -1
1118
1109
; CHECK-NEXT: ret i32 [[OR3]]
1119
1110
;
1120
1111
%or1 = or i32 %b , %a
@@ -1128,12 +1119,9 @@ define i32 @or_and_not_not_commute2(i32 %a, i32 %b, i32 %c) {
1128
1119
1129
1120
define i32 @or_and_not_not_commute3 (i32 %a , i32 %b , i32 %c ) {
1130
1121
; CHECK-LABEL: @or_and_not_not_commute3(
1131
- ; CHECK-NEXT: [[OR1:%.*]] = or i32 [[B:%.*]], [[A:%.*]]
1132
- ; CHECK-NEXT: [[NOT1:%.*]] = xor i32 [[OR1]], -1
1133
- ; CHECK-NEXT: [[OR2:%.*]] = or i32 [[C:%.*]], [[A]]
1134
- ; CHECK-NEXT: [[NOT2:%.*]] = xor i32 [[OR2]], -1
1135
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[NOT2]], [[B]]
1136
- ; CHECK-NEXT: [[OR3:%.*]] = or i32 [[AND]], [[NOT1]]
1122
+ ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[C:%.*]], [[B:%.*]]
1123
+ ; CHECK-NEXT: [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
1124
+ ; CHECK-NEXT: [[OR3:%.*]] = xor i32 [[TMP2]], -1
1137
1125
; CHECK-NEXT: ret i32 [[OR3]]
1138
1126
;
1139
1127
%or1 = or i32 %b , %a
@@ -1147,12 +1135,9 @@ define i32 @or_and_not_not_commute3(i32 %a, i32 %b, i32 %c) {
1147
1135
1148
1136
define i32 @or_and_not_not_commute4 (i32 %a , i32 %b , i32 %c ) {
1149
1137
; CHECK-LABEL: @or_and_not_not_commute4(
1150
- ; CHECK-NEXT: [[OR1:%.*]] = or i32 [[A:%.*]], [[B:%.*]]
1151
- ; CHECK-NEXT: [[NOT1:%.*]] = xor i32 [[OR1]], -1
1152
- ; CHECK-NEXT: [[OR2:%.*]] = or i32 [[A]], [[C:%.*]]
1153
- ; CHECK-NEXT: [[NOT2:%.*]] = xor i32 [[OR2]], -1
1154
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[NOT2]], [[B]]
1155
- ; CHECK-NEXT: [[OR3:%.*]] = or i32 [[AND]], [[NOT1]]
1138
+ ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[C:%.*]], [[B:%.*]]
1139
+ ; CHECK-NEXT: [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
1140
+ ; CHECK-NEXT: [[OR3:%.*]] = xor i32 [[TMP2]], -1
1156
1141
; CHECK-NEXT: ret i32 [[OR3]]
1157
1142
;
1158
1143
%or1 = or i32 %a , %b
@@ -1166,12 +1151,9 @@ define i32 @or_and_not_not_commute4(i32 %a, i32 %b, i32 %c) {
1166
1151
1167
1152
define i32 @or_and_not_not_commute5 (i32 %a , i32 %b , i32 %c ) {
1168
1153
; CHECK-LABEL: @or_and_not_not_commute5(
1169
- ; CHECK-NEXT: [[OR1:%.*]] = or i32 [[B:%.*]], [[A:%.*]]
1170
- ; CHECK-NEXT: [[NOT1:%.*]] = xor i32 [[OR1]], -1
1171
- ; CHECK-NEXT: [[OR2:%.*]] = or i32 [[A]], [[C:%.*]]
1172
- ; CHECK-NEXT: [[NOT2:%.*]] = xor i32 [[OR2]], -1
1173
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[NOT2]], [[B]]
1174
- ; CHECK-NEXT: [[OR3:%.*]] = or i32 [[AND]], [[NOT1]]
1154
+ ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[C:%.*]], [[B:%.*]]
1155
+ ; CHECK-NEXT: [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
1156
+ ; CHECK-NEXT: [[OR3:%.*]] = xor i32 [[TMP2]], -1
1175
1157
; CHECK-NEXT: ret i32 [[OR3]]
1176
1158
;
1177
1159
%or1 = or i32 %b , %a
@@ -1186,12 +1168,9 @@ define i32 @or_and_not_not_commute5(i32 %a, i32 %b, i32 %c) {
1186
1168
define i32 @or_and_not_not_commute6 (i32 %a , i32 %b0 , i32 %c ) {
1187
1169
; CHECK-LABEL: @or_and_not_not_commute6(
1188
1170
; CHECK-NEXT: [[B:%.*]] = sdiv i32 42, [[B0:%.*]]
1189
- ; CHECK-NEXT: [[OR1:%.*]] = or i32 [[B]], [[A:%.*]]
1190
- ; CHECK-NEXT: [[NOT1:%.*]] = xor i32 [[OR1]], -1
1191
- ; CHECK-NEXT: [[OR2:%.*]] = or i32 [[C:%.*]], [[A]]
1192
- ; CHECK-NEXT: [[NOT2:%.*]] = xor i32 [[OR2]], -1
1193
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[B]], [[NOT2]]
1194
- ; CHECK-NEXT: [[OR3:%.*]] = or i32 [[AND]], [[NOT1]]
1171
+ ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[B]], [[C:%.*]]
1172
+ ; CHECK-NEXT: [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
1173
+ ; CHECK-NEXT: [[OR3:%.*]] = xor i32 [[TMP2]], -1
1195
1174
; CHECK-NEXT: ret i32 [[OR3]]
1196
1175
;
1197
1176
%b = sdiv i32 42 , %b0 ; thwart complexity-based canonicalization
@@ -1206,12 +1185,9 @@ define i32 @or_and_not_not_commute6(i32 %a, i32 %b0, i32 %c) {
1206
1185
1207
1186
define i32 @or_and_not_not_commute7 (i32 %a , i32 %b , i32 %c ) {
1208
1187
; CHECK-LABEL: @or_and_not_not_commute7(
1209
- ; CHECK-NEXT: [[OR1:%.*]] = or i32 [[A:%.*]], [[B:%.*]]
1210
- ; CHECK-NEXT: [[NOT1:%.*]] = xor i32 [[OR1]], -1
1211
- ; CHECK-NEXT: [[OR2:%.*]] = or i32 [[C:%.*]], [[A]]
1212
- ; CHECK-NEXT: [[NOT2:%.*]] = xor i32 [[OR2]], -1
1213
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[NOT2]], [[B]]
1214
- ; CHECK-NEXT: [[OR3:%.*]] = or i32 [[AND]], [[NOT1]]
1188
+ ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[C:%.*]], [[B:%.*]]
1189
+ ; CHECK-NEXT: [[TMP2:%.*]] = or i32 [[TMP1]], [[A:%.*]]
1190
+ ; CHECK-NEXT: [[OR3:%.*]] = xor i32 [[TMP2]], -1
1215
1191
; CHECK-NEXT: ret i32 [[OR3]]
1216
1192
;
1217
1193
%or1 = or i32 %a , %b
@@ -1227,10 +1203,9 @@ define i32 @or_and_not_not_extra_not_use1(i32 %a, i32 %b, i32 %c) {
1227
1203
; CHECK-LABEL: @or_and_not_not_extra_not_use1(
1228
1204
; CHECK-NEXT: [[OR1:%.*]] = or i32 [[B:%.*]], [[A:%.*]]
1229
1205
; CHECK-NEXT: [[NOT1:%.*]] = xor i32 [[OR1]], -1
1230
- ; CHECK-NEXT: [[OR2:%.*]] = or i32 [[A]], [[C:%.*]]
1231
- ; CHECK-NEXT: [[NOT2:%.*]] = xor i32 [[OR2]], -1
1232
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[NOT2]], [[B]]
1233
- ; CHECK-NEXT: [[OR3:%.*]] = or i32 [[AND]], [[NOT1]]
1206
+ ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[C:%.*]], [[B]]
1207
+ ; CHECK-NEXT: [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
1208
+ ; CHECK-NEXT: [[OR3:%.*]] = xor i32 [[TMP2]], -1
1234
1209
; CHECK-NEXT: call void @use(i32 [[NOT1]])
1235
1210
; CHECK-NEXT: ret i32 [[OR3]]
1236
1211
;
@@ -1289,11 +1264,9 @@ define i32 @or_and_not_not_extra_and_use(i32 %a, i32 %b, i32 %c) {
1289
1264
define i32 @or_and_not_not_extra_or_use1 (i32 %a , i32 %b , i32 %c ) {
1290
1265
; CHECK-LABEL: @or_and_not_not_extra_or_use1(
1291
1266
; CHECK-NEXT: [[OR1:%.*]] = or i32 [[B:%.*]], [[A:%.*]]
1292
- ; CHECK-NEXT: [[NOT1:%.*]] = xor i32 [[OR1]], -1
1293
- ; CHECK-NEXT: [[OR2:%.*]] = or i32 [[A]], [[C:%.*]]
1294
- ; CHECK-NEXT: [[NOT2:%.*]] = xor i32 [[OR2]], -1
1295
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[NOT2]], [[B]]
1296
- ; CHECK-NEXT: [[OR3:%.*]] = or i32 [[AND]], [[NOT1]]
1267
+ ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[C:%.*]], [[B]]
1268
+ ; CHECK-NEXT: [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
1269
+ ; CHECK-NEXT: [[OR3:%.*]] = xor i32 [[TMP2]], -1
1297
1270
; CHECK-NEXT: call void @use(i32 [[OR1]])
1298
1271
; CHECK-NEXT: ret i32 [[OR3]]
1299
1272
;
@@ -1309,12 +1282,10 @@ define i32 @or_and_not_not_extra_or_use1(i32 %a, i32 %b, i32 %c) {
1309
1282
1310
1283
define i32 @or_and_not_not_extra_or_use2 (i32 %a , i32 %b , i32 %c ) {
1311
1284
; CHECK-LABEL: @or_and_not_not_extra_or_use2(
1312
- ; CHECK-NEXT: [[OR1:%.*]] = or i32 [[B:%.*]], [[A:%.*]]
1313
- ; CHECK-NEXT: [[NOT1:%.*]] = xor i32 [[OR1]], -1
1314
- ; CHECK-NEXT: [[OR2:%.*]] = or i32 [[A]], [[C:%.*]]
1315
- ; CHECK-NEXT: [[NOT2:%.*]] = xor i32 [[OR2]], -1
1316
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[NOT2]], [[B]]
1317
- ; CHECK-NEXT: [[OR3:%.*]] = or i32 [[AND]], [[NOT1]]
1285
+ ; CHECK-NEXT: [[OR2:%.*]] = or i32 [[A:%.*]], [[C:%.*]]
1286
+ ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[C]], [[B:%.*]]
1287
+ ; CHECK-NEXT: [[TMP2:%.*]] = or i32 [[TMP1]], [[A]]
1288
+ ; CHECK-NEXT: [[OR3:%.*]] = xor i32 [[TMP2]], -1
1318
1289
; CHECK-NEXT: call void @use(i32 [[OR2]])
1319
1290
; CHECK-NEXT: ret i32 [[OR3]]
1320
1291
;
0 commit comments