brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.0 KiB · 0495677 Raw
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