356 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -O3 -S | FileCheck %s3 4target triple = "x86_64-unknown-linux-gnu"5 6%struct.data_t = type { [16 x i8] }7 8declare void @process6data_t(i64, i64)9declare void @process36data_tS_S_(i64, i64, i64, i64, i64, i64)10 11; See https://llvm.org/PR47023 for source examples.12; In all tests, we expect the i8 constant stores to get merged optimally13; (through SROA, combining, etc.) so that there are no store insts left.14 15define void @bad1() {16; CHECK-LABEL: @bad1(17; CHECK-NEXT: bb:18; CHECK-NEXT: tail call void @process6data_t(i64 21542142465, i64 0)19; CHECK-NEXT: ret void20;21bb:22 %i = alloca %struct.data_t, align 123 store i8 1, ptr %i, align 124 %i3 = getelementptr inbounds i8, ptr %i, i64 125 store i8 2, ptr %i3, align 126 %i4 = getelementptr inbounds i8, ptr %i3, i64 127 store i8 3, ptr %i4, align 128 %i5 = getelementptr inbounds i8, ptr %i4, i64 129 store i8 4, ptr %i5, align 130 %i6 = getelementptr inbounds i8, ptr %i5, i64 131 store i8 5, ptr %i6, align 132 %i7 = getelementptr inbounds i8, ptr %i6, i64 133 %i8 = getelementptr inbounds i8, ptr %i, i64 1634 br label %bb935 36bb9: ; preds = %bb9, %bb37 %i10 = phi ptr [ %i7, %bb ], [ %i11, %bb9 ]38 store i8 0, ptr %i10, align 139 %i11 = getelementptr inbounds i8, ptr %i10, i64 140 %i12 = icmp eq ptr %i11, %i841 br i1 %i12, label %bb13, label %bb942 43bb13: ; preds = %bb944 %i15 = getelementptr inbounds { i64, i64 }, ptr %i, i32 0, i32 045 %i16 = load i64, ptr %i15, align 146 %i17 = getelementptr inbounds { i64, i64 }, ptr %i, i32 0, i32 147 %i18 = load i64, ptr %i17, align 148 call void @process6data_t(i64 %i16, i64 %i18)49 ret void50}51 52define void @bad2() {53; CHECK-LABEL: @bad2(54; CHECK-NEXT: bb:55; CHECK-NEXT: tail call void @process6data_t(i64 216736853120975361, i64 1411785848587524)56; CHECK-NEXT: ret void57;58bb:59 %i = alloca %struct.data_t, align 160 store i8 1, ptr %i, align 161 %i3 = getelementptr inbounds i8, ptr %i, i64 162 store i8 2, ptr %i3, align 163 %i4 = getelementptr inbounds i8, ptr %i3, i64 164 store i8 3, ptr %i4, align 165 %i5 = getelementptr inbounds i8, ptr %i4, i64 166 store i8 4, ptr %i5, align 167 %i6 = getelementptr inbounds i8, ptr %i5, i64 168 store i8 5, ptr %i6, align 169 %i7 = getelementptr inbounds i8, ptr %i6, i64 170 store i8 1, ptr %i7, align 171 %i8 = getelementptr inbounds i8, ptr %i7, i64 172 store i8 2, ptr %i8, align 173 %i9 = getelementptr inbounds i8, ptr %i8, i64 174 store i8 3, ptr %i9, align 175 %i10 = getelementptr inbounds i8, ptr %i9, i64 176 store i8 4, ptr %i10, align 177 %i11 = getelementptr inbounds i8, ptr %i10, i64 178 store i8 5, ptr %i11, align 179 %i12 = getelementptr inbounds i8, ptr %i11, i64 180 store i8 1, ptr %i12, align 181 %i13 = getelementptr inbounds i8, ptr %i12, i64 182 store i8 2, ptr %i13, align 183 %i14 = getelementptr inbounds i8, ptr %i13, i64 184 store i8 3, ptr %i14, align 185 %i15 = getelementptr inbounds i8, ptr %i14, i64 186 store i8 4, ptr %i15, align 187 %i16 = getelementptr inbounds i8, ptr %i15, i64 188 store i8 5, ptr %i16, align 189 %i17 = getelementptr inbounds i8, ptr %i16, i64 190 %i18 = getelementptr inbounds i8, ptr %i, i64 1691 br label %bb1992 93bb19: ; preds = %bb19, %bb94 %i20 = phi ptr [ %i17, %bb ], [ %i21, %bb19 ]95 store i8 0, ptr %i20, align 196 %i21 = getelementptr inbounds i8, ptr %i20, i64 197 %i22 = icmp eq ptr %i21, %i1898 br i1 %i22, label %bb23, label %bb1999 100bb23: ; preds = %bb19101 %i25 = getelementptr inbounds { i64, i64 }, ptr %i, i32 0, i32 0102 %i26 = load i64, ptr %i25, align 1103 %i27 = getelementptr inbounds { i64, i64 }, ptr %i, i32 0, i32 1104 %i28 = load i64, ptr %i27, align 1105 call void @process6data_t(i64 %i26, i64 %i28)106 ret void107}108 109define void @bad3() {110; CHECK-LABEL: @bad3(111; CHECK-NEXT: bb:112; CHECK-NEXT: tail call void @process36data_tS_S_(i64 21542142465, i64 0, i64 723401749922909195, i64 723401728380766730, i64 1446803478303675925, i64 5651576002974730)113; CHECK-NEXT: ret void114;115bb:116 %i = alloca %struct.data_t, align 1117 %i1 = alloca %struct.data_t, align 1118 %i2 = alloca %struct.data_t, align 1119 store i8 1, ptr %i, align 1120 %i5 = getelementptr inbounds i8, ptr %i, i64 1121 store i8 2, ptr %i5, align 1122 %i6 = getelementptr inbounds i8, ptr %i5, i64 1123 store i8 3, ptr %i6, align 1124 %i7 = getelementptr inbounds i8, ptr %i6, i64 1125 store i8 4, ptr %i7, align 1126 %i8 = getelementptr inbounds i8, ptr %i7, i64 1127 store i8 5, ptr %i8, align 1128 %i9 = getelementptr inbounds i8, ptr %i8, i64 1129 store i8 0, ptr %i9, align 1130 %i10 = getelementptr inbounds i8, ptr %i9, i64 1131 store i8 0, ptr %i10, align 1132 %i11 = getelementptr inbounds i8, ptr %i10, i64 1133 store i8 0, ptr %i11, align 1134 %i12 = getelementptr inbounds i8, ptr %i11, i64 1135 store i8 0, ptr %i12, align 1136 %i13 = getelementptr inbounds i8, ptr %i12, i64 1137 store i8 0, ptr %i13, align 1138 %i14 = getelementptr inbounds i8, ptr %i13, i64 1139 store i8 0, ptr %i14, align 1140 %i15 = getelementptr inbounds i8, ptr %i14, i64 1141 store i8 0, ptr %i15, align 1142 %i16 = getelementptr inbounds i8, ptr %i15, i64 1143 store i8 0, ptr %i16, align 1144 %i17 = getelementptr inbounds i8, ptr %i16, i64 1145 store i8 0, ptr %i17, align 1146 %i18 = getelementptr inbounds i8, ptr %i17, i64 1147 store i8 0, ptr %i18, align 1148 %i19 = getelementptr inbounds i8, ptr %i18, i64 1149 store i8 0, ptr %i19, align 1150 store i8 11, ptr %i1, align 1151 %i22 = getelementptr inbounds i8, ptr %i1, i64 1152 store i8 12, ptr %i22, align 1153 %i23 = getelementptr inbounds i8, ptr %i22, i64 1154 store i8 13, ptr %i23, align 1155 %i24 = getelementptr inbounds i8, ptr %i23, i64 1156 store i8 14, ptr %i24, align 1157 %i25 = getelementptr inbounds i8, ptr %i24, i64 1158 store i8 15, ptr %i25, align 1159 %i26 = getelementptr inbounds i8, ptr %i25, i64 1160 store i8 10, ptr %i26, align 1161 %i27 = getelementptr inbounds i8, ptr %i26, i64 1162 store i8 10, ptr %i27, align 1163 %i28 = getelementptr inbounds i8, ptr %i27, i64 1164 store i8 10, ptr %i28, align 1165 %i29 = getelementptr inbounds i8, ptr %i28, i64 1166 store i8 10, ptr %i29, align 1167 %i30 = getelementptr inbounds i8, ptr %i29, i64 1168 store i8 10, ptr %i30, align 1169 %i31 = getelementptr inbounds i8, ptr %i30, i64 1170 store i8 10, ptr %i31, align 1171 %i32 = getelementptr inbounds i8, ptr %i31, i64 1172 store i8 10, ptr %i32, align 1173 %i33 = getelementptr inbounds i8, ptr %i32, i64 1174 store i8 10, ptr %i33, align 1175 %i34 = getelementptr inbounds i8, ptr %i33, i64 1176 store i8 10, ptr %i34, align 1177 %i35 = getelementptr inbounds i8, ptr %i34, i64 1178 store i8 10, ptr %i35, align 1179 %i36 = getelementptr inbounds i8, ptr %i35, i64 1180 store i8 10, ptr %i36, align 1181 store i8 21, ptr %i2, align 1182 %i39 = getelementptr inbounds i8, ptr %i2, i64 1183 store i8 22, ptr %i39, align 1184 %i40 = getelementptr inbounds i8, ptr %i39, i64 1185 store i8 23, ptr %i40, align 1186 %i41 = getelementptr inbounds i8, ptr %i40, i64 1187 store i8 24, ptr %i41, align 1188 %i42 = getelementptr inbounds i8, ptr %i41, i64 1189 store i8 25, ptr %i42, align 1190 %i43 = getelementptr inbounds i8, ptr %i42, i64 1191 store i8 20, ptr %i43, align 1192 %i44 = getelementptr inbounds i8, ptr %i43, i64 1193 store i8 20, ptr %i44, align 1194 %i45 = getelementptr inbounds i8, ptr %i44, i64 1195 store i8 20, ptr %i45, align 1196 %i46 = getelementptr inbounds i8, ptr %i45, i64 1197 store i8 10, ptr %i46, align 1198 %i47 = getelementptr inbounds i8, ptr %i46, i64 1199 store i8 20, ptr %i47, align 1200 %i48 = getelementptr inbounds i8, ptr %i47, i64 1201 store i8 20, ptr %i48, align 1202 %i49 = getelementptr inbounds i8, ptr %i48, i64 1203 store i8 20, ptr %i49, align 1204 %i50 = getelementptr inbounds i8, ptr %i49, i64 1205 store i8 20, ptr %i50, align 1206 %i51 = getelementptr inbounds i8, ptr %i50, i64 1207 store i8 20, ptr %i51, align 1208 %i52 = getelementptr inbounds i8, ptr %i51, i64 1209 store i8 20, ptr %i52, align 1210 %i53 = getelementptr inbounds i8, ptr %i52, i64 1211 %i54 = getelementptr inbounds i8, ptr %i2, i64 16212 br label %bb55213 214bb55: ; preds = %bb55, %bb215 %i56 = phi ptr [ %i53, %bb ], [ %i57, %bb55 ]216 store i8 0, ptr %i56, align 1217 %i57 = getelementptr inbounds i8, ptr %i56, i64 1218 %i58 = icmp eq ptr %i57, %i54219 br i1 %i58, label %bb59, label %bb55220 221bb59: ; preds = %bb55222 %i61 = getelementptr inbounds { i64, i64 }, ptr %i, i32 0, i32 0223 %i62 = load i64, ptr %i61, align 1224 %i63 = getelementptr inbounds { i64, i64 }, ptr %i, i32 0, i32 1225 %i64 = load i64, ptr %i63, align 1226 %i66 = getelementptr inbounds { i64, i64 }, ptr %i1, i32 0, i32 0227 %i67 = load i64, ptr %i66, align 1228 %i68 = getelementptr inbounds { i64, i64 }, ptr %i1, i32 0, i32 1229 %i69 = load i64, ptr %i68, align 1230 %i71 = getelementptr inbounds { i64, i64 }, ptr %i2, i32 0, i32 0231 %i72 = load i64, ptr %i71, align 1232 %i73 = getelementptr inbounds { i64, i64 }, ptr %i2, i32 0, i32 1233 %i74 = load i64, ptr %i73, align 1234 call void @process36data_tS_S_(i64 %i62, i64 %i64, i64 %i67, i64 %i69, i64 %i72, i64 %i74)235 ret void236}237 238define void @bad4() {239; CHECK-LABEL: @bad4(240; CHECK-NEXT: bb:241; CHECK-NEXT: tail call void @process36data_tS_S_(i64 21542142465, i64 0, i64 723401749922909195, i64 723401728380766730, i64 1446803478303675925, i64 798285110420182026)242; CHECK-NEXT: ret void243;244bb:245 %i = alloca %struct.data_t, align 1246 %i1 = alloca %struct.data_t, align 1247 %i2 = alloca %struct.data_t, align 1248 store i8 1, ptr %i, align 1249 %i5 = getelementptr inbounds i8, ptr %i, i64 1250 store i8 2, ptr %i5, align 1251 %i6 = getelementptr inbounds i8, ptr %i5, i64 1252 store i8 3, ptr %i6, align 1253 %i7 = getelementptr inbounds i8, ptr %i6, i64 1254 store i8 4, ptr %i7, align 1255 %i8 = getelementptr inbounds i8, ptr %i7, i64 1256 store i8 5, ptr %i8, align 1257 %i9 = getelementptr inbounds i8, ptr %i8, i64 1258 store i8 0, ptr %i9, align 1259 %i10 = getelementptr inbounds i8, ptr %i9, i64 1260 store i8 0, ptr %i10, align 1261 %i11 = getelementptr inbounds i8, ptr %i10, i64 1262 store i8 0, ptr %i11, align 1263 %i12 = getelementptr inbounds i8, ptr %i11, i64 1264 store i8 0, ptr %i12, align 1265 %i13 = getelementptr inbounds i8, ptr %i12, i64 1266 store i8 0, ptr %i13, align 1267 %i14 = getelementptr inbounds i8, ptr %i13, i64 1268 store i8 0, ptr %i14, align 1269 %i15 = getelementptr inbounds i8, ptr %i14, i64 1270 store i8 0, ptr %i15, align 1271 %i16 = getelementptr inbounds i8, ptr %i15, i64 1272 store i8 0, ptr %i16, align 1273 %i17 = getelementptr inbounds i8, ptr %i16, i64 1274 store i8 0, ptr %i17, align 1275 %i18 = getelementptr inbounds i8, ptr %i17, i64 1276 store i8 0, ptr %i18, align 1277 %i19 = getelementptr inbounds i8, ptr %i18, i64 1278 store i8 0, ptr %i19, align 1279 store i8 11, ptr %i1, align 1280 %i22 = getelementptr inbounds i8, ptr %i1, i64 1281 store i8 12, ptr %i22, align 1282 %i23 = getelementptr inbounds i8, ptr %i22, i64 1283 store i8 13, ptr %i23, align 1284 %i24 = getelementptr inbounds i8, ptr %i23, i64 1285 store i8 14, ptr %i24, align 1286 %i25 = getelementptr inbounds i8, ptr %i24, i64 1287 store i8 15, ptr %i25, align 1288 %i26 = getelementptr inbounds i8, ptr %i25, i64 1289 store i8 10, ptr %i26, align 1290 %i27 = getelementptr inbounds i8, ptr %i26, i64 1291 store i8 10, ptr %i27, align 1292 %i28 = getelementptr inbounds i8, ptr %i27, i64 1293 store i8 10, ptr %i28, align 1294 %i29 = getelementptr inbounds i8, ptr %i28, i64 1295 store i8 10, ptr %i29, align 1296 %i30 = getelementptr inbounds i8, ptr %i29, i64 1297 store i8 10, ptr %i30, align 1298 %i31 = getelementptr inbounds i8, ptr %i30, i64 1299 store i8 10, ptr %i31, align 1300 %i32 = getelementptr inbounds i8, ptr %i31, i64 1301 store i8 10, ptr %i32, align 1302 %i33 = getelementptr inbounds i8, ptr %i32, i64 1303 store i8 10, ptr %i33, align 1304 %i34 = getelementptr inbounds i8, ptr %i33, i64 1305 store i8 10, ptr %i34, align 1306 %i35 = getelementptr inbounds i8, ptr %i34, i64 1307 store i8 10, ptr %i35, align 1308 %i36 = getelementptr inbounds i8, ptr %i35, i64 1309 store i8 10, ptr %i36, align 1310 store i8 21, ptr %i2, align 1311 %i39 = getelementptr inbounds i8, ptr %i2, i64 1312 store i8 22, ptr %i39, align 1313 %i40 = getelementptr inbounds i8, ptr %i39, i64 1314 store i8 23, ptr %i40, align 1315 %i41 = getelementptr inbounds i8, ptr %i40, i64 1316 store i8 24, ptr %i41, align 1317 %i42 = getelementptr inbounds i8, ptr %i41, i64 1318 store i8 25, ptr %i42, align 1319 %i43 = getelementptr inbounds i8, ptr %i42, i64 1320 store i8 20, ptr %i43, align 1321 %i44 = getelementptr inbounds i8, ptr %i43, i64 1322 store i8 20, ptr %i44, align 1323 %i45 = getelementptr inbounds i8, ptr %i44, i64 1324 store i8 20, ptr %i45, align 1325 %i46 = getelementptr inbounds i8, ptr %i45, i64 1326 store i8 10, ptr %i46, align 1327 %i47 = getelementptr inbounds i8, ptr %i46, i64 1328 store i8 20, ptr %i47, align 1329 %i48 = getelementptr inbounds i8, ptr %i47, i64 1330 store i8 20, ptr %i48, align 1331 %i49 = getelementptr inbounds i8, ptr %i48, i64 1332 store i8 20, ptr %i49, align 1333 %i50 = getelementptr inbounds i8, ptr %i49, i64 1334 store i8 20, ptr %i50, align 1335 %i51 = getelementptr inbounds i8, ptr %i50, i64 1336 store i8 20, ptr %i51, align 1337 %i52 = getelementptr inbounds i8, ptr %i51, i64 1338 store i8 20, ptr %i52, align 1339 %i53 = getelementptr inbounds i8, ptr %i52, i64 1340 store i8 11, ptr %i53, align 1341 %i55 = getelementptr inbounds { i64, i64 }, ptr %i, i32 0, i32 0342 %i56 = load i64, ptr %i55, align 1343 %i57 = getelementptr inbounds { i64, i64 }, ptr %i, i32 0, i32 1344 %i58 = load i64, ptr %i57, align 1345 %i60 = getelementptr inbounds { i64, i64 }, ptr %i1, i32 0, i32 0346 %i61 = load i64, ptr %i60, align 1347 %i62 = getelementptr inbounds { i64, i64 }, ptr %i1, i32 0, i32 1348 %i63 = load i64, ptr %i62, align 1349 %i65 = getelementptr inbounds { i64, i64 }, ptr %i2, i32 0, i32 0350 %i66 = load i64, ptr %i65, align 1351 %i67 = getelementptr inbounds { i64, i64 }, ptr %i2, i32 0, i32 1352 %i68 = load i64, ptr %i67, align 1353 call void @process36data_tS_S_(i64 %i56, i64 %i58, i64 %i61, i64 %i63, i64 %i66, i64 %i68)354 ret void355}356