brintos

brintos / llvm-project-archived public Read only

0
0
Text · 19.9 KiB · a8b9bcb Raw
322 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes='sroa<preserve-cfg>' -data-layout="e-n8:16:32:64" -S %s | FileCheck %s --check-prefixes=CHECK-ALL,CHECK-SCALAR,CHECK-SCALAR-64,CHECK-LE-643; RUN: opt -passes='sroa<modify-cfg>' -data-layout="e-n8:16:32:64" -S %s | FileCheck %s --check-prefixes=CHECK-ALL,CHECK-SCALAR,CHECK-SCALAR-64,CHECK-LE-644; RUN: opt -passes='sroa<preserve-cfg>' -data-layout="e-n8:16:32" -S %s | FileCheck %s --check-prefixes=CHECK-ALL,CHECK-SCALAR,CHECK-SCALAR-32,CHECK-LE-325; RUN: opt -passes='sroa<modify-cfg>' -data-layout="e-n8:16:32" -S %s | FileCheck %s --check-prefixes=CHECK-ALL,CHECK-SCALAR,CHECK-SCALAR-32,CHECK-LE-326; RUN: opt -passes='sroa<preserve-cfg>' -data-layout="E-n8:16:32:64" -S %s | FileCheck %s --check-prefixes=CHECK-ALL,CHECK-SCALAR,CHECK-SCALAR-64,CHECK-BE-647; RUN: opt -passes='sroa<modify-cfg>' -data-layout="E-n8:16:32:64" -S %s | FileCheck %s --check-prefixes=CHECK-ALL,CHECK-SCALAR,CHECK-SCALAR-64,CHECK-BE-648; RUN: opt -passes='sroa<preserve-cfg>' -data-layout="E-n8:16:32" -S %s | FileCheck %s --check-prefixes=CHECK-ALL,CHECK-SCALAR,CHECK-SCALAR-32,CHECK-BE-329; RUN: opt -passes='sroa<modify-cfg>' -data-layout="E-n8:16:32" -S %s | FileCheck %s --check-prefixes=CHECK-ALL,CHECK-SCALAR,CHECK-SCALAR-32,CHECK-BE-3210 11;; Special test12 13define void @load_2byte_chunk_of_8byte_alloca_with_2byte_step(ptr %src, i64 %byteOff, ptr %dst) nounwind {14; CHECK-ALL-LABEL: @load_2byte_chunk_of_8byte_alloca_with_2byte_step(15; CHECK-ALL-NEXT:    [[INTERMEDIATE:%.*]] = alloca [8 x i8], align 6416; CHECK-ALL-NEXT:    [[INIT:%.*]] = load <8 x i8>, ptr [[SRC:%.*]], align 117; CHECK-ALL-NEXT:    store <8 x i8> [[INIT]], ptr [[INTERMEDIATE]], align 6418; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF_ADDR:%.*]] = getelementptr inbounds i16, ptr [[INTERMEDIATE]], i64 [[BYTEOFF:%.*]]19; CHECK-ALL-NEXT:    [[CHUNK:%.*]] = load <2 x i8>, ptr [[INTERMEDIATE_OFF_ADDR]], align 120; CHECK-ALL-NEXT:    store <2 x i8> [[CHUNK]], ptr [[DST:%.*]], align 221; CHECK-ALL-NEXT:    ret void22;23  %intermediate = alloca [8 x i8], align 6424  %init = load <8 x i8>, ptr %src, align 125  store <8 x i8> %init, ptr %intermediate, align 6426  %intermediate.off.addr = getelementptr inbounds i16, ptr %intermediate, i64 %byteOff27  %chunk = load <2 x i8>, ptr %intermediate.off.addr, align 128  store <2 x i8> %chunk, ptr %dst29  ret void30}31 32define void @load_volatile_2byte_chunk_of_8byte_alloca_with_2byte_step(ptr %src, i64 %byteOff, ptr %dst) nounwind {33; CHECK-ALL-LABEL: @load_volatile_2byte_chunk_of_8byte_alloca_with_2byte_step(34; CHECK-ALL-NEXT:    [[INTERMEDIATE:%.*]] = alloca [8 x i8], align 6435; CHECK-ALL-NEXT:    [[INIT:%.*]] = load <8 x i8>, ptr [[SRC:%.*]], align 136; CHECK-ALL-NEXT:    store <8 x i8> [[INIT]], ptr [[INTERMEDIATE]], align 6437; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF_ADDR:%.*]] = getelementptr inbounds i16, ptr [[INTERMEDIATE]], i64 [[BYTEOFF:%.*]]38; CHECK-ALL-NEXT:    [[CHUNK:%.*]] = load volatile <2 x i8>, ptr [[INTERMEDIATE_OFF_ADDR]], align 139; CHECK-ALL-NEXT:    store <2 x i8> [[CHUNK]], ptr [[DST:%.*]], align 240; CHECK-ALL-NEXT:    ret void41;42  %intermediate = alloca [8 x i8], align 6443  %init = load <8 x i8>, ptr %src, align 144  store <8 x i8> %init, ptr %intermediate, align 6445  %intermediate.off.addr = getelementptr inbounds i16, ptr %intermediate, i64 %byteOff46  %chunk = load volatile <2 x i8>, ptr %intermediate.off.addr, align 147  store <2 x i8> %chunk, ptr %dst48  ret void49}50 51define void @store_2byte_chunk_of_8byte_alloca_with_2byte_step(ptr %src, i64 %byteOff, <2 x i8> %reinit, ptr %dst) nounwind {52; CHECK-ALL-LABEL: @store_2byte_chunk_of_8byte_alloca_with_2byte_step(53; CHECK-ALL-NEXT:    [[INTERMEDIATE:%.*]] = alloca [8 x i8], align 6454; CHECK-ALL-NEXT:    [[INIT:%.*]] = load <8 x i8>, ptr [[SRC:%.*]], align 155; CHECK-ALL-NEXT:    store <8 x i8> [[INIT]], ptr [[INTERMEDIATE]], align 6456; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF_ADDR:%.*]] = getelementptr inbounds i16, ptr [[INTERMEDIATE]], i64 [[BYTEOFF:%.*]]57; CHECK-ALL-NEXT:    store <2 x i8> [[REINIT:%.*]], ptr [[INTERMEDIATE_OFF_ADDR]], align 158; CHECK-ALL-NEXT:    [[FINAL:%.*]] = load <8 x i8>, ptr [[INTERMEDIATE]], align 159; CHECK-ALL-NEXT:    store <8 x i8> [[FINAL]], ptr [[DST:%.*]], align 860; CHECK-ALL-NEXT:    ret void61;62  %intermediate = alloca [8 x i8], align 6463  %init = load <8 x i8>, ptr %src, align 164  store <8 x i8> %init, ptr %intermediate, align 6465  %intermediate.off.addr = getelementptr inbounds i16, ptr %intermediate, i64 %byteOff66  store <2 x i8> %reinit, ptr %intermediate.off.addr, align 167  %final = load <8 x i8>, ptr %intermediate, align 168  store <8 x i8> %final, ptr %dst69  ret void70}71 72define void @store_volatile_2byte_chunk_of_8byte_alloca_with_2byte_step(ptr %src, i64 %byteOff, <2 x i8> %reinit, ptr %dst) nounwind {73; CHECK-ALL-LABEL: @store_volatile_2byte_chunk_of_8byte_alloca_with_2byte_step(74; CHECK-ALL-NEXT:    [[INTERMEDIATE:%.*]] = alloca [8 x i8], align 6475; CHECK-ALL-NEXT:    [[INIT:%.*]] = load <8 x i8>, ptr [[SRC:%.*]], align 176; CHECK-ALL-NEXT:    store <8 x i8> [[INIT]], ptr [[INTERMEDIATE]], align 6477; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF_ADDR:%.*]] = getelementptr inbounds i16, ptr [[INTERMEDIATE]], i64 [[BYTEOFF:%.*]]78; CHECK-ALL-NEXT:    store volatile <2 x i8> [[REINIT:%.*]], ptr [[INTERMEDIATE_OFF_ADDR]], align 179; CHECK-ALL-NEXT:    [[FINAL:%.*]] = load <8 x i8>, ptr [[INTERMEDIATE]], align 180; CHECK-ALL-NEXT:    store <8 x i8> [[FINAL]], ptr [[DST:%.*]], align 881; CHECK-ALL-NEXT:    ret void82;83  %intermediate = alloca [8 x i8], align 6484  %init = load <8 x i8>, ptr %src, align 185  store <8 x i8> %init, ptr %intermediate, align 6486  %intermediate.off.addr = getelementptr inbounds i16, ptr %intermediate, i64 %byteOff87  store volatile <2 x i8> %reinit, ptr %intermediate.off.addr, align 188  %final = load <8 x i8>, ptr %intermediate, align 189  store <8 x i8> %final, ptr %dst90  ret void91}92 93define void @load_2byte_chunk_of_8byte_alloca_with_2byte_step_with_constant_offset_beforehand(ptr %src, i64 %byteOff, ptr %dst) nounwind {94; CHECK-ALL-LABEL: @load_2byte_chunk_of_8byte_alloca_with_2byte_step_with_constant_offset_beforehand(95; CHECK-ALL-NEXT:    [[INTERMEDIATE:%.*]] = alloca [8 x i8], align 6496; CHECK-ALL-NEXT:    [[INIT:%.*]] = load <8 x i8>, ptr [[SRC:%.*]], align 197; CHECK-ALL-NEXT:    store <8 x i8> [[INIT]], ptr [[INTERMEDIATE]], align 6498; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF_ADDR_CST:%.*]] = getelementptr inbounds i16, ptr [[INTERMEDIATE]], i64 199; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF_ADDR:%.*]] = getelementptr inbounds i16, ptr [[INTERMEDIATE_OFF_ADDR_CST]], i64 [[BYTEOFF:%.*]]100; CHECK-ALL-NEXT:    [[CHUNK:%.*]] = load <2 x i8>, ptr [[INTERMEDIATE_OFF_ADDR]], align 1101; CHECK-ALL-NEXT:    store <2 x i8> [[CHUNK]], ptr [[DST:%.*]], align 2102; CHECK-ALL-NEXT:    ret void103;104  %intermediate = alloca [8 x i8], align 64105  %init = load <8 x i8>, ptr %src, align 1106  store <8 x i8> %init, ptr %intermediate, align 64107  %intermediate.off.addr.cst = getelementptr inbounds i16, ptr %intermediate, i64 1108  %intermediate.off.addr = getelementptr inbounds i16, ptr %intermediate.off.addr.cst, i64 %byteOff109  %chunk = load <2 x i8>, ptr %intermediate.off.addr, align 1110  store <2 x i8> %chunk, ptr %dst111  ret void112}113 114define void @load_2byte_chunk_of_8byte_alloca_with_2byte_step_with_constant_offset_afterwards(ptr %src, i64 %byteOff, ptr %dst) nounwind {115; CHECK-ALL-LABEL: @load_2byte_chunk_of_8byte_alloca_with_2byte_step_with_constant_offset_afterwards(116; CHECK-ALL-NEXT:    [[INTERMEDIATE:%.*]] = alloca [8 x i8], align 64117; CHECK-ALL-NEXT:    [[INIT:%.*]] = load <8 x i8>, ptr [[SRC:%.*]], align 1118; CHECK-ALL-NEXT:    store <8 x i8> [[INIT]], ptr [[INTERMEDIATE]], align 64119; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF_ADDR_VARIABLE:%.*]] = getelementptr inbounds i16, ptr [[INTERMEDIATE]], i64 [[BYTEOFF:%.*]]120; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF_ADDR:%.*]] = getelementptr inbounds i16, ptr [[INTERMEDIATE_OFF_ADDR_VARIABLE]], i64 1121; CHECK-ALL-NEXT:    [[CHUNK:%.*]] = load <2 x i8>, ptr [[INTERMEDIATE_OFF_ADDR]], align 1122; CHECK-ALL-NEXT:    store <2 x i8> [[CHUNK]], ptr [[DST:%.*]], align 2123; CHECK-ALL-NEXT:    ret void124;125  %intermediate = alloca [8 x i8], align 64126  %init = load <8 x i8>, ptr %src, align 1127  store <8 x i8> %init, ptr %intermediate, align 64128  %intermediate.off.addr.variable = getelementptr inbounds i16, ptr %intermediate, i64 %byteOff129  %intermediate.off.addr = getelementptr inbounds i16, ptr %intermediate.off.addr.variable, i64 1130  %chunk = load <2 x i8>, ptr %intermediate.off.addr, align 1131  store <2 x i8> %chunk, ptr %dst132  ret void133}134 135define void @load_2byte_chunk_of_8byte_alloca_with_2byte_step_with_variable_offset_inbetween_constant_offsets(ptr %src, i64 %byteOff, ptr %dst) nounwind {136; CHECK-ALL-LABEL: @load_2byte_chunk_of_8byte_alloca_with_2byte_step_with_variable_offset_inbetween_constant_offsets(137; CHECK-ALL-NEXT:    [[INTERMEDIATE:%.*]] = alloca [8 x i8], align 64138; CHECK-ALL-NEXT:    [[INIT:%.*]] = load <8 x i8>, ptr [[SRC:%.*]], align 1139; CHECK-ALL-NEXT:    store <8 x i8> [[INIT]], ptr [[INTERMEDIATE]], align 64140; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF_ADDR_CST:%.*]] = getelementptr inbounds i16, ptr [[INTERMEDIATE]], i64 1141; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF_ADDR_VARIABLE:%.*]] = getelementptr inbounds i16, ptr [[INTERMEDIATE_OFF_ADDR_CST]], i64 [[BYTEOFF:%.*]]142; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF_ADDR:%.*]] = getelementptr inbounds i16, ptr [[INTERMEDIATE_OFF_ADDR_VARIABLE]], i64 1143; CHECK-ALL-NEXT:    [[CHUNK:%.*]] = load <2 x i8>, ptr [[INTERMEDIATE_OFF_ADDR]], align 1144; CHECK-ALL-NEXT:    store <2 x i8> [[CHUNK]], ptr [[DST:%.*]], align 2145; CHECK-ALL-NEXT:    ret void146;147  %intermediate = alloca [8 x i8], align 64148  %init = load <8 x i8>, ptr %src, align 1149  store <8 x i8> %init, ptr %intermediate, align 64150  %intermediate.off.addr.cst = getelementptr inbounds i16, ptr %intermediate, i64 1151  %intermediate.off.addr.variable = getelementptr inbounds i16, ptr %intermediate.off.addr.cst, i64 %byteOff152  %intermediate.off.addr = getelementptr inbounds i16, ptr %intermediate.off.addr.variable, i64 1153  %chunk = load <2 x i8>, ptr %intermediate.off.addr, align 1154  store <2 x i8> %chunk, ptr %dst155  ret void156}157 158define void @load_2byte_chunk_of_8byte_alloca_with_2byte_step_select_of_variable_geps(ptr %src, i64 %byteOff0, i64 %byteOff1, i1 %cond, ptr %dst) nounwind {159; CHECK-ALL-LABEL: @load_2byte_chunk_of_8byte_alloca_with_2byte_step_select_of_variable_geps(160; CHECK-ALL-NEXT:    [[INTERMEDIATE:%.*]] = alloca [8 x i8], align 64161; CHECK-ALL-NEXT:    [[INIT:%.*]] = load <8 x i8>, ptr [[SRC:%.*]], align 1162; CHECK-ALL-NEXT:    store <8 x i8> [[INIT]], ptr [[INTERMEDIATE]], align 64163; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF0:%.*]] = getelementptr inbounds i16, ptr [[INTERMEDIATE]], i64 [[BYTEOFF0:%.*]]164; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF1:%.*]] = getelementptr inbounds i16, ptr [[INTERMEDIATE]], i64 [[BYTEOFF1:%.*]]165; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF_ADDR:%.*]] = select i1 [[COND:%.*]], ptr [[INTERMEDIATE_OFF0]], ptr [[INTERMEDIATE_OFF1]]166; CHECK-ALL-NEXT:    [[CHUNK:%.*]] = load <2 x i8>, ptr [[INTERMEDIATE_OFF_ADDR]], align 1167; CHECK-ALL-NEXT:    store <2 x i8> [[CHUNK]], ptr [[DST:%.*]], align 2168; CHECK-ALL-NEXT:    ret void169;170  %intermediate = alloca [8 x i8], align 64171  %init = load <8 x i8>, ptr %src, align 1172  store <8 x i8> %init, ptr %intermediate, align 64173  %intermediate.off0 = getelementptr inbounds i16, ptr %intermediate, i64 %byteOff0174  %intermediate.off1 = getelementptr inbounds i16, ptr %intermediate, i64 %byteOff1175  %intermediate.off.addr = select i1 %cond, ptr %intermediate.off0, ptr %intermediate.off1176  %chunk = load <2 x i8>, ptr %intermediate.off.addr, align 1177  store <2 x i8> %chunk, ptr %dst178  ret void179}180 181define void @load_2byte_chunk_of_8byte_alloca_with_2byte_step_select_of_variable_and_const_geps(ptr %src, i64 %byteOff0, i64 %byteOff1, i1 %cond, ptr %dst) nounwind {182; CHECK-ALL-LABEL: @load_2byte_chunk_of_8byte_alloca_with_2byte_step_select_of_variable_and_const_geps(183; CHECK-ALL-NEXT:    [[INTERMEDIATE:%.*]] = alloca [8 x i8], align 64184; CHECK-ALL-NEXT:    [[INIT:%.*]] = load <8 x i8>, ptr [[SRC:%.*]], align 1185; CHECK-ALL-NEXT:    store <8 x i8> [[INIT]], ptr [[INTERMEDIATE]], align 64186; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF0:%.*]] = getelementptr inbounds i16, ptr [[INTERMEDIATE]], i64 1187; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF1:%.*]] = getelementptr inbounds i16, ptr [[INTERMEDIATE]], i64 [[BYTEOFF1:%.*]]188; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF_ADDR:%.*]] = select i1 [[COND:%.*]], ptr [[INTERMEDIATE_OFF0]], ptr [[INTERMEDIATE_OFF1]]189; CHECK-ALL-NEXT:    [[CHUNK:%.*]] = load <2 x i8>, ptr [[INTERMEDIATE_OFF_ADDR]], align 1190; CHECK-ALL-NEXT:    store <2 x i8> [[CHUNK]], ptr [[DST:%.*]], align 2191; CHECK-ALL-NEXT:    ret void192;193  %intermediate = alloca [8 x i8], align 64194  %init = load <8 x i8>, ptr %src, align 1195  store <8 x i8> %init, ptr %intermediate, align 64196  %intermediate.off0 = getelementptr inbounds i16, ptr %intermediate, i64 1197  %intermediate.off1 = getelementptr inbounds i16, ptr %intermediate, i64 %byteOff1198  %intermediate.off.addr = select i1 %cond, ptr %intermediate.off0, ptr %intermediate.off1199  %chunk = load <2 x i8>, ptr %intermediate.off.addr, align 1200  store <2 x i8> %chunk, ptr %dst201  ret void202}203 204define void @load_2byte_chunk_of_8byte_alloca_with_2byte_step_variable_gep_of_select_of_const_geps(ptr %src, i64 %byteOff, i1 %cond, ptr %dst) nounwind {205; CHECK-ALL-LABEL: @load_2byte_chunk_of_8byte_alloca_with_2byte_step_variable_gep_of_select_of_const_geps(206; CHECK-ALL-NEXT:    [[INTERMEDIATE:%.*]] = alloca [8 x i8], align 64207; CHECK-ALL-NEXT:    [[INIT:%.*]] = load <8 x i8>, ptr [[SRC:%.*]], align 1208; CHECK-ALL-NEXT:    store <8 x i8> [[INIT]], ptr [[INTERMEDIATE]], align 64209; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF0:%.*]] = getelementptr inbounds i16, ptr [[INTERMEDIATE]], i64 0210; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF1:%.*]] = getelementptr inbounds i16, ptr [[INTERMEDIATE]], i64 2211; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF_ADDR:%.*]] = select i1 [[COND:%.*]], ptr [[INTERMEDIATE_OFF0]], ptr [[INTERMEDIATE_OFF1]]212; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF_ADDR_VAR:%.*]] = getelementptr inbounds i16, ptr [[INTERMEDIATE_OFF_ADDR]], i64 [[BYTEOFF:%.*]]213; CHECK-ALL-NEXT:    [[CHUNK:%.*]] = load <2 x i8>, ptr [[INTERMEDIATE_OFF_ADDR_VAR]], align 1214; CHECK-ALL-NEXT:    store <2 x i8> [[CHUNK]], ptr [[DST:%.*]], align 2215; CHECK-ALL-NEXT:    ret void216;217  %intermediate = alloca [8 x i8], align 64218  %init = load <8 x i8>, ptr %src, align 1219  store <8 x i8> %init, ptr %intermediate, align 64220  %intermediate.off0 = getelementptr inbounds i16, ptr %intermediate, i64 0221  %intermediate.off1 = getelementptr inbounds i16, ptr %intermediate, i64 2222  %intermediate.off.addr = select i1 %cond, ptr %intermediate.off0, ptr %intermediate.off1223  %intermediate.off.addr.var = getelementptr inbounds i16, ptr %intermediate.off.addr, i64 %byteOff224  %chunk = load <2 x i8>, ptr %intermediate.off.addr.var, align 1225  store <2 x i8> %chunk, ptr %dst226  ret void227}228 229define void @load_ptr_chunk_of_16byte_alloca(ptr %src, i64 %byteOff, ptr %dst) nounwind {230; CHECK-ALL-LABEL: @load_ptr_chunk_of_16byte_alloca(231; CHECK-ALL-NEXT:    [[INTERMEDIATE:%.*]] = alloca [16 x i8], align 64232; CHECK-ALL-NEXT:    [[INIT:%.*]] = load <16 x i8>, ptr [[SRC:%.*]], align 1233; CHECK-ALL-NEXT:    store <16 x i8> [[INIT]], ptr [[INTERMEDIATE]], align 64234; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF_ADDR:%.*]] = getelementptr inbounds i8, ptr [[INTERMEDIATE]], i64 [[BYTEOFF:%.*]]235; CHECK-ALL-NEXT:    [[CHUNK:%.*]] = load <1 x ptr>, ptr [[INTERMEDIATE_OFF_ADDR]], align 1236; CHECK-ALL-NEXT:    store <1 x ptr> [[CHUNK]], ptr [[DST:%.*]], align 8237; CHECK-ALL-NEXT:    ret void238;239  %intermediate = alloca [16 x i8], align 64240  %init = load <16 x i8>, ptr %src, align 1241  store <16 x i8> %init, ptr %intermediate, align 64242  %intermediate.off.addr = getelementptr inbounds i8, ptr %intermediate, i64 %byteOff243  %chunk = load <1 x ptr>, ptr %intermediate.off.addr, align 1244  store <1 x ptr> %chunk, ptr %dst245  ret void246}247 248define void @load_float_chunk_of_16byte_alloca(ptr %src, i64 %byteOff, ptr %dst) nounwind {249; CHECK-ALL-LABEL: @load_float_chunk_of_16byte_alloca(250; CHECK-ALL-NEXT:    [[INTERMEDIATE:%.*]] = alloca [16 x i8], align 64251; CHECK-ALL-NEXT:    [[INIT:%.*]] = load <16 x i8>, ptr [[SRC:%.*]], align 1252; CHECK-ALL-NEXT:    store <16 x i8> [[INIT]], ptr [[INTERMEDIATE]], align 64253; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF_ADDR:%.*]] = getelementptr inbounds i8, ptr [[INTERMEDIATE]], i64 [[BYTEOFF:%.*]]254; CHECK-ALL-NEXT:    [[CHUNK:%.*]] = load <1 x float>, ptr [[INTERMEDIATE_OFF_ADDR]], align 1255; CHECK-ALL-NEXT:    store <1 x float> [[CHUNK]], ptr [[DST:%.*]], align 4256; CHECK-ALL-NEXT:    ret void257;258  %intermediate = alloca [16 x i8], align 64259  %init = load <16 x i8>, ptr %src, align 1260  store <16 x i8> %init, ptr %intermediate, align 64261  %intermediate.off.addr = getelementptr inbounds i8, ptr %intermediate, i64 %byteOff262  %chunk = load <1 x float>, ptr %intermediate.off.addr, align 1263  store <1 x float> %chunk, ptr %dst264  ret void265}266 267define void @two_loads_of_same_2byte_chunks_of_8byte_alloca_with_2byte_step_variable_gep(ptr %src, i64 %byteOff, ptr %dst0, ptr %dst1) nounwind {268; CHECK-ALL-LABEL: @two_loads_of_same_2byte_chunks_of_8byte_alloca_with_2byte_step_variable_gep(269; CHECK-ALL-NEXT:    [[INTERMEDIATE:%.*]] = alloca [8 x i8], align 64270; CHECK-ALL-NEXT:    [[INIT:%.*]] = load <8 x i8>, ptr [[SRC:%.*]], align 1271; CHECK-ALL-NEXT:    store <8 x i8> [[INIT]], ptr [[INTERMEDIATE]], align 64272; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF:%.*]] = getelementptr inbounds i16, ptr [[INTERMEDIATE]], i64 [[BYTEOFF:%.*]]273; CHECK-ALL-NEXT:    [[CHUNK0:%.*]] = load <2 x i8>, ptr [[INTERMEDIATE_OFF]], align 1274; CHECK-ALL-NEXT:    store <2 x i8> [[CHUNK0]], ptr [[DST0:%.*]], align 2275; CHECK-ALL-NEXT:    [[CHUNK1:%.*]] = load <2 x i8>, ptr [[INTERMEDIATE_OFF]], align 1276; CHECK-ALL-NEXT:    store <2 x i8> [[CHUNK1]], ptr [[DST1:%.*]], align 2277; CHECK-ALL-NEXT:    ret void278;279  %intermediate = alloca [8 x i8], align 64280  %init = load <8 x i8>, ptr %src, align 1281  store <8 x i8> %init, ptr %intermediate, align 64282  %intermediate.off = getelementptr inbounds i16, ptr %intermediate, i64 %byteOff283  %chunk0 = load <2 x i8>, ptr %intermediate.off, align 1284  store <2 x i8> %chunk0, ptr %dst0285  %chunk1 = load <2 x i8>, ptr %intermediate.off, align 1286  store <2 x i8> %chunk1, ptr %dst1287  ret void288}289 290define void @two_loads_of_two_2byte_chunks_of_8byte_alloca_with_2byte_step_variable_geps(ptr %src, i64 %byteOff0, i64 %byteOff1, ptr %dst0, ptr %dst1) nounwind {291; CHECK-ALL-LABEL: @two_loads_of_two_2byte_chunks_of_8byte_alloca_with_2byte_step_variable_geps(292; CHECK-ALL-NEXT:    [[INTERMEDIATE:%.*]] = alloca [8 x i8], align 64293; CHECK-ALL-NEXT:    [[INIT:%.*]] = load <8 x i8>, ptr [[SRC:%.*]], align 1294; CHECK-ALL-NEXT:    store <8 x i8> [[INIT]], ptr [[INTERMEDIATE]], align 64295; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF0:%.*]] = getelementptr inbounds i16, ptr [[INTERMEDIATE]], i64 [[BYTEOFF0:%.*]]296; CHECK-ALL-NEXT:    [[CHUNK0:%.*]] = load <2 x i8>, ptr [[INTERMEDIATE_OFF0]], align 1297; CHECK-ALL-NEXT:    store <2 x i8> [[CHUNK0]], ptr [[DST0:%.*]], align 2298; CHECK-ALL-NEXT:    [[INTERMEDIATE_OFF1:%.*]] = getelementptr inbounds i16, ptr [[INTERMEDIATE_OFF0]], i64 [[BYTEOFF1:%.*]]299; CHECK-ALL-NEXT:    [[CHUNK1:%.*]] = load <2 x i8>, ptr [[INTERMEDIATE_OFF1]], align 1300; CHECK-ALL-NEXT:    store <2 x i8> [[CHUNK1]], ptr [[DST1:%.*]], align 2301; CHECK-ALL-NEXT:    ret void302;303  %intermediate = alloca [8 x i8], align 64304  %init = load <8 x i8>, ptr %src, align 1305  store <8 x i8> %init, ptr %intermediate, align 64306  %intermediate.off0 = getelementptr inbounds i16, ptr %intermediate, i64 %byteOff0307  %chunk0 = load <2 x i8>, ptr %intermediate.off0, align 1308  store <2 x i8> %chunk0, ptr %dst0309  %intermediate.off1 = getelementptr inbounds i16, ptr %intermediate.off0, i64 %byteOff1310  %chunk1 = load <2 x i8>, ptr %intermediate.off1, align 1311  store <2 x i8> %chunk1, ptr %dst1312  ret void313}314;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:315; CHECK-BE-32: {{.*}}316; CHECK-BE-64: {{.*}}317; CHECK-LE-32: {{.*}}318; CHECK-LE-64: {{.*}}319; CHECK-SCALAR: {{.*}}320; CHECK-SCALAR-32: {{.*}}321; CHECK-SCALAR-64: {{.*}}322