brintos

brintos / llvm-project-archived public Read only

0
0
Text · 40.6 KiB · f3f9191 Raw
822 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52 3; RUN: opt -mtriple=riscv64 -mattr=+m,+v,+unaligned-vector-mem -passes=slp-vectorizer -S < %s | FileCheck %s4 5define void @const_stride_1_no_reordering(ptr %pl, ptr %ps) {6; CHECK-LABEL: define void @const_stride_1_no_reordering(7; CHECK-SAME: ptr [[PL:%.*]], ptr [[PS:%.*]]) #[[ATTR0:[0-9]+]] {8; CHECK-NEXT:    [[GEP_L0:%.*]] = getelementptr inbounds i8, ptr [[PL]], i64 09; CHECK-NEXT:    [[GEP_S0:%.*]] = getelementptr inbounds i8, ptr [[PS]], i64 010; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[GEP_L0]], align 111; CHECK-NEXT:    store <16 x i8> [[TMP1]], ptr [[GEP_S0]], align 112; CHECK-NEXT:    ret void13;14  %gep_l0 = getelementptr inbounds i8, ptr %pl, i64 015  %gep_l1 = getelementptr inbounds i8, ptr %pl, i64 116  %gep_l2 = getelementptr inbounds i8, ptr %pl, i64 217  %gep_l3 = getelementptr inbounds i8, ptr %pl, i64 318  %gep_l4 = getelementptr inbounds i8, ptr %pl, i64 419  %gep_l5 = getelementptr inbounds i8, ptr %pl, i64 520  %gep_l6 = getelementptr inbounds i8, ptr %pl, i64 621  %gep_l7 = getelementptr inbounds i8, ptr %pl, i64 722  %gep_l8 = getelementptr inbounds i8, ptr %pl, i64 823  %gep_l9 = getelementptr inbounds i8, ptr %pl, i64 924  %gep_l10 = getelementptr inbounds i8, ptr %pl, i64 1025  %gep_l11 = getelementptr inbounds i8, ptr %pl, i64 1126  %gep_l12 = getelementptr inbounds i8, ptr %pl, i64 1227  %gep_l13 = getelementptr inbounds i8, ptr %pl, i64 1328  %gep_l14 = getelementptr inbounds i8, ptr %pl, i64 1429  %gep_l15 = getelementptr inbounds i8, ptr %pl, i64 1530 31  %load0  = load i8, ptr %gep_l0 , align 132  %load1  = load i8, ptr %gep_l1 , align 133  %load2  = load i8, ptr %gep_l2 , align 134  %load3  = load i8, ptr %gep_l3 , align 135  %load4  = load i8, ptr %gep_l4 , align 136  %load5  = load i8, ptr %gep_l5 , align 137  %load6  = load i8, ptr %gep_l6 , align 138  %load7  = load i8, ptr %gep_l7 , align 139  %load8  = load i8, ptr %gep_l8 , align 140  %load9  = load i8, ptr %gep_l9 , align 141  %load10 = load i8, ptr %gep_l10, align 142  %load11 = load i8, ptr %gep_l11, align 143  %load12 = load i8, ptr %gep_l12, align 144  %load13 = load i8, ptr %gep_l13, align 145  %load14 = load i8, ptr %gep_l14, align 146  %load15 = load i8, ptr %gep_l15, align 147 48  %gep_s0 = getelementptr inbounds i8, ptr %ps, i64 049  %gep_s1 = getelementptr inbounds i8, ptr %ps, i64 150  %gep_s2 = getelementptr inbounds i8, ptr %ps, i64 251  %gep_s3 = getelementptr inbounds i8, ptr %ps, i64 352  %gep_s4 = getelementptr inbounds i8, ptr %ps, i64 453  %gep_s5 = getelementptr inbounds i8, ptr %ps, i64 554  %gep_s6 = getelementptr inbounds i8, ptr %ps, i64 655  %gep_s7 = getelementptr inbounds i8, ptr %ps, i64 756  %gep_s8 = getelementptr inbounds i8, ptr %ps, i64 857  %gep_s9 = getelementptr inbounds i8, ptr %ps, i64 958  %gep_s10 = getelementptr inbounds i8, ptr %ps, i64 1059  %gep_s11 = getelementptr inbounds i8, ptr %ps, i64 1160  %gep_s12 = getelementptr inbounds i8, ptr %ps, i64 1261  %gep_s13 = getelementptr inbounds i8, ptr %ps, i64 1362  %gep_s14 = getelementptr inbounds i8, ptr %ps, i64 1463  %gep_s15 = getelementptr inbounds i8, ptr %ps, i64 1564 65  store i8 %load0, ptr %gep_s0, align 166  store i8 %load1, ptr %gep_s1, align 167  store i8 %load2, ptr %gep_s2, align 168  store i8 %load3, ptr %gep_s3, align 169  store i8 %load4, ptr %gep_s4, align 170  store i8 %load5, ptr %gep_s5, align 171  store i8 %load6, ptr %gep_s6, align 172  store i8 %load7, ptr %gep_s7, align 173  store i8 %load8, ptr %gep_s8, align 174  store i8 %load9, ptr %gep_s9, align 175  store i8 %load10, ptr %gep_s10, align 176  store i8 %load11, ptr %gep_s11, align 177  store i8 %load12, ptr %gep_s12, align 178  store i8 %load13, ptr %gep_s13, align 179  store i8 %load14, ptr %gep_s14, align 180  store i8 %load15, ptr %gep_s15, align 181 82  ret void83}84 85define void @const_stride_1_with_reordering(ptr %pl, ptr %ps) {86; CHECK-LABEL: define void @const_stride_1_with_reordering(87; CHECK-SAME: ptr [[PL:%.*]], ptr [[PS:%.*]]) #[[ATTR0]] {88; CHECK-NEXT:    [[GEP_L0:%.*]] = getelementptr inbounds i8, ptr [[PL]], i64 089; CHECK-NEXT:    [[GEP_S0:%.*]] = getelementptr inbounds i8, ptr [[PS]], i64 090; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[GEP_L0]], align 191; CHECK-NEXT:    [[TMP2:%.*]] = shufflevector <16 x i8> [[TMP1]], <16 x i8> poison, <16 x i32> <i32 1, i32 0, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>92; CHECK-NEXT:    store <16 x i8> [[TMP2]], ptr [[GEP_S0]], align 193; CHECK-NEXT:    ret void94;95  %gep_l0 = getelementptr inbounds i8, ptr %pl, i64 096  %gep_l1 = getelementptr inbounds i8, ptr %pl, i64 197  %gep_l2 = getelementptr inbounds i8, ptr %pl, i64 298  %gep_l3 = getelementptr inbounds i8, ptr %pl, i64 399  %gep_l4 = getelementptr inbounds i8, ptr %pl, i64 4100  %gep_l5 = getelementptr inbounds i8, ptr %pl, i64 5101  %gep_l6 = getelementptr inbounds i8, ptr %pl, i64 6102  %gep_l7 = getelementptr inbounds i8, ptr %pl, i64 7103  %gep_l8 = getelementptr inbounds i8, ptr %pl, i64 8104  %gep_l9 = getelementptr inbounds i8, ptr %pl, i64 9105  %gep_l10 = getelementptr inbounds i8, ptr %pl, i64 10106  %gep_l11 = getelementptr inbounds i8, ptr %pl, i64 11107  %gep_l12 = getelementptr inbounds i8, ptr %pl, i64 12108  %gep_l13 = getelementptr inbounds i8, ptr %pl, i64 13109  %gep_l14 = getelementptr inbounds i8, ptr %pl, i64 14110  %gep_l15 = getelementptr inbounds i8, ptr %pl, i64 15111 112  %load0  = load i8, ptr %gep_l0 , align 1113  %load1  = load i8, ptr %gep_l1 , align 1114  %load2  = load i8, ptr %gep_l2 , align 1115  %load3  = load i8, ptr %gep_l3 , align 1116  %load4  = load i8, ptr %gep_l4 , align 1117  %load5  = load i8, ptr %gep_l5 , align 1118  %load6  = load i8, ptr %gep_l6 , align 1119  %load7  = load i8, ptr %gep_l7 , align 1120  %load8  = load i8, ptr %gep_l8 , align 1121  %load9  = load i8, ptr %gep_l9 , align 1122  %load10 = load i8, ptr %gep_l10, align 1123  %load11 = load i8, ptr %gep_l11, align 1124  %load12 = load i8, ptr %gep_l12, align 1125  %load13 = load i8, ptr %gep_l13, align 1126  %load14 = load i8, ptr %gep_l14, align 1127  %load15 = load i8, ptr %gep_l15, align 1128 129  %gep_s0 = getelementptr inbounds i8, ptr %ps, i64 0130  %gep_s1 = getelementptr inbounds i8, ptr %ps, i64 1131  %gep_s2 = getelementptr inbounds i8, ptr %ps, i64 2132  %gep_s3 = getelementptr inbounds i8, ptr %ps, i64 3133  %gep_s4 = getelementptr inbounds i8, ptr %ps, i64 4134  %gep_s5 = getelementptr inbounds i8, ptr %ps, i64 5135  %gep_s6 = getelementptr inbounds i8, ptr %ps, i64 6136  %gep_s7 = getelementptr inbounds i8, ptr %ps, i64 7137  %gep_s8 = getelementptr inbounds i8, ptr %ps, i64 8138  %gep_s9 = getelementptr inbounds i8, ptr %ps, i64 9139  %gep_s10 = getelementptr inbounds i8, ptr %ps, i64 10140  %gep_s11 = getelementptr inbounds i8, ptr %ps, i64 11141  %gep_s12 = getelementptr inbounds i8, ptr %ps, i64 12142  %gep_s13 = getelementptr inbounds i8, ptr %ps, i64 13143  %gep_s14 = getelementptr inbounds i8, ptr %ps, i64 14144  %gep_s15 = getelementptr inbounds i8, ptr %ps, i64 15145 146  ; NOTE: value from %load1 in stored in  %gep_s0147  store i8 %load1, ptr %gep_s0, align 1148  store i8 %load0, ptr %gep_s1, align 1149  store i8 %load2, ptr %gep_s2, align 1150  store i8 %load3, ptr %gep_s3, align 1151  store i8 %load4, ptr %gep_s4, align 1152  store i8 %load5, ptr %gep_s5, align 1153  store i8 %load6, ptr %gep_s6, align 1154  store i8 %load7, ptr %gep_s7, align 1155  store i8 %load8, ptr %gep_s8, align 1156  store i8 %load9, ptr %gep_s9, align 1157  store i8 %load10, ptr %gep_s10, align 1158  store i8 %load11, ptr %gep_s11, align 1159  store i8 %load12, ptr %gep_s12, align 1160  store i8 %load13, ptr %gep_s13, align 1161  store i8 %load14, ptr %gep_s14, align 1162  store i8 %load15, ptr %gep_s15, align 1163 164  ret void165}166 167 168define void @const_stride_2_no_reordering(ptr %pl, ptr %ps) {169; CHECK-LABEL: define void @const_stride_2_no_reordering(170; CHECK-SAME: ptr [[PL:%.*]], ptr [[PS:%.*]]) #[[ATTR0]] {171; CHECK-NEXT:    [[GEP_L0:%.*]] = getelementptr inbounds i8, ptr [[PL]], i64 0172; CHECK-NEXT:    [[GEP_S0:%.*]] = getelementptr inbounds i8, ptr [[PS]], i64 0173; CHECK-NEXT:    [[TMP2:%.*]] = call <31 x i8> @llvm.masked.load.v31i8.p0(ptr align 1 [[GEP_L0]], <31 x i1> <i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true>, <31 x i8> poison)174; CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <31 x i8> [[TMP2]], <31 x i8> poison, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>175; CHECK-NEXT:    store <16 x i8> [[TMP1]], ptr [[GEP_S0]], align 1176; CHECK-NEXT:    ret void177;178  %gep_l0 = getelementptr inbounds i8, ptr %pl, i64 0179  %gep_l1 = getelementptr inbounds i8, ptr %pl, i64 2180  %gep_l2 = getelementptr inbounds i8, ptr %pl, i64 4181  %gep_l3 = getelementptr inbounds i8, ptr %pl, i64 6182  %gep_l4 = getelementptr inbounds i8, ptr %pl, i64 8183  %gep_l5 = getelementptr inbounds i8, ptr %pl, i64 10184  %gep_l6 = getelementptr inbounds i8, ptr %pl, i64 12185  %gep_l7 = getelementptr inbounds i8, ptr %pl, i64 14186  %gep_l8 = getelementptr inbounds i8, ptr %pl, i64 16187  %gep_l9 = getelementptr inbounds i8, ptr %pl, i64 18188  %gep_l10 = getelementptr inbounds i8, ptr %pl, i64 20189  %gep_l11 = getelementptr inbounds i8, ptr %pl, i64 22190  %gep_l12 = getelementptr inbounds i8, ptr %pl, i64 24191  %gep_l13 = getelementptr inbounds i8, ptr %pl, i64 26192  %gep_l14 = getelementptr inbounds i8, ptr %pl, i64 28193  %gep_l15 = getelementptr inbounds i8, ptr %pl, i64 30194 195  %load0  = load i8, ptr %gep_l0 , align 1196  %load1  = load i8, ptr %gep_l1 , align 1197  %load2  = load i8, ptr %gep_l2 , align 1198  %load3  = load i8, ptr %gep_l3 , align 1199  %load4  = load i8, ptr %gep_l4 , align 1200  %load5  = load i8, ptr %gep_l5 , align 1201  %load6  = load i8, ptr %gep_l6 , align 1202  %load7  = load i8, ptr %gep_l7 , align 1203  %load8  = load i8, ptr %gep_l8 , align 1204  %load9  = load i8, ptr %gep_l9 , align 1205  %load10 = load i8, ptr %gep_l10, align 1206  %load11 = load i8, ptr %gep_l11, align 1207  %load12 = load i8, ptr %gep_l12, align 1208  %load13 = load i8, ptr %gep_l13, align 1209  %load14 = load i8, ptr %gep_l14, align 1210  %load15 = load i8, ptr %gep_l15, align 1211 212  %gep_s0 = getelementptr inbounds i8, ptr %ps, i64 0213  %gep_s1 = getelementptr inbounds i8, ptr %ps, i64 1214  %gep_s2 = getelementptr inbounds i8, ptr %ps, i64 2215  %gep_s3 = getelementptr inbounds i8, ptr %ps, i64 3216  %gep_s4 = getelementptr inbounds i8, ptr %ps, i64 4217  %gep_s5 = getelementptr inbounds i8, ptr %ps, i64 5218  %gep_s6 = getelementptr inbounds i8, ptr %ps, i64 6219  %gep_s7 = getelementptr inbounds i8, ptr %ps, i64 7220  %gep_s8 = getelementptr inbounds i8, ptr %ps, i64 8221  %gep_s9 = getelementptr inbounds i8, ptr %ps, i64 9222  %gep_s10 = getelementptr inbounds i8, ptr %ps, i64 10223  %gep_s11 = getelementptr inbounds i8, ptr %ps, i64 11224  %gep_s12 = getelementptr inbounds i8, ptr %ps, i64 12225  %gep_s13 = getelementptr inbounds i8, ptr %ps, i64 13226  %gep_s14 = getelementptr inbounds i8, ptr %ps, i64 14227  %gep_s15 = getelementptr inbounds i8, ptr %ps, i64 15228 229  store i8 %load0, ptr %gep_s0, align 1230  store i8 %load1, ptr %gep_s1, align 1231  store i8 %load2, ptr %gep_s2, align 1232  store i8 %load3, ptr %gep_s3, align 1233  store i8 %load4, ptr %gep_s4, align 1234  store i8 %load5, ptr %gep_s5, align 1235  store i8 %load6, ptr %gep_s6, align 1236  store i8 %load7, ptr %gep_s7, align 1237  store i8 %load8, ptr %gep_s8, align 1238  store i8 %load9, ptr %gep_s9, align 1239  store i8 %load10, ptr %gep_s10, align 1240  store i8 %load11, ptr %gep_s11, align 1241  store i8 %load12, ptr %gep_s12, align 1242  store i8 %load13, ptr %gep_s13, align 1243  store i8 %load14, ptr %gep_s14, align 1244  store i8 %load15, ptr %gep_s15, align 1245 246  ret void247}248 249define void @const_stride_2_with_reordering(ptr %pl, ptr %ps) {250; CHECK-LABEL: define void @const_stride_2_with_reordering(251; CHECK-SAME: ptr [[PL:%.*]], ptr [[PS:%.*]]) #[[ATTR0]] {252; CHECK-NEXT:    [[GEP_L0:%.*]] = getelementptr inbounds i8, ptr [[PL]], i64 0253; CHECK-NEXT:    [[GEP_S0:%.*]] = getelementptr inbounds i8, ptr [[PS]], i64 0254; CHECK-NEXT:    [[TMP1:%.*]] = call <31 x i8> @llvm.masked.load.v31i8.p0(ptr align 1 [[GEP_L0]], <31 x i1> <i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true>, <31 x i8> poison)255; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <31 x i8> [[TMP1]], <31 x i8> poison, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>256; CHECK-NEXT:    [[TMP2:%.*]] = shufflevector <31 x i8> [[TMP1]], <31 x i8> poison, <16 x i32> <i32 2, i32 0, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>257; CHECK-NEXT:    store <16 x i8> [[TMP2]], ptr [[GEP_S0]], align 1258; CHECK-NEXT:    ret void259;260  %gep_l0 = getelementptr inbounds i8, ptr %pl, i64 0261  %gep_l1 = getelementptr inbounds i8, ptr %pl, i64 2262  %gep_l2 = getelementptr inbounds i8, ptr %pl, i64 4263  %gep_l3 = getelementptr inbounds i8, ptr %pl, i64 6264  %gep_l4 = getelementptr inbounds i8, ptr %pl, i64 8265  %gep_l5 = getelementptr inbounds i8, ptr %pl, i64 10266  %gep_l6 = getelementptr inbounds i8, ptr %pl, i64 12267  %gep_l7 = getelementptr inbounds i8, ptr %pl, i64 14268  %gep_l8 = getelementptr inbounds i8, ptr %pl, i64 16269  %gep_l9 = getelementptr inbounds i8, ptr %pl, i64 18270  %gep_l10 = getelementptr inbounds i8, ptr %pl, i64 20271  %gep_l11 = getelementptr inbounds i8, ptr %pl, i64 22272  %gep_l12 = getelementptr inbounds i8, ptr %pl, i64 24273  %gep_l13 = getelementptr inbounds i8, ptr %pl, i64 26274  %gep_l14 = getelementptr inbounds i8, ptr %pl, i64 28275  %gep_l15 = getelementptr inbounds i8, ptr %pl, i64 30276 277  %load0  = load i8, ptr %gep_l0 , align 1278  %load1  = load i8, ptr %gep_l1 , align 1279  %load2  = load i8, ptr %gep_l2 , align 1280  %load3  = load i8, ptr %gep_l3 , align 1281  %load4  = load i8, ptr %gep_l4 , align 1282  %load5  = load i8, ptr %gep_l5 , align 1283  %load6  = load i8, ptr %gep_l6 , align 1284  %load7  = load i8, ptr %gep_l7 , align 1285  %load8  = load i8, ptr %gep_l8 , align 1286  %load9  = load i8, ptr %gep_l9 , align 1287  %load10 = load i8, ptr %gep_l10, align 1288  %load11 = load i8, ptr %gep_l11, align 1289  %load12 = load i8, ptr %gep_l12, align 1290  %load13 = load i8, ptr %gep_l13, align 1291  %load14 = load i8, ptr %gep_l14, align 1292  %load15 = load i8, ptr %gep_l15, align 1293 294  %gep_s0 = getelementptr inbounds i8, ptr %ps, i64 0295  %gep_s1 = getelementptr inbounds i8, ptr %ps, i64 1296  %gep_s2 = getelementptr inbounds i8, ptr %ps, i64 2297  %gep_s3 = getelementptr inbounds i8, ptr %ps, i64 3298  %gep_s4 = getelementptr inbounds i8, ptr %ps, i64 4299  %gep_s5 = getelementptr inbounds i8, ptr %ps, i64 5300  %gep_s6 = getelementptr inbounds i8, ptr %ps, i64 6301  %gep_s7 = getelementptr inbounds i8, ptr %ps, i64 7302  %gep_s8 = getelementptr inbounds i8, ptr %ps, i64 8303  %gep_s9 = getelementptr inbounds i8, ptr %ps, i64 9304  %gep_s10 = getelementptr inbounds i8, ptr %ps, i64 10305  %gep_s11 = getelementptr inbounds i8, ptr %ps, i64 11306  %gep_s12 = getelementptr inbounds i8, ptr %ps, i64 12307  %gep_s13 = getelementptr inbounds i8, ptr %ps, i64 13308  %gep_s14 = getelementptr inbounds i8, ptr %ps, i64 14309  %gep_s15 = getelementptr inbounds i8, ptr %ps, i64 15310 311  store i8 %load1, ptr %gep_s0, align 1312  store i8 %load0, ptr %gep_s1, align 1313  store i8 %load2, ptr %gep_s2, align 1314  store i8 %load3, ptr %gep_s3, align 1315  store i8 %load4, ptr %gep_s4, align 1316  store i8 %load5, ptr %gep_s5, align 1317  store i8 %load6, ptr %gep_s6, align 1318  store i8 %load7, ptr %gep_s7, align 1319  store i8 %load8, ptr %gep_s8, align 1320  store i8 %load9, ptr %gep_s9, align 1321  store i8 %load10, ptr %gep_s10, align 1322  store i8 %load11, ptr %gep_s11, align 1323  store i8 %load12, ptr %gep_s12, align 1324  store i8 %load13, ptr %gep_s13, align 1325  store i8 %load14, ptr %gep_s14, align 1326  store i8 %load15, ptr %gep_s15, align 1327 328  ret void329}330 331define void @rt_stride_1_no_reordering(ptr %pl, i64 %stride, ptr %ps) {332; CHECK-LABEL: define void @rt_stride_1_no_reordering(333; CHECK-SAME: ptr [[PL:%.*]], i64 [[STRIDE:%.*]], ptr [[PS:%.*]]) #[[ATTR0]] {334; CHECK-NEXT:    [[STRIDE0:%.*]] = mul nsw i64 [[STRIDE]], 0335; CHECK-NEXT:    [[GEP_L0:%.*]] = getelementptr inbounds i8, ptr [[PL]], i64 [[STRIDE0]]336; CHECK-NEXT:    [[GEP_S0:%.*]] = getelementptr inbounds i8, ptr [[PS]], i64 0337; CHECK-NEXT:    [[TMP1:%.*]] = mul i64 [[STRIDE]], 1338; CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.experimental.vp.strided.load.v16i8.p0.i64(ptr align 1 [[GEP_L0]], i64 [[TMP1]], <16 x i1> splat (i1 true), i32 16)339; CHECK-NEXT:    store <16 x i8> [[TMP2]], ptr [[GEP_S0]], align 1340; CHECK-NEXT:    ret void341;342  %stride0  = mul nsw i64 %stride, 0343  %stride1  = mul nsw i64 %stride, 1344  %stride2  = mul nsw i64 %stride, 2345  %stride3  = mul nsw i64 %stride, 3346  %stride4  = mul nsw i64 %stride, 4347  %stride5  = mul nsw i64 %stride, 5348  %stride6  = mul nsw i64 %stride, 6349  %stride7  = mul nsw i64 %stride, 7350  %stride8  = mul nsw i64 %stride, 8351  %stride9  = mul nsw i64 %stride, 9352  %stride10 = mul nsw i64 %stride, 10353  %stride11 = mul nsw i64 %stride, 11354  %stride12 = mul nsw i64 %stride, 12355  %stride13 = mul nsw i64 %stride, 13356  %stride14 = mul nsw i64 %stride, 14357  %stride15 = mul nsw i64 %stride, 15358 359  %gep_l0 = getelementptr inbounds i8, ptr %pl, i64 %stride0360  %gep_l1 = getelementptr inbounds i8, ptr %pl, i64 %stride1361  %gep_l2 = getelementptr inbounds i8, ptr %pl, i64 %stride2362  %gep_l3 = getelementptr inbounds i8, ptr %pl, i64 %stride3363  %gep_l4 = getelementptr inbounds i8, ptr %pl, i64 %stride4364  %gep_l5 = getelementptr inbounds i8, ptr %pl, i64 %stride5365  %gep_l6 = getelementptr inbounds i8, ptr %pl, i64 %stride6366  %gep_l7 = getelementptr inbounds i8, ptr %pl, i64 %stride7367  %gep_l8 = getelementptr inbounds i8, ptr %pl, i64 %stride8368  %gep_l9 = getelementptr inbounds i8, ptr %pl, i64 %stride9369  %gep_l10 = getelementptr inbounds i8, ptr %pl, i64 %stride10370  %gep_l11 = getelementptr inbounds i8, ptr %pl, i64 %stride11371  %gep_l12 = getelementptr inbounds i8, ptr %pl, i64 %stride12372  %gep_l13 = getelementptr inbounds i8, ptr %pl, i64 %stride13373  %gep_l14 = getelementptr inbounds i8, ptr %pl, i64 %stride14374  %gep_l15 = getelementptr inbounds i8, ptr %pl, i64 %stride15375 376  %load0  = load i8, ptr %gep_l0 , align 1377  %load1  = load i8, ptr %gep_l1 , align 1378  %load2  = load i8, ptr %gep_l2 , align 1379  %load3  = load i8, ptr %gep_l3 , align 1380  %load4  = load i8, ptr %gep_l4 , align 1381  %load5  = load i8, ptr %gep_l5 , align 1382  %load6  = load i8, ptr %gep_l6 , align 1383  %load7  = load i8, ptr %gep_l7 , align 1384  %load8  = load i8, ptr %gep_l8 , align 1385  %load9  = load i8, ptr %gep_l9 , align 1386  %load10 = load i8, ptr %gep_l10, align 1387  %load11 = load i8, ptr %gep_l11, align 1388  %load12 = load i8, ptr %gep_l12, align 1389  %load13 = load i8, ptr %gep_l13, align 1390  %load14 = load i8, ptr %gep_l14, align 1391  %load15 = load i8, ptr %gep_l15, align 1392 393  %gep_s0 = getelementptr inbounds i8, ptr %ps, i64 0394  %gep_s1 = getelementptr inbounds i8, ptr %ps, i64 1395  %gep_s2 = getelementptr inbounds i8, ptr %ps, i64 2396  %gep_s3 = getelementptr inbounds i8, ptr %ps, i64 3397  %gep_s4 = getelementptr inbounds i8, ptr %ps, i64 4398  %gep_s5 = getelementptr inbounds i8, ptr %ps, i64 5399  %gep_s6 = getelementptr inbounds i8, ptr %ps, i64 6400  %gep_s7 = getelementptr inbounds i8, ptr %ps, i64 7401  %gep_s8 = getelementptr inbounds i8, ptr %ps, i64 8402  %gep_s9 = getelementptr inbounds i8, ptr %ps, i64 9403  %gep_s10 = getelementptr inbounds i8, ptr %ps, i64 10404  %gep_s11 = getelementptr inbounds i8, ptr %ps, i64 11405  %gep_s12 = getelementptr inbounds i8, ptr %ps, i64 12406  %gep_s13 = getelementptr inbounds i8, ptr %ps, i64 13407  %gep_s14 = getelementptr inbounds i8, ptr %ps, i64 14408  %gep_s15 = getelementptr inbounds i8, ptr %ps, i64 15409 410  store i8 %load0, ptr %gep_s0, align 1411  store i8 %load1, ptr %gep_s1, align 1412  store i8 %load2, ptr %gep_s2, align 1413  store i8 %load3, ptr %gep_s3, align 1414  store i8 %load4, ptr %gep_s4, align 1415  store i8 %load5, ptr %gep_s5, align 1416  store i8 %load6, ptr %gep_s6, align 1417  store i8 %load7, ptr %gep_s7, align 1418  store i8 %load8, ptr %gep_s8, align 1419  store i8 %load9, ptr %gep_s9, align 1420  store i8 %load10, ptr %gep_s10, align 1421  store i8 %load11, ptr %gep_s11, align 1422  store i8 %load12, ptr %gep_s12, align 1423  store i8 %load13, ptr %gep_s13, align 1424  store i8 %load14, ptr %gep_s14, align 1425  store i8 %load15, ptr %gep_s15, align 1426 427  ret void428}429 430define void @rt_stride_1_with_reordering(ptr %pl, i64 %stride, ptr %ps) {431; CHECK-LABEL: define void @rt_stride_1_with_reordering(432; CHECK-SAME: ptr [[PL:%.*]], i64 [[STRIDE:%.*]], ptr [[PS:%.*]]) #[[ATTR0]] {433; CHECK-NEXT:    [[STRIDE0:%.*]] = mul nsw i64 [[STRIDE]], 0434; CHECK-NEXT:    [[GEP_L0:%.*]] = getelementptr inbounds i8, ptr [[PL]], i64 [[STRIDE0]]435; CHECK-NEXT:    [[GEP_S0:%.*]] = getelementptr inbounds i8, ptr [[PS]], i64 0436; CHECK-NEXT:    [[TMP1:%.*]] = mul i64 [[STRIDE]], 1437; CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.experimental.vp.strided.load.v16i8.p0.i64(ptr align 1 [[GEP_L0]], i64 [[TMP1]], <16 x i1> splat (i1 true), i32 16)438; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <16 x i8> [[TMP2]], <16 x i8> poison, <16 x i32> <i32 1, i32 0, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>439; CHECK-NEXT:    store <16 x i8> [[TMP3]], ptr [[GEP_S0]], align 1440; CHECK-NEXT:    ret void441;442  %stride0  = mul nsw i64 %stride, 0443  %stride1  = mul nsw i64 %stride, 1444  %stride2  = mul nsw i64 %stride, 2445  %stride3  = mul nsw i64 %stride, 3446  %stride4  = mul nsw i64 %stride, 4447  %stride5  = mul nsw i64 %stride, 5448  %stride6  = mul nsw i64 %stride, 6449  %stride7  = mul nsw i64 %stride, 7450  %stride8  = mul nsw i64 %stride, 8451  %stride9  = mul nsw i64 %stride, 9452  %stride10 = mul nsw i64 %stride, 10453  %stride11 = mul nsw i64 %stride, 11454  %stride12 = mul nsw i64 %stride, 12455  %stride13 = mul nsw i64 %stride, 13456  %stride14 = mul nsw i64 %stride, 14457  %stride15 = mul nsw i64 %stride, 15458 459  %gep_l0 = getelementptr inbounds i8, ptr %pl, i64 %stride0460  %gep_l1 = getelementptr inbounds i8, ptr %pl, i64 %stride1461  %gep_l2 = getelementptr inbounds i8, ptr %pl, i64 %stride2462  %gep_l3 = getelementptr inbounds i8, ptr %pl, i64 %stride3463  %gep_l4 = getelementptr inbounds i8, ptr %pl, i64 %stride4464  %gep_l5 = getelementptr inbounds i8, ptr %pl, i64 %stride5465  %gep_l6 = getelementptr inbounds i8, ptr %pl, i64 %stride6466  %gep_l7 = getelementptr inbounds i8, ptr %pl, i64 %stride7467  %gep_l8 = getelementptr inbounds i8, ptr %pl, i64 %stride8468  %gep_l9 = getelementptr inbounds i8, ptr %pl, i64 %stride9469  %gep_l10 = getelementptr inbounds i8, ptr %pl, i64 %stride10470  %gep_l11 = getelementptr inbounds i8, ptr %pl, i64 %stride11471  %gep_l12 = getelementptr inbounds i8, ptr %pl, i64 %stride12472  %gep_l13 = getelementptr inbounds i8, ptr %pl, i64 %stride13473  %gep_l14 = getelementptr inbounds i8, ptr %pl, i64 %stride14474  %gep_l15 = getelementptr inbounds i8, ptr %pl, i64 %stride15475 476  %load0  = load i8, ptr %gep_l0 , align 1477  %load1  = load i8, ptr %gep_l1 , align 1478  %load2  = load i8, ptr %gep_l2 , align 1479  %load3  = load i8, ptr %gep_l3 , align 1480  %load4  = load i8, ptr %gep_l4 , align 1481  %load5  = load i8, ptr %gep_l5 , align 1482  %load6  = load i8, ptr %gep_l6 , align 1483  %load7  = load i8, ptr %gep_l7 , align 1484  %load8  = load i8, ptr %gep_l8 , align 1485  %load9  = load i8, ptr %gep_l9 , align 1486  %load10 = load i8, ptr %gep_l10, align 1487  %load11 = load i8, ptr %gep_l11, align 1488  %load12 = load i8, ptr %gep_l12, align 1489  %load13 = load i8, ptr %gep_l13, align 1490  %load14 = load i8, ptr %gep_l14, align 1491  %load15 = load i8, ptr %gep_l15, align 1492 493  %gep_s0 = getelementptr inbounds i8, ptr %ps, i64 0494  %gep_s1 = getelementptr inbounds i8, ptr %ps, i64 1495  %gep_s2 = getelementptr inbounds i8, ptr %ps, i64 2496  %gep_s3 = getelementptr inbounds i8, ptr %ps, i64 3497  %gep_s4 = getelementptr inbounds i8, ptr %ps, i64 4498  %gep_s5 = getelementptr inbounds i8, ptr %ps, i64 5499  %gep_s6 = getelementptr inbounds i8, ptr %ps, i64 6500  %gep_s7 = getelementptr inbounds i8, ptr %ps, i64 7501  %gep_s8 = getelementptr inbounds i8, ptr %ps, i64 8502  %gep_s9 = getelementptr inbounds i8, ptr %ps, i64 9503  %gep_s10 = getelementptr inbounds i8, ptr %ps, i64 10504  %gep_s11 = getelementptr inbounds i8, ptr %ps, i64 11505  %gep_s12 = getelementptr inbounds i8, ptr %ps, i64 12506  %gep_s13 = getelementptr inbounds i8, ptr %ps, i64 13507  %gep_s14 = getelementptr inbounds i8, ptr %ps, i64 14508  %gep_s15 = getelementptr inbounds i8, ptr %ps, i64 15509 510  store i8 %load1, ptr %gep_s0, align 1511  store i8 %load0, ptr %gep_s1, align 1512  store i8 %load2, ptr %gep_s2, align 1513  store i8 %load3, ptr %gep_s3, align 1514  store i8 %load4, ptr %gep_s4, align 1515  store i8 %load5, ptr %gep_s5, align 1516  store i8 %load6, ptr %gep_s6, align 1517  store i8 %load7, ptr %gep_s7, align 1518  store i8 %load8, ptr %gep_s8, align 1519  store i8 %load9, ptr %gep_s9, align 1520  store i8 %load10, ptr %gep_s10, align 1521  store i8 %load11, ptr %gep_s11, align 1522  store i8 %load12, ptr %gep_s12, align 1523  store i8 %load13, ptr %gep_s13, align 1524  store i8 %load14, ptr %gep_s14, align 1525  store i8 %load15, ptr %gep_s15, align 1526 527  ret void528}529 530define void @constant_stride_masked_no_reordering(ptr %pl, i64 %stride, ptr %ps) {531; CHECK-LABEL: define void @constant_stride_masked_no_reordering(532; CHECK-SAME: ptr [[PL:%.*]], i64 [[STRIDE:%.*]], ptr [[PS:%.*]]) #[[ATTR0]] {533; CHECK-NEXT:    [[GEP_L0:%.*]] = getelementptr inbounds i8, ptr [[PL]], i64 0534; CHECK-NEXT:    [[GEP_S0:%.*]] = getelementptr inbounds i8, ptr [[PS]], i64 0535; CHECK-NEXT:    [[TMP1:%.*]] = call <28 x i8> @llvm.masked.load.v28i8.p0(ptr align 1 [[GEP_L0]], <28 x i1> <i1 true, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 false, i1 true, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 false, i1 true, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 false, i1 true, i1 true, i1 true, i1 true>, <28 x i8> poison)536; CHECK-NEXT:    [[TMP2:%.*]] = shufflevector <28 x i8> [[TMP1]], <28 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19, i32 24, i32 25, i32 26, i32 27>537; CHECK-NEXT:    store <16 x i8> [[TMP2]], ptr [[GEP_S0]], align 1538; CHECK-NEXT:    ret void539;540  %gep_l0 = getelementptr inbounds i8, ptr %pl, i64 0541  %gep_l1 = getelementptr inbounds i8, ptr %pl, i64 1542  %gep_l2 = getelementptr inbounds i8, ptr %pl, i64 2543  %gep_l3 = getelementptr inbounds i8, ptr %pl, i64 3544  %gep_l4 = getelementptr inbounds i8, ptr %pl, i64 8545  %gep_l5 = getelementptr inbounds i8, ptr %pl, i64 9546  %gep_l6 = getelementptr inbounds i8, ptr %pl, i64 10547  %gep_l7 = getelementptr inbounds i8, ptr %pl, i64 11548  %gep_l8 = getelementptr inbounds i8, ptr %pl, i64 16549  %gep_l9 = getelementptr inbounds i8, ptr %pl, i64 17550  %gep_l10 = getelementptr inbounds i8, ptr %pl, i64 18551  %gep_l11 = getelementptr inbounds i8, ptr %pl, i64 19552  %gep_l12 = getelementptr inbounds i8, ptr %pl, i64 24553  %gep_l13 = getelementptr inbounds i8, ptr %pl, i64 25554  %gep_l14 = getelementptr inbounds i8, ptr %pl, i64 26555  %gep_l15 = getelementptr inbounds i8, ptr %pl, i64 27556 557  %load0  = load i8, ptr %gep_l0 , align 1558  %load1  = load i8, ptr %gep_l1 , align 1559  %load2  = load i8, ptr %gep_l2 , align 1560  %load3  = load i8, ptr %gep_l3 , align 1561  %load4  = load i8, ptr %gep_l4 , align 1562  %load5  = load i8, ptr %gep_l5 , align 1563  %load6  = load i8, ptr %gep_l6 , align 1564  %load7  = load i8, ptr %gep_l7 , align 1565  %load8  = load i8, ptr %gep_l8 , align 1566  %load9  = load i8, ptr %gep_l9 , align 1567  %load10 = load i8, ptr %gep_l10, align 1568  %load11 = load i8, ptr %gep_l11, align 1569  %load12 = load i8, ptr %gep_l12, align 1570  %load13 = load i8, ptr %gep_l13, align 1571  %load14 = load i8, ptr %gep_l14, align 1572  %load15 = load i8, ptr %gep_l15, align 1573 574  %gep_s0 = getelementptr inbounds i8, ptr %ps, i64 0575  %gep_s1 = getelementptr inbounds i8, ptr %ps, i64 1576  %gep_s2 = getelementptr inbounds i8, ptr %ps, i64 2577  %gep_s3 = getelementptr inbounds i8, ptr %ps, i64 3578  %gep_s4 = getelementptr inbounds i8, ptr %ps, i64 4579  %gep_s5 = getelementptr inbounds i8, ptr %ps, i64 5580  %gep_s6 = getelementptr inbounds i8, ptr %ps, i64 6581  %gep_s7 = getelementptr inbounds i8, ptr %ps, i64 7582  %gep_s8 = getelementptr inbounds i8, ptr %ps, i64 8583  %gep_s9 = getelementptr inbounds i8, ptr %ps, i64 9584  %gep_s10 = getelementptr inbounds i8, ptr %ps, i64 10585  %gep_s11 = getelementptr inbounds i8, ptr %ps, i64 11586  %gep_s12 = getelementptr inbounds i8, ptr %ps, i64 12587  %gep_s13 = getelementptr inbounds i8, ptr %ps, i64 13588  %gep_s14 = getelementptr inbounds i8, ptr %ps, i64 14589  %gep_s15 = getelementptr inbounds i8, ptr %ps, i64 15590 591  store i8 %load0, ptr %gep_s0, align 1592  store i8 %load1, ptr %gep_s1, align 1593  store i8 %load2, ptr %gep_s2, align 1594  store i8 %load3, ptr %gep_s3, align 1595  store i8 %load4, ptr %gep_s4, align 1596  store i8 %load5, ptr %gep_s5, align 1597  store i8 %load6, ptr %gep_s6, align 1598  store i8 %load7, ptr %gep_s7, align 1599  store i8 %load8, ptr %gep_s8, align 1600  store i8 %load9, ptr %gep_s9, align 1601  store i8 %load10, ptr %gep_s10, align 1602  store i8 %load11, ptr %gep_s11, align 1603  store i8 %load12, ptr %gep_s12, align 1604  store i8 %load13, ptr %gep_s13, align 1605  store i8 %load14, ptr %gep_s14, align 1606  store i8 %load15, ptr %gep_s15, align 1607 608  ret void609}610 611; TODO: We want to generate this code:612; define void @constant_stride_widen_no_reordering(ptr %pl, i64 %stride, ptr %ps) #0 {613;   %gep_l0 = getelementptr inbounds i8, ptr %pl, i64 0614;   %gep_s0 = getelementptr inbounds i8, ptr %ps, i64 0615;   %1 = call <4 x i32> @llvm.experimental.vp.strided.load.v4i32.p0.i64(ptr align 1 %gep_l0, i64 100, <4 x i1> splat (i1 true), i32 4)616;   %2 = bitcast <4 x i32> %1 to <16 x i8>617;   store <16 x i8> %2, ptr %gep_s0, align 1618;   ret void619; }620define void @constant_stride_widen_no_reordering(ptr %pl, i64 %stride, ptr %ps) {621; CHECK-LABEL: define void @constant_stride_widen_no_reordering(622; CHECK-SAME: ptr [[PL:%.*]], i64 [[STRIDE:%.*]], ptr [[PS:%.*]]) #[[ATTR0]] {623; CHECK-NEXT:    [[GEP_L0:%.*]] = getelementptr inbounds i8, ptr [[PL]], i64 0624; CHECK-NEXT:    [[GEP_S0:%.*]] = getelementptr inbounds i8, ptr [[PS]], i64 0625; CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i32> @llvm.experimental.vp.strided.load.v4i32.p0.i64(ptr align 1 [[GEP_L0]], i64 100, <4 x i1> splat (i1 true), i32 4)626; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <4 x i32> [[TMP1]] to <16 x i8>627; CHECK-NEXT:    store <16 x i8> [[TMP8]], ptr [[GEP_S0]], align 1628; CHECK-NEXT:    ret void629;630  %gep_l0 = getelementptr inbounds i8, ptr %pl, i64 0631  %gep_l1 = getelementptr inbounds i8, ptr %pl, i64 1632  %gep_l2 = getelementptr inbounds i8, ptr %pl, i64 2633  %gep_l3 = getelementptr inbounds i8, ptr %pl, i64 3634  %gep_l4 = getelementptr inbounds i8, ptr %pl, i64 100635  %gep_l5 = getelementptr inbounds i8, ptr %pl, i64 101636  %gep_l6 = getelementptr inbounds i8, ptr %pl, i64 102637  %gep_l7 = getelementptr inbounds i8, ptr %pl, i64 103638  %gep_l8 = getelementptr inbounds i8, ptr %pl, i64 200639  %gep_l9 = getelementptr inbounds i8, ptr %pl, i64 201640  %gep_l10 = getelementptr inbounds i8, ptr %pl, i64 202641  %gep_l11 = getelementptr inbounds i8, ptr %pl, i64 203642  %gep_l12 = getelementptr inbounds i8, ptr %pl, i64 300643  %gep_l13 = getelementptr inbounds i8, ptr %pl, i64 301644  %gep_l14 = getelementptr inbounds i8, ptr %pl, i64 302645  %gep_l15 = getelementptr inbounds i8, ptr %pl, i64 303646 647  %load0  = load i8, ptr %gep_l0 , align 1648  %load1  = load i8, ptr %gep_l1 , align 1649  %load2  = load i8, ptr %gep_l2 , align 1650  %load3  = load i8, ptr %gep_l3 , align 1651  %load4  = load i8, ptr %gep_l4 , align 1652  %load5  = load i8, ptr %gep_l5 , align 1653  %load6  = load i8, ptr %gep_l6 , align 1654  %load7  = load i8, ptr %gep_l7 , align 1655  %load8  = load i8, ptr %gep_l8 , align 1656  %load9  = load i8, ptr %gep_l9 , align 1657  %load10 = load i8, ptr %gep_l10, align 1658  %load11 = load i8, ptr %gep_l11, align 1659  %load12 = load i8, ptr %gep_l12, align 1660  %load13 = load i8, ptr %gep_l13, align 1661  %load14 = load i8, ptr %gep_l14, align 1662  %load15 = load i8, ptr %gep_l15, align 1663 664  %gep_s0 = getelementptr inbounds i8, ptr %ps, i64 0665  %gep_s1 = getelementptr inbounds i8, ptr %ps, i64 1666  %gep_s2 = getelementptr inbounds i8, ptr %ps, i64 2667  %gep_s3 = getelementptr inbounds i8, ptr %ps, i64 3668  %gep_s4 = getelementptr inbounds i8, ptr %ps, i64 4669  %gep_s5 = getelementptr inbounds i8, ptr %ps, i64 5670  %gep_s6 = getelementptr inbounds i8, ptr %ps, i64 6671  %gep_s7 = getelementptr inbounds i8, ptr %ps, i64 7672  %gep_s8 = getelementptr inbounds i8, ptr %ps, i64 8673  %gep_s9 = getelementptr inbounds i8, ptr %ps, i64 9674  %gep_s10 = getelementptr inbounds i8, ptr %ps, i64 10675  %gep_s11 = getelementptr inbounds i8, ptr %ps, i64 11676  %gep_s12 = getelementptr inbounds i8, ptr %ps, i64 12677  %gep_s13 = getelementptr inbounds i8, ptr %ps, i64 13678  %gep_s14 = getelementptr inbounds i8, ptr %ps, i64 14679  %gep_s15 = getelementptr inbounds i8, ptr %ps, i64 15680 681  store i8 %load0, ptr %gep_s0, align 1682  store i8 %load1, ptr %gep_s1, align 1683  store i8 %load2, ptr %gep_s2, align 1684  store i8 %load3, ptr %gep_s3, align 1685  store i8 %load4, ptr %gep_s4, align 1686  store i8 %load5, ptr %gep_s5, align 1687  store i8 %load6, ptr %gep_s6, align 1688  store i8 %load7, ptr %gep_s7, align 1689  store i8 %load8, ptr %gep_s8, align 1690  store i8 %load9, ptr %gep_s9, align 1691  store i8 %load10, ptr %gep_s10, align 1692  store i8 %load11, ptr %gep_s11, align 1693  store i8 %load12, ptr %gep_s12, align 1694  store i8 %load13, ptr %gep_s13, align 1695  store i8 %load14, ptr %gep_s14, align 1696  store i8 %load15, ptr %gep_s15, align 1697 698  ret void699}700; TODO: We want to generate this code:701; define void @rt_stride_widen_no_reordering(ptr %pl, i64 %stride, ptr %ps) {702; %gep_l0 = getelementptr inbounds i8, ptr %pl, i64 %offset0703; %gep_s0 = getelementptr inbounds i8, ptr %ps, i64 0704; %strided_load = call <4 x i32> @llvm.experimental.vp.strided.load.v4i32.p0.i64(ptr align 1 %gep_l0, i64 %stride, <4 x i1> splat (i1 true), i32 4)705; %bitcast_ = bitcast <4 x i32> %strided_load to <16 x i8>706; store <16 x i8> %bitcast_, ptr %gep_s0, align 1707; ret void708; }709define void @rt_stride_widen_no_reordering(ptr %pl, i64 %stride, ptr %ps) {710; CHECK-LABEL: define void @rt_stride_widen_no_reordering(711; CHECK-SAME: ptr [[PL:%.*]], i64 [[STRIDE:%.*]], ptr [[PS:%.*]]) #[[ATTR0]] {712; CHECK-NEXT:    [[OFFSET0:%.*]] = mul nsw i64 [[STRIDE]], 0713; CHECK-NEXT:    [[OFFSET4:%.*]] = mul nsw i64 [[STRIDE]], 1714; CHECK-NEXT:    [[OFFSET8:%.*]] = mul nsw i64 [[STRIDE]], 2715; CHECK-NEXT:    [[OFFSET12:%.*]] = mul nsw i64 [[STRIDE]], 3716; CHECK-NEXT:    [[GEP_L0:%.*]] = getelementptr inbounds i8, ptr [[PL]], i64 [[OFFSET0]]717; CHECK-NEXT:    [[GEP_L4:%.*]] = getelementptr inbounds i8, ptr [[PL]], i64 [[OFFSET4]]718; CHECK-NEXT:    [[GEP_L8:%.*]] = getelementptr inbounds i8, ptr [[PL]], i64 [[OFFSET8]]719; CHECK-NEXT:    [[GEP_L12:%.*]] = getelementptr inbounds i8, ptr [[PL]], i64 [[OFFSET12]]720; CHECK-NEXT:    [[GEP_S0:%.*]] = getelementptr inbounds i8, ptr [[PS]], i64 0721; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i8>, ptr [[GEP_L0]], align 1722; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i8>, ptr [[GEP_L4]], align 1723; CHECK-NEXT:    [[TMP3:%.*]] = load <4 x i8>, ptr [[GEP_L8]], align 1724; CHECK-NEXT:    [[TMP4:%.*]] = load <4 x i8>, ptr [[GEP_L12]], align 1725; CHECK-NEXT:    [[TMP5:%.*]] = shufflevector <4 x i8> [[TMP1]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>726; CHECK-NEXT:    [[TMP6:%.*]] = shufflevector <4 x i8> [[TMP2]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>727; CHECK-NEXT:    [[TMP7:%.*]] = shufflevector <4 x i8> [[TMP1]], <4 x i8> [[TMP2]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>728; CHECK-NEXT:    [[TMP11:%.*]] = shufflevector <4 x i8> [[TMP3]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>729; CHECK-NEXT:    [[TMP9:%.*]] = shufflevector <16 x i8> [[TMP7]], <16 x i8> [[TMP11]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>730; CHECK-NEXT:    [[TMP10:%.*]] = shufflevector <4 x i8> [[TMP4]], <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>731; CHECK-NEXT:    [[TMP8:%.*]] = shufflevector <16 x i8> [[TMP9]], <16 x i8> [[TMP10]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 18, i32 19>732; CHECK-NEXT:    store <16 x i8> [[TMP8]], ptr [[GEP_S0]], align 1733; CHECK-NEXT:    ret void734;735  %offset0  = mul nsw i64 %stride, 0736  %offset1  = add nsw i64 %offset0, 1737  %offset2  = add nsw i64 %offset0, 2738  %offset3  = add nsw i64 %offset0, 3739  %offset4  = mul nsw i64 %stride, 1740  %offset5  = add nsw i64 %offset4, 1741  %offset6  = add nsw i64 %offset4, 2742  %offset7  = add nsw i64 %offset4, 3743  %offset8  = mul nsw i64 %stride, 2744  %offset9  = add nsw i64 %offset8, 1745  %offset10  = add nsw i64 %offset8, 2746  %offset11  = add nsw i64 %offset8, 3747  %offset12 = mul nsw i64 %stride, 3748  %offset13 = add nsw i64 %offset12, 1749  %offset14 = add nsw i64 %offset12, 2750  %offset15 = add nsw i64 %offset12, 3751 752  %gep_l0 = getelementptr inbounds i8, ptr %pl, i64 %offset0753  %gep_l1 = getelementptr inbounds i8, ptr %pl, i64 %offset1754  %gep_l2 = getelementptr inbounds i8, ptr %pl, i64 %offset2755  %gep_l3 = getelementptr inbounds i8, ptr %pl, i64 %offset3756  %gep_l4 = getelementptr inbounds i8, ptr %pl, i64 %offset4757  %gep_l5 = getelementptr inbounds i8, ptr %pl, i64 %offset5758  %gep_l6 = getelementptr inbounds i8, ptr %pl, i64 %offset6759  %gep_l7 = getelementptr inbounds i8, ptr %pl, i64 %offset7760  %gep_l8 = getelementptr inbounds i8, ptr %pl, i64 %offset8761  %gep_l9 = getelementptr inbounds i8, ptr %pl, i64 %offset9762  %gep_l10 = getelementptr inbounds i8, ptr %pl, i64 %offset10763  %gep_l11 = getelementptr inbounds i8, ptr %pl, i64 %offset11764  %gep_l12 = getelementptr inbounds i8, ptr %pl, i64 %offset12765  %gep_l13 = getelementptr inbounds i8, ptr %pl, i64 %offset13766  %gep_l14 = getelementptr inbounds i8, ptr %pl, i64 %offset14767  %gep_l15 = getelementptr inbounds i8, ptr %pl, i64 %offset15768 769  %load0  = load i8, ptr %gep_l0 , align 1770  %load1  = load i8, ptr %gep_l1 , align 1771  %load2  = load i8, ptr %gep_l2 , align 1772  %load3  = load i8, ptr %gep_l3 , align 1773  %load4  = load i8, ptr %gep_l4 , align 1774  %load5  = load i8, ptr %gep_l5 , align 1775  %load6  = load i8, ptr %gep_l6 , align 1776  %load7  = load i8, ptr %gep_l7 , align 1777  %load8  = load i8, ptr %gep_l8 , align 1778  %load9  = load i8, ptr %gep_l9 , align 1779  %load10 = load i8, ptr %gep_l10, align 1780  %load11 = load i8, ptr %gep_l11, align 1781  %load12 = load i8, ptr %gep_l12, align 1782  %load13 = load i8, ptr %gep_l13, align 1783  %load14 = load i8, ptr %gep_l14, align 1784  %load15 = load i8, ptr %gep_l15, align 1785 786  %gep_s0 = getelementptr inbounds i8, ptr %ps, i64 0787  %gep_s1 = getelementptr inbounds i8, ptr %ps, i64 1788  %gep_s2 = getelementptr inbounds i8, ptr %ps, i64 2789  %gep_s3 = getelementptr inbounds i8, ptr %ps, i64 3790  %gep_s4 = getelementptr inbounds i8, ptr %ps, i64 4791  %gep_s5 = getelementptr inbounds i8, ptr %ps, i64 5792  %gep_s6 = getelementptr inbounds i8, ptr %ps, i64 6793  %gep_s7 = getelementptr inbounds i8, ptr %ps, i64 7794  %gep_s8 = getelementptr inbounds i8, ptr %ps, i64 8795  %gep_s9 = getelementptr inbounds i8, ptr %ps, i64 9796  %gep_s10 = getelementptr inbounds i8, ptr %ps, i64 10797  %gep_s11 = getelementptr inbounds i8, ptr %ps, i64 11798  %gep_s12 = getelementptr inbounds i8, ptr %ps, i64 12799  %gep_s13 = getelementptr inbounds i8, ptr %ps, i64 13800  %gep_s14 = getelementptr inbounds i8, ptr %ps, i64 14801  %gep_s15 = getelementptr inbounds i8, ptr %ps, i64 15802 803  store i8 %load0, ptr %gep_s0, align 1804  store i8 %load1, ptr %gep_s1, align 1805  store i8 %load2, ptr %gep_s2, align 1806  store i8 %load3, ptr %gep_s3, align 1807  store i8 %load4, ptr %gep_s4, align 1808  store i8 %load5, ptr %gep_s5, align 1809  store i8 %load6, ptr %gep_s6, align 1810  store i8 %load7, ptr %gep_s7, align 1811  store i8 %load8, ptr %gep_s8, align 1812  store i8 %load9, ptr %gep_s9, align 1813  store i8 %load10, ptr %gep_s10, align 1814  store i8 %load11, ptr %gep_s11, align 1815  store i8 %load12, ptr %gep_s12, align 1816  store i8 %load13, ptr %gep_s13, align 1817  store i8 %load14, ptr %gep_s14, align 1818  store i8 %load15, ptr %gep_s15, align 1819 820  ret void821}822