; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt -passes=instcombine -S < %s | FileCheck %s define void @fixed_array16i32_to_scalable4i32(ptr %out) { ; CHECK-LABEL: @fixed_array16i32_to_scalable4i32( ; CHECK-NEXT: entry: ; CHECK-NEXT: [[TMP:%.*]] = alloca [16 x i32], align 16 ; CHECK-NEXT: store volatile zeroinitializer, ptr [[TMP]], align 16 ; CHECK-NEXT: [[RELOAD:%.*]] = load volatile , ptr [[TMP]], align 16 ; CHECK-NEXT: store [[RELOAD]], ptr [[OUT:%.*]], align 16 ; CHECK-NEXT: ret void ; entry: %tmp = alloca [16 x i32], align 16 store volatile zeroinitializer, ptr %tmp, align 16 %reload = load volatile , ptr %tmp, align 16 store %reload, ptr %out, align 16 ret void } define void @scalable4i32_to_fixed16i32(ptr %out) { ; CHECK-LABEL: @scalable4i32_to_fixed16i32( ; CHECK-NEXT: entry: ; CHECK-NEXT: [[TMP:%.*]] = alloca , align 16 ; CHECK-NEXT: store <16 x i32> zeroinitializer, ptr [[TMP]], align 16 ; CHECK-NEXT: [[RELOAD:%.*]] = load volatile <16 x i32>, ptr [[TMP]], align 16 ; CHECK-NEXT: store <16 x i32> [[RELOAD]], ptr [[OUT:%.*]], align 16 ; CHECK-NEXT: ret void ; entry: %tmp = alloca , align 16 store <16 x i32> zeroinitializer, ptr %tmp, align 16 %reload = load volatile <16 x i32>, ptr %tmp, align 16 store <16 x i32> %reload, ptr %out, align 16 ret void } define void @fixed16i32_to_scalable4i32(ptr %out) { ; CHECK-LABEL: @fixed16i32_to_scalable4i32( ; CHECK-NEXT: entry: ; CHECK-NEXT: [[TMP:%.*]] = alloca <16 x i32>, align 16 ; CHECK-NEXT: store volatile zeroinitializer, ptr [[TMP]], align 16 ; CHECK-NEXT: [[RELOAD:%.*]] = load volatile , ptr [[TMP]], align 16 ; CHECK-NEXT: store [[RELOAD]], ptr [[OUT:%.*]], align 16 ; CHECK-NEXT: ret void ; entry: %tmp = alloca <16 x i32>, align 16 store volatile zeroinitializer, ptr %tmp, align 16 %reload = load volatile , ptr %tmp, align 16 store %reload, ptr %out, align 16 ret void } define void @scalable16i32_to_fixed16i32(ptr %out) { ; CHECK-LABEL: @scalable16i32_to_fixed16i32( ; CHECK-NEXT: entry: ; CHECK-NEXT: [[TMP:%.*]] = alloca , align 16 ; CHECK-NEXT: store volatile <16 x i32> zeroinitializer, ptr [[TMP]], align 16 ; CHECK-NEXT: [[RELOAD:%.*]] = load volatile <16 x i32>, ptr [[TMP]], align 16 ; CHECK-NEXT: store <16 x i32> [[RELOAD]], ptr [[OUT:%.*]], align 16 ; CHECK-NEXT: ret void ; entry: %tmp = alloca , align 16 store volatile <16 x i32> zeroinitializer, ptr %tmp, align 16 %reload = load volatile <16 x i32>, ptr %tmp, align 16 store <16 x i32> %reload, ptr %out, align 16 ret void } define void @scalable32i32_to_scalable16i32(ptr %out) { ; CHECK-LABEL: @scalable32i32_to_scalable16i32( ; CHECK-NEXT: entry: ; CHECK-NEXT: [[TMP:%.*]] = alloca , align 16 ; CHECK-NEXT: store volatile zeroinitializer, ptr [[TMP]], align 16 ; CHECK-NEXT: [[RELOAD:%.*]] = load volatile , ptr [[TMP]], align 16 ; CHECK-NEXT: store [[RELOAD]], ptr [[OUT:%.*]], align 16 ; CHECK-NEXT: ret void ; entry: %tmp = alloca , align 16 store volatile zeroinitializer, ptr %tmp, align 16 %reload = load volatile , ptr %tmp, align 16 store %reload, ptr %out, align 16 ret void } define void @scalable32i16_to_scalable16i32(ptr %out) { ; CHECK-LABEL: @scalable32i16_to_scalable16i32( ; CHECK-NEXT: entry: ; CHECK-NEXT: [[TMP:%.*]] = alloca , align 16 ; CHECK-NEXT: store volatile zeroinitializer, ptr [[TMP]], align 16 ; CHECK-NEXT: [[RELOAD:%.*]] = load volatile , ptr [[TMP]], align 16 ; CHECK-NEXT: store [[RELOAD]], ptr [[OUT:%.*]], align 16 ; CHECK-NEXT: ret void ; entry: %tmp = alloca , align 16 store volatile zeroinitializer, ptr %tmp, align 16 %reload = load volatile , ptr %tmp, align 16 store %reload, ptr %out, align 16 ret void } define void @scalable32i16_to_scalable16i32_multiuse(ptr %out, ptr %out2) { ; CHECK-LABEL: @scalable32i16_to_scalable16i32_multiuse( ; CHECK-NEXT: entry: ; CHECK-NEXT: [[TMP:%.*]] = alloca , align 16 ; CHECK-NEXT: store volatile zeroinitializer, ptr [[TMP]], align 16 ; CHECK-NEXT: [[RELOAD:%.*]] = load volatile , ptr [[TMP]], align 16 ; CHECK-NEXT: store [[RELOAD]], ptr [[OUT:%.*]], align 16 ; CHECK-NEXT: [[RELOAD2:%.*]] = load volatile , ptr [[TMP]], align 16 ; CHECK-NEXT: store [[RELOAD2]], ptr [[OUT2:%.*]], align 16 ; CHECK-NEXT: ret void ; entry: %tmp = alloca , align 16 store volatile zeroinitializer, ptr %tmp, align 16 %reload = load volatile , ptr %tmp, align 16 store %reload, ptr %out, align 16 %reload2 = load volatile , ptr %tmp, align 16 store %reload2, ptr %out2, align 16 ret void }