Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(421)

Unified Diff: test/Transforms/NaCl/vector-canonicalization-inserts.ll

Issue 1423873002: PNaCl: Add a vector type legalization pass. Base URL: https://chromium.googlesource.com/native_client/pnacl-llvm.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: test/Transforms/NaCl/vector-canonicalization-inserts.ll
diff --git a/test/Transforms/NaCl/vector-canonicalization-inserts.ll b/test/Transforms/NaCl/vector-canonicalization-inserts.ll
new file mode 100644
index 0000000000000000000000000000000000000000..42d759fb78dad488c6cd9412112567db6eeda30f
--- /dev/null
+++ b/test/Transforms/NaCl/vector-canonicalization-inserts.ll
@@ -0,0 +1,8959 @@
+; RUN: opt -S -pnacl-vector-canonicalization %s | FileCheck %s
+
+; Auto-generated tests for insertelement instructions.
+
+target datalayout = "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-p:32:32:32-v128:32:128"
+
+define <2 x i8> @insert_2xi8_at_0(<2 x i8>, i8) {
+entry:
+ %2 = insertelement <2 x i8> %0, i8 %1, i32 0
+ ret <2 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_2xi8_at_0(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 0
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <2 x i8> @insert_2xi8_at_1(<2 x i8>, i8) {
+entry:
+ %2 = insertelement <2 x i8> %0, i8 %1, i32 1
+ ret <2 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_2xi8_at_1(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 1
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <2 x i8> @insert_2xi8_undef_idx(<2 x i8>, i8) {
+entry:
+ %2 = insertelement <2 x i8> %0, i8 %1, i32 2
+ ret <2 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_2xi8_undef_idx(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: ret <16 x i8> %0
+; CHECK-NEXT: }
+
+define <2 x i16> @insert_2xi16_at_0(<2 x i16>, i16) {
+entry:
+ %2 = insertelement <2 x i16> %0, i16 %1, i32 0
+ ret <2 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_2xi16_at_0(<8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <8 x i16> %0, i16 %1, i32 0
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <2 x i16> @insert_2xi16_at_1(<2 x i16>, i16) {
+entry:
+ %2 = insertelement <2 x i16> %0, i16 %1, i32 1
+ ret <2 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_2xi16_at_1(<8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <8 x i16> %0, i16 %1, i32 1
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <2 x i16> @insert_2xi16_undef_idx(<2 x i16>, i16) {
+entry:
+ %2 = insertelement <2 x i16> %0, i16 %1, i32 2
+ ret <2 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_2xi16_undef_idx(<8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: ret <8 x i16> %0
+; CHECK-NEXT: }
+
+define <2 x i32> @insert_2xi32_at_0(<2 x i32>, i32) {
+entry:
+ %2 = insertelement <2 x i32> %0, i32 %1, i32 0
+ ret <2 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_2xi32_at_0(<4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <4 x i32> %0, i32 %1, i32 0
+; CHECK-NEXT: ret <4 x i32> %2
+; CHECK-NEXT: }
+
+define <2 x i32> @insert_2xi32_at_1(<2 x i32>, i32) {
+entry:
+ %2 = insertelement <2 x i32> %0, i32 %1, i32 1
+ ret <2 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_2xi32_at_1(<4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <4 x i32> %0, i32 %1, i32 1
+; CHECK-NEXT: ret <4 x i32> %2
+; CHECK-NEXT: }
+
+define <2 x i32> @insert_2xi32_undef_idx(<2 x i32>, i32) {
+entry:
+ %2 = insertelement <2 x i32> %0, i32 %1, i32 2
+ ret <2 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_2xi32_undef_idx(<4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: ret <4 x i32> %0
+; CHECK-NEXT: }
+
+define <2 x i64> @insert_2xi64_at_0(<2 x i64>, i64) {
+entry:
+ %2 = insertelement <2 x i64> %0, i64 %1, i32 0
+ ret <2 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_2xi64_at_0(<2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <2 x i64> %0, i64 %1, i32 0
+; CHECK-NEXT: ret <2 x i64> %2
+; CHECK-NEXT: }
+
+define <2 x i64> @insert_2xi64_at_1(<2 x i64>, i64) {
+entry:
+ %2 = insertelement <2 x i64> %0, i64 %1, i32 1
+ ret <2 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_2xi64_at_1(<2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <2 x i64> %0, i64 %1, i32 1
+; CHECK-NEXT: ret <2 x i64> %2
+; CHECK-NEXT: }
+
+define <2 x i64> @insert_2xi64_undef_idx(<2 x i64>, i64) {
+entry:
+ %2 = insertelement <2 x i64> %0, i64 %1, i32 2
+ ret <2 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_2xi64_undef_idx(<2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <2 x i64> %0, i64 %1, i32 2
+; CHECK-NEXT: ret <2 x i64> %2
+; CHECK-NEXT: }
+
+define <2 x i8*> @insert_2xi8ptr_at_0(<2 x i8*>, i8*) {
+entry:
+ %2 = insertelement <2 x i8*> %0, i8* %1, i32 0
+ ret <2 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_2xi8ptr_at_0(<4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <4 x i8*> %0, i8* %1, i32 0
+; CHECK-NEXT: ret <4 x i8*> %2
+; CHECK-NEXT: }
+
+define <2 x i8*> @insert_2xi8ptr_at_1(<2 x i8*>, i8*) {
+entry:
+ %2 = insertelement <2 x i8*> %0, i8* %1, i32 1
+ ret <2 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_2xi8ptr_at_1(<4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <4 x i8*> %0, i8* %1, i32 1
+; CHECK-NEXT: ret <4 x i8*> %2
+; CHECK-NEXT: }
+
+define <2 x i8*> @insert_2xi8ptr_undef_idx(<2 x i8*>, i8*) {
+entry:
+ %2 = insertelement <2 x i8*> %0, i8* %1, i32 2
+ ret <2 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_2xi8ptr_undef_idx(<4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: ret <4 x i8*> %0
+; CHECK-NEXT: }
+
+define <2 x float> @insert_2xfloat_at_0(<2 x float>, float) {
+entry:
+ %2 = insertelement <2 x float> %0, float %1, i32 0
+ ret <2 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_2xfloat_at_0(<4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <4 x float> %0, float %1, i32 0
+; CHECK-NEXT: ret <4 x float> %2
+; CHECK-NEXT: }
+
+define <2 x float> @insert_2xfloat_at_1(<2 x float>, float) {
+entry:
+ %2 = insertelement <2 x float> %0, float %1, i32 1
+ ret <2 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_2xfloat_at_1(<4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <4 x float> %0, float %1, i32 1
+; CHECK-NEXT: ret <4 x float> %2
+; CHECK-NEXT: }
+
+define <2 x float> @insert_2xfloat_undef_idx(<2 x float>, float) {
+entry:
+ %2 = insertelement <2 x float> %0, float %1, i32 2
+ ret <2 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_2xfloat_undef_idx(<4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: ret <4 x float> %0
+; CHECK-NEXT: }
+
+define <2 x double> @insert_2xdouble_at_0(<2 x double>, double) {
+entry:
+ %2 = insertelement <2 x double> %0, double %1, i32 0
+ ret <2 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_2xdouble_at_0(<2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <2 x double> %0, double %1, i32 0
+; CHECK-NEXT: ret <2 x double> %2
+; CHECK-NEXT: }
+
+define <2 x double> @insert_2xdouble_at_1(<2 x double>, double) {
+entry:
+ %2 = insertelement <2 x double> %0, double %1, i32 1
+ ret <2 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_2xdouble_at_1(<2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <2 x double> %0, double %1, i32 1
+; CHECK-NEXT: ret <2 x double> %2
+; CHECK-NEXT: }
+
+define <2 x double> @insert_2xdouble_undef_idx(<2 x double>, double) {
+entry:
+ %2 = insertelement <2 x double> %0, double %1, i32 2
+ ret <2 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_2xdouble_undef_idx(<2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <2 x double> %0, double %1, i32 2
+; CHECK-NEXT: ret <2 x double> %2
+; CHECK-NEXT: }
+
+define <4 x i8> @insert_4xi8_at_0(<4 x i8>, i8) {
+entry:
+ %2 = insertelement <4 x i8> %0, i8 %1, i32 0
+ ret <4 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_4xi8_at_0(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 0
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <4 x i8> @insert_4xi8_at_1(<4 x i8>, i8) {
+entry:
+ %2 = insertelement <4 x i8> %0, i8 %1, i32 1
+ ret <4 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_4xi8_at_1(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 1
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <4 x i8> @insert_4xi8_at_2(<4 x i8>, i8) {
+entry:
+ %2 = insertelement <4 x i8> %0, i8 %1, i32 2
+ ret <4 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_4xi8_at_2(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 2
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <4 x i8> @insert_4xi8_at_3(<4 x i8>, i8) {
+entry:
+ %2 = insertelement <4 x i8> %0, i8 %1, i32 3
+ ret <4 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_4xi8_at_3(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 3
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <4 x i8> @insert_4xi8_undef_idx(<4 x i8>, i8) {
+entry:
+ %2 = insertelement <4 x i8> %0, i8 %1, i32 4
+ ret <4 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_4xi8_undef_idx(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: ret <16 x i8> %0
+; CHECK-NEXT: }
+
+define <4 x i16> @insert_4xi16_at_0(<4 x i16>, i16) {
+entry:
+ %2 = insertelement <4 x i16> %0, i16 %1, i32 0
+ ret <4 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_4xi16_at_0(<8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <8 x i16> %0, i16 %1, i32 0
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <4 x i16> @insert_4xi16_at_1(<4 x i16>, i16) {
+entry:
+ %2 = insertelement <4 x i16> %0, i16 %1, i32 1
+ ret <4 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_4xi16_at_1(<8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <8 x i16> %0, i16 %1, i32 1
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <4 x i16> @insert_4xi16_at_2(<4 x i16>, i16) {
+entry:
+ %2 = insertelement <4 x i16> %0, i16 %1, i32 2
+ ret <4 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_4xi16_at_2(<8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <8 x i16> %0, i16 %1, i32 2
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <4 x i16> @insert_4xi16_at_3(<4 x i16>, i16) {
+entry:
+ %2 = insertelement <4 x i16> %0, i16 %1, i32 3
+ ret <4 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_4xi16_at_3(<8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <8 x i16> %0, i16 %1, i32 3
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <4 x i16> @insert_4xi16_undef_idx(<4 x i16>, i16) {
+entry:
+ %2 = insertelement <4 x i16> %0, i16 %1, i32 4
+ ret <4 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_4xi16_undef_idx(<8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: ret <8 x i16> %0
+; CHECK-NEXT: }
+
+define <4 x i32> @insert_4xi32_at_0(<4 x i32>, i32) {
+entry:
+ %2 = insertelement <4 x i32> %0, i32 %1, i32 0
+ ret <4 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_4xi32_at_0(<4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <4 x i32> %0, i32 %1, i32 0
+; CHECK-NEXT: ret <4 x i32> %2
+; CHECK-NEXT: }
+
+define <4 x i32> @insert_4xi32_at_1(<4 x i32>, i32) {
+entry:
+ %2 = insertelement <4 x i32> %0, i32 %1, i32 1
+ ret <4 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_4xi32_at_1(<4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <4 x i32> %0, i32 %1, i32 1
+; CHECK-NEXT: ret <4 x i32> %2
+; CHECK-NEXT: }
+
+define <4 x i32> @insert_4xi32_at_2(<4 x i32>, i32) {
+entry:
+ %2 = insertelement <4 x i32> %0, i32 %1, i32 2
+ ret <4 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_4xi32_at_2(<4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <4 x i32> %0, i32 %1, i32 2
+; CHECK-NEXT: ret <4 x i32> %2
+; CHECK-NEXT: }
+
+define <4 x i32> @insert_4xi32_at_3(<4 x i32>, i32) {
+entry:
+ %2 = insertelement <4 x i32> %0, i32 %1, i32 3
+ ret <4 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_4xi32_at_3(<4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <4 x i32> %0, i32 %1, i32 3
+; CHECK-NEXT: ret <4 x i32> %2
+; CHECK-NEXT: }
+
+define <4 x i32> @insert_4xi32_undef_idx(<4 x i32>, i32) {
+entry:
+ %2 = insertelement <4 x i32> %0, i32 %1, i32 4
+ ret <4 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_4xi32_undef_idx(<4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <4 x i32> %0, i32 %1, i32 4
+; CHECK-NEXT: ret <4 x i32> %2
+; CHECK-NEXT: }
+
+define <4 x i64> @insert_4xi64_at_0(<4 x i64>, i64) {
+entry:
+ %2 = insertelement <4 x i64> %0, i64 %1, i32 0
+ ret <4 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_4xi64_at_0(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <2 x i64> %1, i64 %3, i32 0
+; CHECK-NEXT: store <2 x i64> %2, <2 x i64>* %0, align 16
+; CHECK-NEXT: ret <2 x i64> %4
+; CHECK-NEXT: }
+
+define <4 x i64> @insert_4xi64_at_1(<4 x i64>, i64) {
+entry:
+ %2 = insertelement <4 x i64> %0, i64 %1, i32 1
+ ret <4 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_4xi64_at_1(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <2 x i64> %1, i64 %3, i32 1
+; CHECK-NEXT: store <2 x i64> %2, <2 x i64>* %0, align 16
+; CHECK-NEXT: ret <2 x i64> %4
+; CHECK-NEXT: }
+
+define <4 x i64> @insert_4xi64_at_2(<4 x i64>, i64) {
+entry:
+ %2 = insertelement <4 x i64> %0, i64 %1, i32 2
+ ret <4 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_4xi64_at_2(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <2 x i64> %2, i64 %3, i32 0
+; CHECK-NEXT: store <2 x i64> %4, <2 x i64>* %0, align 16
+; CHECK-NEXT: ret <2 x i64> %1
+; CHECK-NEXT: }
+
+define <4 x i64> @insert_4xi64_at_3(<4 x i64>, i64) {
+entry:
+ %2 = insertelement <4 x i64> %0, i64 %1, i32 3
+ ret <4 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_4xi64_at_3(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <2 x i64> %2, i64 %3, i32 1
+; CHECK-NEXT: store <2 x i64> %4, <2 x i64>* %0, align 16
+; CHECK-NEXT: ret <2 x i64> %1
+; CHECK-NEXT: }
+
+define <4 x i64> @insert_4xi64_undef_idx(<4 x i64>, i64) {
+entry:
+ %2 = insertelement <4 x i64> %0, i64 %1, i32 4
+ ret <4 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_4xi64_undef_idx(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: store <2 x i64> %2, <2 x i64>* %0, align 16
+; CHECK-NEXT: ret <2 x i64> %1
+; CHECK-NEXT: }
+
+define <4 x i8*> @insert_4xi8ptr_at_0(<4 x i8*>, i8*) {
+entry:
+ %2 = insertelement <4 x i8*> %0, i8* %1, i32 0
+ ret <4 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_4xi8ptr_at_0(<4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <4 x i8*> %0, i8* %1, i32 0
+; CHECK-NEXT: ret <4 x i8*> %2
+; CHECK-NEXT: }
+
+define <4 x i8*> @insert_4xi8ptr_at_1(<4 x i8*>, i8*) {
+entry:
+ %2 = insertelement <4 x i8*> %0, i8* %1, i32 1
+ ret <4 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_4xi8ptr_at_1(<4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <4 x i8*> %0, i8* %1, i32 1
+; CHECK-NEXT: ret <4 x i8*> %2
+; CHECK-NEXT: }
+
+define <4 x i8*> @insert_4xi8ptr_at_2(<4 x i8*>, i8*) {
+entry:
+ %2 = insertelement <4 x i8*> %0, i8* %1, i32 2
+ ret <4 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_4xi8ptr_at_2(<4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <4 x i8*> %0, i8* %1, i32 2
+; CHECK-NEXT: ret <4 x i8*> %2
+; CHECK-NEXT: }
+
+define <4 x i8*> @insert_4xi8ptr_at_3(<4 x i8*>, i8*) {
+entry:
+ %2 = insertelement <4 x i8*> %0, i8* %1, i32 3
+ ret <4 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_4xi8ptr_at_3(<4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <4 x i8*> %0, i8* %1, i32 3
+; CHECK-NEXT: ret <4 x i8*> %2
+; CHECK-NEXT: }
+
+define <4 x i8*> @insert_4xi8ptr_undef_idx(<4 x i8*>, i8*) {
+entry:
+ %2 = insertelement <4 x i8*> %0, i8* %1, i32 4
+ ret <4 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_4xi8ptr_undef_idx(<4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <4 x i8*> %0, i8* %1, i32 4
+; CHECK-NEXT: ret <4 x i8*> %2
+; CHECK-NEXT: }
+
+define <4 x float> @insert_4xfloat_at_0(<4 x float>, float) {
+entry:
+ %2 = insertelement <4 x float> %0, float %1, i32 0
+ ret <4 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_4xfloat_at_0(<4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <4 x float> %0, float %1, i32 0
+; CHECK-NEXT: ret <4 x float> %2
+; CHECK-NEXT: }
+
+define <4 x float> @insert_4xfloat_at_1(<4 x float>, float) {
+entry:
+ %2 = insertelement <4 x float> %0, float %1, i32 1
+ ret <4 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_4xfloat_at_1(<4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <4 x float> %0, float %1, i32 1
+; CHECK-NEXT: ret <4 x float> %2
+; CHECK-NEXT: }
+
+define <4 x float> @insert_4xfloat_at_2(<4 x float>, float) {
+entry:
+ %2 = insertelement <4 x float> %0, float %1, i32 2
+ ret <4 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_4xfloat_at_2(<4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <4 x float> %0, float %1, i32 2
+; CHECK-NEXT: ret <4 x float> %2
+; CHECK-NEXT: }
+
+define <4 x float> @insert_4xfloat_at_3(<4 x float>, float) {
+entry:
+ %2 = insertelement <4 x float> %0, float %1, i32 3
+ ret <4 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_4xfloat_at_3(<4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <4 x float> %0, float %1, i32 3
+; CHECK-NEXT: ret <4 x float> %2
+; CHECK-NEXT: }
+
+define <4 x float> @insert_4xfloat_undef_idx(<4 x float>, float) {
+entry:
+ %2 = insertelement <4 x float> %0, float %1, i32 4
+ ret <4 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_4xfloat_undef_idx(<4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <4 x float> %0, float %1, i32 4
+; CHECK-NEXT: ret <4 x float> %2
+; CHECK-NEXT: }
+
+define <4 x double> @insert_4xdouble_at_0(<4 x double>, double) {
+entry:
+ %2 = insertelement <4 x double> %0, double %1, i32 0
+ ret <4 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_4xdouble_at_0(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <2 x double> %1, double %3, i32 0
+; CHECK-NEXT: store <2 x double> %2, <2 x double>* %0, align 16
+; CHECK-NEXT: ret <2 x double> %4
+; CHECK-NEXT: }
+
+define <4 x double> @insert_4xdouble_at_1(<4 x double>, double) {
+entry:
+ %2 = insertelement <4 x double> %0, double %1, i32 1
+ ret <4 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_4xdouble_at_1(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <2 x double> %1, double %3, i32 1
+; CHECK-NEXT: store <2 x double> %2, <2 x double>* %0, align 16
+; CHECK-NEXT: ret <2 x double> %4
+; CHECK-NEXT: }
+
+define <4 x double> @insert_4xdouble_at_2(<4 x double>, double) {
+entry:
+ %2 = insertelement <4 x double> %0, double %1, i32 2
+ ret <4 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_4xdouble_at_2(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <2 x double> %2, double %3, i32 0
+; CHECK-NEXT: store <2 x double> %4, <2 x double>* %0, align 16
+; CHECK-NEXT: ret <2 x double> %1
+; CHECK-NEXT: }
+
+define <4 x double> @insert_4xdouble_at_3(<4 x double>, double) {
+entry:
+ %2 = insertelement <4 x double> %0, double %1, i32 3
+ ret <4 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_4xdouble_at_3(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <2 x double> %2, double %3, i32 1
+; CHECK-NEXT: store <2 x double> %4, <2 x double>* %0, align 16
+; CHECK-NEXT: ret <2 x double> %1
+; CHECK-NEXT: }
+
+define <4 x double> @insert_4xdouble_undef_idx(<4 x double>, double) {
+entry:
+ %2 = insertelement <4 x double> %0, double %1, i32 4
+ ret <4 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_4xdouble_undef_idx(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: store <2 x double> %2, <2 x double>* %0, align 16
+; CHECK-NEXT: ret <2 x double> %1
+; CHECK-NEXT: }
+
+define <6 x i8> @insert_6xi8_at_0(<6 x i8>, i8) {
+entry:
+ %2 = insertelement <6 x i8> %0, i8 %1, i32 0
+ ret <6 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_6xi8_at_0(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 0
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <6 x i8> @insert_6xi8_at_1(<6 x i8>, i8) {
+entry:
+ %2 = insertelement <6 x i8> %0, i8 %1, i32 1
+ ret <6 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_6xi8_at_1(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 1
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <6 x i8> @insert_6xi8_at_2(<6 x i8>, i8) {
+entry:
+ %2 = insertelement <6 x i8> %0, i8 %1, i32 2
+ ret <6 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_6xi8_at_2(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 2
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <6 x i8> @insert_6xi8_at_3(<6 x i8>, i8) {
+entry:
+ %2 = insertelement <6 x i8> %0, i8 %1, i32 3
+ ret <6 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_6xi8_at_3(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 3
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <6 x i8> @insert_6xi8_at_4(<6 x i8>, i8) {
+entry:
+ %2 = insertelement <6 x i8> %0, i8 %1, i32 4
+ ret <6 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_6xi8_at_4(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 4
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <6 x i8> @insert_6xi8_at_5(<6 x i8>, i8) {
+entry:
+ %2 = insertelement <6 x i8> %0, i8 %1, i32 5
+ ret <6 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_6xi8_at_5(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 5
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <6 x i8> @insert_6xi8_undef_idx(<6 x i8>, i8) {
+entry:
+ %2 = insertelement <6 x i8> %0, i8 %1, i32 6
+ ret <6 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_6xi8_undef_idx(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: ret <16 x i8> %0
+; CHECK-NEXT: }
+
+define <6 x i16> @insert_6xi16_at_0(<6 x i16>, i16) {
+entry:
+ %2 = insertelement <6 x i16> %0, i16 %1, i32 0
+ ret <6 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_6xi16_at_0(<8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <8 x i16> %0, i16 %1, i32 0
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <6 x i16> @insert_6xi16_at_1(<6 x i16>, i16) {
+entry:
+ %2 = insertelement <6 x i16> %0, i16 %1, i32 1
+ ret <6 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_6xi16_at_1(<8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <8 x i16> %0, i16 %1, i32 1
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <6 x i16> @insert_6xi16_at_2(<6 x i16>, i16) {
+entry:
+ %2 = insertelement <6 x i16> %0, i16 %1, i32 2
+ ret <6 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_6xi16_at_2(<8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <8 x i16> %0, i16 %1, i32 2
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <6 x i16> @insert_6xi16_at_3(<6 x i16>, i16) {
+entry:
+ %2 = insertelement <6 x i16> %0, i16 %1, i32 3
+ ret <6 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_6xi16_at_3(<8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <8 x i16> %0, i16 %1, i32 3
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <6 x i16> @insert_6xi16_at_4(<6 x i16>, i16) {
+entry:
+ %2 = insertelement <6 x i16> %0, i16 %1, i32 4
+ ret <6 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_6xi16_at_4(<8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <8 x i16> %0, i16 %1, i32 4
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <6 x i16> @insert_6xi16_at_5(<6 x i16>, i16) {
+entry:
+ %2 = insertelement <6 x i16> %0, i16 %1, i32 5
+ ret <6 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_6xi16_at_5(<8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <8 x i16> %0, i16 %1, i32 5
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <6 x i16> @insert_6xi16_undef_idx(<6 x i16>, i16) {
+entry:
+ %2 = insertelement <6 x i16> %0, i16 %1, i32 6
+ ret <6 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_6xi16_undef_idx(<8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: ret <8 x i16> %0
+; CHECK-NEXT: }
+
+define <6 x i32> @insert_6xi32_at_0(<6 x i32>, i32) {
+entry:
+ %2 = insertelement <6 x i32> %0, i32 %1, i32 0
+ ret <6 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_6xi32_at_0(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i32> %1, i32 %3, i32 0
+; CHECK-NEXT: store <4 x i32> %2, <4 x i32>* %0, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <6 x i32> @insert_6xi32_at_1(<6 x i32>, i32) {
+entry:
+ %2 = insertelement <6 x i32> %0, i32 %1, i32 1
+ ret <6 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_6xi32_at_1(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i32> %1, i32 %3, i32 1
+; CHECK-NEXT: store <4 x i32> %2, <4 x i32>* %0, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <6 x i32> @insert_6xi32_at_2(<6 x i32>, i32) {
+entry:
+ %2 = insertelement <6 x i32> %0, i32 %1, i32 2
+ ret <6 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_6xi32_at_2(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i32> %1, i32 %3, i32 2
+; CHECK-NEXT: store <4 x i32> %2, <4 x i32>* %0, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <6 x i32> @insert_6xi32_at_3(<6 x i32>, i32) {
+entry:
+ %2 = insertelement <6 x i32> %0, i32 %1, i32 3
+ ret <6 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_6xi32_at_3(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i32> %1, i32 %3, i32 3
+; CHECK-NEXT: store <4 x i32> %2, <4 x i32>* %0, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <6 x i32> @insert_6xi32_at_4(<6 x i32>, i32) {
+entry:
+ %2 = insertelement <6 x i32> %0, i32 %1, i32 4
+ ret <6 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_6xi32_at_4(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i32> %2, i32 %3, i32 0
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %0, align 16
+; CHECK-NEXT: ret <4 x i32> %1
+; CHECK-NEXT: }
+
+define <6 x i32> @insert_6xi32_at_5(<6 x i32>, i32) {
+entry:
+ %2 = insertelement <6 x i32> %0, i32 %1, i32 5
+ ret <6 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_6xi32_at_5(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i32> %2, i32 %3, i32 1
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %0, align 16
+; CHECK-NEXT: ret <4 x i32> %1
+; CHECK-NEXT: }
+
+define <6 x i32> @insert_6xi32_undef_idx(<6 x i32>, i32) {
+entry:
+ %2 = insertelement <6 x i32> %0, i32 %1, i32 6
+ ret <6 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_6xi32_undef_idx(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: store <4 x i32> %2, <4 x i32>* %0, align 16
+; CHECK-NEXT: ret <4 x i32> %1
+; CHECK-NEXT: }
+
+define <6 x i64> @insert_6xi64_at_0(<6 x i64>, i64) {
+entry:
+ %2 = insertelement <6 x i64> %0, i64 %1, i32 0
+ ret <6 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_6xi64_at_0(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <2 x i64> %2, i64 %5, i32 0
+; CHECK-NEXT: store <2 x i64> %3, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %4, <2 x i64>* %1, align 16
+; CHECK-NEXT: ret <2 x i64> %6
+; CHECK-NEXT: }
+
+define <6 x i64> @insert_6xi64_at_1(<6 x i64>, i64) {
+entry:
+ %2 = insertelement <6 x i64> %0, i64 %1, i32 1
+ ret <6 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_6xi64_at_1(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <2 x i64> %2, i64 %5, i32 1
+; CHECK-NEXT: store <2 x i64> %3, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %4, <2 x i64>* %1, align 16
+; CHECK-NEXT: ret <2 x i64> %6
+; CHECK-NEXT: }
+
+define <6 x i64> @insert_6xi64_at_2(<6 x i64>, i64) {
+entry:
+ %2 = insertelement <6 x i64> %0, i64 %1, i32 2
+ ret <6 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_6xi64_at_2(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <2 x i64> %3, i64 %5, i32 0
+; CHECK-NEXT: store <2 x i64> %6, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %4, <2 x i64>* %1, align 16
+; CHECK-NEXT: ret <2 x i64> %2
+; CHECK-NEXT: }
+
+define <6 x i64> @insert_6xi64_at_3(<6 x i64>, i64) {
+entry:
+ %2 = insertelement <6 x i64> %0, i64 %1, i32 3
+ ret <6 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_6xi64_at_3(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <2 x i64> %3, i64 %5, i32 1
+; CHECK-NEXT: store <2 x i64> %6, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %4, <2 x i64>* %1, align 16
+; CHECK-NEXT: ret <2 x i64> %2
+; CHECK-NEXT: }
+
+define <6 x i64> @insert_6xi64_at_4(<6 x i64>, i64) {
+entry:
+ %2 = insertelement <6 x i64> %0, i64 %1, i32 4
+ ret <6 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_6xi64_at_4(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <2 x i64> %4, i64 %5, i32 0
+; CHECK-NEXT: store <2 x i64> %3, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %6, <2 x i64>* %1, align 16
+; CHECK-NEXT: ret <2 x i64> %2
+; CHECK-NEXT: }
+
+define <6 x i64> @insert_6xi64_at_5(<6 x i64>, i64) {
+entry:
+ %2 = insertelement <6 x i64> %0, i64 %1, i32 5
+ ret <6 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_6xi64_at_5(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <2 x i64> %4, i64 %5, i32 1
+; CHECK-NEXT: store <2 x i64> %3, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %6, <2 x i64>* %1, align 16
+; CHECK-NEXT: ret <2 x i64> %2
+; CHECK-NEXT: }
+
+define <6 x i64> @insert_6xi64_undef_idx(<6 x i64>, i64) {
+entry:
+ %2 = insertelement <6 x i64> %0, i64 %1, i32 6
+ ret <6 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_6xi64_undef_idx(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: store <2 x i64> %3, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %4, <2 x i64>* %1, align 16
+; CHECK-NEXT: ret <2 x i64> %2
+; CHECK-NEXT: }
+
+define <6 x i8*> @insert_6xi8ptr_at_0(<6 x i8*>, i8*) {
+entry:
+ %2 = insertelement <6 x i8*> %0, i8* %1, i32 0
+ ret <6 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_6xi8ptr_at_0(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i8*> %1, i8* %3, i32 0
+; CHECK-NEXT: store <4 x i8*> %2, <4 x i8*>* %0, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <6 x i8*> @insert_6xi8ptr_at_1(<6 x i8*>, i8*) {
+entry:
+ %2 = insertelement <6 x i8*> %0, i8* %1, i32 1
+ ret <6 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_6xi8ptr_at_1(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i8*> %1, i8* %3, i32 1
+; CHECK-NEXT: store <4 x i8*> %2, <4 x i8*>* %0, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <6 x i8*> @insert_6xi8ptr_at_2(<6 x i8*>, i8*) {
+entry:
+ %2 = insertelement <6 x i8*> %0, i8* %1, i32 2
+ ret <6 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_6xi8ptr_at_2(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i8*> %1, i8* %3, i32 2
+; CHECK-NEXT: store <4 x i8*> %2, <4 x i8*>* %0, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <6 x i8*> @insert_6xi8ptr_at_3(<6 x i8*>, i8*) {
+entry:
+ %2 = insertelement <6 x i8*> %0, i8* %1, i32 3
+ ret <6 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_6xi8ptr_at_3(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i8*> %1, i8* %3, i32 3
+; CHECK-NEXT: store <4 x i8*> %2, <4 x i8*>* %0, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <6 x i8*> @insert_6xi8ptr_at_4(<6 x i8*>, i8*) {
+entry:
+ %2 = insertelement <6 x i8*> %0, i8* %1, i32 4
+ ret <6 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_6xi8ptr_at_4(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i8*> %2, i8* %3, i32 0
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %0, align 16
+; CHECK-NEXT: ret <4 x i8*> %1
+; CHECK-NEXT: }
+
+define <6 x i8*> @insert_6xi8ptr_at_5(<6 x i8*>, i8*) {
+entry:
+ %2 = insertelement <6 x i8*> %0, i8* %1, i32 5
+ ret <6 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_6xi8ptr_at_5(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i8*> %2, i8* %3, i32 1
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %0, align 16
+; CHECK-NEXT: ret <4 x i8*> %1
+; CHECK-NEXT: }
+
+define <6 x i8*> @insert_6xi8ptr_undef_idx(<6 x i8*>, i8*) {
+entry:
+ %2 = insertelement <6 x i8*> %0, i8* %1, i32 6
+ ret <6 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_6xi8ptr_undef_idx(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: store <4 x i8*> %2, <4 x i8*>* %0, align 16
+; CHECK-NEXT: ret <4 x i8*> %1
+; CHECK-NEXT: }
+
+define <6 x float> @insert_6xfloat_at_0(<6 x float>, float) {
+entry:
+ %2 = insertelement <6 x float> %0, float %1, i32 0
+ ret <6 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_6xfloat_at_0(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x float> %1, float %3, i32 0
+; CHECK-NEXT: store <4 x float> %2, <4 x float>* %0, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <6 x float> @insert_6xfloat_at_1(<6 x float>, float) {
+entry:
+ %2 = insertelement <6 x float> %0, float %1, i32 1
+ ret <6 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_6xfloat_at_1(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x float> %1, float %3, i32 1
+; CHECK-NEXT: store <4 x float> %2, <4 x float>* %0, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <6 x float> @insert_6xfloat_at_2(<6 x float>, float) {
+entry:
+ %2 = insertelement <6 x float> %0, float %1, i32 2
+ ret <6 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_6xfloat_at_2(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x float> %1, float %3, i32 2
+; CHECK-NEXT: store <4 x float> %2, <4 x float>* %0, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <6 x float> @insert_6xfloat_at_3(<6 x float>, float) {
+entry:
+ %2 = insertelement <6 x float> %0, float %1, i32 3
+ ret <6 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_6xfloat_at_3(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x float> %1, float %3, i32 3
+; CHECK-NEXT: store <4 x float> %2, <4 x float>* %0, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <6 x float> @insert_6xfloat_at_4(<6 x float>, float) {
+entry:
+ %2 = insertelement <6 x float> %0, float %1, i32 4
+ ret <6 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_6xfloat_at_4(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x float> %2, float %3, i32 0
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %0, align 16
+; CHECK-NEXT: ret <4 x float> %1
+; CHECK-NEXT: }
+
+define <6 x float> @insert_6xfloat_at_5(<6 x float>, float) {
+entry:
+ %2 = insertelement <6 x float> %0, float %1, i32 5
+ ret <6 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_6xfloat_at_5(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x float> %2, float %3, i32 1
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %0, align 16
+; CHECK-NEXT: ret <4 x float> %1
+; CHECK-NEXT: }
+
+define <6 x float> @insert_6xfloat_undef_idx(<6 x float>, float) {
+entry:
+ %2 = insertelement <6 x float> %0, float %1, i32 6
+ ret <6 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_6xfloat_undef_idx(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: store <4 x float> %2, <4 x float>* %0, align 16
+; CHECK-NEXT: ret <4 x float> %1
+; CHECK-NEXT: }
+
+define <6 x double> @insert_6xdouble_at_0(<6 x double>, double) {
+entry:
+ %2 = insertelement <6 x double> %0, double %1, i32 0
+ ret <6 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_6xdouble_at_0(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <2 x double> %2, double %5, i32 0
+; CHECK-NEXT: store <2 x double> %3, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %4, <2 x double>* %1, align 16
+; CHECK-NEXT: ret <2 x double> %6
+; CHECK-NEXT: }
+
+define <6 x double> @insert_6xdouble_at_1(<6 x double>, double) {
+entry:
+ %2 = insertelement <6 x double> %0, double %1, i32 1
+ ret <6 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_6xdouble_at_1(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <2 x double> %2, double %5, i32 1
+; CHECK-NEXT: store <2 x double> %3, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %4, <2 x double>* %1, align 16
+; CHECK-NEXT: ret <2 x double> %6
+; CHECK-NEXT: }
+
+define <6 x double> @insert_6xdouble_at_2(<6 x double>, double) {
+entry:
+ %2 = insertelement <6 x double> %0, double %1, i32 2
+ ret <6 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_6xdouble_at_2(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <2 x double> %3, double %5, i32 0
+; CHECK-NEXT: store <2 x double> %6, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %4, <2 x double>* %1, align 16
+; CHECK-NEXT: ret <2 x double> %2
+; CHECK-NEXT: }
+
+define <6 x double> @insert_6xdouble_at_3(<6 x double>, double) {
+entry:
+ %2 = insertelement <6 x double> %0, double %1, i32 3
+ ret <6 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_6xdouble_at_3(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <2 x double> %3, double %5, i32 1
+; CHECK-NEXT: store <2 x double> %6, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %4, <2 x double>* %1, align 16
+; CHECK-NEXT: ret <2 x double> %2
+; CHECK-NEXT: }
+
+define <6 x double> @insert_6xdouble_at_4(<6 x double>, double) {
+entry:
+ %2 = insertelement <6 x double> %0, double %1, i32 4
+ ret <6 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_6xdouble_at_4(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <2 x double> %4, double %5, i32 0
+; CHECK-NEXT: store <2 x double> %3, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %6, <2 x double>* %1, align 16
+; CHECK-NEXT: ret <2 x double> %2
+; CHECK-NEXT: }
+
+define <6 x double> @insert_6xdouble_at_5(<6 x double>, double) {
+entry:
+ %2 = insertelement <6 x double> %0, double %1, i32 5
+ ret <6 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_6xdouble_at_5(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <2 x double> %4, double %5, i32 1
+; CHECK-NEXT: store <2 x double> %3, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %6, <2 x double>* %1, align 16
+; CHECK-NEXT: ret <2 x double> %2
+; CHECK-NEXT: }
+
+define <6 x double> @insert_6xdouble_undef_idx(<6 x double>, double) {
+entry:
+ %2 = insertelement <6 x double> %0, double %1, i32 6
+ ret <6 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_6xdouble_undef_idx(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: store <2 x double> %3, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %4, <2 x double>* %1, align 16
+; CHECK-NEXT: ret <2 x double> %2
+; CHECK-NEXT: }
+
+define <8 x i8> @insert_8xi8_at_0(<8 x i8>, i8) {
+entry:
+ %2 = insertelement <8 x i8> %0, i8 %1, i32 0
+ ret <8 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_8xi8_at_0(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 0
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <8 x i8> @insert_8xi8_at_1(<8 x i8>, i8) {
+entry:
+ %2 = insertelement <8 x i8> %0, i8 %1, i32 1
+ ret <8 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_8xi8_at_1(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 1
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <8 x i8> @insert_8xi8_at_2(<8 x i8>, i8) {
+entry:
+ %2 = insertelement <8 x i8> %0, i8 %1, i32 2
+ ret <8 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_8xi8_at_2(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 2
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <8 x i8> @insert_8xi8_at_3(<8 x i8>, i8) {
+entry:
+ %2 = insertelement <8 x i8> %0, i8 %1, i32 3
+ ret <8 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_8xi8_at_3(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 3
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <8 x i8> @insert_8xi8_at_4(<8 x i8>, i8) {
+entry:
+ %2 = insertelement <8 x i8> %0, i8 %1, i32 4
+ ret <8 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_8xi8_at_4(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 4
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <8 x i8> @insert_8xi8_at_5(<8 x i8>, i8) {
+entry:
+ %2 = insertelement <8 x i8> %0, i8 %1, i32 5
+ ret <8 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_8xi8_at_5(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 5
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <8 x i8> @insert_8xi8_at_6(<8 x i8>, i8) {
+entry:
+ %2 = insertelement <8 x i8> %0, i8 %1, i32 6
+ ret <8 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_8xi8_at_6(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 6
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <8 x i8> @insert_8xi8_at_7(<8 x i8>, i8) {
+entry:
+ %2 = insertelement <8 x i8> %0, i8 %1, i32 7
+ ret <8 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_8xi8_at_7(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 7
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <8 x i8> @insert_8xi8_undef_idx(<8 x i8>, i8) {
+entry:
+ %2 = insertelement <8 x i8> %0, i8 %1, i32 8
+ ret <8 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_8xi8_undef_idx(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: ret <16 x i8> %0
+; CHECK-NEXT: }
+
+define <8 x i16> @insert_8xi16_at_0(<8 x i16>, i16) {
+entry:
+ %2 = insertelement <8 x i16> %0, i16 %1, i32 0
+ ret <8 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_8xi16_at_0(<8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <8 x i16> %0, i16 %1, i32 0
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <8 x i16> @insert_8xi16_at_1(<8 x i16>, i16) {
+entry:
+ %2 = insertelement <8 x i16> %0, i16 %1, i32 1
+ ret <8 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_8xi16_at_1(<8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <8 x i16> %0, i16 %1, i32 1
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <8 x i16> @insert_8xi16_at_2(<8 x i16>, i16) {
+entry:
+ %2 = insertelement <8 x i16> %0, i16 %1, i32 2
+ ret <8 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_8xi16_at_2(<8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <8 x i16> %0, i16 %1, i32 2
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <8 x i16> @insert_8xi16_at_3(<8 x i16>, i16) {
+entry:
+ %2 = insertelement <8 x i16> %0, i16 %1, i32 3
+ ret <8 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_8xi16_at_3(<8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <8 x i16> %0, i16 %1, i32 3
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <8 x i16> @insert_8xi16_at_4(<8 x i16>, i16) {
+entry:
+ %2 = insertelement <8 x i16> %0, i16 %1, i32 4
+ ret <8 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_8xi16_at_4(<8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <8 x i16> %0, i16 %1, i32 4
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <8 x i16> @insert_8xi16_at_5(<8 x i16>, i16) {
+entry:
+ %2 = insertelement <8 x i16> %0, i16 %1, i32 5
+ ret <8 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_8xi16_at_5(<8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <8 x i16> %0, i16 %1, i32 5
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <8 x i16> @insert_8xi16_at_6(<8 x i16>, i16) {
+entry:
+ %2 = insertelement <8 x i16> %0, i16 %1, i32 6
+ ret <8 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_8xi16_at_6(<8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <8 x i16> %0, i16 %1, i32 6
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <8 x i16> @insert_8xi16_at_7(<8 x i16>, i16) {
+entry:
+ %2 = insertelement <8 x i16> %0, i16 %1, i32 7
+ ret <8 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_8xi16_at_7(<8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <8 x i16> %0, i16 %1, i32 7
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <8 x i16> @insert_8xi16_undef_idx(<8 x i16>, i16) {
+entry:
+ %2 = insertelement <8 x i16> %0, i16 %1, i32 8
+ ret <8 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_8xi16_undef_idx(<8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <8 x i16> %0, i16 %1, i32 8
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <8 x i32> @insert_8xi32_at_0(<8 x i32>, i32) {
+entry:
+ %2 = insertelement <8 x i32> %0, i32 %1, i32 0
+ ret <8 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_8xi32_at_0(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i32> %1, i32 %3, i32 0
+; CHECK-NEXT: store <4 x i32> %2, <4 x i32>* %0, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <8 x i32> @insert_8xi32_at_1(<8 x i32>, i32) {
+entry:
+ %2 = insertelement <8 x i32> %0, i32 %1, i32 1
+ ret <8 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_8xi32_at_1(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i32> %1, i32 %3, i32 1
+; CHECK-NEXT: store <4 x i32> %2, <4 x i32>* %0, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <8 x i32> @insert_8xi32_at_2(<8 x i32>, i32) {
+entry:
+ %2 = insertelement <8 x i32> %0, i32 %1, i32 2
+ ret <8 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_8xi32_at_2(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i32> %1, i32 %3, i32 2
+; CHECK-NEXT: store <4 x i32> %2, <4 x i32>* %0, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <8 x i32> @insert_8xi32_at_3(<8 x i32>, i32) {
+entry:
+ %2 = insertelement <8 x i32> %0, i32 %1, i32 3
+ ret <8 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_8xi32_at_3(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i32> %1, i32 %3, i32 3
+; CHECK-NEXT: store <4 x i32> %2, <4 x i32>* %0, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <8 x i32> @insert_8xi32_at_4(<8 x i32>, i32) {
+entry:
+ %2 = insertelement <8 x i32> %0, i32 %1, i32 4
+ ret <8 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_8xi32_at_4(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i32> %2, i32 %3, i32 0
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %0, align 16
+; CHECK-NEXT: ret <4 x i32> %1
+; CHECK-NEXT: }
+
+define <8 x i32> @insert_8xi32_at_5(<8 x i32>, i32) {
+entry:
+ %2 = insertelement <8 x i32> %0, i32 %1, i32 5
+ ret <8 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_8xi32_at_5(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i32> %2, i32 %3, i32 1
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %0, align 16
+; CHECK-NEXT: ret <4 x i32> %1
+; CHECK-NEXT: }
+
+define <8 x i32> @insert_8xi32_at_6(<8 x i32>, i32) {
+entry:
+ %2 = insertelement <8 x i32> %0, i32 %1, i32 6
+ ret <8 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_8xi32_at_6(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i32> %2, i32 %3, i32 2
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %0, align 16
+; CHECK-NEXT: ret <4 x i32> %1
+; CHECK-NEXT: }
+
+define <8 x i32> @insert_8xi32_at_7(<8 x i32>, i32) {
+entry:
+ %2 = insertelement <8 x i32> %0, i32 %1, i32 7
+ ret <8 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_8xi32_at_7(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i32> %2, i32 %3, i32 3
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %0, align 16
+; CHECK-NEXT: ret <4 x i32> %1
+; CHECK-NEXT: }
+
+define <8 x i32> @insert_8xi32_undef_idx(<8 x i32>, i32) {
+entry:
+ %2 = insertelement <8 x i32> %0, i32 %1, i32 8
+ ret <8 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_8xi32_undef_idx(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: store <4 x i32> %2, <4 x i32>* %0, align 16
+; CHECK-NEXT: ret <4 x i32> %1
+; CHECK-NEXT: }
+
+define <8 x i64> @insert_8xi64_at_0(<8 x i64>, i64) {
+entry:
+ %2 = insertelement <8 x i64> %0, i64 %1, i32 0
+ ret <8 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_8xi64_at_0(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <2 x i64> %3, i64 %7, i32 0
+; CHECK-NEXT: store <2 x i64> %4, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %5, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %6, <2 x i64>* %2, align 16
+; CHECK-NEXT: ret <2 x i64> %8
+; CHECK-NEXT: }
+
+define <8 x i64> @insert_8xi64_at_1(<8 x i64>, i64) {
+entry:
+ %2 = insertelement <8 x i64> %0, i64 %1, i32 1
+ ret <8 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_8xi64_at_1(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <2 x i64> %3, i64 %7, i32 1
+; CHECK-NEXT: store <2 x i64> %4, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %5, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %6, <2 x i64>* %2, align 16
+; CHECK-NEXT: ret <2 x i64> %8
+; CHECK-NEXT: }
+
+define <8 x i64> @insert_8xi64_at_2(<8 x i64>, i64) {
+entry:
+ %2 = insertelement <8 x i64> %0, i64 %1, i32 2
+ ret <8 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_8xi64_at_2(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <2 x i64> %4, i64 %7, i32 0
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %5, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %6, <2 x i64>* %2, align 16
+; CHECK-NEXT: ret <2 x i64> %3
+; CHECK-NEXT: }
+
+define <8 x i64> @insert_8xi64_at_3(<8 x i64>, i64) {
+entry:
+ %2 = insertelement <8 x i64> %0, i64 %1, i32 3
+ ret <8 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_8xi64_at_3(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <2 x i64> %4, i64 %7, i32 1
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %5, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %6, <2 x i64>* %2, align 16
+; CHECK-NEXT: ret <2 x i64> %3
+; CHECK-NEXT: }
+
+define <8 x i64> @insert_8xi64_at_4(<8 x i64>, i64) {
+entry:
+ %2 = insertelement <8 x i64> %0, i64 %1, i32 4
+ ret <8 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_8xi64_at_4(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <2 x i64> %5, i64 %7, i32 0
+; CHECK-NEXT: store <2 x i64> %4, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %6, <2 x i64>* %2, align 16
+; CHECK-NEXT: ret <2 x i64> %3
+; CHECK-NEXT: }
+
+define <8 x i64> @insert_8xi64_at_5(<8 x i64>, i64) {
+entry:
+ %2 = insertelement <8 x i64> %0, i64 %1, i32 5
+ ret <8 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_8xi64_at_5(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <2 x i64> %5, i64 %7, i32 1
+; CHECK-NEXT: store <2 x i64> %4, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %6, <2 x i64>* %2, align 16
+; CHECK-NEXT: ret <2 x i64> %3
+; CHECK-NEXT: }
+
+define <8 x i64> @insert_8xi64_at_6(<8 x i64>, i64) {
+entry:
+ %2 = insertelement <8 x i64> %0, i64 %1, i32 6
+ ret <8 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_8xi64_at_6(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <2 x i64> %6, i64 %7, i32 0
+; CHECK-NEXT: store <2 x i64> %4, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %5, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %2, align 16
+; CHECK-NEXT: ret <2 x i64> %3
+; CHECK-NEXT: }
+
+define <8 x i64> @insert_8xi64_at_7(<8 x i64>, i64) {
+entry:
+ %2 = insertelement <8 x i64> %0, i64 %1, i32 7
+ ret <8 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_8xi64_at_7(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <2 x i64> %6, i64 %7, i32 1
+; CHECK-NEXT: store <2 x i64> %4, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %5, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %2, align 16
+; CHECK-NEXT: ret <2 x i64> %3
+; CHECK-NEXT: }
+
+define <8 x i64> @insert_8xi64_undef_idx(<8 x i64>, i64) {
+entry:
+ %2 = insertelement <8 x i64> %0, i64 %1, i32 8
+ ret <8 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_8xi64_undef_idx(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: store <2 x i64> %4, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %5, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %6, <2 x i64>* %2, align 16
+; CHECK-NEXT: ret <2 x i64> %3
+; CHECK-NEXT: }
+
+define <8 x i8*> @insert_8xi8ptr_at_0(<8 x i8*>, i8*) {
+entry:
+ %2 = insertelement <8 x i8*> %0, i8* %1, i32 0
+ ret <8 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_8xi8ptr_at_0(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i8*> %1, i8* %3, i32 0
+; CHECK-NEXT: store <4 x i8*> %2, <4 x i8*>* %0, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <8 x i8*> @insert_8xi8ptr_at_1(<8 x i8*>, i8*) {
+entry:
+ %2 = insertelement <8 x i8*> %0, i8* %1, i32 1
+ ret <8 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_8xi8ptr_at_1(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i8*> %1, i8* %3, i32 1
+; CHECK-NEXT: store <4 x i8*> %2, <4 x i8*>* %0, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <8 x i8*> @insert_8xi8ptr_at_2(<8 x i8*>, i8*) {
+entry:
+ %2 = insertelement <8 x i8*> %0, i8* %1, i32 2
+ ret <8 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_8xi8ptr_at_2(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i8*> %1, i8* %3, i32 2
+; CHECK-NEXT: store <4 x i8*> %2, <4 x i8*>* %0, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <8 x i8*> @insert_8xi8ptr_at_3(<8 x i8*>, i8*) {
+entry:
+ %2 = insertelement <8 x i8*> %0, i8* %1, i32 3
+ ret <8 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_8xi8ptr_at_3(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i8*> %1, i8* %3, i32 3
+; CHECK-NEXT: store <4 x i8*> %2, <4 x i8*>* %0, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <8 x i8*> @insert_8xi8ptr_at_4(<8 x i8*>, i8*) {
+entry:
+ %2 = insertelement <8 x i8*> %0, i8* %1, i32 4
+ ret <8 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_8xi8ptr_at_4(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i8*> %2, i8* %3, i32 0
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %0, align 16
+; CHECK-NEXT: ret <4 x i8*> %1
+; CHECK-NEXT: }
+
+define <8 x i8*> @insert_8xi8ptr_at_5(<8 x i8*>, i8*) {
+entry:
+ %2 = insertelement <8 x i8*> %0, i8* %1, i32 5
+ ret <8 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_8xi8ptr_at_5(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i8*> %2, i8* %3, i32 1
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %0, align 16
+; CHECK-NEXT: ret <4 x i8*> %1
+; CHECK-NEXT: }
+
+define <8 x i8*> @insert_8xi8ptr_at_6(<8 x i8*>, i8*) {
+entry:
+ %2 = insertelement <8 x i8*> %0, i8* %1, i32 6
+ ret <8 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_8xi8ptr_at_6(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i8*> %2, i8* %3, i32 2
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %0, align 16
+; CHECK-NEXT: ret <4 x i8*> %1
+; CHECK-NEXT: }
+
+define <8 x i8*> @insert_8xi8ptr_at_7(<8 x i8*>, i8*) {
+entry:
+ %2 = insertelement <8 x i8*> %0, i8* %1, i32 7
+ ret <8 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_8xi8ptr_at_7(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x i8*> %2, i8* %3, i32 3
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %0, align 16
+; CHECK-NEXT: ret <4 x i8*> %1
+; CHECK-NEXT: }
+
+define <8 x i8*> @insert_8xi8ptr_undef_idx(<8 x i8*>, i8*) {
+entry:
+ %2 = insertelement <8 x i8*> %0, i8* %1, i32 8
+ ret <8 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_8xi8ptr_undef_idx(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: store <4 x i8*> %2, <4 x i8*>* %0, align 16
+; CHECK-NEXT: ret <4 x i8*> %1
+; CHECK-NEXT: }
+
+define <8 x float> @insert_8xfloat_at_0(<8 x float>, float) {
+entry:
+ %2 = insertelement <8 x float> %0, float %1, i32 0
+ ret <8 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_8xfloat_at_0(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x float> %1, float %3, i32 0
+; CHECK-NEXT: store <4 x float> %2, <4 x float>* %0, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <8 x float> @insert_8xfloat_at_1(<8 x float>, float) {
+entry:
+ %2 = insertelement <8 x float> %0, float %1, i32 1
+ ret <8 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_8xfloat_at_1(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x float> %1, float %3, i32 1
+; CHECK-NEXT: store <4 x float> %2, <4 x float>* %0, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <8 x float> @insert_8xfloat_at_2(<8 x float>, float) {
+entry:
+ %2 = insertelement <8 x float> %0, float %1, i32 2
+ ret <8 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_8xfloat_at_2(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x float> %1, float %3, i32 2
+; CHECK-NEXT: store <4 x float> %2, <4 x float>* %0, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <8 x float> @insert_8xfloat_at_3(<8 x float>, float) {
+entry:
+ %2 = insertelement <8 x float> %0, float %1, i32 3
+ ret <8 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_8xfloat_at_3(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x float> %1, float %3, i32 3
+; CHECK-NEXT: store <4 x float> %2, <4 x float>* %0, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <8 x float> @insert_8xfloat_at_4(<8 x float>, float) {
+entry:
+ %2 = insertelement <8 x float> %0, float %1, i32 4
+ ret <8 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_8xfloat_at_4(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x float> %2, float %3, i32 0
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %0, align 16
+; CHECK-NEXT: ret <4 x float> %1
+; CHECK-NEXT: }
+
+define <8 x float> @insert_8xfloat_at_5(<8 x float>, float) {
+entry:
+ %2 = insertelement <8 x float> %0, float %1, i32 5
+ ret <8 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_8xfloat_at_5(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x float> %2, float %3, i32 1
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %0, align 16
+; CHECK-NEXT: ret <4 x float> %1
+; CHECK-NEXT: }
+
+define <8 x float> @insert_8xfloat_at_6(<8 x float>, float) {
+entry:
+ %2 = insertelement <8 x float> %0, float %1, i32 6
+ ret <8 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_8xfloat_at_6(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x float> %2, float %3, i32 2
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %0, align 16
+; CHECK-NEXT: ret <4 x float> %1
+; CHECK-NEXT: }
+
+define <8 x float> @insert_8xfloat_at_7(<8 x float>, float) {
+entry:
+ %2 = insertelement <8 x float> %0, float %1, i32 7
+ ret <8 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_8xfloat_at_7(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <4 x float> %2, float %3, i32 3
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %0, align 16
+; CHECK-NEXT: ret <4 x float> %1
+; CHECK-NEXT: }
+
+define <8 x float> @insert_8xfloat_undef_idx(<8 x float>, float) {
+entry:
+ %2 = insertelement <8 x float> %0, float %1, i32 8
+ ret <8 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_8xfloat_undef_idx(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: store <4 x float> %2, <4 x float>* %0, align 16
+; CHECK-NEXT: ret <4 x float> %1
+; CHECK-NEXT: }
+
+define <8 x double> @insert_8xdouble_at_0(<8 x double>, double) {
+entry:
+ %2 = insertelement <8 x double> %0, double %1, i32 0
+ ret <8 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_8xdouble_at_0(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <2 x double> %3, double %7, i32 0
+; CHECK-NEXT: store <2 x double> %4, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %5, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %6, <2 x double>* %2, align 16
+; CHECK-NEXT: ret <2 x double> %8
+; CHECK-NEXT: }
+
+define <8 x double> @insert_8xdouble_at_1(<8 x double>, double) {
+entry:
+ %2 = insertelement <8 x double> %0, double %1, i32 1
+ ret <8 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_8xdouble_at_1(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <2 x double> %3, double %7, i32 1
+; CHECK-NEXT: store <2 x double> %4, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %5, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %6, <2 x double>* %2, align 16
+; CHECK-NEXT: ret <2 x double> %8
+; CHECK-NEXT: }
+
+define <8 x double> @insert_8xdouble_at_2(<8 x double>, double) {
+entry:
+ %2 = insertelement <8 x double> %0, double %1, i32 2
+ ret <8 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_8xdouble_at_2(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <2 x double> %4, double %7, i32 0
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %5, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %6, <2 x double>* %2, align 16
+; CHECK-NEXT: ret <2 x double> %3
+; CHECK-NEXT: }
+
+define <8 x double> @insert_8xdouble_at_3(<8 x double>, double) {
+entry:
+ %2 = insertelement <8 x double> %0, double %1, i32 3
+ ret <8 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_8xdouble_at_3(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <2 x double> %4, double %7, i32 1
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %5, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %6, <2 x double>* %2, align 16
+; CHECK-NEXT: ret <2 x double> %3
+; CHECK-NEXT: }
+
+define <8 x double> @insert_8xdouble_at_4(<8 x double>, double) {
+entry:
+ %2 = insertelement <8 x double> %0, double %1, i32 4
+ ret <8 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_8xdouble_at_4(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <2 x double> %5, double %7, i32 0
+; CHECK-NEXT: store <2 x double> %4, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %6, <2 x double>* %2, align 16
+; CHECK-NEXT: ret <2 x double> %3
+; CHECK-NEXT: }
+
+define <8 x double> @insert_8xdouble_at_5(<8 x double>, double) {
+entry:
+ %2 = insertelement <8 x double> %0, double %1, i32 5
+ ret <8 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_8xdouble_at_5(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <2 x double> %5, double %7, i32 1
+; CHECK-NEXT: store <2 x double> %4, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %6, <2 x double>* %2, align 16
+; CHECK-NEXT: ret <2 x double> %3
+; CHECK-NEXT: }
+
+define <8 x double> @insert_8xdouble_at_6(<8 x double>, double) {
+entry:
+ %2 = insertelement <8 x double> %0, double %1, i32 6
+ ret <8 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_8xdouble_at_6(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <2 x double> %6, double %7, i32 0
+; CHECK-NEXT: store <2 x double> %4, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %5, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %2, align 16
+; CHECK-NEXT: ret <2 x double> %3
+; CHECK-NEXT: }
+
+define <8 x double> @insert_8xdouble_at_7(<8 x double>, double) {
+entry:
+ %2 = insertelement <8 x double> %0, double %1, i32 7
+ ret <8 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_8xdouble_at_7(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <2 x double> %6, double %7, i32 1
+; CHECK-NEXT: store <2 x double> %4, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %5, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %2, align 16
+; CHECK-NEXT: ret <2 x double> %3
+; CHECK-NEXT: }
+
+define <8 x double> @insert_8xdouble_undef_idx(<8 x double>, double) {
+entry:
+ %2 = insertelement <8 x double> %0, double %1, i32 8
+ ret <8 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_8xdouble_undef_idx(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: store <2 x double> %4, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %5, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %6, <2 x double>* %2, align 16
+; CHECK-NEXT: ret <2 x double> %3
+; CHECK-NEXT: }
+
+define <12 x i8> @insert_12xi8_at_0(<12 x i8>, i8) {
+entry:
+ %2 = insertelement <12 x i8> %0, i8 %1, i32 0
+ ret <12 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_12xi8_at_0(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 0
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <12 x i8> @insert_12xi8_at_1(<12 x i8>, i8) {
+entry:
+ %2 = insertelement <12 x i8> %0, i8 %1, i32 1
+ ret <12 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_12xi8_at_1(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 1
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <12 x i8> @insert_12xi8_at_2(<12 x i8>, i8) {
+entry:
+ %2 = insertelement <12 x i8> %0, i8 %1, i32 2
+ ret <12 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_12xi8_at_2(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 2
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <12 x i8> @insert_12xi8_at_3(<12 x i8>, i8) {
+entry:
+ %2 = insertelement <12 x i8> %0, i8 %1, i32 3
+ ret <12 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_12xi8_at_3(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 3
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <12 x i8> @insert_12xi8_at_4(<12 x i8>, i8) {
+entry:
+ %2 = insertelement <12 x i8> %0, i8 %1, i32 4
+ ret <12 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_12xi8_at_4(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 4
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <12 x i8> @insert_12xi8_at_5(<12 x i8>, i8) {
+entry:
+ %2 = insertelement <12 x i8> %0, i8 %1, i32 5
+ ret <12 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_12xi8_at_5(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 5
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <12 x i8> @insert_12xi8_at_6(<12 x i8>, i8) {
+entry:
+ %2 = insertelement <12 x i8> %0, i8 %1, i32 6
+ ret <12 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_12xi8_at_6(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 6
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <12 x i8> @insert_12xi8_at_7(<12 x i8>, i8) {
+entry:
+ %2 = insertelement <12 x i8> %0, i8 %1, i32 7
+ ret <12 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_12xi8_at_7(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 7
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <12 x i8> @insert_12xi8_at_8(<12 x i8>, i8) {
+entry:
+ %2 = insertelement <12 x i8> %0, i8 %1, i32 8
+ ret <12 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_12xi8_at_8(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 8
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <12 x i8> @insert_12xi8_at_9(<12 x i8>, i8) {
+entry:
+ %2 = insertelement <12 x i8> %0, i8 %1, i32 9
+ ret <12 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_12xi8_at_9(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 9
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <12 x i8> @insert_12xi8_at_10(<12 x i8>, i8) {
+entry:
+ %2 = insertelement <12 x i8> %0, i8 %1, i32 10
+ ret <12 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_12xi8_at_10(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 10
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <12 x i8> @insert_12xi8_at_11(<12 x i8>, i8) {
+entry:
+ %2 = insertelement <12 x i8> %0, i8 %1, i32 11
+ ret <12 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_12xi8_at_11(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 11
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <12 x i8> @insert_12xi8_undef_idx(<12 x i8>, i8) {
+entry:
+ %2 = insertelement <12 x i8> %0, i8 %1, i32 12
+ ret <12 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_12xi8_undef_idx(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: ret <16 x i8> %0
+; CHECK-NEXT: }
+
+define <12 x i16> @insert_12xi16_at_0(<12 x i16>, i16) {
+entry:
+ %2 = insertelement <12 x i16> %0, i16 %1, i32 0
+ ret <12 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_12xi16_at_0(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %1, i16 %3, i32 0
+; CHECK-NEXT: store <8 x i16> %2, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %4
+; CHECK-NEXT: }
+
+define <12 x i16> @insert_12xi16_at_1(<12 x i16>, i16) {
+entry:
+ %2 = insertelement <12 x i16> %0, i16 %1, i32 1
+ ret <12 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_12xi16_at_1(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %1, i16 %3, i32 1
+; CHECK-NEXT: store <8 x i16> %2, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %4
+; CHECK-NEXT: }
+
+define <12 x i16> @insert_12xi16_at_2(<12 x i16>, i16) {
+entry:
+ %2 = insertelement <12 x i16> %0, i16 %1, i32 2
+ ret <12 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_12xi16_at_2(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %1, i16 %3, i32 2
+; CHECK-NEXT: store <8 x i16> %2, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %4
+; CHECK-NEXT: }
+
+define <12 x i16> @insert_12xi16_at_3(<12 x i16>, i16) {
+entry:
+ %2 = insertelement <12 x i16> %0, i16 %1, i32 3
+ ret <12 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_12xi16_at_3(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %1, i16 %3, i32 3
+; CHECK-NEXT: store <8 x i16> %2, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %4
+; CHECK-NEXT: }
+
+define <12 x i16> @insert_12xi16_at_4(<12 x i16>, i16) {
+entry:
+ %2 = insertelement <12 x i16> %0, i16 %1, i32 4
+ ret <12 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_12xi16_at_4(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %1, i16 %3, i32 4
+; CHECK-NEXT: store <8 x i16> %2, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %4
+; CHECK-NEXT: }
+
+define <12 x i16> @insert_12xi16_at_5(<12 x i16>, i16) {
+entry:
+ %2 = insertelement <12 x i16> %0, i16 %1, i32 5
+ ret <12 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_12xi16_at_5(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %1, i16 %3, i32 5
+; CHECK-NEXT: store <8 x i16> %2, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %4
+; CHECK-NEXT: }
+
+define <12 x i16> @insert_12xi16_at_6(<12 x i16>, i16) {
+entry:
+ %2 = insertelement <12 x i16> %0, i16 %1, i32 6
+ ret <12 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_12xi16_at_6(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %1, i16 %3, i32 6
+; CHECK-NEXT: store <8 x i16> %2, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %4
+; CHECK-NEXT: }
+
+define <12 x i16> @insert_12xi16_at_7(<12 x i16>, i16) {
+entry:
+ %2 = insertelement <12 x i16> %0, i16 %1, i32 7
+ ret <12 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_12xi16_at_7(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %1, i16 %3, i32 7
+; CHECK-NEXT: store <8 x i16> %2, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %4
+; CHECK-NEXT: }
+
+define <12 x i16> @insert_12xi16_at_8(<12 x i16>, i16) {
+entry:
+ %2 = insertelement <12 x i16> %0, i16 %1, i32 8
+ ret <12 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_12xi16_at_8(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %2, i16 %3, i32 0
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %1
+; CHECK-NEXT: }
+
+define <12 x i16> @insert_12xi16_at_9(<12 x i16>, i16) {
+entry:
+ %2 = insertelement <12 x i16> %0, i16 %1, i32 9
+ ret <12 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_12xi16_at_9(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %2, i16 %3, i32 1
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %1
+; CHECK-NEXT: }
+
+define <12 x i16> @insert_12xi16_at_10(<12 x i16>, i16) {
+entry:
+ %2 = insertelement <12 x i16> %0, i16 %1, i32 10
+ ret <12 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_12xi16_at_10(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %2, i16 %3, i32 2
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %1
+; CHECK-NEXT: }
+
+define <12 x i16> @insert_12xi16_at_11(<12 x i16>, i16) {
+entry:
+ %2 = insertelement <12 x i16> %0, i16 %1, i32 11
+ ret <12 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_12xi16_at_11(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %2, i16 %3, i32 3
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %1
+; CHECK-NEXT: }
+
+define <12 x i16> @insert_12xi16_undef_idx(<12 x i16>, i16) {
+entry:
+ %2 = insertelement <12 x i16> %0, i16 %1, i32 12
+ ret <12 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_12xi16_undef_idx(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: store <8 x i16> %2, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %1
+; CHECK-NEXT: }
+
+define <12 x i32> @insert_12xi32_at_0(<12 x i32>, i32) {
+entry:
+ %2 = insertelement <12 x i32> %0, i32 %1, i32 0
+ ret <12 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_12xi32_at_0(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x i32> %2, i32 %5, i32 0
+; CHECK-NEXT: store <4 x i32> %3, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %1, align 16
+; CHECK-NEXT: ret <4 x i32> %6
+; CHECK-NEXT: }
+
+define <12 x i32> @insert_12xi32_at_1(<12 x i32>, i32) {
+entry:
+ %2 = insertelement <12 x i32> %0, i32 %1, i32 1
+ ret <12 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_12xi32_at_1(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x i32> %2, i32 %5, i32 1
+; CHECK-NEXT: store <4 x i32> %3, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %1, align 16
+; CHECK-NEXT: ret <4 x i32> %6
+; CHECK-NEXT: }
+
+define <12 x i32> @insert_12xi32_at_2(<12 x i32>, i32) {
+entry:
+ %2 = insertelement <12 x i32> %0, i32 %1, i32 2
+ ret <12 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_12xi32_at_2(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x i32> %2, i32 %5, i32 2
+; CHECK-NEXT: store <4 x i32> %3, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %1, align 16
+; CHECK-NEXT: ret <4 x i32> %6
+; CHECK-NEXT: }
+
+define <12 x i32> @insert_12xi32_at_3(<12 x i32>, i32) {
+entry:
+ %2 = insertelement <12 x i32> %0, i32 %1, i32 3
+ ret <12 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_12xi32_at_3(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x i32> %2, i32 %5, i32 3
+; CHECK-NEXT: store <4 x i32> %3, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %1, align 16
+; CHECK-NEXT: ret <4 x i32> %6
+; CHECK-NEXT: }
+
+define <12 x i32> @insert_12xi32_at_4(<12 x i32>, i32) {
+entry:
+ %2 = insertelement <12 x i32> %0, i32 %1, i32 4
+ ret <12 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_12xi32_at_4(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x i32> %3, i32 %5, i32 0
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %1, align 16
+; CHECK-NEXT: ret <4 x i32> %2
+; CHECK-NEXT: }
+
+define <12 x i32> @insert_12xi32_at_5(<12 x i32>, i32) {
+entry:
+ %2 = insertelement <12 x i32> %0, i32 %1, i32 5
+ ret <12 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_12xi32_at_5(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x i32> %3, i32 %5, i32 1
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %1, align 16
+; CHECK-NEXT: ret <4 x i32> %2
+; CHECK-NEXT: }
+
+define <12 x i32> @insert_12xi32_at_6(<12 x i32>, i32) {
+entry:
+ %2 = insertelement <12 x i32> %0, i32 %1, i32 6
+ ret <12 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_12xi32_at_6(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x i32> %3, i32 %5, i32 2
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %1, align 16
+; CHECK-NEXT: ret <4 x i32> %2
+; CHECK-NEXT: }
+
+define <12 x i32> @insert_12xi32_at_7(<12 x i32>, i32) {
+entry:
+ %2 = insertelement <12 x i32> %0, i32 %1, i32 7
+ ret <12 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_12xi32_at_7(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x i32> %3, i32 %5, i32 3
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %1, align 16
+; CHECK-NEXT: ret <4 x i32> %2
+; CHECK-NEXT: }
+
+define <12 x i32> @insert_12xi32_at_8(<12 x i32>, i32) {
+entry:
+ %2 = insertelement <12 x i32> %0, i32 %1, i32 8
+ ret <12 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_12xi32_at_8(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x i32> %4, i32 %5, i32 0
+; CHECK-NEXT: store <4 x i32> %3, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %1, align 16
+; CHECK-NEXT: ret <4 x i32> %2
+; CHECK-NEXT: }
+
+define <12 x i32> @insert_12xi32_at_9(<12 x i32>, i32) {
+entry:
+ %2 = insertelement <12 x i32> %0, i32 %1, i32 9
+ ret <12 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_12xi32_at_9(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x i32> %4, i32 %5, i32 1
+; CHECK-NEXT: store <4 x i32> %3, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %1, align 16
+; CHECK-NEXT: ret <4 x i32> %2
+; CHECK-NEXT: }
+
+define <12 x i32> @insert_12xi32_at_10(<12 x i32>, i32) {
+entry:
+ %2 = insertelement <12 x i32> %0, i32 %1, i32 10
+ ret <12 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_12xi32_at_10(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x i32> %4, i32 %5, i32 2
+; CHECK-NEXT: store <4 x i32> %3, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %1, align 16
+; CHECK-NEXT: ret <4 x i32> %2
+; CHECK-NEXT: }
+
+define <12 x i32> @insert_12xi32_at_11(<12 x i32>, i32) {
+entry:
+ %2 = insertelement <12 x i32> %0, i32 %1, i32 11
+ ret <12 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_12xi32_at_11(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x i32> %4, i32 %5, i32 3
+; CHECK-NEXT: store <4 x i32> %3, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %1, align 16
+; CHECK-NEXT: ret <4 x i32> %2
+; CHECK-NEXT: }
+
+define <12 x i32> @insert_12xi32_undef_idx(<12 x i32>, i32) {
+entry:
+ %2 = insertelement <12 x i32> %0, i32 %1, i32 12
+ ret <12 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_12xi32_undef_idx(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: store <4 x i32> %3, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %1, align 16
+; CHECK-NEXT: ret <4 x i32> %2
+; CHECK-NEXT: }
+
+define <12 x i64> @insert_12xi64_at_0(<12 x i64>, i64) {
+entry:
+ %2 = insertelement <12 x i64> %0, i64 %1, i32 0
+ ret <12 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_12xi64_at_0(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %12 = insertelement <2 x i64> %5, i64 %11, i32 0
+; CHECK-NEXT: store <2 x i64> %6, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %7, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %4, align 16
+; CHECK-NEXT: ret <2 x i64> %12
+; CHECK-NEXT: }
+
+define <12 x i64> @insert_12xi64_at_1(<12 x i64>, i64) {
+entry:
+ %2 = insertelement <12 x i64> %0, i64 %1, i32 1
+ ret <12 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_12xi64_at_1(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %12 = insertelement <2 x i64> %5, i64 %11, i32 1
+; CHECK-NEXT: store <2 x i64> %6, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %7, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %4, align 16
+; CHECK-NEXT: ret <2 x i64> %12
+; CHECK-NEXT: }
+
+define <12 x i64> @insert_12xi64_at_2(<12 x i64>, i64) {
+entry:
+ %2 = insertelement <12 x i64> %0, i64 %1, i32 2
+ ret <12 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_12xi64_at_2(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %12 = insertelement <2 x i64> %6, i64 %11, i32 0
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %7, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %4, align 16
+; CHECK-NEXT: ret <2 x i64> %5
+; CHECK-NEXT: }
+
+define <12 x i64> @insert_12xi64_at_3(<12 x i64>, i64) {
+entry:
+ %2 = insertelement <12 x i64> %0, i64 %1, i32 3
+ ret <12 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_12xi64_at_3(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %12 = insertelement <2 x i64> %6, i64 %11, i32 1
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %7, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %4, align 16
+; CHECK-NEXT: ret <2 x i64> %5
+; CHECK-NEXT: }
+
+define <12 x i64> @insert_12xi64_at_4(<12 x i64>, i64) {
+entry:
+ %2 = insertelement <12 x i64> %0, i64 %1, i32 4
+ ret <12 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_12xi64_at_4(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %12 = insertelement <2 x i64> %7, i64 %11, i32 0
+; CHECK-NEXT: store <2 x i64> %6, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %4, align 16
+; CHECK-NEXT: ret <2 x i64> %5
+; CHECK-NEXT: }
+
+define <12 x i64> @insert_12xi64_at_5(<12 x i64>, i64) {
+entry:
+ %2 = insertelement <12 x i64> %0, i64 %1, i32 5
+ ret <12 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_12xi64_at_5(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %12 = insertelement <2 x i64> %7, i64 %11, i32 1
+; CHECK-NEXT: store <2 x i64> %6, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %4, align 16
+; CHECK-NEXT: ret <2 x i64> %5
+; CHECK-NEXT: }
+
+define <12 x i64> @insert_12xi64_at_6(<12 x i64>, i64) {
+entry:
+ %2 = insertelement <12 x i64> %0, i64 %1, i32 6
+ ret <12 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_12xi64_at_6(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %12 = insertelement <2 x i64> %8, i64 %11, i32 0
+; CHECK-NEXT: store <2 x i64> %6, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %7, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %4, align 16
+; CHECK-NEXT: ret <2 x i64> %5
+; CHECK-NEXT: }
+
+define <12 x i64> @insert_12xi64_at_7(<12 x i64>, i64) {
+entry:
+ %2 = insertelement <12 x i64> %0, i64 %1, i32 7
+ ret <12 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_12xi64_at_7(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %12 = insertelement <2 x i64> %8, i64 %11, i32 1
+; CHECK-NEXT: store <2 x i64> %6, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %7, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %4, align 16
+; CHECK-NEXT: ret <2 x i64> %5
+; CHECK-NEXT: }
+
+define <12 x i64> @insert_12xi64_at_8(<12 x i64>, i64) {
+entry:
+ %2 = insertelement <12 x i64> %0, i64 %1, i32 8
+ ret <12 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_12xi64_at_8(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %12 = insertelement <2 x i64> %9, i64 %11, i32 0
+; CHECK-NEXT: store <2 x i64> %6, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %7, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %4, align 16
+; CHECK-NEXT: ret <2 x i64> %5
+; CHECK-NEXT: }
+
+define <12 x i64> @insert_12xi64_at_9(<12 x i64>, i64) {
+entry:
+ %2 = insertelement <12 x i64> %0, i64 %1, i32 9
+ ret <12 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_12xi64_at_9(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %12 = insertelement <2 x i64> %9, i64 %11, i32 1
+; CHECK-NEXT: store <2 x i64> %6, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %7, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %4, align 16
+; CHECK-NEXT: ret <2 x i64> %5
+; CHECK-NEXT: }
+
+define <12 x i64> @insert_12xi64_at_10(<12 x i64>, i64) {
+entry:
+ %2 = insertelement <12 x i64> %0, i64 %1, i32 10
+ ret <12 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_12xi64_at_10(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %12 = insertelement <2 x i64> %10, i64 %11, i32 0
+; CHECK-NEXT: store <2 x i64> %6, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %7, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %4, align 16
+; CHECK-NEXT: ret <2 x i64> %5
+; CHECK-NEXT: }
+
+define <12 x i64> @insert_12xi64_at_11(<12 x i64>, i64) {
+entry:
+ %2 = insertelement <12 x i64> %0, i64 %1, i32 11
+ ret <12 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_12xi64_at_11(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %12 = insertelement <2 x i64> %10, i64 %11, i32 1
+; CHECK-NEXT: store <2 x i64> %6, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %7, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %4, align 16
+; CHECK-NEXT: ret <2 x i64> %5
+; CHECK-NEXT: }
+
+define <12 x i64> @insert_12xi64_undef_idx(<12 x i64>, i64) {
+entry:
+ %2 = insertelement <12 x i64> %0, i64 %1, i32 12
+ ret <12 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_12xi64_undef_idx(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: store <2 x i64> %6, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %7, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %4, align 16
+; CHECK-NEXT: ret <2 x i64> %5
+; CHECK-NEXT: }
+
+define <12 x i8*> @insert_12xi8ptr_at_0(<12 x i8*>, i8*) {
+entry:
+ %2 = insertelement <12 x i8*> %0, i8* %1, i32 0
+ ret <12 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_12xi8ptr_at_0(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x i8*> %2, i8* %5, i32 0
+; CHECK-NEXT: store <4 x i8*> %3, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %1, align 16
+; CHECK-NEXT: ret <4 x i8*> %6
+; CHECK-NEXT: }
+
+define <12 x i8*> @insert_12xi8ptr_at_1(<12 x i8*>, i8*) {
+entry:
+ %2 = insertelement <12 x i8*> %0, i8* %1, i32 1
+ ret <12 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_12xi8ptr_at_1(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x i8*> %2, i8* %5, i32 1
+; CHECK-NEXT: store <4 x i8*> %3, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %1, align 16
+; CHECK-NEXT: ret <4 x i8*> %6
+; CHECK-NEXT: }
+
+define <12 x i8*> @insert_12xi8ptr_at_2(<12 x i8*>, i8*) {
+entry:
+ %2 = insertelement <12 x i8*> %0, i8* %1, i32 2
+ ret <12 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_12xi8ptr_at_2(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x i8*> %2, i8* %5, i32 2
+; CHECK-NEXT: store <4 x i8*> %3, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %1, align 16
+; CHECK-NEXT: ret <4 x i8*> %6
+; CHECK-NEXT: }
+
+define <12 x i8*> @insert_12xi8ptr_at_3(<12 x i8*>, i8*) {
+entry:
+ %2 = insertelement <12 x i8*> %0, i8* %1, i32 3
+ ret <12 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_12xi8ptr_at_3(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x i8*> %2, i8* %5, i32 3
+; CHECK-NEXT: store <4 x i8*> %3, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %1, align 16
+; CHECK-NEXT: ret <4 x i8*> %6
+; CHECK-NEXT: }
+
+define <12 x i8*> @insert_12xi8ptr_at_4(<12 x i8*>, i8*) {
+entry:
+ %2 = insertelement <12 x i8*> %0, i8* %1, i32 4
+ ret <12 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_12xi8ptr_at_4(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x i8*> %3, i8* %5, i32 0
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %1, align 16
+; CHECK-NEXT: ret <4 x i8*> %2
+; CHECK-NEXT: }
+
+define <12 x i8*> @insert_12xi8ptr_at_5(<12 x i8*>, i8*) {
+entry:
+ %2 = insertelement <12 x i8*> %0, i8* %1, i32 5
+ ret <12 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_12xi8ptr_at_5(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x i8*> %3, i8* %5, i32 1
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %1, align 16
+; CHECK-NEXT: ret <4 x i8*> %2
+; CHECK-NEXT: }
+
+define <12 x i8*> @insert_12xi8ptr_at_6(<12 x i8*>, i8*) {
+entry:
+ %2 = insertelement <12 x i8*> %0, i8* %1, i32 6
+ ret <12 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_12xi8ptr_at_6(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x i8*> %3, i8* %5, i32 2
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %1, align 16
+; CHECK-NEXT: ret <4 x i8*> %2
+; CHECK-NEXT: }
+
+define <12 x i8*> @insert_12xi8ptr_at_7(<12 x i8*>, i8*) {
+entry:
+ %2 = insertelement <12 x i8*> %0, i8* %1, i32 7
+ ret <12 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_12xi8ptr_at_7(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x i8*> %3, i8* %5, i32 3
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %1, align 16
+; CHECK-NEXT: ret <4 x i8*> %2
+; CHECK-NEXT: }
+
+define <12 x i8*> @insert_12xi8ptr_at_8(<12 x i8*>, i8*) {
+entry:
+ %2 = insertelement <12 x i8*> %0, i8* %1, i32 8
+ ret <12 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_12xi8ptr_at_8(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x i8*> %4, i8* %5, i32 0
+; CHECK-NEXT: store <4 x i8*> %3, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %1, align 16
+; CHECK-NEXT: ret <4 x i8*> %2
+; CHECK-NEXT: }
+
+define <12 x i8*> @insert_12xi8ptr_at_9(<12 x i8*>, i8*) {
+entry:
+ %2 = insertelement <12 x i8*> %0, i8* %1, i32 9
+ ret <12 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_12xi8ptr_at_9(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x i8*> %4, i8* %5, i32 1
+; CHECK-NEXT: store <4 x i8*> %3, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %1, align 16
+; CHECK-NEXT: ret <4 x i8*> %2
+; CHECK-NEXT: }
+
+define <12 x i8*> @insert_12xi8ptr_at_10(<12 x i8*>, i8*) {
+entry:
+ %2 = insertelement <12 x i8*> %0, i8* %1, i32 10
+ ret <12 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_12xi8ptr_at_10(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x i8*> %4, i8* %5, i32 2
+; CHECK-NEXT: store <4 x i8*> %3, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %1, align 16
+; CHECK-NEXT: ret <4 x i8*> %2
+; CHECK-NEXT: }
+
+define <12 x i8*> @insert_12xi8ptr_at_11(<12 x i8*>, i8*) {
+entry:
+ %2 = insertelement <12 x i8*> %0, i8* %1, i32 11
+ ret <12 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_12xi8ptr_at_11(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x i8*> %4, i8* %5, i32 3
+; CHECK-NEXT: store <4 x i8*> %3, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %1, align 16
+; CHECK-NEXT: ret <4 x i8*> %2
+; CHECK-NEXT: }
+
+define <12 x i8*> @insert_12xi8ptr_undef_idx(<12 x i8*>, i8*) {
+entry:
+ %2 = insertelement <12 x i8*> %0, i8* %1, i32 12
+ ret <12 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_12xi8ptr_undef_idx(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: store <4 x i8*> %3, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %1, align 16
+; CHECK-NEXT: ret <4 x i8*> %2
+; CHECK-NEXT: }
+
+define <12 x float> @insert_12xfloat_at_0(<12 x float>, float) {
+entry:
+ %2 = insertelement <12 x float> %0, float %1, i32 0
+ ret <12 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_12xfloat_at_0(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x float> %2, float %5, i32 0
+; CHECK-NEXT: store <4 x float> %3, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %1, align 16
+; CHECK-NEXT: ret <4 x float> %6
+; CHECK-NEXT: }
+
+define <12 x float> @insert_12xfloat_at_1(<12 x float>, float) {
+entry:
+ %2 = insertelement <12 x float> %0, float %1, i32 1
+ ret <12 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_12xfloat_at_1(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x float> %2, float %5, i32 1
+; CHECK-NEXT: store <4 x float> %3, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %1, align 16
+; CHECK-NEXT: ret <4 x float> %6
+; CHECK-NEXT: }
+
+define <12 x float> @insert_12xfloat_at_2(<12 x float>, float) {
+entry:
+ %2 = insertelement <12 x float> %0, float %1, i32 2
+ ret <12 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_12xfloat_at_2(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x float> %2, float %5, i32 2
+; CHECK-NEXT: store <4 x float> %3, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %1, align 16
+; CHECK-NEXT: ret <4 x float> %6
+; CHECK-NEXT: }
+
+define <12 x float> @insert_12xfloat_at_3(<12 x float>, float) {
+entry:
+ %2 = insertelement <12 x float> %0, float %1, i32 3
+ ret <12 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_12xfloat_at_3(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x float> %2, float %5, i32 3
+; CHECK-NEXT: store <4 x float> %3, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %1, align 16
+; CHECK-NEXT: ret <4 x float> %6
+; CHECK-NEXT: }
+
+define <12 x float> @insert_12xfloat_at_4(<12 x float>, float) {
+entry:
+ %2 = insertelement <12 x float> %0, float %1, i32 4
+ ret <12 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_12xfloat_at_4(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x float> %3, float %5, i32 0
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %1, align 16
+; CHECK-NEXT: ret <4 x float> %2
+; CHECK-NEXT: }
+
+define <12 x float> @insert_12xfloat_at_5(<12 x float>, float) {
+entry:
+ %2 = insertelement <12 x float> %0, float %1, i32 5
+ ret <12 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_12xfloat_at_5(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x float> %3, float %5, i32 1
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %1, align 16
+; CHECK-NEXT: ret <4 x float> %2
+; CHECK-NEXT: }
+
+define <12 x float> @insert_12xfloat_at_6(<12 x float>, float) {
+entry:
+ %2 = insertelement <12 x float> %0, float %1, i32 6
+ ret <12 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_12xfloat_at_6(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x float> %3, float %5, i32 2
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %1, align 16
+; CHECK-NEXT: ret <4 x float> %2
+; CHECK-NEXT: }
+
+define <12 x float> @insert_12xfloat_at_7(<12 x float>, float) {
+entry:
+ %2 = insertelement <12 x float> %0, float %1, i32 7
+ ret <12 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_12xfloat_at_7(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x float> %3, float %5, i32 3
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %1, align 16
+; CHECK-NEXT: ret <4 x float> %2
+; CHECK-NEXT: }
+
+define <12 x float> @insert_12xfloat_at_8(<12 x float>, float) {
+entry:
+ %2 = insertelement <12 x float> %0, float %1, i32 8
+ ret <12 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_12xfloat_at_8(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x float> %4, float %5, i32 0
+; CHECK-NEXT: store <4 x float> %3, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %1, align 16
+; CHECK-NEXT: ret <4 x float> %2
+; CHECK-NEXT: }
+
+define <12 x float> @insert_12xfloat_at_9(<12 x float>, float) {
+entry:
+ %2 = insertelement <12 x float> %0, float %1, i32 9
+ ret <12 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_12xfloat_at_9(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x float> %4, float %5, i32 1
+; CHECK-NEXT: store <4 x float> %3, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %1, align 16
+; CHECK-NEXT: ret <4 x float> %2
+; CHECK-NEXT: }
+
+define <12 x float> @insert_12xfloat_at_10(<12 x float>, float) {
+entry:
+ %2 = insertelement <12 x float> %0, float %1, i32 10
+ ret <12 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_12xfloat_at_10(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x float> %4, float %5, i32 2
+; CHECK-NEXT: store <4 x float> %3, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %1, align 16
+; CHECK-NEXT: ret <4 x float> %2
+; CHECK-NEXT: }
+
+define <12 x float> @insert_12xfloat_at_11(<12 x float>, float) {
+entry:
+ %2 = insertelement <12 x float> %0, float %1, i32 11
+ ret <12 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_12xfloat_at_11(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <4 x float> %4, float %5, i32 3
+; CHECK-NEXT: store <4 x float> %3, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %1, align 16
+; CHECK-NEXT: ret <4 x float> %2
+; CHECK-NEXT: }
+
+define <12 x float> @insert_12xfloat_undef_idx(<12 x float>, float) {
+entry:
+ %2 = insertelement <12 x float> %0, float %1, i32 12
+ ret <12 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_12xfloat_undef_idx(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: store <4 x float> %3, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %1, align 16
+; CHECK-NEXT: ret <4 x float> %2
+; CHECK-NEXT: }
+
+define <12 x double> @insert_12xdouble_at_0(<12 x double>, double) {
+entry:
+ %2 = insertelement <12 x double> %0, double %1, i32 0
+ ret <12 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_12xdouble_at_0(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %12 = insertelement <2 x double> %5, double %11, i32 0
+; CHECK-NEXT: store <2 x double> %6, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %7, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %4, align 16
+; CHECK-NEXT: ret <2 x double> %12
+; CHECK-NEXT: }
+
+define <12 x double> @insert_12xdouble_at_1(<12 x double>, double) {
+entry:
+ %2 = insertelement <12 x double> %0, double %1, i32 1
+ ret <12 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_12xdouble_at_1(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %12 = insertelement <2 x double> %5, double %11, i32 1
+; CHECK-NEXT: store <2 x double> %6, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %7, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %4, align 16
+; CHECK-NEXT: ret <2 x double> %12
+; CHECK-NEXT: }
+
+define <12 x double> @insert_12xdouble_at_2(<12 x double>, double) {
+entry:
+ %2 = insertelement <12 x double> %0, double %1, i32 2
+ ret <12 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_12xdouble_at_2(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %12 = insertelement <2 x double> %6, double %11, i32 0
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %7, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %4, align 16
+; CHECK-NEXT: ret <2 x double> %5
+; CHECK-NEXT: }
+
+define <12 x double> @insert_12xdouble_at_3(<12 x double>, double) {
+entry:
+ %2 = insertelement <12 x double> %0, double %1, i32 3
+ ret <12 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_12xdouble_at_3(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %12 = insertelement <2 x double> %6, double %11, i32 1
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %7, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %4, align 16
+; CHECK-NEXT: ret <2 x double> %5
+; CHECK-NEXT: }
+
+define <12 x double> @insert_12xdouble_at_4(<12 x double>, double) {
+entry:
+ %2 = insertelement <12 x double> %0, double %1, i32 4
+ ret <12 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_12xdouble_at_4(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %12 = insertelement <2 x double> %7, double %11, i32 0
+; CHECK-NEXT: store <2 x double> %6, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %4, align 16
+; CHECK-NEXT: ret <2 x double> %5
+; CHECK-NEXT: }
+
+define <12 x double> @insert_12xdouble_at_5(<12 x double>, double) {
+entry:
+ %2 = insertelement <12 x double> %0, double %1, i32 5
+ ret <12 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_12xdouble_at_5(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %12 = insertelement <2 x double> %7, double %11, i32 1
+; CHECK-NEXT: store <2 x double> %6, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %4, align 16
+; CHECK-NEXT: ret <2 x double> %5
+; CHECK-NEXT: }
+
+define <12 x double> @insert_12xdouble_at_6(<12 x double>, double) {
+entry:
+ %2 = insertelement <12 x double> %0, double %1, i32 6
+ ret <12 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_12xdouble_at_6(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %12 = insertelement <2 x double> %8, double %11, i32 0
+; CHECK-NEXT: store <2 x double> %6, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %7, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %4, align 16
+; CHECK-NEXT: ret <2 x double> %5
+; CHECK-NEXT: }
+
+define <12 x double> @insert_12xdouble_at_7(<12 x double>, double) {
+entry:
+ %2 = insertelement <12 x double> %0, double %1, i32 7
+ ret <12 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_12xdouble_at_7(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %12 = insertelement <2 x double> %8, double %11, i32 1
+; CHECK-NEXT: store <2 x double> %6, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %7, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %4, align 16
+; CHECK-NEXT: ret <2 x double> %5
+; CHECK-NEXT: }
+
+define <12 x double> @insert_12xdouble_at_8(<12 x double>, double) {
+entry:
+ %2 = insertelement <12 x double> %0, double %1, i32 8
+ ret <12 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_12xdouble_at_8(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %12 = insertelement <2 x double> %9, double %11, i32 0
+; CHECK-NEXT: store <2 x double> %6, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %7, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %4, align 16
+; CHECK-NEXT: ret <2 x double> %5
+; CHECK-NEXT: }
+
+define <12 x double> @insert_12xdouble_at_9(<12 x double>, double) {
+entry:
+ %2 = insertelement <12 x double> %0, double %1, i32 9
+ ret <12 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_12xdouble_at_9(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %12 = insertelement <2 x double> %9, double %11, i32 1
+; CHECK-NEXT: store <2 x double> %6, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %7, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %4, align 16
+; CHECK-NEXT: ret <2 x double> %5
+; CHECK-NEXT: }
+
+define <12 x double> @insert_12xdouble_at_10(<12 x double>, double) {
+entry:
+ %2 = insertelement <12 x double> %0, double %1, i32 10
+ ret <12 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_12xdouble_at_10(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %12 = insertelement <2 x double> %10, double %11, i32 0
+; CHECK-NEXT: store <2 x double> %6, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %7, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %4, align 16
+; CHECK-NEXT: ret <2 x double> %5
+; CHECK-NEXT: }
+
+define <12 x double> @insert_12xdouble_at_11(<12 x double>, double) {
+entry:
+ %2 = insertelement <12 x double> %0, double %1, i32 11
+ ret <12 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_12xdouble_at_11(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %12 = insertelement <2 x double> %10, double %11, i32 1
+; CHECK-NEXT: store <2 x double> %6, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %7, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %4, align 16
+; CHECK-NEXT: ret <2 x double> %5
+; CHECK-NEXT: }
+
+define <12 x double> @insert_12xdouble_undef_idx(<12 x double>, double) {
+entry:
+ %2 = insertelement <12 x double> %0, double %1, i32 12
+ ret <12 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_12xdouble_undef_idx(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: store <2 x double> %6, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %7, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %4, align 16
+; CHECK-NEXT: ret <2 x double> %5
+; CHECK-NEXT: }
+
+define <16 x i8> @insert_16xi8_at_0(<16 x i8>, i8) {
+entry:
+ %2 = insertelement <16 x i8> %0, i8 %1, i32 0
+ ret <16 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_16xi8_at_0(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 0
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <16 x i8> @insert_16xi8_at_1(<16 x i8>, i8) {
+entry:
+ %2 = insertelement <16 x i8> %0, i8 %1, i32 1
+ ret <16 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_16xi8_at_1(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 1
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <16 x i8> @insert_16xi8_at_2(<16 x i8>, i8) {
+entry:
+ %2 = insertelement <16 x i8> %0, i8 %1, i32 2
+ ret <16 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_16xi8_at_2(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 2
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <16 x i8> @insert_16xi8_at_3(<16 x i8>, i8) {
+entry:
+ %2 = insertelement <16 x i8> %0, i8 %1, i32 3
+ ret <16 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_16xi8_at_3(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 3
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <16 x i8> @insert_16xi8_at_4(<16 x i8>, i8) {
+entry:
+ %2 = insertelement <16 x i8> %0, i8 %1, i32 4
+ ret <16 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_16xi8_at_4(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 4
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <16 x i8> @insert_16xi8_at_5(<16 x i8>, i8) {
+entry:
+ %2 = insertelement <16 x i8> %0, i8 %1, i32 5
+ ret <16 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_16xi8_at_5(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 5
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <16 x i8> @insert_16xi8_at_6(<16 x i8>, i8) {
+entry:
+ %2 = insertelement <16 x i8> %0, i8 %1, i32 6
+ ret <16 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_16xi8_at_6(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 6
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <16 x i8> @insert_16xi8_at_7(<16 x i8>, i8) {
+entry:
+ %2 = insertelement <16 x i8> %0, i8 %1, i32 7
+ ret <16 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_16xi8_at_7(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 7
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <16 x i8> @insert_16xi8_at_8(<16 x i8>, i8) {
+entry:
+ %2 = insertelement <16 x i8> %0, i8 %1, i32 8
+ ret <16 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_16xi8_at_8(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 8
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <16 x i8> @insert_16xi8_at_9(<16 x i8>, i8) {
+entry:
+ %2 = insertelement <16 x i8> %0, i8 %1, i32 9
+ ret <16 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_16xi8_at_9(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 9
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <16 x i8> @insert_16xi8_at_10(<16 x i8>, i8) {
+entry:
+ %2 = insertelement <16 x i8> %0, i8 %1, i32 10
+ ret <16 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_16xi8_at_10(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 10
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <16 x i8> @insert_16xi8_at_11(<16 x i8>, i8) {
+entry:
+ %2 = insertelement <16 x i8> %0, i8 %1, i32 11
+ ret <16 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_16xi8_at_11(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 11
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <16 x i8> @insert_16xi8_at_12(<16 x i8>, i8) {
+entry:
+ %2 = insertelement <16 x i8> %0, i8 %1, i32 12
+ ret <16 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_16xi8_at_12(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 12
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <16 x i8> @insert_16xi8_at_13(<16 x i8>, i8) {
+entry:
+ %2 = insertelement <16 x i8> %0, i8 %1, i32 13
+ ret <16 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_16xi8_at_13(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 13
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <16 x i8> @insert_16xi8_at_14(<16 x i8>, i8) {
+entry:
+ %2 = insertelement <16 x i8> %0, i8 %1, i32 14
+ ret <16 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_16xi8_at_14(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 14
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <16 x i8> @insert_16xi8_at_15(<16 x i8>, i8) {
+entry:
+ %2 = insertelement <16 x i8> %0, i8 %1, i32 15
+ ret <16 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_16xi8_at_15(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 15
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <16 x i8> @insert_16xi8_undef_idx(<16 x i8>, i8) {
+entry:
+ %2 = insertelement <16 x i8> %0, i8 %1, i32 16
+ ret <16 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_16xi8_undef_idx(<16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %2 = insertelement <16 x i8> %0, i8 %1, i32 16
+; CHECK-NEXT: ret <16 x i8> %2
+; CHECK-NEXT: }
+
+define <16 x i16> @insert_16xi16_at_0(<16 x i16>, i16) {
+entry:
+ %2 = insertelement <16 x i16> %0, i16 %1, i32 0
+ ret <16 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_16xi16_at_0(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %1, i16 %3, i32 0
+; CHECK-NEXT: store <8 x i16> %2, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %4
+; CHECK-NEXT: }
+
+define <16 x i16> @insert_16xi16_at_1(<16 x i16>, i16) {
+entry:
+ %2 = insertelement <16 x i16> %0, i16 %1, i32 1
+ ret <16 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_16xi16_at_1(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %1, i16 %3, i32 1
+; CHECK-NEXT: store <8 x i16> %2, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %4
+; CHECK-NEXT: }
+
+define <16 x i16> @insert_16xi16_at_2(<16 x i16>, i16) {
+entry:
+ %2 = insertelement <16 x i16> %0, i16 %1, i32 2
+ ret <16 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_16xi16_at_2(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %1, i16 %3, i32 2
+; CHECK-NEXT: store <8 x i16> %2, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %4
+; CHECK-NEXT: }
+
+define <16 x i16> @insert_16xi16_at_3(<16 x i16>, i16) {
+entry:
+ %2 = insertelement <16 x i16> %0, i16 %1, i32 3
+ ret <16 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_16xi16_at_3(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %1, i16 %3, i32 3
+; CHECK-NEXT: store <8 x i16> %2, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %4
+; CHECK-NEXT: }
+
+define <16 x i16> @insert_16xi16_at_4(<16 x i16>, i16) {
+entry:
+ %2 = insertelement <16 x i16> %0, i16 %1, i32 4
+ ret <16 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_16xi16_at_4(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %1, i16 %3, i32 4
+; CHECK-NEXT: store <8 x i16> %2, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %4
+; CHECK-NEXT: }
+
+define <16 x i16> @insert_16xi16_at_5(<16 x i16>, i16) {
+entry:
+ %2 = insertelement <16 x i16> %0, i16 %1, i32 5
+ ret <16 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_16xi16_at_5(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %1, i16 %3, i32 5
+; CHECK-NEXT: store <8 x i16> %2, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %4
+; CHECK-NEXT: }
+
+define <16 x i16> @insert_16xi16_at_6(<16 x i16>, i16) {
+entry:
+ %2 = insertelement <16 x i16> %0, i16 %1, i32 6
+ ret <16 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_16xi16_at_6(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %1, i16 %3, i32 6
+; CHECK-NEXT: store <8 x i16> %2, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %4
+; CHECK-NEXT: }
+
+define <16 x i16> @insert_16xi16_at_7(<16 x i16>, i16) {
+entry:
+ %2 = insertelement <16 x i16> %0, i16 %1, i32 7
+ ret <16 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_16xi16_at_7(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %1, i16 %3, i32 7
+; CHECK-NEXT: store <8 x i16> %2, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %4
+; CHECK-NEXT: }
+
+define <16 x i16> @insert_16xi16_at_8(<16 x i16>, i16) {
+entry:
+ %2 = insertelement <16 x i16> %0, i16 %1, i32 8
+ ret <16 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_16xi16_at_8(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %2, i16 %3, i32 0
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %1
+; CHECK-NEXT: }
+
+define <16 x i16> @insert_16xi16_at_9(<16 x i16>, i16) {
+entry:
+ %2 = insertelement <16 x i16> %0, i16 %1, i32 9
+ ret <16 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_16xi16_at_9(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %2, i16 %3, i32 1
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %1
+; CHECK-NEXT: }
+
+define <16 x i16> @insert_16xi16_at_10(<16 x i16>, i16) {
+entry:
+ %2 = insertelement <16 x i16> %0, i16 %1, i32 10
+ ret <16 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_16xi16_at_10(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %2, i16 %3, i32 2
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %1
+; CHECK-NEXT: }
+
+define <16 x i16> @insert_16xi16_at_11(<16 x i16>, i16) {
+entry:
+ %2 = insertelement <16 x i16> %0, i16 %1, i32 11
+ ret <16 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_16xi16_at_11(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %2, i16 %3, i32 3
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %1
+; CHECK-NEXT: }
+
+define <16 x i16> @insert_16xi16_at_12(<16 x i16>, i16) {
+entry:
+ %2 = insertelement <16 x i16> %0, i16 %1, i32 12
+ ret <16 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_16xi16_at_12(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %2, i16 %3, i32 4
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %1
+; CHECK-NEXT: }
+
+define <16 x i16> @insert_16xi16_at_13(<16 x i16>, i16) {
+entry:
+ %2 = insertelement <16 x i16> %0, i16 %1, i32 13
+ ret <16 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_16xi16_at_13(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %2, i16 %3, i32 5
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %1
+; CHECK-NEXT: }
+
+define <16 x i16> @insert_16xi16_at_14(<16 x i16>, i16) {
+entry:
+ %2 = insertelement <16 x i16> %0, i16 %1, i32 14
+ ret <16 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_16xi16_at_14(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %2, i16 %3, i32 6
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %1
+; CHECK-NEXT: }
+
+define <16 x i16> @insert_16xi16_at_15(<16 x i16>, i16) {
+entry:
+ %2 = insertelement <16 x i16> %0, i16 %1, i32 15
+ ret <16 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_16xi16_at_15(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <8 x i16> %2, i16 %3, i32 7
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %1
+; CHECK-NEXT: }
+
+define <16 x i16> @insert_16xi16_undef_idx(<16 x i16>, i16) {
+entry:
+ %2 = insertelement <16 x i16> %0, i16 %1, i32 16
+ ret <16 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_16xi16_undef_idx(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: store <8 x i16> %2, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %1
+; CHECK-NEXT: }
+
+define <16 x i32> @insert_16xi32_at_0(<16 x i32>, i32) {
+entry:
+ %2 = insertelement <16 x i32> %0, i32 %1, i32 0
+ ret <16 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_16xi32_at_0(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i32> %3, i32 %7, i32 0
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %2, align 16
+; CHECK-NEXT: ret <4 x i32> %8
+; CHECK-NEXT: }
+
+define <16 x i32> @insert_16xi32_at_1(<16 x i32>, i32) {
+entry:
+ %2 = insertelement <16 x i32> %0, i32 %1, i32 1
+ ret <16 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_16xi32_at_1(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i32> %3, i32 %7, i32 1
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %2, align 16
+; CHECK-NEXT: ret <4 x i32> %8
+; CHECK-NEXT: }
+
+define <16 x i32> @insert_16xi32_at_2(<16 x i32>, i32) {
+entry:
+ %2 = insertelement <16 x i32> %0, i32 %1, i32 2
+ ret <16 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_16xi32_at_2(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i32> %3, i32 %7, i32 2
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %2, align 16
+; CHECK-NEXT: ret <4 x i32> %8
+; CHECK-NEXT: }
+
+define <16 x i32> @insert_16xi32_at_3(<16 x i32>, i32) {
+entry:
+ %2 = insertelement <16 x i32> %0, i32 %1, i32 3
+ ret <16 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_16xi32_at_3(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i32> %3, i32 %7, i32 3
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %2, align 16
+; CHECK-NEXT: ret <4 x i32> %8
+; CHECK-NEXT: }
+
+define <16 x i32> @insert_16xi32_at_4(<16 x i32>, i32) {
+entry:
+ %2 = insertelement <16 x i32> %0, i32 %1, i32 4
+ ret <16 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_16xi32_at_4(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i32> %4, i32 %7, i32 0
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %2, align 16
+; CHECK-NEXT: ret <4 x i32> %3
+; CHECK-NEXT: }
+
+define <16 x i32> @insert_16xi32_at_5(<16 x i32>, i32) {
+entry:
+ %2 = insertelement <16 x i32> %0, i32 %1, i32 5
+ ret <16 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_16xi32_at_5(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i32> %4, i32 %7, i32 1
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %2, align 16
+; CHECK-NEXT: ret <4 x i32> %3
+; CHECK-NEXT: }
+
+define <16 x i32> @insert_16xi32_at_6(<16 x i32>, i32) {
+entry:
+ %2 = insertelement <16 x i32> %0, i32 %1, i32 6
+ ret <16 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_16xi32_at_6(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i32> %4, i32 %7, i32 2
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %2, align 16
+; CHECK-NEXT: ret <4 x i32> %3
+; CHECK-NEXT: }
+
+define <16 x i32> @insert_16xi32_at_7(<16 x i32>, i32) {
+entry:
+ %2 = insertelement <16 x i32> %0, i32 %1, i32 7
+ ret <16 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_16xi32_at_7(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i32> %4, i32 %7, i32 3
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %2, align 16
+; CHECK-NEXT: ret <4 x i32> %3
+; CHECK-NEXT: }
+
+define <16 x i32> @insert_16xi32_at_8(<16 x i32>, i32) {
+entry:
+ %2 = insertelement <16 x i32> %0, i32 %1, i32 8
+ ret <16 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_16xi32_at_8(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i32> %5, i32 %7, i32 0
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %2, align 16
+; CHECK-NEXT: ret <4 x i32> %3
+; CHECK-NEXT: }
+
+define <16 x i32> @insert_16xi32_at_9(<16 x i32>, i32) {
+entry:
+ %2 = insertelement <16 x i32> %0, i32 %1, i32 9
+ ret <16 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_16xi32_at_9(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i32> %5, i32 %7, i32 1
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %2, align 16
+; CHECK-NEXT: ret <4 x i32> %3
+; CHECK-NEXT: }
+
+define <16 x i32> @insert_16xi32_at_10(<16 x i32>, i32) {
+entry:
+ %2 = insertelement <16 x i32> %0, i32 %1, i32 10
+ ret <16 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_16xi32_at_10(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i32> %5, i32 %7, i32 2
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %2, align 16
+; CHECK-NEXT: ret <4 x i32> %3
+; CHECK-NEXT: }
+
+define <16 x i32> @insert_16xi32_at_11(<16 x i32>, i32) {
+entry:
+ %2 = insertelement <16 x i32> %0, i32 %1, i32 11
+ ret <16 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_16xi32_at_11(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i32> %5, i32 %7, i32 3
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %2, align 16
+; CHECK-NEXT: ret <4 x i32> %3
+; CHECK-NEXT: }
+
+define <16 x i32> @insert_16xi32_at_12(<16 x i32>, i32) {
+entry:
+ %2 = insertelement <16 x i32> %0, i32 %1, i32 12
+ ret <16 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_16xi32_at_12(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i32> %6, i32 %7, i32 0
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %2, align 16
+; CHECK-NEXT: ret <4 x i32> %3
+; CHECK-NEXT: }
+
+define <16 x i32> @insert_16xi32_at_13(<16 x i32>, i32) {
+entry:
+ %2 = insertelement <16 x i32> %0, i32 %1, i32 13
+ ret <16 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_16xi32_at_13(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i32> %6, i32 %7, i32 1
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %2, align 16
+; CHECK-NEXT: ret <4 x i32> %3
+; CHECK-NEXT: }
+
+define <16 x i32> @insert_16xi32_at_14(<16 x i32>, i32) {
+entry:
+ %2 = insertelement <16 x i32> %0, i32 %1, i32 14
+ ret <16 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_16xi32_at_14(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i32> %6, i32 %7, i32 2
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %2, align 16
+; CHECK-NEXT: ret <4 x i32> %3
+; CHECK-NEXT: }
+
+define <16 x i32> @insert_16xi32_at_15(<16 x i32>, i32) {
+entry:
+ %2 = insertelement <16 x i32> %0, i32 %1, i32 15
+ ret <16 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_16xi32_at_15(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i32> %6, i32 %7, i32 3
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %2, align 16
+; CHECK-NEXT: ret <4 x i32> %3
+; CHECK-NEXT: }
+
+define <16 x i32> @insert_16xi32_undef_idx(<16 x i32>, i32) {
+entry:
+ %2 = insertelement <16 x i32> %0, i32 %1, i32 16
+ ret <16 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_16xi32_undef_idx(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: store <4 x i32> %4, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %2, align 16
+; CHECK-NEXT: ret <4 x i32> %3
+; CHECK-NEXT: }
+
+define <16 x i64> @insert_16xi64_at_0(<16 x i64>, i64) {
+entry:
+ %2 = insertelement <16 x i64> %0, i64 %1, i32 0
+ ret <16 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_16xi64_at_0(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x i64> %7, i64 %15, i32 0
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %6, align 16
+; CHECK-NEXT: ret <2 x i64> %16
+; CHECK-NEXT: }
+
+define <16 x i64> @insert_16xi64_at_1(<16 x i64>, i64) {
+entry:
+ %2 = insertelement <16 x i64> %0, i64 %1, i32 1
+ ret <16 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_16xi64_at_1(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x i64> %7, i64 %15, i32 1
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %6, align 16
+; CHECK-NEXT: ret <2 x i64> %16
+; CHECK-NEXT: }
+
+define <16 x i64> @insert_16xi64_at_2(<16 x i64>, i64) {
+entry:
+ %2 = insertelement <16 x i64> %0, i64 %1, i32 2
+ ret <16 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_16xi64_at_2(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x i64> %8, i64 %15, i32 0
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %6, align 16
+; CHECK-NEXT: ret <2 x i64> %7
+; CHECK-NEXT: }
+
+define <16 x i64> @insert_16xi64_at_3(<16 x i64>, i64) {
+entry:
+ %2 = insertelement <16 x i64> %0, i64 %1, i32 3
+ ret <16 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_16xi64_at_3(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x i64> %8, i64 %15, i32 1
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %6, align 16
+; CHECK-NEXT: ret <2 x i64> %7
+; CHECK-NEXT: }
+
+define <16 x i64> @insert_16xi64_at_4(<16 x i64>, i64) {
+entry:
+ %2 = insertelement <16 x i64> %0, i64 %1, i32 4
+ ret <16 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_16xi64_at_4(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x i64> %9, i64 %15, i32 0
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %6, align 16
+; CHECK-NEXT: ret <2 x i64> %7
+; CHECK-NEXT: }
+
+define <16 x i64> @insert_16xi64_at_5(<16 x i64>, i64) {
+entry:
+ %2 = insertelement <16 x i64> %0, i64 %1, i32 5
+ ret <16 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_16xi64_at_5(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x i64> %9, i64 %15, i32 1
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %6, align 16
+; CHECK-NEXT: ret <2 x i64> %7
+; CHECK-NEXT: }
+
+define <16 x i64> @insert_16xi64_at_6(<16 x i64>, i64) {
+entry:
+ %2 = insertelement <16 x i64> %0, i64 %1, i32 6
+ ret <16 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_16xi64_at_6(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x i64> %10, i64 %15, i32 0
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %6, align 16
+; CHECK-NEXT: ret <2 x i64> %7
+; CHECK-NEXT: }
+
+define <16 x i64> @insert_16xi64_at_7(<16 x i64>, i64) {
+entry:
+ %2 = insertelement <16 x i64> %0, i64 %1, i32 7
+ ret <16 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_16xi64_at_7(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x i64> %10, i64 %15, i32 1
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %6, align 16
+; CHECK-NEXT: ret <2 x i64> %7
+; CHECK-NEXT: }
+
+define <16 x i64> @insert_16xi64_at_8(<16 x i64>, i64) {
+entry:
+ %2 = insertelement <16 x i64> %0, i64 %1, i32 8
+ ret <16 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_16xi64_at_8(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x i64> %11, i64 %15, i32 0
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %6, align 16
+; CHECK-NEXT: ret <2 x i64> %7
+; CHECK-NEXT: }
+
+define <16 x i64> @insert_16xi64_at_9(<16 x i64>, i64) {
+entry:
+ %2 = insertelement <16 x i64> %0, i64 %1, i32 9
+ ret <16 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_16xi64_at_9(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x i64> %11, i64 %15, i32 1
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %6, align 16
+; CHECK-NEXT: ret <2 x i64> %7
+; CHECK-NEXT: }
+
+define <16 x i64> @insert_16xi64_at_10(<16 x i64>, i64) {
+entry:
+ %2 = insertelement <16 x i64> %0, i64 %1, i32 10
+ ret <16 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_16xi64_at_10(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x i64> %12, i64 %15, i32 0
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %6, align 16
+; CHECK-NEXT: ret <2 x i64> %7
+; CHECK-NEXT: }
+
+define <16 x i64> @insert_16xi64_at_11(<16 x i64>, i64) {
+entry:
+ %2 = insertelement <16 x i64> %0, i64 %1, i32 11
+ ret <16 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_16xi64_at_11(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x i64> %12, i64 %15, i32 1
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %6, align 16
+; CHECK-NEXT: ret <2 x i64> %7
+; CHECK-NEXT: }
+
+define <16 x i64> @insert_16xi64_at_12(<16 x i64>, i64) {
+entry:
+ %2 = insertelement <16 x i64> %0, i64 %1, i32 12
+ ret <16 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_16xi64_at_12(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x i64> %13, i64 %15, i32 0
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %6, align 16
+; CHECK-NEXT: ret <2 x i64> %7
+; CHECK-NEXT: }
+
+define <16 x i64> @insert_16xi64_at_13(<16 x i64>, i64) {
+entry:
+ %2 = insertelement <16 x i64> %0, i64 %1, i32 13
+ ret <16 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_16xi64_at_13(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x i64> %13, i64 %15, i32 1
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %6, align 16
+; CHECK-NEXT: ret <2 x i64> %7
+; CHECK-NEXT: }
+
+define <16 x i64> @insert_16xi64_at_14(<16 x i64>, i64) {
+entry:
+ %2 = insertelement <16 x i64> %0, i64 %1, i32 14
+ ret <16 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_16xi64_at_14(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x i64> %14, i64 %15, i32 0
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %6, align 16
+; CHECK-NEXT: ret <2 x i64> %7
+; CHECK-NEXT: }
+
+define <16 x i64> @insert_16xi64_at_15(<16 x i64>, i64) {
+entry:
+ %2 = insertelement <16 x i64> %0, i64 %1, i32 15
+ ret <16 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_16xi64_at_15(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x i64> %14, i64 %15, i32 1
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %6, align 16
+; CHECK-NEXT: ret <2 x i64> %7
+; CHECK-NEXT: }
+
+define <16 x i64> @insert_16xi64_undef_idx(<16 x i64>, i64) {
+entry:
+ %2 = insertelement <16 x i64> %0, i64 %1, i32 16
+ ret <16 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_16xi64_undef_idx(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %6, align 16
+; CHECK-NEXT: ret <2 x i64> %7
+; CHECK-NEXT: }
+
+define <16 x i8*> @insert_16xi8ptr_at_0(<16 x i8*>, i8*) {
+entry:
+ %2 = insertelement <16 x i8*> %0, i8* %1, i32 0
+ ret <16 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_16xi8ptr_at_0(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i8*> %3, i8* %7, i32 0
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %2, align 16
+; CHECK-NEXT: ret <4 x i8*> %8
+; CHECK-NEXT: }
+
+define <16 x i8*> @insert_16xi8ptr_at_1(<16 x i8*>, i8*) {
+entry:
+ %2 = insertelement <16 x i8*> %0, i8* %1, i32 1
+ ret <16 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_16xi8ptr_at_1(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i8*> %3, i8* %7, i32 1
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %2, align 16
+; CHECK-NEXT: ret <4 x i8*> %8
+; CHECK-NEXT: }
+
+define <16 x i8*> @insert_16xi8ptr_at_2(<16 x i8*>, i8*) {
+entry:
+ %2 = insertelement <16 x i8*> %0, i8* %1, i32 2
+ ret <16 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_16xi8ptr_at_2(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i8*> %3, i8* %7, i32 2
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %2, align 16
+; CHECK-NEXT: ret <4 x i8*> %8
+; CHECK-NEXT: }
+
+define <16 x i8*> @insert_16xi8ptr_at_3(<16 x i8*>, i8*) {
+entry:
+ %2 = insertelement <16 x i8*> %0, i8* %1, i32 3
+ ret <16 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_16xi8ptr_at_3(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i8*> %3, i8* %7, i32 3
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %2, align 16
+; CHECK-NEXT: ret <4 x i8*> %8
+; CHECK-NEXT: }
+
+define <16 x i8*> @insert_16xi8ptr_at_4(<16 x i8*>, i8*) {
+entry:
+ %2 = insertelement <16 x i8*> %0, i8* %1, i32 4
+ ret <16 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_16xi8ptr_at_4(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i8*> %4, i8* %7, i32 0
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %2, align 16
+; CHECK-NEXT: ret <4 x i8*> %3
+; CHECK-NEXT: }
+
+define <16 x i8*> @insert_16xi8ptr_at_5(<16 x i8*>, i8*) {
+entry:
+ %2 = insertelement <16 x i8*> %0, i8* %1, i32 5
+ ret <16 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_16xi8ptr_at_5(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i8*> %4, i8* %7, i32 1
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %2, align 16
+; CHECK-NEXT: ret <4 x i8*> %3
+; CHECK-NEXT: }
+
+define <16 x i8*> @insert_16xi8ptr_at_6(<16 x i8*>, i8*) {
+entry:
+ %2 = insertelement <16 x i8*> %0, i8* %1, i32 6
+ ret <16 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_16xi8ptr_at_6(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i8*> %4, i8* %7, i32 2
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %2, align 16
+; CHECK-NEXT: ret <4 x i8*> %3
+; CHECK-NEXT: }
+
+define <16 x i8*> @insert_16xi8ptr_at_7(<16 x i8*>, i8*) {
+entry:
+ %2 = insertelement <16 x i8*> %0, i8* %1, i32 7
+ ret <16 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_16xi8ptr_at_7(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i8*> %4, i8* %7, i32 3
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %2, align 16
+; CHECK-NEXT: ret <4 x i8*> %3
+; CHECK-NEXT: }
+
+define <16 x i8*> @insert_16xi8ptr_at_8(<16 x i8*>, i8*) {
+entry:
+ %2 = insertelement <16 x i8*> %0, i8* %1, i32 8
+ ret <16 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_16xi8ptr_at_8(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i8*> %5, i8* %7, i32 0
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %2, align 16
+; CHECK-NEXT: ret <4 x i8*> %3
+; CHECK-NEXT: }
+
+define <16 x i8*> @insert_16xi8ptr_at_9(<16 x i8*>, i8*) {
+entry:
+ %2 = insertelement <16 x i8*> %0, i8* %1, i32 9
+ ret <16 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_16xi8ptr_at_9(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i8*> %5, i8* %7, i32 1
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %2, align 16
+; CHECK-NEXT: ret <4 x i8*> %3
+; CHECK-NEXT: }
+
+define <16 x i8*> @insert_16xi8ptr_at_10(<16 x i8*>, i8*) {
+entry:
+ %2 = insertelement <16 x i8*> %0, i8* %1, i32 10
+ ret <16 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_16xi8ptr_at_10(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i8*> %5, i8* %7, i32 2
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %2, align 16
+; CHECK-NEXT: ret <4 x i8*> %3
+; CHECK-NEXT: }
+
+define <16 x i8*> @insert_16xi8ptr_at_11(<16 x i8*>, i8*) {
+entry:
+ %2 = insertelement <16 x i8*> %0, i8* %1, i32 11
+ ret <16 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_16xi8ptr_at_11(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i8*> %5, i8* %7, i32 3
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %2, align 16
+; CHECK-NEXT: ret <4 x i8*> %3
+; CHECK-NEXT: }
+
+define <16 x i8*> @insert_16xi8ptr_at_12(<16 x i8*>, i8*) {
+entry:
+ %2 = insertelement <16 x i8*> %0, i8* %1, i32 12
+ ret <16 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_16xi8ptr_at_12(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i8*> %6, i8* %7, i32 0
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %2, align 16
+; CHECK-NEXT: ret <4 x i8*> %3
+; CHECK-NEXT: }
+
+define <16 x i8*> @insert_16xi8ptr_at_13(<16 x i8*>, i8*) {
+entry:
+ %2 = insertelement <16 x i8*> %0, i8* %1, i32 13
+ ret <16 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_16xi8ptr_at_13(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i8*> %6, i8* %7, i32 1
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %2, align 16
+; CHECK-NEXT: ret <4 x i8*> %3
+; CHECK-NEXT: }
+
+define <16 x i8*> @insert_16xi8ptr_at_14(<16 x i8*>, i8*) {
+entry:
+ %2 = insertelement <16 x i8*> %0, i8* %1, i32 14
+ ret <16 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_16xi8ptr_at_14(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i8*> %6, i8* %7, i32 2
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %2, align 16
+; CHECK-NEXT: ret <4 x i8*> %3
+; CHECK-NEXT: }
+
+define <16 x i8*> @insert_16xi8ptr_at_15(<16 x i8*>, i8*) {
+entry:
+ %2 = insertelement <16 x i8*> %0, i8* %1, i32 15
+ ret <16 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_16xi8ptr_at_15(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x i8*> %6, i8* %7, i32 3
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %2, align 16
+; CHECK-NEXT: ret <4 x i8*> %3
+; CHECK-NEXT: }
+
+define <16 x i8*> @insert_16xi8ptr_undef_idx(<16 x i8*>, i8*) {
+entry:
+ %2 = insertelement <16 x i8*> %0, i8* %1, i32 16
+ ret <16 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_16xi8ptr_undef_idx(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: store <4 x i8*> %4, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %2, align 16
+; CHECK-NEXT: ret <4 x i8*> %3
+; CHECK-NEXT: }
+
+define <16 x float> @insert_16xfloat_at_0(<16 x float>, float) {
+entry:
+ %2 = insertelement <16 x float> %0, float %1, i32 0
+ ret <16 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_16xfloat_at_0(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x float> %3, float %7, i32 0
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %2, align 16
+; CHECK-NEXT: ret <4 x float> %8
+; CHECK-NEXT: }
+
+define <16 x float> @insert_16xfloat_at_1(<16 x float>, float) {
+entry:
+ %2 = insertelement <16 x float> %0, float %1, i32 1
+ ret <16 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_16xfloat_at_1(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x float> %3, float %7, i32 1
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %2, align 16
+; CHECK-NEXT: ret <4 x float> %8
+; CHECK-NEXT: }
+
+define <16 x float> @insert_16xfloat_at_2(<16 x float>, float) {
+entry:
+ %2 = insertelement <16 x float> %0, float %1, i32 2
+ ret <16 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_16xfloat_at_2(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x float> %3, float %7, i32 2
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %2, align 16
+; CHECK-NEXT: ret <4 x float> %8
+; CHECK-NEXT: }
+
+define <16 x float> @insert_16xfloat_at_3(<16 x float>, float) {
+entry:
+ %2 = insertelement <16 x float> %0, float %1, i32 3
+ ret <16 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_16xfloat_at_3(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x float> %3, float %7, i32 3
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %2, align 16
+; CHECK-NEXT: ret <4 x float> %8
+; CHECK-NEXT: }
+
+define <16 x float> @insert_16xfloat_at_4(<16 x float>, float) {
+entry:
+ %2 = insertelement <16 x float> %0, float %1, i32 4
+ ret <16 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_16xfloat_at_4(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x float> %4, float %7, i32 0
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %2, align 16
+; CHECK-NEXT: ret <4 x float> %3
+; CHECK-NEXT: }
+
+define <16 x float> @insert_16xfloat_at_5(<16 x float>, float) {
+entry:
+ %2 = insertelement <16 x float> %0, float %1, i32 5
+ ret <16 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_16xfloat_at_5(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x float> %4, float %7, i32 1
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %2, align 16
+; CHECK-NEXT: ret <4 x float> %3
+; CHECK-NEXT: }
+
+define <16 x float> @insert_16xfloat_at_6(<16 x float>, float) {
+entry:
+ %2 = insertelement <16 x float> %0, float %1, i32 6
+ ret <16 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_16xfloat_at_6(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x float> %4, float %7, i32 2
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %2, align 16
+; CHECK-NEXT: ret <4 x float> %3
+; CHECK-NEXT: }
+
+define <16 x float> @insert_16xfloat_at_7(<16 x float>, float) {
+entry:
+ %2 = insertelement <16 x float> %0, float %1, i32 7
+ ret <16 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_16xfloat_at_7(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x float> %4, float %7, i32 3
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %2, align 16
+; CHECK-NEXT: ret <4 x float> %3
+; CHECK-NEXT: }
+
+define <16 x float> @insert_16xfloat_at_8(<16 x float>, float) {
+entry:
+ %2 = insertelement <16 x float> %0, float %1, i32 8
+ ret <16 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_16xfloat_at_8(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x float> %5, float %7, i32 0
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %2, align 16
+; CHECK-NEXT: ret <4 x float> %3
+; CHECK-NEXT: }
+
+define <16 x float> @insert_16xfloat_at_9(<16 x float>, float) {
+entry:
+ %2 = insertelement <16 x float> %0, float %1, i32 9
+ ret <16 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_16xfloat_at_9(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x float> %5, float %7, i32 1
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %2, align 16
+; CHECK-NEXT: ret <4 x float> %3
+; CHECK-NEXT: }
+
+define <16 x float> @insert_16xfloat_at_10(<16 x float>, float) {
+entry:
+ %2 = insertelement <16 x float> %0, float %1, i32 10
+ ret <16 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_16xfloat_at_10(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x float> %5, float %7, i32 2
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %2, align 16
+; CHECK-NEXT: ret <4 x float> %3
+; CHECK-NEXT: }
+
+define <16 x float> @insert_16xfloat_at_11(<16 x float>, float) {
+entry:
+ %2 = insertelement <16 x float> %0, float %1, i32 11
+ ret <16 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_16xfloat_at_11(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x float> %5, float %7, i32 3
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %2, align 16
+; CHECK-NEXT: ret <4 x float> %3
+; CHECK-NEXT: }
+
+define <16 x float> @insert_16xfloat_at_12(<16 x float>, float) {
+entry:
+ %2 = insertelement <16 x float> %0, float %1, i32 12
+ ret <16 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_16xfloat_at_12(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x float> %6, float %7, i32 0
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %2, align 16
+; CHECK-NEXT: ret <4 x float> %3
+; CHECK-NEXT: }
+
+define <16 x float> @insert_16xfloat_at_13(<16 x float>, float) {
+entry:
+ %2 = insertelement <16 x float> %0, float %1, i32 13
+ ret <16 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_16xfloat_at_13(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x float> %6, float %7, i32 1
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %2, align 16
+; CHECK-NEXT: ret <4 x float> %3
+; CHECK-NEXT: }
+
+define <16 x float> @insert_16xfloat_at_14(<16 x float>, float) {
+entry:
+ %2 = insertelement <16 x float> %0, float %1, i32 14
+ ret <16 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_16xfloat_at_14(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x float> %6, float %7, i32 2
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %2, align 16
+; CHECK-NEXT: ret <4 x float> %3
+; CHECK-NEXT: }
+
+define <16 x float> @insert_16xfloat_at_15(<16 x float>, float) {
+entry:
+ %2 = insertelement <16 x float> %0, float %1, i32 15
+ ret <16 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_16xfloat_at_15(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %8 = insertelement <4 x float> %6, float %7, i32 3
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %2, align 16
+; CHECK-NEXT: ret <4 x float> %3
+; CHECK-NEXT: }
+
+define <16 x float> @insert_16xfloat_undef_idx(<16 x float>, float) {
+entry:
+ %2 = insertelement <16 x float> %0, float %1, i32 16
+ ret <16 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_16xfloat_undef_idx(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: store <4 x float> %4, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %2, align 16
+; CHECK-NEXT: ret <4 x float> %3
+; CHECK-NEXT: }
+
+define <16 x double> @insert_16xdouble_at_0(<16 x double>, double) {
+entry:
+ %2 = insertelement <16 x double> %0, double %1, i32 0
+ ret <16 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_16xdouble_at_0(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x double> %7, double %15, i32 0
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %6, align 16
+; CHECK-NEXT: ret <2 x double> %16
+; CHECK-NEXT: }
+
+define <16 x double> @insert_16xdouble_at_1(<16 x double>, double) {
+entry:
+ %2 = insertelement <16 x double> %0, double %1, i32 1
+ ret <16 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_16xdouble_at_1(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x double> %7, double %15, i32 1
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %6, align 16
+; CHECK-NEXT: ret <2 x double> %16
+; CHECK-NEXT: }
+
+define <16 x double> @insert_16xdouble_at_2(<16 x double>, double) {
+entry:
+ %2 = insertelement <16 x double> %0, double %1, i32 2
+ ret <16 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_16xdouble_at_2(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x double> %8, double %15, i32 0
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %6, align 16
+; CHECK-NEXT: ret <2 x double> %7
+; CHECK-NEXT: }
+
+define <16 x double> @insert_16xdouble_at_3(<16 x double>, double) {
+entry:
+ %2 = insertelement <16 x double> %0, double %1, i32 3
+ ret <16 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_16xdouble_at_3(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x double> %8, double %15, i32 1
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %6, align 16
+; CHECK-NEXT: ret <2 x double> %7
+; CHECK-NEXT: }
+
+define <16 x double> @insert_16xdouble_at_4(<16 x double>, double) {
+entry:
+ %2 = insertelement <16 x double> %0, double %1, i32 4
+ ret <16 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_16xdouble_at_4(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x double> %9, double %15, i32 0
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %6, align 16
+; CHECK-NEXT: ret <2 x double> %7
+; CHECK-NEXT: }
+
+define <16 x double> @insert_16xdouble_at_5(<16 x double>, double) {
+entry:
+ %2 = insertelement <16 x double> %0, double %1, i32 5
+ ret <16 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_16xdouble_at_5(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x double> %9, double %15, i32 1
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %6, align 16
+; CHECK-NEXT: ret <2 x double> %7
+; CHECK-NEXT: }
+
+define <16 x double> @insert_16xdouble_at_6(<16 x double>, double) {
+entry:
+ %2 = insertelement <16 x double> %0, double %1, i32 6
+ ret <16 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_16xdouble_at_6(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x double> %10, double %15, i32 0
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %6, align 16
+; CHECK-NEXT: ret <2 x double> %7
+; CHECK-NEXT: }
+
+define <16 x double> @insert_16xdouble_at_7(<16 x double>, double) {
+entry:
+ %2 = insertelement <16 x double> %0, double %1, i32 7
+ ret <16 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_16xdouble_at_7(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x double> %10, double %15, i32 1
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %6, align 16
+; CHECK-NEXT: ret <2 x double> %7
+; CHECK-NEXT: }
+
+define <16 x double> @insert_16xdouble_at_8(<16 x double>, double) {
+entry:
+ %2 = insertelement <16 x double> %0, double %1, i32 8
+ ret <16 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_16xdouble_at_8(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x double> %11, double %15, i32 0
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %6, align 16
+; CHECK-NEXT: ret <2 x double> %7
+; CHECK-NEXT: }
+
+define <16 x double> @insert_16xdouble_at_9(<16 x double>, double) {
+entry:
+ %2 = insertelement <16 x double> %0, double %1, i32 9
+ ret <16 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_16xdouble_at_9(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x double> %11, double %15, i32 1
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %6, align 16
+; CHECK-NEXT: ret <2 x double> %7
+; CHECK-NEXT: }
+
+define <16 x double> @insert_16xdouble_at_10(<16 x double>, double) {
+entry:
+ %2 = insertelement <16 x double> %0, double %1, i32 10
+ ret <16 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_16xdouble_at_10(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x double> %12, double %15, i32 0
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %6, align 16
+; CHECK-NEXT: ret <2 x double> %7
+; CHECK-NEXT: }
+
+define <16 x double> @insert_16xdouble_at_11(<16 x double>, double) {
+entry:
+ %2 = insertelement <16 x double> %0, double %1, i32 11
+ ret <16 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_16xdouble_at_11(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x double> %12, double %15, i32 1
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %6, align 16
+; CHECK-NEXT: ret <2 x double> %7
+; CHECK-NEXT: }
+
+define <16 x double> @insert_16xdouble_at_12(<16 x double>, double) {
+entry:
+ %2 = insertelement <16 x double> %0, double %1, i32 12
+ ret <16 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_16xdouble_at_12(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x double> %13, double %15, i32 0
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %6, align 16
+; CHECK-NEXT: ret <2 x double> %7
+; CHECK-NEXT: }
+
+define <16 x double> @insert_16xdouble_at_13(<16 x double>, double) {
+entry:
+ %2 = insertelement <16 x double> %0, double %1, i32 13
+ ret <16 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_16xdouble_at_13(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x double> %13, double %15, i32 1
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %6, align 16
+; CHECK-NEXT: ret <2 x double> %7
+; CHECK-NEXT: }
+
+define <16 x double> @insert_16xdouble_at_14(<16 x double>, double) {
+entry:
+ %2 = insertelement <16 x double> %0, double %1, i32 14
+ ret <16 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_16xdouble_at_14(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x double> %14, double %15, i32 0
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %6, align 16
+; CHECK-NEXT: ret <2 x double> %7
+; CHECK-NEXT: }
+
+define <16 x double> @insert_16xdouble_at_15(<16 x double>, double) {
+entry:
+ %2 = insertelement <16 x double> %0, double %1, i32 15
+ ret <16 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_16xdouble_at_15(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %16 = insertelement <2 x double> %14, double %15, i32 1
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %6, align 16
+; CHECK-NEXT: ret <2 x double> %7
+; CHECK-NEXT: }
+
+define <16 x double> @insert_16xdouble_undef_idx(<16 x double>, double) {
+entry:
+ %2 = insertelement <16 x double> %0, double %1, i32 16
+ ret <16 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_16xdouble_undef_idx(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: store <2 x double> %8, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %9, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %6, align 16
+; CHECK-NEXT: ret <2 x double> %7
+; CHECK-NEXT: }
+
+define <20 x i8> @insert_20xi8_at_0(<20 x i8>, i8) {
+entry:
+ %2 = insertelement <20 x i8> %0, i8 %1, i32 0
+ ret <20 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_20xi8_at_0(<16 x i8>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <16 x i8> %1, i8 %3, i32 0
+; CHECK-NEXT: store <16 x i8> %2, <16 x i8>* %0, align 16
+; CHECK-NEXT: ret <16 x i8> %4
+; CHECK-NEXT: }
+
+define <20 x i8> @insert_20xi8_at_1(<20 x i8>, i8) {
+entry:
+ %2 = insertelement <20 x i8> %0, i8 %1, i32 1
+ ret <20 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_20xi8_at_1(<16 x i8>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <16 x i8> %1, i8 %3, i32 1
+; CHECK-NEXT: store <16 x i8> %2, <16 x i8>* %0, align 16
+; CHECK-NEXT: ret <16 x i8> %4
+; CHECK-NEXT: }
+
+define <20 x i8> @insert_20xi8_at_2(<20 x i8>, i8) {
+entry:
+ %2 = insertelement <20 x i8> %0, i8 %1, i32 2
+ ret <20 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_20xi8_at_2(<16 x i8>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <16 x i8> %1, i8 %3, i32 2
+; CHECK-NEXT: store <16 x i8> %2, <16 x i8>* %0, align 16
+; CHECK-NEXT: ret <16 x i8> %4
+; CHECK-NEXT: }
+
+define <20 x i8> @insert_20xi8_at_3(<20 x i8>, i8) {
+entry:
+ %2 = insertelement <20 x i8> %0, i8 %1, i32 3
+ ret <20 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_20xi8_at_3(<16 x i8>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <16 x i8> %1, i8 %3, i32 3
+; CHECK-NEXT: store <16 x i8> %2, <16 x i8>* %0, align 16
+; CHECK-NEXT: ret <16 x i8> %4
+; CHECK-NEXT: }
+
+define <20 x i8> @insert_20xi8_at_4(<20 x i8>, i8) {
+entry:
+ %2 = insertelement <20 x i8> %0, i8 %1, i32 4
+ ret <20 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_20xi8_at_4(<16 x i8>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <16 x i8> %1, i8 %3, i32 4
+; CHECK-NEXT: store <16 x i8> %2, <16 x i8>* %0, align 16
+; CHECK-NEXT: ret <16 x i8> %4
+; CHECK-NEXT: }
+
+define <20 x i8> @insert_20xi8_at_5(<20 x i8>, i8) {
+entry:
+ %2 = insertelement <20 x i8> %0, i8 %1, i32 5
+ ret <20 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_20xi8_at_5(<16 x i8>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <16 x i8> %1, i8 %3, i32 5
+; CHECK-NEXT: store <16 x i8> %2, <16 x i8>* %0, align 16
+; CHECK-NEXT: ret <16 x i8> %4
+; CHECK-NEXT: }
+
+define <20 x i8> @insert_20xi8_at_6(<20 x i8>, i8) {
+entry:
+ %2 = insertelement <20 x i8> %0, i8 %1, i32 6
+ ret <20 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_20xi8_at_6(<16 x i8>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <16 x i8> %1, i8 %3, i32 6
+; CHECK-NEXT: store <16 x i8> %2, <16 x i8>* %0, align 16
+; CHECK-NEXT: ret <16 x i8> %4
+; CHECK-NEXT: }
+
+define <20 x i8> @insert_20xi8_at_7(<20 x i8>, i8) {
+entry:
+ %2 = insertelement <20 x i8> %0, i8 %1, i32 7
+ ret <20 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_20xi8_at_7(<16 x i8>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <16 x i8> %1, i8 %3, i32 7
+; CHECK-NEXT: store <16 x i8> %2, <16 x i8>* %0, align 16
+; CHECK-NEXT: ret <16 x i8> %4
+; CHECK-NEXT: }
+
+define <20 x i8> @insert_20xi8_at_8(<20 x i8>, i8) {
+entry:
+ %2 = insertelement <20 x i8> %0, i8 %1, i32 8
+ ret <20 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_20xi8_at_8(<16 x i8>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <16 x i8> %1, i8 %3, i32 8
+; CHECK-NEXT: store <16 x i8> %2, <16 x i8>* %0, align 16
+; CHECK-NEXT: ret <16 x i8> %4
+; CHECK-NEXT: }
+
+define <20 x i8> @insert_20xi8_at_9(<20 x i8>, i8) {
+entry:
+ %2 = insertelement <20 x i8> %0, i8 %1, i32 9
+ ret <20 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_20xi8_at_9(<16 x i8>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <16 x i8> %1, i8 %3, i32 9
+; CHECK-NEXT: store <16 x i8> %2, <16 x i8>* %0, align 16
+; CHECK-NEXT: ret <16 x i8> %4
+; CHECK-NEXT: }
+
+define <20 x i8> @insert_20xi8_at_10(<20 x i8>, i8) {
+entry:
+ %2 = insertelement <20 x i8> %0, i8 %1, i32 10
+ ret <20 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_20xi8_at_10(<16 x i8>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <16 x i8> %1, i8 %3, i32 10
+; CHECK-NEXT: store <16 x i8> %2, <16 x i8>* %0, align 16
+; CHECK-NEXT: ret <16 x i8> %4
+; CHECK-NEXT: }
+
+define <20 x i8> @insert_20xi8_at_11(<20 x i8>, i8) {
+entry:
+ %2 = insertelement <20 x i8> %0, i8 %1, i32 11
+ ret <20 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_20xi8_at_11(<16 x i8>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <16 x i8> %1, i8 %3, i32 11
+; CHECK-NEXT: store <16 x i8> %2, <16 x i8>* %0, align 16
+; CHECK-NEXT: ret <16 x i8> %4
+; CHECK-NEXT: }
+
+define <20 x i8> @insert_20xi8_at_12(<20 x i8>, i8) {
+entry:
+ %2 = insertelement <20 x i8> %0, i8 %1, i32 12
+ ret <20 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_20xi8_at_12(<16 x i8>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <16 x i8> %1, i8 %3, i32 12
+; CHECK-NEXT: store <16 x i8> %2, <16 x i8>* %0, align 16
+; CHECK-NEXT: ret <16 x i8> %4
+; CHECK-NEXT: }
+
+define <20 x i8> @insert_20xi8_at_13(<20 x i8>, i8) {
+entry:
+ %2 = insertelement <20 x i8> %0, i8 %1, i32 13
+ ret <20 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_20xi8_at_13(<16 x i8>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <16 x i8> %1, i8 %3, i32 13
+; CHECK-NEXT: store <16 x i8> %2, <16 x i8>* %0, align 16
+; CHECK-NEXT: ret <16 x i8> %4
+; CHECK-NEXT: }
+
+define <20 x i8> @insert_20xi8_at_14(<20 x i8>, i8) {
+entry:
+ %2 = insertelement <20 x i8> %0, i8 %1, i32 14
+ ret <20 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_20xi8_at_14(<16 x i8>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <16 x i8> %1, i8 %3, i32 14
+; CHECK-NEXT: store <16 x i8> %2, <16 x i8>* %0, align 16
+; CHECK-NEXT: ret <16 x i8> %4
+; CHECK-NEXT: }
+
+define <20 x i8> @insert_20xi8_at_15(<20 x i8>, i8) {
+entry:
+ %2 = insertelement <20 x i8> %0, i8 %1, i32 15
+ ret <20 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_20xi8_at_15(<16 x i8>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <16 x i8> %1, i8 %3, i32 15
+; CHECK-NEXT: store <16 x i8> %2, <16 x i8>* %0, align 16
+; CHECK-NEXT: ret <16 x i8> %4
+; CHECK-NEXT: }
+
+define <20 x i8> @insert_20xi8_at_16(<20 x i8>, i8) {
+entry:
+ %2 = insertelement <20 x i8> %0, i8 %1, i32 16
+ ret <20 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_20xi8_at_16(<16 x i8>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <16 x i8> %2, i8 %3, i32 0
+; CHECK-NEXT: store <16 x i8> %4, <16 x i8>* %0, align 16
+; CHECK-NEXT: ret <16 x i8> %1
+; CHECK-NEXT: }
+
+define <20 x i8> @insert_20xi8_at_17(<20 x i8>, i8) {
+entry:
+ %2 = insertelement <20 x i8> %0, i8 %1, i32 17
+ ret <20 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_20xi8_at_17(<16 x i8>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <16 x i8> %2, i8 %3, i32 1
+; CHECK-NEXT: store <16 x i8> %4, <16 x i8>* %0, align 16
+; CHECK-NEXT: ret <16 x i8> %1
+; CHECK-NEXT: }
+
+define <20 x i8> @insert_20xi8_at_18(<20 x i8>, i8) {
+entry:
+ %2 = insertelement <20 x i8> %0, i8 %1, i32 18
+ ret <20 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_20xi8_at_18(<16 x i8>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <16 x i8> %2, i8 %3, i32 2
+; CHECK-NEXT: store <16 x i8> %4, <16 x i8>* %0, align 16
+; CHECK-NEXT: ret <16 x i8> %1
+; CHECK-NEXT: }
+
+define <20 x i8> @insert_20xi8_at_19(<20 x i8>, i8) {
+entry:
+ %2 = insertelement <20 x i8> %0, i8 %1, i32 19
+ ret <20 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_20xi8_at_19(<16 x i8>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: %4 = insertelement <16 x i8> %2, i8 %3, i32 3
+; CHECK-NEXT: store <16 x i8> %4, <16 x i8>* %0, align 16
+; CHECK-NEXT: ret <16 x i8> %1
+; CHECK-NEXT: }
+
+define <20 x i8> @insert_20xi8_undef_idx(<20 x i8>, i8) {
+entry:
+ %2 = insertelement <20 x i8> %0, i8 %1, i32 20
+ ret <20 x i8> %2
+}
+; CHECK-LABEL: define <16 x i8> @insert_20xi8_undef_idx(<16 x i8>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>, i8) {
+; CHECK: entry:
+; CHECK-NEXT: store <16 x i8> %2, <16 x i8>* %0, align 16
+; CHECK-NEXT: ret <16 x i8> %1
+; CHECK-NEXT: }
+
+define <20 x i16> @insert_20xi16_at_0(<20 x i16>, i16) {
+entry:
+ %2 = insertelement <20 x i16> %0, i16 %1, i32 0
+ ret <20 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_20xi16_at_0(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <8 x i16> %2, i16 %5, i32 0
+; CHECK-NEXT: store <8 x i16> %3, <8 x i16>* %0, align 16
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %1, align 16
+; CHECK-NEXT: ret <8 x i16> %6
+; CHECK-NEXT: }
+
+define <20 x i16> @insert_20xi16_at_1(<20 x i16>, i16) {
+entry:
+ %2 = insertelement <20 x i16> %0, i16 %1, i32 1
+ ret <20 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_20xi16_at_1(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <8 x i16> %2, i16 %5, i32 1
+; CHECK-NEXT: store <8 x i16> %3, <8 x i16>* %0, align 16
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %1, align 16
+; CHECK-NEXT: ret <8 x i16> %6
+; CHECK-NEXT: }
+
+define <20 x i16> @insert_20xi16_at_2(<20 x i16>, i16) {
+entry:
+ %2 = insertelement <20 x i16> %0, i16 %1, i32 2
+ ret <20 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_20xi16_at_2(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <8 x i16> %2, i16 %5, i32 2
+; CHECK-NEXT: store <8 x i16> %3, <8 x i16>* %0, align 16
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %1, align 16
+; CHECK-NEXT: ret <8 x i16> %6
+; CHECK-NEXT: }
+
+define <20 x i16> @insert_20xi16_at_3(<20 x i16>, i16) {
+entry:
+ %2 = insertelement <20 x i16> %0, i16 %1, i32 3
+ ret <20 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_20xi16_at_3(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <8 x i16> %2, i16 %5, i32 3
+; CHECK-NEXT: store <8 x i16> %3, <8 x i16>* %0, align 16
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %1, align 16
+; CHECK-NEXT: ret <8 x i16> %6
+; CHECK-NEXT: }
+
+define <20 x i16> @insert_20xi16_at_4(<20 x i16>, i16) {
+entry:
+ %2 = insertelement <20 x i16> %0, i16 %1, i32 4
+ ret <20 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_20xi16_at_4(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <8 x i16> %2, i16 %5, i32 4
+; CHECK-NEXT: store <8 x i16> %3, <8 x i16>* %0, align 16
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %1, align 16
+; CHECK-NEXT: ret <8 x i16> %6
+; CHECK-NEXT: }
+
+define <20 x i16> @insert_20xi16_at_5(<20 x i16>, i16) {
+entry:
+ %2 = insertelement <20 x i16> %0, i16 %1, i32 5
+ ret <20 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_20xi16_at_5(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <8 x i16> %2, i16 %5, i32 5
+; CHECK-NEXT: store <8 x i16> %3, <8 x i16>* %0, align 16
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %1, align 16
+; CHECK-NEXT: ret <8 x i16> %6
+; CHECK-NEXT: }
+
+define <20 x i16> @insert_20xi16_at_6(<20 x i16>, i16) {
+entry:
+ %2 = insertelement <20 x i16> %0, i16 %1, i32 6
+ ret <20 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_20xi16_at_6(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <8 x i16> %2, i16 %5, i32 6
+; CHECK-NEXT: store <8 x i16> %3, <8 x i16>* %0, align 16
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %1, align 16
+; CHECK-NEXT: ret <8 x i16> %6
+; CHECK-NEXT: }
+
+define <20 x i16> @insert_20xi16_at_7(<20 x i16>, i16) {
+entry:
+ %2 = insertelement <20 x i16> %0, i16 %1, i32 7
+ ret <20 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_20xi16_at_7(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <8 x i16> %2, i16 %5, i32 7
+; CHECK-NEXT: store <8 x i16> %3, <8 x i16>* %0, align 16
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %1, align 16
+; CHECK-NEXT: ret <8 x i16> %6
+; CHECK-NEXT: }
+
+define <20 x i16> @insert_20xi16_at_8(<20 x i16>, i16) {
+entry:
+ %2 = insertelement <20 x i16> %0, i16 %1, i32 8
+ ret <20 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_20xi16_at_8(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <8 x i16> %3, i16 %5, i32 0
+; CHECK-NEXT: store <8 x i16> %6, <8 x i16>* %0, align 16
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %1, align 16
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <20 x i16> @insert_20xi16_at_9(<20 x i16>, i16) {
+entry:
+ %2 = insertelement <20 x i16> %0, i16 %1, i32 9
+ ret <20 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_20xi16_at_9(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <8 x i16> %3, i16 %5, i32 1
+; CHECK-NEXT: store <8 x i16> %6, <8 x i16>* %0, align 16
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %1, align 16
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <20 x i16> @insert_20xi16_at_10(<20 x i16>, i16) {
+entry:
+ %2 = insertelement <20 x i16> %0, i16 %1, i32 10
+ ret <20 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_20xi16_at_10(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <8 x i16> %3, i16 %5, i32 2
+; CHECK-NEXT: store <8 x i16> %6, <8 x i16>* %0, align 16
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %1, align 16
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <20 x i16> @insert_20xi16_at_11(<20 x i16>, i16) {
+entry:
+ %2 = insertelement <20 x i16> %0, i16 %1, i32 11
+ ret <20 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_20xi16_at_11(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <8 x i16> %3, i16 %5, i32 3
+; CHECK-NEXT: store <8 x i16> %6, <8 x i16>* %0, align 16
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %1, align 16
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <20 x i16> @insert_20xi16_at_12(<20 x i16>, i16) {
+entry:
+ %2 = insertelement <20 x i16> %0, i16 %1, i32 12
+ ret <20 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_20xi16_at_12(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <8 x i16> %3, i16 %5, i32 4
+; CHECK-NEXT: store <8 x i16> %6, <8 x i16>* %0, align 16
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %1, align 16
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <20 x i16> @insert_20xi16_at_13(<20 x i16>, i16) {
+entry:
+ %2 = insertelement <20 x i16> %0, i16 %1, i32 13
+ ret <20 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_20xi16_at_13(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <8 x i16> %3, i16 %5, i32 5
+; CHECK-NEXT: store <8 x i16> %6, <8 x i16>* %0, align 16
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %1, align 16
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <20 x i16> @insert_20xi16_at_14(<20 x i16>, i16) {
+entry:
+ %2 = insertelement <20 x i16> %0, i16 %1, i32 14
+ ret <20 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_20xi16_at_14(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <8 x i16> %3, i16 %5, i32 6
+; CHECK-NEXT: store <8 x i16> %6, <8 x i16>* %0, align 16
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %1, align 16
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <20 x i16> @insert_20xi16_at_15(<20 x i16>, i16) {
+entry:
+ %2 = insertelement <20 x i16> %0, i16 %1, i32 15
+ ret <20 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_20xi16_at_15(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <8 x i16> %3, i16 %5, i32 7
+; CHECK-NEXT: store <8 x i16> %6, <8 x i16>* %0, align 16
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %1, align 16
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <20 x i16> @insert_20xi16_at_16(<20 x i16>, i16) {
+entry:
+ %2 = insertelement <20 x i16> %0, i16 %1, i32 16
+ ret <20 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_20xi16_at_16(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <8 x i16> %4, i16 %5, i32 0
+; CHECK-NEXT: store <8 x i16> %3, <8 x i16>* %0, align 16
+; CHECK-NEXT: store <8 x i16> %6, <8 x i16>* %1, align 16
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <20 x i16> @insert_20xi16_at_17(<20 x i16>, i16) {
+entry:
+ %2 = insertelement <20 x i16> %0, i16 %1, i32 17
+ ret <20 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_20xi16_at_17(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <8 x i16> %4, i16 %5, i32 1
+; CHECK-NEXT: store <8 x i16> %3, <8 x i16>* %0, align 16
+; CHECK-NEXT: store <8 x i16> %6, <8 x i16>* %1, align 16
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <20 x i16> @insert_20xi16_at_18(<20 x i16>, i16) {
+entry:
+ %2 = insertelement <20 x i16> %0, i16 %1, i32 18
+ ret <20 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_20xi16_at_18(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <8 x i16> %4, i16 %5, i32 2
+; CHECK-NEXT: store <8 x i16> %3, <8 x i16>* %0, align 16
+; CHECK-NEXT: store <8 x i16> %6, <8 x i16>* %1, align 16
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <20 x i16> @insert_20xi16_at_19(<20 x i16>, i16) {
+entry:
+ %2 = insertelement <20 x i16> %0, i16 %1, i32 19
+ ret <20 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_20xi16_at_19(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: %6 = insertelement <8 x i16> %4, i16 %5, i32 3
+; CHECK-NEXT: store <8 x i16> %3, <8 x i16>* %0, align 16
+; CHECK-NEXT: store <8 x i16> %6, <8 x i16>* %1, align 16
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <20 x i16> @insert_20xi16_undef_idx(<20 x i16>, i16) {
+entry:
+ %2 = insertelement <20 x i16> %0, i16 %1, i32 20
+ ret <20 x i16> %2
+}
+; CHECK-LABEL: define <8 x i16> @insert_20xi16_undef_idx(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>, i16) {
+; CHECK: entry:
+; CHECK-NEXT: store <8 x i16> %3, <8 x i16>* %0, align 16
+; CHECK-NEXT: store <8 x i16> %4, <8 x i16>* %1, align 16
+; CHECK-NEXT: ret <8 x i16> %2
+; CHECK-NEXT: }
+
+define <20 x i32> @insert_20xi32_at_0(<20 x i32>, i32) {
+entry:
+ %2 = insertelement <20 x i32> %0, i32 %1, i32 0
+ ret <20 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_20xi32_at_0(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i32> %4, i32 %9, i32 0
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %7, <4 x i32>* %2, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %3, align 16
+; CHECK-NEXT: ret <4 x i32> %10
+; CHECK-NEXT: }
+
+define <20 x i32> @insert_20xi32_at_1(<20 x i32>, i32) {
+entry:
+ %2 = insertelement <20 x i32> %0, i32 %1, i32 1
+ ret <20 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_20xi32_at_1(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i32> %4, i32 %9, i32 1
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %7, <4 x i32>* %2, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %3, align 16
+; CHECK-NEXT: ret <4 x i32> %10
+; CHECK-NEXT: }
+
+define <20 x i32> @insert_20xi32_at_2(<20 x i32>, i32) {
+entry:
+ %2 = insertelement <20 x i32> %0, i32 %1, i32 2
+ ret <20 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_20xi32_at_2(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i32> %4, i32 %9, i32 2
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %7, <4 x i32>* %2, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %3, align 16
+; CHECK-NEXT: ret <4 x i32> %10
+; CHECK-NEXT: }
+
+define <20 x i32> @insert_20xi32_at_3(<20 x i32>, i32) {
+entry:
+ %2 = insertelement <20 x i32> %0, i32 %1, i32 3
+ ret <20 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_20xi32_at_3(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i32> %4, i32 %9, i32 3
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %7, <4 x i32>* %2, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %3, align 16
+; CHECK-NEXT: ret <4 x i32> %10
+; CHECK-NEXT: }
+
+define <20 x i32> @insert_20xi32_at_4(<20 x i32>, i32) {
+entry:
+ %2 = insertelement <20 x i32> %0, i32 %1, i32 4
+ ret <20 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_20xi32_at_4(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i32> %5, i32 %9, i32 0
+; CHECK-NEXT: store <4 x i32> %10, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %7, <4 x i32>* %2, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %3, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <20 x i32> @insert_20xi32_at_5(<20 x i32>, i32) {
+entry:
+ %2 = insertelement <20 x i32> %0, i32 %1, i32 5
+ ret <20 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_20xi32_at_5(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i32> %5, i32 %9, i32 1
+; CHECK-NEXT: store <4 x i32> %10, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %7, <4 x i32>* %2, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %3, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <20 x i32> @insert_20xi32_at_6(<20 x i32>, i32) {
+entry:
+ %2 = insertelement <20 x i32> %0, i32 %1, i32 6
+ ret <20 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_20xi32_at_6(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i32> %5, i32 %9, i32 2
+; CHECK-NEXT: store <4 x i32> %10, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %7, <4 x i32>* %2, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %3, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <20 x i32> @insert_20xi32_at_7(<20 x i32>, i32) {
+entry:
+ %2 = insertelement <20 x i32> %0, i32 %1, i32 7
+ ret <20 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_20xi32_at_7(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i32> %5, i32 %9, i32 3
+; CHECK-NEXT: store <4 x i32> %10, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %7, <4 x i32>* %2, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %3, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <20 x i32> @insert_20xi32_at_8(<20 x i32>, i32) {
+entry:
+ %2 = insertelement <20 x i32> %0, i32 %1, i32 8
+ ret <20 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_20xi32_at_8(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i32> %6, i32 %9, i32 0
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %10, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %7, <4 x i32>* %2, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %3, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <20 x i32> @insert_20xi32_at_9(<20 x i32>, i32) {
+entry:
+ %2 = insertelement <20 x i32> %0, i32 %1, i32 9
+ ret <20 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_20xi32_at_9(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i32> %6, i32 %9, i32 1
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %10, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %7, <4 x i32>* %2, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %3, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <20 x i32> @insert_20xi32_at_10(<20 x i32>, i32) {
+entry:
+ %2 = insertelement <20 x i32> %0, i32 %1, i32 10
+ ret <20 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_20xi32_at_10(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i32> %6, i32 %9, i32 2
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %10, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %7, <4 x i32>* %2, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %3, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <20 x i32> @insert_20xi32_at_11(<20 x i32>, i32) {
+entry:
+ %2 = insertelement <20 x i32> %0, i32 %1, i32 11
+ ret <20 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_20xi32_at_11(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i32> %6, i32 %9, i32 3
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %10, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %7, <4 x i32>* %2, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %3, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <20 x i32> @insert_20xi32_at_12(<20 x i32>, i32) {
+entry:
+ %2 = insertelement <20 x i32> %0, i32 %1, i32 12
+ ret <20 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_20xi32_at_12(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i32> %7, i32 %9, i32 0
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %10, <4 x i32>* %2, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %3, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <20 x i32> @insert_20xi32_at_13(<20 x i32>, i32) {
+entry:
+ %2 = insertelement <20 x i32> %0, i32 %1, i32 13
+ ret <20 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_20xi32_at_13(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i32> %7, i32 %9, i32 1
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %10, <4 x i32>* %2, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %3, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <20 x i32> @insert_20xi32_at_14(<20 x i32>, i32) {
+entry:
+ %2 = insertelement <20 x i32> %0, i32 %1, i32 14
+ ret <20 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_20xi32_at_14(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i32> %7, i32 %9, i32 2
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %10, <4 x i32>* %2, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %3, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <20 x i32> @insert_20xi32_at_15(<20 x i32>, i32) {
+entry:
+ %2 = insertelement <20 x i32> %0, i32 %1, i32 15
+ ret <20 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_20xi32_at_15(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i32> %7, i32 %9, i32 3
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %10, <4 x i32>* %2, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %3, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <20 x i32> @insert_20xi32_at_16(<20 x i32>, i32) {
+entry:
+ %2 = insertelement <20 x i32> %0, i32 %1, i32 16
+ ret <20 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_20xi32_at_16(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i32> %8, i32 %9, i32 0
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %7, <4 x i32>* %2, align 16
+; CHECK-NEXT: store <4 x i32> %10, <4 x i32>* %3, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <20 x i32> @insert_20xi32_at_17(<20 x i32>, i32) {
+entry:
+ %2 = insertelement <20 x i32> %0, i32 %1, i32 17
+ ret <20 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_20xi32_at_17(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i32> %8, i32 %9, i32 1
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %7, <4 x i32>* %2, align 16
+; CHECK-NEXT: store <4 x i32> %10, <4 x i32>* %3, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <20 x i32> @insert_20xi32_at_18(<20 x i32>, i32) {
+entry:
+ %2 = insertelement <20 x i32> %0, i32 %1, i32 18
+ ret <20 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_20xi32_at_18(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i32> %8, i32 %9, i32 2
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %7, <4 x i32>* %2, align 16
+; CHECK-NEXT: store <4 x i32> %10, <4 x i32>* %3, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <20 x i32> @insert_20xi32_at_19(<20 x i32>, i32) {
+entry:
+ %2 = insertelement <20 x i32> %0, i32 %1, i32 19
+ ret <20 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_20xi32_at_19(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i32> %8, i32 %9, i32 3
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %7, <4 x i32>* %2, align 16
+; CHECK-NEXT: store <4 x i32> %10, <4 x i32>* %3, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <20 x i32> @insert_20xi32_undef_idx(<20 x i32>, i32) {
+entry:
+ %2 = insertelement <20 x i32> %0, i32 %1, i32 20
+ ret <20 x i32> %2
+}
+; CHECK-LABEL: define <4 x i32> @insert_20xi32_undef_idx(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32) {
+; CHECK: entry:
+; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %6, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %7, <4 x i32>* %2, align 16
+; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %3, align 16
+; CHECK-NEXT: ret <4 x i32> %4
+; CHECK-NEXT: }
+
+define <20 x i64> @insert_20xi64_at_0(<20 x i64>, i64) {
+entry:
+ %2 = insertelement <20 x i64> %0, i64 %1, i32 0
+ ret <20 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_20xi64_at_0(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x i64> %9, i64 %19, i32 0
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %6, align 16
+; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %7, align 16
+; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %8, align 16
+; CHECK-NEXT: ret <2 x i64> %20
+; CHECK-NEXT: }
+
+define <20 x i64> @insert_20xi64_at_1(<20 x i64>, i64) {
+entry:
+ %2 = insertelement <20 x i64> %0, i64 %1, i32 1
+ ret <20 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_20xi64_at_1(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x i64> %9, i64 %19, i32 1
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %6, align 16
+; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %7, align 16
+; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %8, align 16
+; CHECK-NEXT: ret <2 x i64> %20
+; CHECK-NEXT: }
+
+define <20 x i64> @insert_20xi64_at_2(<20 x i64>, i64) {
+entry:
+ %2 = insertelement <20 x i64> %0, i64 %1, i32 2
+ ret <20 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_20xi64_at_2(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x i64> %10, i64 %19, i32 0
+; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %6, align 16
+; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %7, align 16
+; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %8, align 16
+; CHECK-NEXT: ret <2 x i64> %9
+; CHECK-NEXT: }
+
+define <20 x i64> @insert_20xi64_at_3(<20 x i64>, i64) {
+entry:
+ %2 = insertelement <20 x i64> %0, i64 %1, i32 3
+ ret <20 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_20xi64_at_3(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x i64> %10, i64 %19, i32 1
+; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %6, align 16
+; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %7, align 16
+; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %8, align 16
+; CHECK-NEXT: ret <2 x i64> %9
+; CHECK-NEXT: }
+
+define <20 x i64> @insert_20xi64_at_4(<20 x i64>, i64) {
+entry:
+ %2 = insertelement <20 x i64> %0, i64 %1, i32 4
+ ret <20 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_20xi64_at_4(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x i64> %11, i64 %19, i32 0
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %6, align 16
+; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %7, align 16
+; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %8, align 16
+; CHECK-NEXT: ret <2 x i64> %9
+; CHECK-NEXT: }
+
+define <20 x i64> @insert_20xi64_at_5(<20 x i64>, i64) {
+entry:
+ %2 = insertelement <20 x i64> %0, i64 %1, i32 5
+ ret <20 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_20xi64_at_5(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x i64> %11, i64 %19, i32 1
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %6, align 16
+; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %7, align 16
+; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %8, align 16
+; CHECK-NEXT: ret <2 x i64> %9
+; CHECK-NEXT: }
+
+define <20 x i64> @insert_20xi64_at_6(<20 x i64>, i64) {
+entry:
+ %2 = insertelement <20 x i64> %0, i64 %1, i32 6
+ ret <20 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_20xi64_at_6(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x i64> %12, i64 %19, i32 0
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %6, align 16
+; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %7, align 16
+; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %8, align 16
+; CHECK-NEXT: ret <2 x i64> %9
+; CHECK-NEXT: }
+
+define <20 x i64> @insert_20xi64_at_7(<20 x i64>, i64) {
+entry:
+ %2 = insertelement <20 x i64> %0, i64 %1, i32 7
+ ret <20 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_20xi64_at_7(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x i64> %12, i64 %19, i32 1
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %6, align 16
+; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %7, align 16
+; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %8, align 16
+; CHECK-NEXT: ret <2 x i64> %9
+; CHECK-NEXT: }
+
+define <20 x i64> @insert_20xi64_at_8(<20 x i64>, i64) {
+entry:
+ %2 = insertelement <20 x i64> %0, i64 %1, i32 8
+ ret <20 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_20xi64_at_8(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x i64> %13, i64 %19, i32 0
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %6, align 16
+; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %7, align 16
+; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %8, align 16
+; CHECK-NEXT: ret <2 x i64> %9
+; CHECK-NEXT: }
+
+define <20 x i64> @insert_20xi64_at_9(<20 x i64>, i64) {
+entry:
+ %2 = insertelement <20 x i64> %0, i64 %1, i32 9
+ ret <20 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_20xi64_at_9(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x i64> %13, i64 %19, i32 1
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %6, align 16
+; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %7, align 16
+; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %8, align 16
+; CHECK-NEXT: ret <2 x i64> %9
+; CHECK-NEXT: }
+
+define <20 x i64> @insert_20xi64_at_10(<20 x i64>, i64) {
+entry:
+ %2 = insertelement <20 x i64> %0, i64 %1, i32 10
+ ret <20 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_20xi64_at_10(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x i64> %14, i64 %19, i32 0
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %6, align 16
+; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %7, align 16
+; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %8, align 16
+; CHECK-NEXT: ret <2 x i64> %9
+; CHECK-NEXT: }
+
+define <20 x i64> @insert_20xi64_at_11(<20 x i64>, i64) {
+entry:
+ %2 = insertelement <20 x i64> %0, i64 %1, i32 11
+ ret <20 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_20xi64_at_11(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x i64> %14, i64 %19, i32 1
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %6, align 16
+; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %7, align 16
+; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %8, align 16
+; CHECK-NEXT: ret <2 x i64> %9
+; CHECK-NEXT: }
+
+define <20 x i64> @insert_20xi64_at_12(<20 x i64>, i64) {
+entry:
+ %2 = insertelement <20 x i64> %0, i64 %1, i32 12
+ ret <20 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_20xi64_at_12(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x i64> %15, i64 %19, i32 0
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %6, align 16
+; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %7, align 16
+; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %8, align 16
+; CHECK-NEXT: ret <2 x i64> %9
+; CHECK-NEXT: }
+
+define <20 x i64> @insert_20xi64_at_13(<20 x i64>, i64) {
+entry:
+ %2 = insertelement <20 x i64> %0, i64 %1, i32 13
+ ret <20 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_20xi64_at_13(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x i64> %15, i64 %19, i32 1
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %6, align 16
+; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %7, align 16
+; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %8, align 16
+; CHECK-NEXT: ret <2 x i64> %9
+; CHECK-NEXT: }
+
+define <20 x i64> @insert_20xi64_at_14(<20 x i64>, i64) {
+entry:
+ %2 = insertelement <20 x i64> %0, i64 %1, i32 14
+ ret <20 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_20xi64_at_14(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x i64> %16, i64 %19, i32 0
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %6, align 16
+; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %7, align 16
+; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %8, align 16
+; CHECK-NEXT: ret <2 x i64> %9
+; CHECK-NEXT: }
+
+define <20 x i64> @insert_20xi64_at_15(<20 x i64>, i64) {
+entry:
+ %2 = insertelement <20 x i64> %0, i64 %1, i32 15
+ ret <20 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_20xi64_at_15(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x i64> %16, i64 %19, i32 1
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %6, align 16
+; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %7, align 16
+; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %8, align 16
+; CHECK-NEXT: ret <2 x i64> %9
+; CHECK-NEXT: }
+
+define <20 x i64> @insert_20xi64_at_16(<20 x i64>, i64) {
+entry:
+ %2 = insertelement <20 x i64> %0, i64 %1, i32 16
+ ret <20 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_20xi64_at_16(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x i64> %17, i64 %19, i32 0
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %6, align 16
+; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %7, align 16
+; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %8, align 16
+; CHECK-NEXT: ret <2 x i64> %9
+; CHECK-NEXT: }
+
+define <20 x i64> @insert_20xi64_at_17(<20 x i64>, i64) {
+entry:
+ %2 = insertelement <20 x i64> %0, i64 %1, i32 17
+ ret <20 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_20xi64_at_17(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x i64> %17, i64 %19, i32 1
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %6, align 16
+; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %7, align 16
+; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %8, align 16
+; CHECK-NEXT: ret <2 x i64> %9
+; CHECK-NEXT: }
+
+define <20 x i64> @insert_20xi64_at_18(<20 x i64>, i64) {
+entry:
+ %2 = insertelement <20 x i64> %0, i64 %1, i32 18
+ ret <20 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_20xi64_at_18(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x i64> %18, i64 %19, i32 0
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %6, align 16
+; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %7, align 16
+; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %8, align 16
+; CHECK-NEXT: ret <2 x i64> %9
+; CHECK-NEXT: }
+
+define <20 x i64> @insert_20xi64_at_19(<20 x i64>, i64) {
+entry:
+ %2 = insertelement <20 x i64> %0, i64 %1, i32 19
+ ret <20 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_20xi64_at_19(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x i64> %18, i64 %19, i32 1
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %6, align 16
+; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %7, align 16
+; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %8, align 16
+; CHECK-NEXT: ret <2 x i64> %9
+; CHECK-NEXT: }
+
+define <20 x i64> @insert_20xi64_undef_idx(<20 x i64>, i64) {
+entry:
+ %2 = insertelement <20 x i64> %0, i64 %1, i32 20
+ ret <20 x i64> %2
+}
+; CHECK-LABEL: define <2 x i64> @insert_20xi64_undef_idx(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64) {
+; CHECK: entry:
+; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %12, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %6, align 16
+; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %7, align 16
+; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %8, align 16
+; CHECK-NEXT: ret <2 x i64> %9
+; CHECK-NEXT: }
+
+define <20 x i8*> @insert_20xi8ptr_at_0(<20 x i8*>, i8*) {
+entry:
+ %2 = insertelement <20 x i8*> %0, i8* %1, i32 0
+ ret <20 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_20xi8ptr_at_0(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i8*> %4, i8* %9, i32 0
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %7, <4 x i8*>* %2, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %3, align 16
+; CHECK-NEXT: ret <4 x i8*> %10
+; CHECK-NEXT: }
+
+define <20 x i8*> @insert_20xi8ptr_at_1(<20 x i8*>, i8*) {
+entry:
+ %2 = insertelement <20 x i8*> %0, i8* %1, i32 1
+ ret <20 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_20xi8ptr_at_1(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i8*> %4, i8* %9, i32 1
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %7, <4 x i8*>* %2, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %3, align 16
+; CHECK-NEXT: ret <4 x i8*> %10
+; CHECK-NEXT: }
+
+define <20 x i8*> @insert_20xi8ptr_at_2(<20 x i8*>, i8*) {
+entry:
+ %2 = insertelement <20 x i8*> %0, i8* %1, i32 2
+ ret <20 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_20xi8ptr_at_2(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i8*> %4, i8* %9, i32 2
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %7, <4 x i8*>* %2, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %3, align 16
+; CHECK-NEXT: ret <4 x i8*> %10
+; CHECK-NEXT: }
+
+define <20 x i8*> @insert_20xi8ptr_at_3(<20 x i8*>, i8*) {
+entry:
+ %2 = insertelement <20 x i8*> %0, i8* %1, i32 3
+ ret <20 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_20xi8ptr_at_3(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i8*> %4, i8* %9, i32 3
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %7, <4 x i8*>* %2, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %3, align 16
+; CHECK-NEXT: ret <4 x i8*> %10
+; CHECK-NEXT: }
+
+define <20 x i8*> @insert_20xi8ptr_at_4(<20 x i8*>, i8*) {
+entry:
+ %2 = insertelement <20 x i8*> %0, i8* %1, i32 4
+ ret <20 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_20xi8ptr_at_4(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i8*> %5, i8* %9, i32 0
+; CHECK-NEXT: store <4 x i8*> %10, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %7, <4 x i8*>* %2, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %3, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <20 x i8*> @insert_20xi8ptr_at_5(<20 x i8*>, i8*) {
+entry:
+ %2 = insertelement <20 x i8*> %0, i8* %1, i32 5
+ ret <20 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_20xi8ptr_at_5(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i8*> %5, i8* %9, i32 1
+; CHECK-NEXT: store <4 x i8*> %10, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %7, <4 x i8*>* %2, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %3, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <20 x i8*> @insert_20xi8ptr_at_6(<20 x i8*>, i8*) {
+entry:
+ %2 = insertelement <20 x i8*> %0, i8* %1, i32 6
+ ret <20 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_20xi8ptr_at_6(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i8*> %5, i8* %9, i32 2
+; CHECK-NEXT: store <4 x i8*> %10, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %7, <4 x i8*>* %2, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %3, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <20 x i8*> @insert_20xi8ptr_at_7(<20 x i8*>, i8*) {
+entry:
+ %2 = insertelement <20 x i8*> %0, i8* %1, i32 7
+ ret <20 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_20xi8ptr_at_7(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i8*> %5, i8* %9, i32 3
+; CHECK-NEXT: store <4 x i8*> %10, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %7, <4 x i8*>* %2, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %3, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <20 x i8*> @insert_20xi8ptr_at_8(<20 x i8*>, i8*) {
+entry:
+ %2 = insertelement <20 x i8*> %0, i8* %1, i32 8
+ ret <20 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_20xi8ptr_at_8(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i8*> %6, i8* %9, i32 0
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %10, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %7, <4 x i8*>* %2, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %3, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <20 x i8*> @insert_20xi8ptr_at_9(<20 x i8*>, i8*) {
+entry:
+ %2 = insertelement <20 x i8*> %0, i8* %1, i32 9
+ ret <20 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_20xi8ptr_at_9(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i8*> %6, i8* %9, i32 1
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %10, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %7, <4 x i8*>* %2, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %3, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <20 x i8*> @insert_20xi8ptr_at_10(<20 x i8*>, i8*) {
+entry:
+ %2 = insertelement <20 x i8*> %0, i8* %1, i32 10
+ ret <20 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_20xi8ptr_at_10(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i8*> %6, i8* %9, i32 2
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %10, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %7, <4 x i8*>* %2, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %3, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <20 x i8*> @insert_20xi8ptr_at_11(<20 x i8*>, i8*) {
+entry:
+ %2 = insertelement <20 x i8*> %0, i8* %1, i32 11
+ ret <20 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_20xi8ptr_at_11(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i8*> %6, i8* %9, i32 3
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %10, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %7, <4 x i8*>* %2, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %3, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <20 x i8*> @insert_20xi8ptr_at_12(<20 x i8*>, i8*) {
+entry:
+ %2 = insertelement <20 x i8*> %0, i8* %1, i32 12
+ ret <20 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_20xi8ptr_at_12(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i8*> %7, i8* %9, i32 0
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %10, <4 x i8*>* %2, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %3, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <20 x i8*> @insert_20xi8ptr_at_13(<20 x i8*>, i8*) {
+entry:
+ %2 = insertelement <20 x i8*> %0, i8* %1, i32 13
+ ret <20 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_20xi8ptr_at_13(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i8*> %7, i8* %9, i32 1
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %10, <4 x i8*>* %2, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %3, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <20 x i8*> @insert_20xi8ptr_at_14(<20 x i8*>, i8*) {
+entry:
+ %2 = insertelement <20 x i8*> %0, i8* %1, i32 14
+ ret <20 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_20xi8ptr_at_14(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i8*> %7, i8* %9, i32 2
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %10, <4 x i8*>* %2, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %3, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <20 x i8*> @insert_20xi8ptr_at_15(<20 x i8*>, i8*) {
+entry:
+ %2 = insertelement <20 x i8*> %0, i8* %1, i32 15
+ ret <20 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_20xi8ptr_at_15(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i8*> %7, i8* %9, i32 3
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %10, <4 x i8*>* %2, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %3, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <20 x i8*> @insert_20xi8ptr_at_16(<20 x i8*>, i8*) {
+entry:
+ %2 = insertelement <20 x i8*> %0, i8* %1, i32 16
+ ret <20 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_20xi8ptr_at_16(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i8*> %8, i8* %9, i32 0
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %7, <4 x i8*>* %2, align 16
+; CHECK-NEXT: store <4 x i8*> %10, <4 x i8*>* %3, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <20 x i8*> @insert_20xi8ptr_at_17(<20 x i8*>, i8*) {
+entry:
+ %2 = insertelement <20 x i8*> %0, i8* %1, i32 17
+ ret <20 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_20xi8ptr_at_17(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i8*> %8, i8* %9, i32 1
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %7, <4 x i8*>* %2, align 16
+; CHECK-NEXT: store <4 x i8*> %10, <4 x i8*>* %3, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <20 x i8*> @insert_20xi8ptr_at_18(<20 x i8*>, i8*) {
+entry:
+ %2 = insertelement <20 x i8*> %0, i8* %1, i32 18
+ ret <20 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_20xi8ptr_at_18(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i8*> %8, i8* %9, i32 2
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %7, <4 x i8*>* %2, align 16
+; CHECK-NEXT: store <4 x i8*> %10, <4 x i8*>* %3, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <20 x i8*> @insert_20xi8ptr_at_19(<20 x i8*>, i8*) {
+entry:
+ %2 = insertelement <20 x i8*> %0, i8* %1, i32 19
+ ret <20 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_20xi8ptr_at_19(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x i8*> %8, i8* %9, i32 3
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %7, <4 x i8*>* %2, align 16
+; CHECK-NEXT: store <4 x i8*> %10, <4 x i8*>* %3, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <20 x i8*> @insert_20xi8ptr_undef_idx(<20 x i8*>, i8*) {
+entry:
+ %2 = insertelement <20 x i8*> %0, i8* %1, i32 20
+ ret <20 x i8*> %2
+}
+; CHECK-LABEL: define <4 x i8*> @insert_20xi8ptr_undef_idx(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*) {
+; CHECK: entry:
+; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %6, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %7, <4 x i8*>* %2, align 16
+; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %3, align 16
+; CHECK-NEXT: ret <4 x i8*> %4
+; CHECK-NEXT: }
+
+define <20 x float> @insert_20xfloat_at_0(<20 x float>, float) {
+entry:
+ %2 = insertelement <20 x float> %0, float %1, i32 0
+ ret <20 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_20xfloat_at_0(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x float> %4, float %9, i32 0
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %7, <4 x float>* %2, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %3, align 16
+; CHECK-NEXT: ret <4 x float> %10
+; CHECK-NEXT: }
+
+define <20 x float> @insert_20xfloat_at_1(<20 x float>, float) {
+entry:
+ %2 = insertelement <20 x float> %0, float %1, i32 1
+ ret <20 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_20xfloat_at_1(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x float> %4, float %9, i32 1
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %7, <4 x float>* %2, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %3, align 16
+; CHECK-NEXT: ret <4 x float> %10
+; CHECK-NEXT: }
+
+define <20 x float> @insert_20xfloat_at_2(<20 x float>, float) {
+entry:
+ %2 = insertelement <20 x float> %0, float %1, i32 2
+ ret <20 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_20xfloat_at_2(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x float> %4, float %9, i32 2
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %7, <4 x float>* %2, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %3, align 16
+; CHECK-NEXT: ret <4 x float> %10
+; CHECK-NEXT: }
+
+define <20 x float> @insert_20xfloat_at_3(<20 x float>, float) {
+entry:
+ %2 = insertelement <20 x float> %0, float %1, i32 3
+ ret <20 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_20xfloat_at_3(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x float> %4, float %9, i32 3
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %7, <4 x float>* %2, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %3, align 16
+; CHECK-NEXT: ret <4 x float> %10
+; CHECK-NEXT: }
+
+define <20 x float> @insert_20xfloat_at_4(<20 x float>, float) {
+entry:
+ %2 = insertelement <20 x float> %0, float %1, i32 4
+ ret <20 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_20xfloat_at_4(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x float> %5, float %9, i32 0
+; CHECK-NEXT: store <4 x float> %10, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %7, <4 x float>* %2, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %3, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <20 x float> @insert_20xfloat_at_5(<20 x float>, float) {
+entry:
+ %2 = insertelement <20 x float> %0, float %1, i32 5
+ ret <20 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_20xfloat_at_5(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x float> %5, float %9, i32 1
+; CHECK-NEXT: store <4 x float> %10, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %7, <4 x float>* %2, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %3, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <20 x float> @insert_20xfloat_at_6(<20 x float>, float) {
+entry:
+ %2 = insertelement <20 x float> %0, float %1, i32 6
+ ret <20 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_20xfloat_at_6(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x float> %5, float %9, i32 2
+; CHECK-NEXT: store <4 x float> %10, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %7, <4 x float>* %2, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %3, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <20 x float> @insert_20xfloat_at_7(<20 x float>, float) {
+entry:
+ %2 = insertelement <20 x float> %0, float %1, i32 7
+ ret <20 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_20xfloat_at_7(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x float> %5, float %9, i32 3
+; CHECK-NEXT: store <4 x float> %10, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %7, <4 x float>* %2, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %3, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <20 x float> @insert_20xfloat_at_8(<20 x float>, float) {
+entry:
+ %2 = insertelement <20 x float> %0, float %1, i32 8
+ ret <20 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_20xfloat_at_8(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x float> %6, float %9, i32 0
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %10, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %7, <4 x float>* %2, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %3, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <20 x float> @insert_20xfloat_at_9(<20 x float>, float) {
+entry:
+ %2 = insertelement <20 x float> %0, float %1, i32 9
+ ret <20 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_20xfloat_at_9(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x float> %6, float %9, i32 1
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %10, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %7, <4 x float>* %2, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %3, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <20 x float> @insert_20xfloat_at_10(<20 x float>, float) {
+entry:
+ %2 = insertelement <20 x float> %0, float %1, i32 10
+ ret <20 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_20xfloat_at_10(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x float> %6, float %9, i32 2
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %10, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %7, <4 x float>* %2, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %3, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <20 x float> @insert_20xfloat_at_11(<20 x float>, float) {
+entry:
+ %2 = insertelement <20 x float> %0, float %1, i32 11
+ ret <20 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_20xfloat_at_11(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x float> %6, float %9, i32 3
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %10, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %7, <4 x float>* %2, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %3, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <20 x float> @insert_20xfloat_at_12(<20 x float>, float) {
+entry:
+ %2 = insertelement <20 x float> %0, float %1, i32 12
+ ret <20 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_20xfloat_at_12(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x float> %7, float %9, i32 0
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %10, <4 x float>* %2, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %3, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <20 x float> @insert_20xfloat_at_13(<20 x float>, float) {
+entry:
+ %2 = insertelement <20 x float> %0, float %1, i32 13
+ ret <20 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_20xfloat_at_13(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x float> %7, float %9, i32 1
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %10, <4 x float>* %2, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %3, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <20 x float> @insert_20xfloat_at_14(<20 x float>, float) {
+entry:
+ %2 = insertelement <20 x float> %0, float %1, i32 14
+ ret <20 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_20xfloat_at_14(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x float> %7, float %9, i32 2
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %10, <4 x float>* %2, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %3, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <20 x float> @insert_20xfloat_at_15(<20 x float>, float) {
+entry:
+ %2 = insertelement <20 x float> %0, float %1, i32 15
+ ret <20 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_20xfloat_at_15(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x float> %7, float %9, i32 3
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %10, <4 x float>* %2, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %3, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <20 x float> @insert_20xfloat_at_16(<20 x float>, float) {
+entry:
+ %2 = insertelement <20 x float> %0, float %1, i32 16
+ ret <20 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_20xfloat_at_16(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x float> %8, float %9, i32 0
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %7, <4 x float>* %2, align 16
+; CHECK-NEXT: store <4 x float> %10, <4 x float>* %3, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <20 x float> @insert_20xfloat_at_17(<20 x float>, float) {
+entry:
+ %2 = insertelement <20 x float> %0, float %1, i32 17
+ ret <20 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_20xfloat_at_17(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x float> %8, float %9, i32 1
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %7, <4 x float>* %2, align 16
+; CHECK-NEXT: store <4 x float> %10, <4 x float>* %3, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <20 x float> @insert_20xfloat_at_18(<20 x float>, float) {
+entry:
+ %2 = insertelement <20 x float> %0, float %1, i32 18
+ ret <20 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_20xfloat_at_18(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x float> %8, float %9, i32 2
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %7, <4 x float>* %2, align 16
+; CHECK-NEXT: store <4 x float> %10, <4 x float>* %3, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <20 x float> @insert_20xfloat_at_19(<20 x float>, float) {
+entry:
+ %2 = insertelement <20 x float> %0, float %1, i32 19
+ ret <20 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_20xfloat_at_19(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: %10 = insertelement <4 x float> %8, float %9, i32 3
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %7, <4 x float>* %2, align 16
+; CHECK-NEXT: store <4 x float> %10, <4 x float>* %3, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <20 x float> @insert_20xfloat_undef_idx(<20 x float>, float) {
+entry:
+ %2 = insertelement <20 x float> %0, float %1, i32 20
+ ret <20 x float> %2
+}
+; CHECK-LABEL: define <4 x float> @insert_20xfloat_undef_idx(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>, float) {
+; CHECK: entry:
+; CHECK-NEXT: store <4 x float> %5, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %6, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %7, <4 x float>* %2, align 16
+; CHECK-NEXT: store <4 x float> %8, <4 x float>* %3, align 16
+; CHECK-NEXT: ret <4 x float> %4
+; CHECK-NEXT: }
+
+define <20 x double> @insert_20xdouble_at_0(<20 x double>, double) {
+entry:
+ %2 = insertelement <20 x double> %0, double %1, i32 0
+ ret <20 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_20xdouble_at_0(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x double> %9, double %19, i32 0
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %15, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %6, align 16
+; CHECK-NEXT: store <2 x double> %17, <2 x double>* %7, align 16
+; CHECK-NEXT: store <2 x double> %18, <2 x double>* %8, align 16
+; CHECK-NEXT: ret <2 x double> %20
+; CHECK-NEXT: }
+
+define <20 x double> @insert_20xdouble_at_1(<20 x double>, double) {
+entry:
+ %2 = insertelement <20 x double> %0, double %1, i32 1
+ ret <20 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_20xdouble_at_1(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x double> %9, double %19, i32 1
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %15, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %6, align 16
+; CHECK-NEXT: store <2 x double> %17, <2 x double>* %7, align 16
+; CHECK-NEXT: store <2 x double> %18, <2 x double>* %8, align 16
+; CHECK-NEXT: ret <2 x double> %20
+; CHECK-NEXT: }
+
+define <20 x double> @insert_20xdouble_at_2(<20 x double>, double) {
+entry:
+ %2 = insertelement <20 x double> %0, double %1, i32 2
+ ret <20 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_20xdouble_at_2(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x double> %10, double %19, i32 0
+; CHECK-NEXT: store <2 x double> %20, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %15, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %6, align 16
+; CHECK-NEXT: store <2 x double> %17, <2 x double>* %7, align 16
+; CHECK-NEXT: store <2 x double> %18, <2 x double>* %8, align 16
+; CHECK-NEXT: ret <2 x double> %9
+; CHECK-NEXT: }
+
+define <20 x double> @insert_20xdouble_at_3(<20 x double>, double) {
+entry:
+ %2 = insertelement <20 x double> %0, double %1, i32 3
+ ret <20 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_20xdouble_at_3(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x double> %10, double %19, i32 1
+; CHECK-NEXT: store <2 x double> %20, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %15, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %6, align 16
+; CHECK-NEXT: store <2 x double> %17, <2 x double>* %7, align 16
+; CHECK-NEXT: store <2 x double> %18, <2 x double>* %8, align 16
+; CHECK-NEXT: ret <2 x double> %9
+; CHECK-NEXT: }
+
+define <20 x double> @insert_20xdouble_at_4(<20 x double>, double) {
+entry:
+ %2 = insertelement <20 x double> %0, double %1, i32 4
+ ret <20 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_20xdouble_at_4(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x double> %11, double %19, i32 0
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %20, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %15, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %6, align 16
+; CHECK-NEXT: store <2 x double> %17, <2 x double>* %7, align 16
+; CHECK-NEXT: store <2 x double> %18, <2 x double>* %8, align 16
+; CHECK-NEXT: ret <2 x double> %9
+; CHECK-NEXT: }
+
+define <20 x double> @insert_20xdouble_at_5(<20 x double>, double) {
+entry:
+ %2 = insertelement <20 x double> %0, double %1, i32 5
+ ret <20 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_20xdouble_at_5(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x double> %11, double %19, i32 1
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %20, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %15, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %6, align 16
+; CHECK-NEXT: store <2 x double> %17, <2 x double>* %7, align 16
+; CHECK-NEXT: store <2 x double> %18, <2 x double>* %8, align 16
+; CHECK-NEXT: ret <2 x double> %9
+; CHECK-NEXT: }
+
+define <20 x double> @insert_20xdouble_at_6(<20 x double>, double) {
+entry:
+ %2 = insertelement <20 x double> %0, double %1, i32 6
+ ret <20 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_20xdouble_at_6(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x double> %12, double %19, i32 0
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %20, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %15, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %6, align 16
+; CHECK-NEXT: store <2 x double> %17, <2 x double>* %7, align 16
+; CHECK-NEXT: store <2 x double> %18, <2 x double>* %8, align 16
+; CHECK-NEXT: ret <2 x double> %9
+; CHECK-NEXT: }
+
+define <20 x double> @insert_20xdouble_at_7(<20 x double>, double) {
+entry:
+ %2 = insertelement <20 x double> %0, double %1, i32 7
+ ret <20 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_20xdouble_at_7(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x double> %12, double %19, i32 1
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %20, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %15, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %6, align 16
+; CHECK-NEXT: store <2 x double> %17, <2 x double>* %7, align 16
+; CHECK-NEXT: store <2 x double> %18, <2 x double>* %8, align 16
+; CHECK-NEXT: ret <2 x double> %9
+; CHECK-NEXT: }
+
+define <20 x double> @insert_20xdouble_at_8(<20 x double>, double) {
+entry:
+ %2 = insertelement <20 x double> %0, double %1, i32 8
+ ret <20 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_20xdouble_at_8(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x double> %13, double %19, i32 0
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %20, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %15, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %6, align 16
+; CHECK-NEXT: store <2 x double> %17, <2 x double>* %7, align 16
+; CHECK-NEXT: store <2 x double> %18, <2 x double>* %8, align 16
+; CHECK-NEXT: ret <2 x double> %9
+; CHECK-NEXT: }
+
+define <20 x double> @insert_20xdouble_at_9(<20 x double>, double) {
+entry:
+ %2 = insertelement <20 x double> %0, double %1, i32 9
+ ret <20 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_20xdouble_at_9(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x double> %13, double %19, i32 1
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %20, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %15, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %6, align 16
+; CHECK-NEXT: store <2 x double> %17, <2 x double>* %7, align 16
+; CHECK-NEXT: store <2 x double> %18, <2 x double>* %8, align 16
+; CHECK-NEXT: ret <2 x double> %9
+; CHECK-NEXT: }
+
+define <20 x double> @insert_20xdouble_at_10(<20 x double>, double) {
+entry:
+ %2 = insertelement <20 x double> %0, double %1, i32 10
+ ret <20 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_20xdouble_at_10(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x double> %14, double %19, i32 0
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %20, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %15, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %6, align 16
+; CHECK-NEXT: store <2 x double> %17, <2 x double>* %7, align 16
+; CHECK-NEXT: store <2 x double> %18, <2 x double>* %8, align 16
+; CHECK-NEXT: ret <2 x double> %9
+; CHECK-NEXT: }
+
+define <20 x double> @insert_20xdouble_at_11(<20 x double>, double) {
+entry:
+ %2 = insertelement <20 x double> %0, double %1, i32 11
+ ret <20 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_20xdouble_at_11(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x double> %14, double %19, i32 1
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %20, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %15, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %6, align 16
+; CHECK-NEXT: store <2 x double> %17, <2 x double>* %7, align 16
+; CHECK-NEXT: store <2 x double> %18, <2 x double>* %8, align 16
+; CHECK-NEXT: ret <2 x double> %9
+; CHECK-NEXT: }
+
+define <20 x double> @insert_20xdouble_at_12(<20 x double>, double) {
+entry:
+ %2 = insertelement <20 x double> %0, double %1, i32 12
+ ret <20 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_20xdouble_at_12(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x double> %15, double %19, i32 0
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %20, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %6, align 16
+; CHECK-NEXT: store <2 x double> %17, <2 x double>* %7, align 16
+; CHECK-NEXT: store <2 x double> %18, <2 x double>* %8, align 16
+; CHECK-NEXT: ret <2 x double> %9
+; CHECK-NEXT: }
+
+define <20 x double> @insert_20xdouble_at_13(<20 x double>, double) {
+entry:
+ %2 = insertelement <20 x double> %0, double %1, i32 13
+ ret <20 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_20xdouble_at_13(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x double> %15, double %19, i32 1
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %20, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %6, align 16
+; CHECK-NEXT: store <2 x double> %17, <2 x double>* %7, align 16
+; CHECK-NEXT: store <2 x double> %18, <2 x double>* %8, align 16
+; CHECK-NEXT: ret <2 x double> %9
+; CHECK-NEXT: }
+
+define <20 x double> @insert_20xdouble_at_14(<20 x double>, double) {
+entry:
+ %2 = insertelement <20 x double> %0, double %1, i32 14
+ ret <20 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_20xdouble_at_14(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x double> %16, double %19, i32 0
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %15, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %20, <2 x double>* %6, align 16
+; CHECK-NEXT: store <2 x double> %17, <2 x double>* %7, align 16
+; CHECK-NEXT: store <2 x double> %18, <2 x double>* %8, align 16
+; CHECK-NEXT: ret <2 x double> %9
+; CHECK-NEXT: }
+
+define <20 x double> @insert_20xdouble_at_15(<20 x double>, double) {
+entry:
+ %2 = insertelement <20 x double> %0, double %1, i32 15
+ ret <20 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_20xdouble_at_15(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x double> %16, double %19, i32 1
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %15, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %20, <2 x double>* %6, align 16
+; CHECK-NEXT: store <2 x double> %17, <2 x double>* %7, align 16
+; CHECK-NEXT: store <2 x double> %18, <2 x double>* %8, align 16
+; CHECK-NEXT: ret <2 x double> %9
+; CHECK-NEXT: }
+
+define <20 x double> @insert_20xdouble_at_16(<20 x double>, double) {
+entry:
+ %2 = insertelement <20 x double> %0, double %1, i32 16
+ ret <20 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_20xdouble_at_16(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x double> %17, double %19, i32 0
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %15, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %6, align 16
+; CHECK-NEXT: store <2 x double> %20, <2 x double>* %7, align 16
+; CHECK-NEXT: store <2 x double> %18, <2 x double>* %8, align 16
+; CHECK-NEXT: ret <2 x double> %9
+; CHECK-NEXT: }
+
+define <20 x double> @insert_20xdouble_at_17(<20 x double>, double) {
+entry:
+ %2 = insertelement <20 x double> %0, double %1, i32 17
+ ret <20 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_20xdouble_at_17(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x double> %17, double %19, i32 1
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %15, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %6, align 16
+; CHECK-NEXT: store <2 x double> %20, <2 x double>* %7, align 16
+; CHECK-NEXT: store <2 x double> %18, <2 x double>* %8, align 16
+; CHECK-NEXT: ret <2 x double> %9
+; CHECK-NEXT: }
+
+define <20 x double> @insert_20xdouble_at_18(<20 x double>, double) {
+entry:
+ %2 = insertelement <20 x double> %0, double %1, i32 18
+ ret <20 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_20xdouble_at_18(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x double> %18, double %19, i32 0
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %15, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %6, align 16
+; CHECK-NEXT: store <2 x double> %17, <2 x double>* %7, align 16
+; CHECK-NEXT: store <2 x double> %20, <2 x double>* %8, align 16
+; CHECK-NEXT: ret <2 x double> %9
+; CHECK-NEXT: }
+
+define <20 x double> @insert_20xdouble_at_19(<20 x double>, double) {
+entry:
+ %2 = insertelement <20 x double> %0, double %1, i32 19
+ ret <20 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_20xdouble_at_19(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: %20 = insertelement <2 x double> %18, double %19, i32 1
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %15, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %6, align 16
+; CHECK-NEXT: store <2 x double> %17, <2 x double>* %7, align 16
+; CHECK-NEXT: store <2 x double> %20, <2 x double>* %8, align 16
+; CHECK-NEXT: ret <2 x double> %9
+; CHECK-NEXT: }
+
+define <20 x double> @insert_20xdouble_undef_idx(<20 x double>, double) {
+entry:
+ %2 = insertelement <20 x double> %0, double %1, i32 20
+ ret <20 x double> %2
+}
+; CHECK-LABEL: define <2 x double> @insert_20xdouble_undef_idx(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double) {
+; CHECK: entry:
+; CHECK-NEXT: store <2 x double> %10, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %11, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %12, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %13, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %14, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %15, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %6, align 16
+; CHECK-NEXT: store <2 x double> %17, <2 x double>* %7, align 16
+; CHECK-NEXT: store <2 x double> %18, <2 x double>* %8, align 16
+; CHECK-NEXT: ret <2 x double> %9
+; CHECK-NEXT: }
+
+define <2 x i8> @insert_2xi8_var_idx(<2 x i8>, i8, i32) {
+entry:
+ %3 = insertelement <2 x i8> %0, i8 %1, i32 %2
+ ret <2 x i8> %3
+}
+; CHECK-LABEL: define <16 x i8> @insert_2xi8_var_idx(<16 x i8>, i8, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %3 = insertelement <16 x i8> %0, i8 %1, i32 %2
+; CHECK-NEXT: ret <16 x i8> %3
+; CHECK-NEXT: }
+
+define <2 x i16> @insert_2xi16_var_idx(<2 x i16>, i16, i32) {
+entry:
+ %3 = insertelement <2 x i16> %0, i16 %1, i32 %2
+ ret <2 x i16> %3
+}
+; CHECK-LABEL: define <8 x i16> @insert_2xi16_var_idx(<8 x i16>, i16, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %3 = insertelement <8 x i16> %0, i16 %1, i32 %2
+; CHECK-NEXT: ret <8 x i16> %3
+; CHECK-NEXT: }
+
+define <2 x i32> @insert_2xi32_var_idx(<2 x i32>, i32, i32) {
+entry:
+ %3 = insertelement <2 x i32> %0, i32 %1, i32 %2
+ ret <2 x i32> %3
+}
+; CHECK-LABEL: define <4 x i32> @insert_2xi32_var_idx(<4 x i32>, i32, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %3 = insertelement <4 x i32> %0, i32 %1, i32 %2
+; CHECK-NEXT: ret <4 x i32> %3
+; CHECK-NEXT: }
+
+define <2 x i64> @insert_2xi64_var_idx(<2 x i64>, i64, i32) {
+entry:
+ %3 = insertelement <2 x i64> %0, i64 %1, i32 %2
+ ret <2 x i64> %3
+}
+; CHECK-LABEL: define <2 x i64> @insert_2xi64_var_idx(<2 x i64>, i64, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %3 = insertelement <2 x i64> %0, i64 %1, i32 %2
+; CHECK-NEXT: ret <2 x i64> %3
+; CHECK-NEXT: }
+
+define <2 x i8*> @insert_2xi8ptr_var_idx(<2 x i8*>, i8*, i32) {
+entry:
+ %3 = insertelement <2 x i8*> %0, i8* %1, i32 %2
+ ret <2 x i8*> %3
+}
+; CHECK-LABEL: define <4 x i8*> @insert_2xi8ptr_var_idx(<4 x i8*>, i8*, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %3 = insertelement <4 x i8*> %0, i8* %1, i32 %2
+; CHECK-NEXT: ret <4 x i8*> %3
+; CHECK-NEXT: }
+
+define <2 x float> @insert_2xfloat_var_idx(<2 x float>, float, i32) {
+entry:
+ %3 = insertelement <2 x float> %0, float %1, i32 %2
+ ret <2 x float> %3
+}
+; CHECK-LABEL: define <4 x float> @insert_2xfloat_var_idx(<4 x float>, float, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %3 = insertelement <4 x float> %0, float %1, i32 %2
+; CHECK-NEXT: ret <4 x float> %3
+; CHECK-NEXT: }
+
+define <2 x double> @insert_2xdouble_var_idx(<2 x double>, double, i32) {
+entry:
+ %3 = insertelement <2 x double> %0, double %1, i32 %2
+ ret <2 x double> %3
+}
+; CHECK-LABEL: define <2 x double> @insert_2xdouble_var_idx(<2 x double>, double, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %3 = insertelement <2 x double> %0, double %1, i32 %2
+; CHECK-NEXT: ret <2 x double> %3
+; CHECK-NEXT: }
+
+define <4 x i8> @insert_4xi8_var_idx(<4 x i8>, i8, i32) {
+entry:
+ %3 = insertelement <4 x i8> %0, i8 %1, i32 %2
+ ret <4 x i8> %3
+}
+; CHECK-LABEL: define <16 x i8> @insert_4xi8_var_idx(<16 x i8>, i8, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %3 = insertelement <16 x i8> %0, i8 %1, i32 %2
+; CHECK-NEXT: ret <16 x i8> %3
+; CHECK-NEXT: }
+
+define <4 x i16> @insert_4xi16_var_idx(<4 x i16>, i16, i32) {
+entry:
+ %3 = insertelement <4 x i16> %0, i16 %1, i32 %2
+ ret <4 x i16> %3
+}
+; CHECK-LABEL: define <8 x i16> @insert_4xi16_var_idx(<8 x i16>, i16, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %3 = insertelement <8 x i16> %0, i16 %1, i32 %2
+; CHECK-NEXT: ret <8 x i16> %3
+; CHECK-NEXT: }
+
+define <4 x i32> @insert_4xi32_var_idx(<4 x i32>, i32, i32) {
+entry:
+ %3 = insertelement <4 x i32> %0, i32 %1, i32 %2
+ ret <4 x i32> %3
+}
+; CHECK-LABEL: define <4 x i32> @insert_4xi32_var_idx(<4 x i32>, i32, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %3 = insertelement <4 x i32> %0, i32 %1, i32 %2
+; CHECK-NEXT: ret <4 x i32> %3
+; CHECK-NEXT: }
+
+define <4 x i64> @insert_4xi64_var_idx(<4 x i64>, i64, i32) {
+entry:
+ %3 = insertelement <4 x i64> %0, i64 %1, i32 %2
+ ret <4 x i64> %3
+}
+; CHECK-LABEL: define <2 x i64> @insert_4xi64_var_idx(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, i64, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %5 = insertelement <2 x i64> %1, i64 %3, i32 0
+; CHECK-NEXT: %6 = icmp eq i32 0, %4
+; CHECK-NEXT: %7 = select i1 %6, <2 x i64> %5, <2 x i64> %1
+; CHECK-NEXT: %8 = insertelement <2 x i64> %7, i64 %3, i32 1
+; CHECK-NEXT: %9 = icmp eq i32 1, %4
+; CHECK-NEXT: %10 = select i1 %9, <2 x i64> %8, <2 x i64> %7
+; CHECK-NEXT: %11 = insertelement <2 x i64> %2, i64 %3, i32 0
+; CHECK-NEXT: %12 = icmp eq i32 2, %4
+; CHECK-NEXT: %13 = select i1 %12, <2 x i64> %11, <2 x i64> %2
+; CHECK-NEXT: %14 = insertelement <2 x i64> %13, i64 %3, i32 1
+; CHECK-NEXT: %15 = icmp eq i32 3, %4
+; CHECK-NEXT: %16 = select i1 %15, <2 x i64> %14, <2 x i64> %13
+; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %0, align 16
+; CHECK-NEXT: ret <2 x i64> %10
+; CHECK-NEXT: }
+
+define <4 x i8*> @insert_4xi8ptr_var_idx(<4 x i8*>, i8*, i32) {
+entry:
+ %3 = insertelement <4 x i8*> %0, i8* %1, i32 %2
+ ret <4 x i8*> %3
+}
+; CHECK-LABEL: define <4 x i8*> @insert_4xi8ptr_var_idx(<4 x i8*>, i8*, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %3 = insertelement <4 x i8*> %0, i8* %1, i32 %2
+; CHECK-NEXT: ret <4 x i8*> %3
+; CHECK-NEXT: }
+
+define <4 x float> @insert_4xfloat_var_idx(<4 x float>, float, i32) {
+entry:
+ %3 = insertelement <4 x float> %0, float %1, i32 %2
+ ret <4 x float> %3
+}
+; CHECK-LABEL: define <4 x float> @insert_4xfloat_var_idx(<4 x float>, float, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %3 = insertelement <4 x float> %0, float %1, i32 %2
+; CHECK-NEXT: ret <4 x float> %3
+; CHECK-NEXT: }
+
+define <4 x double> @insert_4xdouble_var_idx(<4 x double>, double, i32) {
+entry:
+ %3 = insertelement <4 x double> %0, double %1, i32 %2
+ ret <4 x double> %3
+}
+; CHECK-LABEL: define <2 x double> @insert_4xdouble_var_idx(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, double, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %5 = insertelement <2 x double> %1, double %3, i32 0
+; CHECK-NEXT: %6 = icmp eq i32 0, %4
+; CHECK-NEXT: %7 = select i1 %6, <2 x double> %5, <2 x double> %1
+; CHECK-NEXT: %8 = insertelement <2 x double> %7, double %3, i32 1
+; CHECK-NEXT: %9 = icmp eq i32 1, %4
+; CHECK-NEXT: %10 = select i1 %9, <2 x double> %8, <2 x double> %7
+; CHECK-NEXT: %11 = insertelement <2 x double> %2, double %3, i32 0
+; CHECK-NEXT: %12 = icmp eq i32 2, %4
+; CHECK-NEXT: %13 = select i1 %12, <2 x double> %11, <2 x double> %2
+; CHECK-NEXT: %14 = insertelement <2 x double> %13, double %3, i32 1
+; CHECK-NEXT: %15 = icmp eq i32 3, %4
+; CHECK-NEXT: %16 = select i1 %15, <2 x double> %14, <2 x double> %13
+; CHECK-NEXT: store <2 x double> %16, <2 x double>* %0, align 16
+; CHECK-NEXT: ret <2 x double> %10
+; CHECK-NEXT: }
+
+define <6 x i8> @insert_6xi8_var_idx(<6 x i8>, i8, i32) {
+entry:
+ %3 = insertelement <6 x i8> %0, i8 %1, i32 %2
+ ret <6 x i8> %3
+}
+; CHECK-LABEL: define <16 x i8> @insert_6xi8_var_idx(<16 x i8>, i8, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %3 = insertelement <16 x i8> %0, i8 %1, i32 %2
+; CHECK-NEXT: ret <16 x i8> %3
+; CHECK-NEXT: }
+
+define <6 x i16> @insert_6xi16_var_idx(<6 x i16>, i16, i32) {
+entry:
+ %3 = insertelement <6 x i16> %0, i16 %1, i32 %2
+ ret <6 x i16> %3
+}
+; CHECK-LABEL: define <8 x i16> @insert_6xi16_var_idx(<8 x i16>, i16, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %3 = insertelement <8 x i16> %0, i16 %1, i32 %2
+; CHECK-NEXT: ret <8 x i16> %3
+; CHECK-NEXT: }
+
+define <6 x i32> @insert_6xi32_var_idx(<6 x i32>, i32, i32) {
+entry:
+ %3 = insertelement <6 x i32> %0, i32 %1, i32 %2
+ ret <6 x i32> %3
+}
+; CHECK-LABEL: define <4 x i32> @insert_6xi32_var_idx(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, i32, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %5 = insertelement <4 x i32> %1, i32 %3, i32 0
+; CHECK-NEXT: %6 = icmp eq i32 0, %4
+; CHECK-NEXT: %7 = select i1 %6, <4 x i32> %5, <4 x i32> %1
+; CHECK-NEXT: %8 = insertelement <4 x i32> %7, i32 %3, i32 1
+; CHECK-NEXT: %9 = icmp eq i32 1, %4
+; CHECK-NEXT: %10 = select i1 %9, <4 x i32> %8, <4 x i32> %7
+; CHECK-NEXT: %11 = insertelement <4 x i32> %10, i32 %3, i32 2
+; CHECK-NEXT: %12 = icmp eq i32 2, %4
+; CHECK-NEXT: %13 = select i1 %12, <4 x i32> %11, <4 x i32> %10
+; CHECK-NEXT: %14 = insertelement <4 x i32> %13, i32 %3, i32 3
+; CHECK-NEXT: %15 = icmp eq i32 3, %4
+; CHECK-NEXT: %16 = select i1 %15, <4 x i32> %14, <4 x i32> %13
+; CHECK-NEXT: %17 = insertelement <4 x i32> %2, i32 %3, i32 0
+; CHECK-NEXT: %18 = icmp eq i32 4, %4
+; CHECK-NEXT: %19 = select i1 %18, <4 x i32> %17, <4 x i32> %2
+; CHECK-NEXT: %20 = insertelement <4 x i32> %19, i32 %3, i32 1
+; CHECK-NEXT: %21 = icmp eq i32 5, %4
+; CHECK-NEXT: %22 = select i1 %21, <4 x i32> %20, <4 x i32> %19
+; CHECK-NEXT: store <4 x i32> %22, <4 x i32>* %0, align 16
+; CHECK-NEXT: ret <4 x i32> %16
+; CHECK-NEXT: }
+
+define <6 x i64> @insert_6xi64_var_idx(<6 x i64>, i64, i32) {
+entry:
+ %3 = insertelement <6 x i64> %0, i64 %1, i32 %2
+ ret <6 x i64> %3
+}
+; CHECK-LABEL: define <2 x i64> @insert_6xi64_var_idx(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, i64, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %7 = insertelement <2 x i64> %2, i64 %5, i32 0
+; CHECK-NEXT: %8 = icmp eq i32 0, %6
+; CHECK-NEXT: %9 = select i1 %8, <2 x i64> %7, <2 x i64> %2
+; CHECK-NEXT: %10 = insertelement <2 x i64> %9, i64 %5, i32 1
+; CHECK-NEXT: %11 = icmp eq i32 1, %6
+; CHECK-NEXT: %12 = select i1 %11, <2 x i64> %10, <2 x i64> %9
+; CHECK-NEXT: %13 = insertelement <2 x i64> %3, i64 %5, i32 0
+; CHECK-NEXT: %14 = icmp eq i32 2, %6
+; CHECK-NEXT: %15 = select i1 %14, <2 x i64> %13, <2 x i64> %3
+; CHECK-NEXT: %16 = insertelement <2 x i64> %15, i64 %5, i32 1
+; CHECK-NEXT: %17 = icmp eq i32 3, %6
+; CHECK-NEXT: %18 = select i1 %17, <2 x i64> %16, <2 x i64> %15
+; CHECK-NEXT: %19 = insertelement <2 x i64> %4, i64 %5, i32 0
+; CHECK-NEXT: %20 = icmp eq i32 4, %6
+; CHECK-NEXT: %21 = select i1 %20, <2 x i64> %19, <2 x i64> %4
+; CHECK-NEXT: %22 = insertelement <2 x i64> %21, i64 %5, i32 1
+; CHECK-NEXT: %23 = icmp eq i32 5, %6
+; CHECK-NEXT: %24 = select i1 %23, <2 x i64> %22, <2 x i64> %21
+; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %24, <2 x i64>* %1, align 16
+; CHECK-NEXT: ret <2 x i64> %12
+; CHECK-NEXT: }
+
+define <6 x i8*> @insert_6xi8ptr_var_idx(<6 x i8*>, i8*, i32) {
+entry:
+ %3 = insertelement <6 x i8*> %0, i8* %1, i32 %2
+ ret <6 x i8*> %3
+}
+; CHECK-LABEL: define <4 x i8*> @insert_6xi8ptr_var_idx(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, i8*, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %5 = insertelement <4 x i8*> %1, i8* %3, i32 0
+; CHECK-NEXT: %6 = icmp eq i32 0, %4
+; CHECK-NEXT: %7 = select i1 %6, <4 x i8*> %5, <4 x i8*> %1
+; CHECK-NEXT: %8 = insertelement <4 x i8*> %7, i8* %3, i32 1
+; CHECK-NEXT: %9 = icmp eq i32 1, %4
+; CHECK-NEXT: %10 = select i1 %9, <4 x i8*> %8, <4 x i8*> %7
+; CHECK-NEXT: %11 = insertelement <4 x i8*> %10, i8* %3, i32 2
+; CHECK-NEXT: %12 = icmp eq i32 2, %4
+; CHECK-NEXT: %13 = select i1 %12, <4 x i8*> %11, <4 x i8*> %10
+; CHECK-NEXT: %14 = insertelement <4 x i8*> %13, i8* %3, i32 3
+; CHECK-NEXT: %15 = icmp eq i32 3, %4
+; CHECK-NEXT: %16 = select i1 %15, <4 x i8*> %14, <4 x i8*> %13
+; CHECK-NEXT: %17 = insertelement <4 x i8*> %2, i8* %3, i32 0
+; CHECK-NEXT: %18 = icmp eq i32 4, %4
+; CHECK-NEXT: %19 = select i1 %18, <4 x i8*> %17, <4 x i8*> %2
+; CHECK-NEXT: %20 = insertelement <4 x i8*> %19, i8* %3, i32 1
+; CHECK-NEXT: %21 = icmp eq i32 5, %4
+; CHECK-NEXT: %22 = select i1 %21, <4 x i8*> %20, <4 x i8*> %19
+; CHECK-NEXT: store <4 x i8*> %22, <4 x i8*>* %0, align 16
+; CHECK-NEXT: ret <4 x i8*> %16
+; CHECK-NEXT: }
+
+define <6 x float> @insert_6xfloat_var_idx(<6 x float>, float, i32) {
+entry:
+ %3 = insertelement <6 x float> %0, float %1, i32 %2
+ ret <6 x float> %3
+}
+; CHECK-LABEL: define <4 x float> @insert_6xfloat_var_idx(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, float, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %5 = insertelement <4 x float> %1, float %3, i32 0
+; CHECK-NEXT: %6 = icmp eq i32 0, %4
+; CHECK-NEXT: %7 = select i1 %6, <4 x float> %5, <4 x float> %1
+; CHECK-NEXT: %8 = insertelement <4 x float> %7, float %3, i32 1
+; CHECK-NEXT: %9 = icmp eq i32 1, %4
+; CHECK-NEXT: %10 = select i1 %9, <4 x float> %8, <4 x float> %7
+; CHECK-NEXT: %11 = insertelement <4 x float> %10, float %3, i32 2
+; CHECK-NEXT: %12 = icmp eq i32 2, %4
+; CHECK-NEXT: %13 = select i1 %12, <4 x float> %11, <4 x float> %10
+; CHECK-NEXT: %14 = insertelement <4 x float> %13, float %3, i32 3
+; CHECK-NEXT: %15 = icmp eq i32 3, %4
+; CHECK-NEXT: %16 = select i1 %15, <4 x float> %14, <4 x float> %13
+; CHECK-NEXT: %17 = insertelement <4 x float> %2, float %3, i32 0
+; CHECK-NEXT: %18 = icmp eq i32 4, %4
+; CHECK-NEXT: %19 = select i1 %18, <4 x float> %17, <4 x float> %2
+; CHECK-NEXT: %20 = insertelement <4 x float> %19, float %3, i32 1
+; CHECK-NEXT: %21 = icmp eq i32 5, %4
+; CHECK-NEXT: %22 = select i1 %21, <4 x float> %20, <4 x float> %19
+; CHECK-NEXT: store <4 x float> %22, <4 x float>* %0, align 16
+; CHECK-NEXT: ret <4 x float> %16
+; CHECK-NEXT: }
+
+define <6 x double> @insert_6xdouble_var_idx(<6 x double>, double, i32) {
+entry:
+ %3 = insertelement <6 x double> %0, double %1, i32 %2
+ ret <6 x double> %3
+}
+; CHECK-LABEL: define <2 x double> @insert_6xdouble_var_idx(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, double, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %7 = insertelement <2 x double> %2, double %5, i32 0
+; CHECK-NEXT: %8 = icmp eq i32 0, %6
+; CHECK-NEXT: %9 = select i1 %8, <2 x double> %7, <2 x double> %2
+; CHECK-NEXT: %10 = insertelement <2 x double> %9, double %5, i32 1
+; CHECK-NEXT: %11 = icmp eq i32 1, %6
+; CHECK-NEXT: %12 = select i1 %11, <2 x double> %10, <2 x double> %9
+; CHECK-NEXT: %13 = insertelement <2 x double> %3, double %5, i32 0
+; CHECK-NEXT: %14 = icmp eq i32 2, %6
+; CHECK-NEXT: %15 = select i1 %14, <2 x double> %13, <2 x double> %3
+; CHECK-NEXT: %16 = insertelement <2 x double> %15, double %5, i32 1
+; CHECK-NEXT: %17 = icmp eq i32 3, %6
+; CHECK-NEXT: %18 = select i1 %17, <2 x double> %16, <2 x double> %15
+; CHECK-NEXT: %19 = insertelement <2 x double> %4, double %5, i32 0
+; CHECK-NEXT: %20 = icmp eq i32 4, %6
+; CHECK-NEXT: %21 = select i1 %20, <2 x double> %19, <2 x double> %4
+; CHECK-NEXT: %22 = insertelement <2 x double> %21, double %5, i32 1
+; CHECK-NEXT: %23 = icmp eq i32 5, %6
+; CHECK-NEXT: %24 = select i1 %23, <2 x double> %22, <2 x double> %21
+; CHECK-NEXT: store <2 x double> %18, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %24, <2 x double>* %1, align 16
+; CHECK-NEXT: ret <2 x double> %12
+; CHECK-NEXT: }
+
+define <8 x i8> @insert_8xi8_var_idx(<8 x i8>, i8, i32) {
+entry:
+ %3 = insertelement <8 x i8> %0, i8 %1, i32 %2
+ ret <8 x i8> %3
+}
+; CHECK-LABEL: define <16 x i8> @insert_8xi8_var_idx(<16 x i8>, i8, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %3 = insertelement <16 x i8> %0, i8 %1, i32 %2
+; CHECK-NEXT: ret <16 x i8> %3
+; CHECK-NEXT: }
+
+define <8 x i16> @insert_8xi16_var_idx(<8 x i16>, i16, i32) {
+entry:
+ %3 = insertelement <8 x i16> %0, i16 %1, i32 %2
+ ret <8 x i16> %3
+}
+; CHECK-LABEL: define <8 x i16> @insert_8xi16_var_idx(<8 x i16>, i16, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %3 = insertelement <8 x i16> %0, i16 %1, i32 %2
+; CHECK-NEXT: ret <8 x i16> %3
+; CHECK-NEXT: }
+
+define <8 x i32> @insert_8xi32_var_idx(<8 x i32>, i32, i32) {
+entry:
+ %3 = insertelement <8 x i32> %0, i32 %1, i32 %2
+ ret <8 x i32> %3
+}
+; CHECK-LABEL: define <4 x i32> @insert_8xi32_var_idx(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, i32, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %5 = insertelement <4 x i32> %1, i32 %3, i32 0
+; CHECK-NEXT: %6 = icmp eq i32 0, %4
+; CHECK-NEXT: %7 = select i1 %6, <4 x i32> %5, <4 x i32> %1
+; CHECK-NEXT: %8 = insertelement <4 x i32> %7, i32 %3, i32 1
+; CHECK-NEXT: %9 = icmp eq i32 1, %4
+; CHECK-NEXT: %10 = select i1 %9, <4 x i32> %8, <4 x i32> %7
+; CHECK-NEXT: %11 = insertelement <4 x i32> %10, i32 %3, i32 2
+; CHECK-NEXT: %12 = icmp eq i32 2, %4
+; CHECK-NEXT: %13 = select i1 %12, <4 x i32> %11, <4 x i32> %10
+; CHECK-NEXT: %14 = insertelement <4 x i32> %13, i32 %3, i32 3
+; CHECK-NEXT: %15 = icmp eq i32 3, %4
+; CHECK-NEXT: %16 = select i1 %15, <4 x i32> %14, <4 x i32> %13
+; CHECK-NEXT: %17 = insertelement <4 x i32> %2, i32 %3, i32 0
+; CHECK-NEXT: %18 = icmp eq i32 4, %4
+; CHECK-NEXT: %19 = select i1 %18, <4 x i32> %17, <4 x i32> %2
+; CHECK-NEXT: %20 = insertelement <4 x i32> %19, i32 %3, i32 1
+; CHECK-NEXT: %21 = icmp eq i32 5, %4
+; CHECK-NEXT: %22 = select i1 %21, <4 x i32> %20, <4 x i32> %19
+; CHECK-NEXT: %23 = insertelement <4 x i32> %22, i32 %3, i32 2
+; CHECK-NEXT: %24 = icmp eq i32 6, %4
+; CHECK-NEXT: %25 = select i1 %24, <4 x i32> %23, <4 x i32> %22
+; CHECK-NEXT: %26 = insertelement <4 x i32> %25, i32 %3, i32 3
+; CHECK-NEXT: %27 = icmp eq i32 7, %4
+; CHECK-NEXT: %28 = select i1 %27, <4 x i32> %26, <4 x i32> %25
+; CHECK-NEXT: store <4 x i32> %28, <4 x i32>* %0, align 16
+; CHECK-NEXT: ret <4 x i32> %16
+; CHECK-NEXT: }
+
+define <8 x i64> @insert_8xi64_var_idx(<8 x i64>, i64, i32) {
+entry:
+ %3 = insertelement <8 x i64> %0, i64 %1, i32 %2
+ ret <8 x i64> %3
+}
+; CHECK-LABEL: define <2 x i64> @insert_8xi64_var_idx(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %9 = insertelement <2 x i64> %3, i64 %7, i32 0
+; CHECK-NEXT: %10 = icmp eq i32 0, %8
+; CHECK-NEXT: %11 = select i1 %10, <2 x i64> %9, <2 x i64> %3
+; CHECK-NEXT: %12 = insertelement <2 x i64> %11, i64 %7, i32 1
+; CHECK-NEXT: %13 = icmp eq i32 1, %8
+; CHECK-NEXT: %14 = select i1 %13, <2 x i64> %12, <2 x i64> %11
+; CHECK-NEXT: %15 = insertelement <2 x i64> %4, i64 %7, i32 0
+; CHECK-NEXT: %16 = icmp eq i32 2, %8
+; CHECK-NEXT: %17 = select i1 %16, <2 x i64> %15, <2 x i64> %4
+; CHECK-NEXT: %18 = insertelement <2 x i64> %17, i64 %7, i32 1
+; CHECK-NEXT: %19 = icmp eq i32 3, %8
+; CHECK-NEXT: %20 = select i1 %19, <2 x i64> %18, <2 x i64> %17
+; CHECK-NEXT: %21 = insertelement <2 x i64> %5, i64 %7, i32 0
+; CHECK-NEXT: %22 = icmp eq i32 4, %8
+; CHECK-NEXT: %23 = select i1 %22, <2 x i64> %21, <2 x i64> %5
+; CHECK-NEXT: %24 = insertelement <2 x i64> %23, i64 %7, i32 1
+; CHECK-NEXT: %25 = icmp eq i32 5, %8
+; CHECK-NEXT: %26 = select i1 %25, <2 x i64> %24, <2 x i64> %23
+; CHECK-NEXT: %27 = insertelement <2 x i64> %6, i64 %7, i32 0
+; CHECK-NEXT: %28 = icmp eq i32 6, %8
+; CHECK-NEXT: %29 = select i1 %28, <2 x i64> %27, <2 x i64> %6
+; CHECK-NEXT: %30 = insertelement <2 x i64> %29, i64 %7, i32 1
+; CHECK-NEXT: %31 = icmp eq i32 7, %8
+; CHECK-NEXT: %32 = select i1 %31, <2 x i64> %30, <2 x i64> %29
+; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %26, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %32, <2 x i64>* %2, align 16
+; CHECK-NEXT: ret <2 x i64> %14
+; CHECK-NEXT: }
+
+define <8 x i8*> @insert_8xi8ptr_var_idx(<8 x i8*>, i8*, i32) {
+entry:
+ %3 = insertelement <8 x i8*> %0, i8* %1, i32 %2
+ ret <8 x i8*> %3
+}
+; CHECK-LABEL: define <4 x i8*> @insert_8xi8ptr_var_idx(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, i8*, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %5 = insertelement <4 x i8*> %1, i8* %3, i32 0
+; CHECK-NEXT: %6 = icmp eq i32 0, %4
+; CHECK-NEXT: %7 = select i1 %6, <4 x i8*> %5, <4 x i8*> %1
+; CHECK-NEXT: %8 = insertelement <4 x i8*> %7, i8* %3, i32 1
+; CHECK-NEXT: %9 = icmp eq i32 1, %4
+; CHECK-NEXT: %10 = select i1 %9, <4 x i8*> %8, <4 x i8*> %7
+; CHECK-NEXT: %11 = insertelement <4 x i8*> %10, i8* %3, i32 2
+; CHECK-NEXT: %12 = icmp eq i32 2, %4
+; CHECK-NEXT: %13 = select i1 %12, <4 x i8*> %11, <4 x i8*> %10
+; CHECK-NEXT: %14 = insertelement <4 x i8*> %13, i8* %3, i32 3
+; CHECK-NEXT: %15 = icmp eq i32 3, %4
+; CHECK-NEXT: %16 = select i1 %15, <4 x i8*> %14, <4 x i8*> %13
+; CHECK-NEXT: %17 = insertelement <4 x i8*> %2, i8* %3, i32 0
+; CHECK-NEXT: %18 = icmp eq i32 4, %4
+; CHECK-NEXT: %19 = select i1 %18, <4 x i8*> %17, <4 x i8*> %2
+; CHECK-NEXT: %20 = insertelement <4 x i8*> %19, i8* %3, i32 1
+; CHECK-NEXT: %21 = icmp eq i32 5, %4
+; CHECK-NEXT: %22 = select i1 %21, <4 x i8*> %20, <4 x i8*> %19
+; CHECK-NEXT: %23 = insertelement <4 x i8*> %22, i8* %3, i32 2
+; CHECK-NEXT: %24 = icmp eq i32 6, %4
+; CHECK-NEXT: %25 = select i1 %24, <4 x i8*> %23, <4 x i8*> %22
+; CHECK-NEXT: %26 = insertelement <4 x i8*> %25, i8* %3, i32 3
+; CHECK-NEXT: %27 = icmp eq i32 7, %4
+; CHECK-NEXT: %28 = select i1 %27, <4 x i8*> %26, <4 x i8*> %25
+; CHECK-NEXT: store <4 x i8*> %28, <4 x i8*>* %0, align 16
+; CHECK-NEXT: ret <4 x i8*> %16
+; CHECK-NEXT: }
+
+define <8 x float> @insert_8xfloat_var_idx(<8 x float>, float, i32) {
+entry:
+ %3 = insertelement <8 x float> %0, float %1, i32 %2
+ ret <8 x float> %3
+}
+; CHECK-LABEL: define <4 x float> @insert_8xfloat_var_idx(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, float, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %5 = insertelement <4 x float> %1, float %3, i32 0
+; CHECK-NEXT: %6 = icmp eq i32 0, %4
+; CHECK-NEXT: %7 = select i1 %6, <4 x float> %5, <4 x float> %1
+; CHECK-NEXT: %8 = insertelement <4 x float> %7, float %3, i32 1
+; CHECK-NEXT: %9 = icmp eq i32 1, %4
+; CHECK-NEXT: %10 = select i1 %9, <4 x float> %8, <4 x float> %7
+; CHECK-NEXT: %11 = insertelement <4 x float> %10, float %3, i32 2
+; CHECK-NEXT: %12 = icmp eq i32 2, %4
+; CHECK-NEXT: %13 = select i1 %12, <4 x float> %11, <4 x float> %10
+; CHECK-NEXT: %14 = insertelement <4 x float> %13, float %3, i32 3
+; CHECK-NEXT: %15 = icmp eq i32 3, %4
+; CHECK-NEXT: %16 = select i1 %15, <4 x float> %14, <4 x float> %13
+; CHECK-NEXT: %17 = insertelement <4 x float> %2, float %3, i32 0
+; CHECK-NEXT: %18 = icmp eq i32 4, %4
+; CHECK-NEXT: %19 = select i1 %18, <4 x float> %17, <4 x float> %2
+; CHECK-NEXT: %20 = insertelement <4 x float> %19, float %3, i32 1
+; CHECK-NEXT: %21 = icmp eq i32 5, %4
+; CHECK-NEXT: %22 = select i1 %21, <4 x float> %20, <4 x float> %19
+; CHECK-NEXT: %23 = insertelement <4 x float> %22, float %3, i32 2
+; CHECK-NEXT: %24 = icmp eq i32 6, %4
+; CHECK-NEXT: %25 = select i1 %24, <4 x float> %23, <4 x float> %22
+; CHECK-NEXT: %26 = insertelement <4 x float> %25, float %3, i32 3
+; CHECK-NEXT: %27 = icmp eq i32 7, %4
+; CHECK-NEXT: %28 = select i1 %27, <4 x float> %26, <4 x float> %25
+; CHECK-NEXT: store <4 x float> %28, <4 x float>* %0, align 16
+; CHECK-NEXT: ret <4 x float> %16
+; CHECK-NEXT: }
+
+define <8 x double> @insert_8xdouble_var_idx(<8 x double>, double, i32) {
+entry:
+ %3 = insertelement <8 x double> %0, double %1, i32 %2
+ ret <8 x double> %3
+}
+; CHECK-LABEL: define <2 x double> @insert_8xdouble_var_idx(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, double, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %9 = insertelement <2 x double> %3, double %7, i32 0
+; CHECK-NEXT: %10 = icmp eq i32 0, %8
+; CHECK-NEXT: %11 = select i1 %10, <2 x double> %9, <2 x double> %3
+; CHECK-NEXT: %12 = insertelement <2 x double> %11, double %7, i32 1
+; CHECK-NEXT: %13 = icmp eq i32 1, %8
+; CHECK-NEXT: %14 = select i1 %13, <2 x double> %12, <2 x double> %11
+; CHECK-NEXT: %15 = insertelement <2 x double> %4, double %7, i32 0
+; CHECK-NEXT: %16 = icmp eq i32 2, %8
+; CHECK-NEXT: %17 = select i1 %16, <2 x double> %15, <2 x double> %4
+; CHECK-NEXT: %18 = insertelement <2 x double> %17, double %7, i32 1
+; CHECK-NEXT: %19 = icmp eq i32 3, %8
+; CHECK-NEXT: %20 = select i1 %19, <2 x double> %18, <2 x double> %17
+; CHECK-NEXT: %21 = insertelement <2 x double> %5, double %7, i32 0
+; CHECK-NEXT: %22 = icmp eq i32 4, %8
+; CHECK-NEXT: %23 = select i1 %22, <2 x double> %21, <2 x double> %5
+; CHECK-NEXT: %24 = insertelement <2 x double> %23, double %7, i32 1
+; CHECK-NEXT: %25 = icmp eq i32 5, %8
+; CHECK-NEXT: %26 = select i1 %25, <2 x double> %24, <2 x double> %23
+; CHECK-NEXT: %27 = insertelement <2 x double> %6, double %7, i32 0
+; CHECK-NEXT: %28 = icmp eq i32 6, %8
+; CHECK-NEXT: %29 = select i1 %28, <2 x double> %27, <2 x double> %6
+; CHECK-NEXT: %30 = insertelement <2 x double> %29, double %7, i32 1
+; CHECK-NEXT: %31 = icmp eq i32 7, %8
+; CHECK-NEXT: %32 = select i1 %31, <2 x double> %30, <2 x double> %29
+; CHECK-NEXT: store <2 x double> %20, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %26, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %32, <2 x double>* %2, align 16
+; CHECK-NEXT: ret <2 x double> %14
+; CHECK-NEXT: }
+
+define <12 x i8> @insert_12xi8_var_idx(<12 x i8>, i8, i32) {
+entry:
+ %3 = insertelement <12 x i8> %0, i8 %1, i32 %2
+ ret <12 x i8> %3
+}
+; CHECK-LABEL: define <16 x i8> @insert_12xi8_var_idx(<16 x i8>, i8, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %3 = insertelement <16 x i8> %0, i8 %1, i32 %2
+; CHECK-NEXT: ret <16 x i8> %3
+; CHECK-NEXT: }
+
+define <12 x i16> @insert_12xi16_var_idx(<12 x i16>, i16, i32) {
+entry:
+ %3 = insertelement <12 x i16> %0, i16 %1, i32 %2
+ ret <12 x i16> %3
+}
+; CHECK-LABEL: define <8 x i16> @insert_12xi16_var_idx(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %5 = insertelement <8 x i16> %1, i16 %3, i32 0
+; CHECK-NEXT: %6 = icmp eq i32 0, %4
+; CHECK-NEXT: %7 = select i1 %6, <8 x i16> %5, <8 x i16> %1
+; CHECK-NEXT: %8 = insertelement <8 x i16> %7, i16 %3, i32 1
+; CHECK-NEXT: %9 = icmp eq i32 1, %4
+; CHECK-NEXT: %10 = select i1 %9, <8 x i16> %8, <8 x i16> %7
+; CHECK-NEXT: %11 = insertelement <8 x i16> %10, i16 %3, i32 2
+; CHECK-NEXT: %12 = icmp eq i32 2, %4
+; CHECK-NEXT: %13 = select i1 %12, <8 x i16> %11, <8 x i16> %10
+; CHECK-NEXT: %14 = insertelement <8 x i16> %13, i16 %3, i32 3
+; CHECK-NEXT: %15 = icmp eq i32 3, %4
+; CHECK-NEXT: %16 = select i1 %15, <8 x i16> %14, <8 x i16> %13
+; CHECK-NEXT: %17 = insertelement <8 x i16> %16, i16 %3, i32 4
+; CHECK-NEXT: %18 = icmp eq i32 4, %4
+; CHECK-NEXT: %19 = select i1 %18, <8 x i16> %17, <8 x i16> %16
+; CHECK-NEXT: %20 = insertelement <8 x i16> %19, i16 %3, i32 5
+; CHECK-NEXT: %21 = icmp eq i32 5, %4
+; CHECK-NEXT: %22 = select i1 %21, <8 x i16> %20, <8 x i16> %19
+; CHECK-NEXT: %23 = insertelement <8 x i16> %22, i16 %3, i32 6
+; CHECK-NEXT: %24 = icmp eq i32 6, %4
+; CHECK-NEXT: %25 = select i1 %24, <8 x i16> %23, <8 x i16> %22
+; CHECK-NEXT: %26 = insertelement <8 x i16> %25, i16 %3, i32 7
+; CHECK-NEXT: %27 = icmp eq i32 7, %4
+; CHECK-NEXT: %28 = select i1 %27, <8 x i16> %26, <8 x i16> %25
+; CHECK-NEXT: %29 = insertelement <8 x i16> %2, i16 %3, i32 0
+; CHECK-NEXT: %30 = icmp eq i32 8, %4
+; CHECK-NEXT: %31 = select i1 %30, <8 x i16> %29, <8 x i16> %2
+; CHECK-NEXT: %32 = insertelement <8 x i16> %31, i16 %3, i32 1
+; CHECK-NEXT: %33 = icmp eq i32 9, %4
+; CHECK-NEXT: %34 = select i1 %33, <8 x i16> %32, <8 x i16> %31
+; CHECK-NEXT: %35 = insertelement <8 x i16> %34, i16 %3, i32 2
+; CHECK-NEXT: %36 = icmp eq i32 10, %4
+; CHECK-NEXT: %37 = select i1 %36, <8 x i16> %35, <8 x i16> %34
+; CHECK-NEXT: %38 = insertelement <8 x i16> %37, i16 %3, i32 3
+; CHECK-NEXT: %39 = icmp eq i32 11, %4
+; CHECK-NEXT: %40 = select i1 %39, <8 x i16> %38, <8 x i16> %37
+; CHECK-NEXT: store <8 x i16> %40, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %28
+; CHECK-NEXT: }
+
+define <12 x i32> @insert_12xi32_var_idx(<12 x i32>, i32, i32) {
+entry:
+ %3 = insertelement <12 x i32> %0, i32 %1, i32 %2
+ ret <12 x i32> %3
+}
+; CHECK-LABEL: define <4 x i32> @insert_12xi32_var_idx(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, i32, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %7 = insertelement <4 x i32> %2, i32 %5, i32 0
+; CHECK-NEXT: %8 = icmp eq i32 0, %6
+; CHECK-NEXT: %9 = select i1 %8, <4 x i32> %7, <4 x i32> %2
+; CHECK-NEXT: %10 = insertelement <4 x i32> %9, i32 %5, i32 1
+; CHECK-NEXT: %11 = icmp eq i32 1, %6
+; CHECK-NEXT: %12 = select i1 %11, <4 x i32> %10, <4 x i32> %9
+; CHECK-NEXT: %13 = insertelement <4 x i32> %12, i32 %5, i32 2
+; CHECK-NEXT: %14 = icmp eq i32 2, %6
+; CHECK-NEXT: %15 = select i1 %14, <4 x i32> %13, <4 x i32> %12
+; CHECK-NEXT: %16 = insertelement <4 x i32> %15, i32 %5, i32 3
+; CHECK-NEXT: %17 = icmp eq i32 3, %6
+; CHECK-NEXT: %18 = select i1 %17, <4 x i32> %16, <4 x i32> %15
+; CHECK-NEXT: %19 = insertelement <4 x i32> %3, i32 %5, i32 0
+; CHECK-NEXT: %20 = icmp eq i32 4, %6
+; CHECK-NEXT: %21 = select i1 %20, <4 x i32> %19, <4 x i32> %3
+; CHECK-NEXT: %22 = insertelement <4 x i32> %21, i32 %5, i32 1
+; CHECK-NEXT: %23 = icmp eq i32 5, %6
+; CHECK-NEXT: %24 = select i1 %23, <4 x i32> %22, <4 x i32> %21
+; CHECK-NEXT: %25 = insertelement <4 x i32> %24, i32 %5, i32 2
+; CHECK-NEXT: %26 = icmp eq i32 6, %6
+; CHECK-NEXT: %27 = select i1 %26, <4 x i32> %25, <4 x i32> %24
+; CHECK-NEXT: %28 = insertelement <4 x i32> %27, i32 %5, i32 3
+; CHECK-NEXT: %29 = icmp eq i32 7, %6
+; CHECK-NEXT: %30 = select i1 %29, <4 x i32> %28, <4 x i32> %27
+; CHECK-NEXT: %31 = insertelement <4 x i32> %4, i32 %5, i32 0
+; CHECK-NEXT: %32 = icmp eq i32 8, %6
+; CHECK-NEXT: %33 = select i1 %32, <4 x i32> %31, <4 x i32> %4
+; CHECK-NEXT: %34 = insertelement <4 x i32> %33, i32 %5, i32 1
+; CHECK-NEXT: %35 = icmp eq i32 9, %6
+; CHECK-NEXT: %36 = select i1 %35, <4 x i32> %34, <4 x i32> %33
+; CHECK-NEXT: %37 = insertelement <4 x i32> %36, i32 %5, i32 2
+; CHECK-NEXT: %38 = icmp eq i32 10, %6
+; CHECK-NEXT: %39 = select i1 %38, <4 x i32> %37, <4 x i32> %36
+; CHECK-NEXT: %40 = insertelement <4 x i32> %39, i32 %5, i32 3
+; CHECK-NEXT: %41 = icmp eq i32 11, %6
+; CHECK-NEXT: %42 = select i1 %41, <4 x i32> %40, <4 x i32> %39
+; CHECK-NEXT: store <4 x i32> %30, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %42, <4 x i32>* %1, align 16
+; CHECK-NEXT: ret <4 x i32> %18
+; CHECK-NEXT: }
+
+define <12 x i64> @insert_12xi64_var_idx(<12 x i64>, i64, i32) {
+entry:
+ %3 = insertelement <12 x i64> %0, i64 %1, i32 %2
+ ret <12 x i64> %3
+}
+; CHECK-LABEL: define <2 x i64> @insert_12xi64_var_idx(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %13 = insertelement <2 x i64> %5, i64 %11, i32 0
+; CHECK-NEXT: %14 = icmp eq i32 0, %12
+; CHECK-NEXT: %15 = select i1 %14, <2 x i64> %13, <2 x i64> %5
+; CHECK-NEXT: %16 = insertelement <2 x i64> %15, i64 %11, i32 1
+; CHECK-NEXT: %17 = icmp eq i32 1, %12
+; CHECK-NEXT: %18 = select i1 %17, <2 x i64> %16, <2 x i64> %15
+; CHECK-NEXT: %19 = insertelement <2 x i64> %6, i64 %11, i32 0
+; CHECK-NEXT: %20 = icmp eq i32 2, %12
+; CHECK-NEXT: %21 = select i1 %20, <2 x i64> %19, <2 x i64> %6
+; CHECK-NEXT: %22 = insertelement <2 x i64> %21, i64 %11, i32 1
+; CHECK-NEXT: %23 = icmp eq i32 3, %12
+; CHECK-NEXT: %24 = select i1 %23, <2 x i64> %22, <2 x i64> %21
+; CHECK-NEXT: %25 = insertelement <2 x i64> %7, i64 %11, i32 0
+; CHECK-NEXT: %26 = icmp eq i32 4, %12
+; CHECK-NEXT: %27 = select i1 %26, <2 x i64> %25, <2 x i64> %7
+; CHECK-NEXT: %28 = insertelement <2 x i64> %27, i64 %11, i32 1
+; CHECK-NEXT: %29 = icmp eq i32 5, %12
+; CHECK-NEXT: %30 = select i1 %29, <2 x i64> %28, <2 x i64> %27
+; CHECK-NEXT: %31 = insertelement <2 x i64> %8, i64 %11, i32 0
+; CHECK-NEXT: %32 = icmp eq i32 6, %12
+; CHECK-NEXT: %33 = select i1 %32, <2 x i64> %31, <2 x i64> %8
+; CHECK-NEXT: %34 = insertelement <2 x i64> %33, i64 %11, i32 1
+; CHECK-NEXT: %35 = icmp eq i32 7, %12
+; CHECK-NEXT: %36 = select i1 %35, <2 x i64> %34, <2 x i64> %33
+; CHECK-NEXT: %37 = insertelement <2 x i64> %9, i64 %11, i32 0
+; CHECK-NEXT: %38 = icmp eq i32 8, %12
+; CHECK-NEXT: %39 = select i1 %38, <2 x i64> %37, <2 x i64> %9
+; CHECK-NEXT: %40 = insertelement <2 x i64> %39, i64 %11, i32 1
+; CHECK-NEXT: %41 = icmp eq i32 9, %12
+; CHECK-NEXT: %42 = select i1 %41, <2 x i64> %40, <2 x i64> %39
+; CHECK-NEXT: %43 = insertelement <2 x i64> %10, i64 %11, i32 0
+; CHECK-NEXT: %44 = icmp eq i32 10, %12
+; CHECK-NEXT: %45 = select i1 %44, <2 x i64> %43, <2 x i64> %10
+; CHECK-NEXT: %46 = insertelement <2 x i64> %45, i64 %11, i32 1
+; CHECK-NEXT: %47 = icmp eq i32 11, %12
+; CHECK-NEXT: %48 = select i1 %47, <2 x i64> %46, <2 x i64> %45
+; CHECK-NEXT: store <2 x i64> %24, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %30, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %36, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %42, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %48, <2 x i64>* %4, align 16
+; CHECK-NEXT: ret <2 x i64> %18
+; CHECK-NEXT: }
+
+define <12 x i8*> @insert_12xi8ptr_var_idx(<12 x i8*>, i8*, i32) {
+entry:
+ %3 = insertelement <12 x i8*> %0, i8* %1, i32 %2
+ ret <12 x i8*> %3
+}
+; CHECK-LABEL: define <4 x i8*> @insert_12xi8ptr_var_idx(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %7 = insertelement <4 x i8*> %2, i8* %5, i32 0
+; CHECK-NEXT: %8 = icmp eq i32 0, %6
+; CHECK-NEXT: %9 = select i1 %8, <4 x i8*> %7, <4 x i8*> %2
+; CHECK-NEXT: %10 = insertelement <4 x i8*> %9, i8* %5, i32 1
+; CHECK-NEXT: %11 = icmp eq i32 1, %6
+; CHECK-NEXT: %12 = select i1 %11, <4 x i8*> %10, <4 x i8*> %9
+; CHECK-NEXT: %13 = insertelement <4 x i8*> %12, i8* %5, i32 2
+; CHECK-NEXT: %14 = icmp eq i32 2, %6
+; CHECK-NEXT: %15 = select i1 %14, <4 x i8*> %13, <4 x i8*> %12
+; CHECK-NEXT: %16 = insertelement <4 x i8*> %15, i8* %5, i32 3
+; CHECK-NEXT: %17 = icmp eq i32 3, %6
+; CHECK-NEXT: %18 = select i1 %17, <4 x i8*> %16, <4 x i8*> %15
+; CHECK-NEXT: %19 = insertelement <4 x i8*> %3, i8* %5, i32 0
+; CHECK-NEXT: %20 = icmp eq i32 4, %6
+; CHECK-NEXT: %21 = select i1 %20, <4 x i8*> %19, <4 x i8*> %3
+; CHECK-NEXT: %22 = insertelement <4 x i8*> %21, i8* %5, i32 1
+; CHECK-NEXT: %23 = icmp eq i32 5, %6
+; CHECK-NEXT: %24 = select i1 %23, <4 x i8*> %22, <4 x i8*> %21
+; CHECK-NEXT: %25 = insertelement <4 x i8*> %24, i8* %5, i32 2
+; CHECK-NEXT: %26 = icmp eq i32 6, %6
+; CHECK-NEXT: %27 = select i1 %26, <4 x i8*> %25, <4 x i8*> %24
+; CHECK-NEXT: %28 = insertelement <4 x i8*> %27, i8* %5, i32 3
+; CHECK-NEXT: %29 = icmp eq i32 7, %6
+; CHECK-NEXT: %30 = select i1 %29, <4 x i8*> %28, <4 x i8*> %27
+; CHECK-NEXT: %31 = insertelement <4 x i8*> %4, i8* %5, i32 0
+; CHECK-NEXT: %32 = icmp eq i32 8, %6
+; CHECK-NEXT: %33 = select i1 %32, <4 x i8*> %31, <4 x i8*> %4
+; CHECK-NEXT: %34 = insertelement <4 x i8*> %33, i8* %5, i32 1
+; CHECK-NEXT: %35 = icmp eq i32 9, %6
+; CHECK-NEXT: %36 = select i1 %35, <4 x i8*> %34, <4 x i8*> %33
+; CHECK-NEXT: %37 = insertelement <4 x i8*> %36, i8* %5, i32 2
+; CHECK-NEXT: %38 = icmp eq i32 10, %6
+; CHECK-NEXT: %39 = select i1 %38, <4 x i8*> %37, <4 x i8*> %36
+; CHECK-NEXT: %40 = insertelement <4 x i8*> %39, i8* %5, i32 3
+; CHECK-NEXT: %41 = icmp eq i32 11, %6
+; CHECK-NEXT: %42 = select i1 %41, <4 x i8*> %40, <4 x i8*> %39
+; CHECK-NEXT: store <4 x i8*> %30, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %42, <4 x i8*>* %1, align 16
+; CHECK-NEXT: ret <4 x i8*> %18
+; CHECK-NEXT: }
+
+define <12 x float> @insert_12xfloat_var_idx(<12 x float>, float, i32) {
+entry:
+ %3 = insertelement <12 x float> %0, float %1, i32 %2
+ ret <12 x float> %3
+}
+; CHECK-LABEL: define <4 x float> @insert_12xfloat_var_idx(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, float, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %7 = insertelement <4 x float> %2, float %5, i32 0
+; CHECK-NEXT: %8 = icmp eq i32 0, %6
+; CHECK-NEXT: %9 = select i1 %8, <4 x float> %7, <4 x float> %2
+; CHECK-NEXT: %10 = insertelement <4 x float> %9, float %5, i32 1
+; CHECK-NEXT: %11 = icmp eq i32 1, %6
+; CHECK-NEXT: %12 = select i1 %11, <4 x float> %10, <4 x float> %9
+; CHECK-NEXT: %13 = insertelement <4 x float> %12, float %5, i32 2
+; CHECK-NEXT: %14 = icmp eq i32 2, %6
+; CHECK-NEXT: %15 = select i1 %14, <4 x float> %13, <4 x float> %12
+; CHECK-NEXT: %16 = insertelement <4 x float> %15, float %5, i32 3
+; CHECK-NEXT: %17 = icmp eq i32 3, %6
+; CHECK-NEXT: %18 = select i1 %17, <4 x float> %16, <4 x float> %15
+; CHECK-NEXT: %19 = insertelement <4 x float> %3, float %5, i32 0
+; CHECK-NEXT: %20 = icmp eq i32 4, %6
+; CHECK-NEXT: %21 = select i1 %20, <4 x float> %19, <4 x float> %3
+; CHECK-NEXT: %22 = insertelement <4 x float> %21, float %5, i32 1
+; CHECK-NEXT: %23 = icmp eq i32 5, %6
+; CHECK-NEXT: %24 = select i1 %23, <4 x float> %22, <4 x float> %21
+; CHECK-NEXT: %25 = insertelement <4 x float> %24, float %5, i32 2
+; CHECK-NEXT: %26 = icmp eq i32 6, %6
+; CHECK-NEXT: %27 = select i1 %26, <4 x float> %25, <4 x float> %24
+; CHECK-NEXT: %28 = insertelement <4 x float> %27, float %5, i32 3
+; CHECK-NEXT: %29 = icmp eq i32 7, %6
+; CHECK-NEXT: %30 = select i1 %29, <4 x float> %28, <4 x float> %27
+; CHECK-NEXT: %31 = insertelement <4 x float> %4, float %5, i32 0
+; CHECK-NEXT: %32 = icmp eq i32 8, %6
+; CHECK-NEXT: %33 = select i1 %32, <4 x float> %31, <4 x float> %4
+; CHECK-NEXT: %34 = insertelement <4 x float> %33, float %5, i32 1
+; CHECK-NEXT: %35 = icmp eq i32 9, %6
+; CHECK-NEXT: %36 = select i1 %35, <4 x float> %34, <4 x float> %33
+; CHECK-NEXT: %37 = insertelement <4 x float> %36, float %5, i32 2
+; CHECK-NEXT: %38 = icmp eq i32 10, %6
+; CHECK-NEXT: %39 = select i1 %38, <4 x float> %37, <4 x float> %36
+; CHECK-NEXT: %40 = insertelement <4 x float> %39, float %5, i32 3
+; CHECK-NEXT: %41 = icmp eq i32 11, %6
+; CHECK-NEXT: %42 = select i1 %41, <4 x float> %40, <4 x float> %39
+; CHECK-NEXT: store <4 x float> %30, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %42, <4 x float>* %1, align 16
+; CHECK-NEXT: ret <4 x float> %18
+; CHECK-NEXT: }
+
+define <12 x double> @insert_12xdouble_var_idx(<12 x double>, double, i32) {
+entry:
+ %3 = insertelement <12 x double> %0, double %1, i32 %2
+ ret <12 x double> %3
+}
+; CHECK-LABEL: define <2 x double> @insert_12xdouble_var_idx(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %13 = insertelement <2 x double> %5, double %11, i32 0
+; CHECK-NEXT: %14 = icmp eq i32 0, %12
+; CHECK-NEXT: %15 = select i1 %14, <2 x double> %13, <2 x double> %5
+; CHECK-NEXT: %16 = insertelement <2 x double> %15, double %11, i32 1
+; CHECK-NEXT: %17 = icmp eq i32 1, %12
+; CHECK-NEXT: %18 = select i1 %17, <2 x double> %16, <2 x double> %15
+; CHECK-NEXT: %19 = insertelement <2 x double> %6, double %11, i32 0
+; CHECK-NEXT: %20 = icmp eq i32 2, %12
+; CHECK-NEXT: %21 = select i1 %20, <2 x double> %19, <2 x double> %6
+; CHECK-NEXT: %22 = insertelement <2 x double> %21, double %11, i32 1
+; CHECK-NEXT: %23 = icmp eq i32 3, %12
+; CHECK-NEXT: %24 = select i1 %23, <2 x double> %22, <2 x double> %21
+; CHECK-NEXT: %25 = insertelement <2 x double> %7, double %11, i32 0
+; CHECK-NEXT: %26 = icmp eq i32 4, %12
+; CHECK-NEXT: %27 = select i1 %26, <2 x double> %25, <2 x double> %7
+; CHECK-NEXT: %28 = insertelement <2 x double> %27, double %11, i32 1
+; CHECK-NEXT: %29 = icmp eq i32 5, %12
+; CHECK-NEXT: %30 = select i1 %29, <2 x double> %28, <2 x double> %27
+; CHECK-NEXT: %31 = insertelement <2 x double> %8, double %11, i32 0
+; CHECK-NEXT: %32 = icmp eq i32 6, %12
+; CHECK-NEXT: %33 = select i1 %32, <2 x double> %31, <2 x double> %8
+; CHECK-NEXT: %34 = insertelement <2 x double> %33, double %11, i32 1
+; CHECK-NEXT: %35 = icmp eq i32 7, %12
+; CHECK-NEXT: %36 = select i1 %35, <2 x double> %34, <2 x double> %33
+; CHECK-NEXT: %37 = insertelement <2 x double> %9, double %11, i32 0
+; CHECK-NEXT: %38 = icmp eq i32 8, %12
+; CHECK-NEXT: %39 = select i1 %38, <2 x double> %37, <2 x double> %9
+; CHECK-NEXT: %40 = insertelement <2 x double> %39, double %11, i32 1
+; CHECK-NEXT: %41 = icmp eq i32 9, %12
+; CHECK-NEXT: %42 = select i1 %41, <2 x double> %40, <2 x double> %39
+; CHECK-NEXT: %43 = insertelement <2 x double> %10, double %11, i32 0
+; CHECK-NEXT: %44 = icmp eq i32 10, %12
+; CHECK-NEXT: %45 = select i1 %44, <2 x double> %43, <2 x double> %10
+; CHECK-NEXT: %46 = insertelement <2 x double> %45, double %11, i32 1
+; CHECK-NEXT: %47 = icmp eq i32 11, %12
+; CHECK-NEXT: %48 = select i1 %47, <2 x double> %46, <2 x double> %45
+; CHECK-NEXT: store <2 x double> %24, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %30, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %36, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %42, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %48, <2 x double>* %4, align 16
+; CHECK-NEXT: ret <2 x double> %18
+; CHECK-NEXT: }
+
+define <16 x i8> @insert_16xi8_var_idx(<16 x i8>, i8, i32) {
+entry:
+ %3 = insertelement <16 x i8> %0, i8 %1, i32 %2
+ ret <16 x i8> %3
+}
+; CHECK-LABEL: define <16 x i8> @insert_16xi8_var_idx(<16 x i8>, i8, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %3 = insertelement <16 x i8> %0, i8 %1, i32 %2
+; CHECK-NEXT: ret <16 x i8> %3
+; CHECK-NEXT: }
+
+define <16 x i16> @insert_16xi16_var_idx(<16 x i16>, i16, i32) {
+entry:
+ %3 = insertelement <16 x i16> %0, i16 %1, i32 %2
+ ret <16 x i16> %3
+}
+; CHECK-LABEL: define <8 x i16> @insert_16xi16_var_idx(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, i16, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %5 = insertelement <8 x i16> %1, i16 %3, i32 0
+; CHECK-NEXT: %6 = icmp eq i32 0, %4
+; CHECK-NEXT: %7 = select i1 %6, <8 x i16> %5, <8 x i16> %1
+; CHECK-NEXT: %8 = insertelement <8 x i16> %7, i16 %3, i32 1
+; CHECK-NEXT: %9 = icmp eq i32 1, %4
+; CHECK-NEXT: %10 = select i1 %9, <8 x i16> %8, <8 x i16> %7
+; CHECK-NEXT: %11 = insertelement <8 x i16> %10, i16 %3, i32 2
+; CHECK-NEXT: %12 = icmp eq i32 2, %4
+; CHECK-NEXT: %13 = select i1 %12, <8 x i16> %11, <8 x i16> %10
+; CHECK-NEXT: %14 = insertelement <8 x i16> %13, i16 %3, i32 3
+; CHECK-NEXT: %15 = icmp eq i32 3, %4
+; CHECK-NEXT: %16 = select i1 %15, <8 x i16> %14, <8 x i16> %13
+; CHECK-NEXT: %17 = insertelement <8 x i16> %16, i16 %3, i32 4
+; CHECK-NEXT: %18 = icmp eq i32 4, %4
+; CHECK-NEXT: %19 = select i1 %18, <8 x i16> %17, <8 x i16> %16
+; CHECK-NEXT: %20 = insertelement <8 x i16> %19, i16 %3, i32 5
+; CHECK-NEXT: %21 = icmp eq i32 5, %4
+; CHECK-NEXT: %22 = select i1 %21, <8 x i16> %20, <8 x i16> %19
+; CHECK-NEXT: %23 = insertelement <8 x i16> %22, i16 %3, i32 6
+; CHECK-NEXT: %24 = icmp eq i32 6, %4
+; CHECK-NEXT: %25 = select i1 %24, <8 x i16> %23, <8 x i16> %22
+; CHECK-NEXT: %26 = insertelement <8 x i16> %25, i16 %3, i32 7
+; CHECK-NEXT: %27 = icmp eq i32 7, %4
+; CHECK-NEXT: %28 = select i1 %27, <8 x i16> %26, <8 x i16> %25
+; CHECK-NEXT: %29 = insertelement <8 x i16> %2, i16 %3, i32 0
+; CHECK-NEXT: %30 = icmp eq i32 8, %4
+; CHECK-NEXT: %31 = select i1 %30, <8 x i16> %29, <8 x i16> %2
+; CHECK-NEXT: %32 = insertelement <8 x i16> %31, i16 %3, i32 1
+; CHECK-NEXT: %33 = icmp eq i32 9, %4
+; CHECK-NEXT: %34 = select i1 %33, <8 x i16> %32, <8 x i16> %31
+; CHECK-NEXT: %35 = insertelement <8 x i16> %34, i16 %3, i32 2
+; CHECK-NEXT: %36 = icmp eq i32 10, %4
+; CHECK-NEXT: %37 = select i1 %36, <8 x i16> %35, <8 x i16> %34
+; CHECK-NEXT: %38 = insertelement <8 x i16> %37, i16 %3, i32 3
+; CHECK-NEXT: %39 = icmp eq i32 11, %4
+; CHECK-NEXT: %40 = select i1 %39, <8 x i16> %38, <8 x i16> %37
+; CHECK-NEXT: %41 = insertelement <8 x i16> %40, i16 %3, i32 4
+; CHECK-NEXT: %42 = icmp eq i32 12, %4
+; CHECK-NEXT: %43 = select i1 %42, <8 x i16> %41, <8 x i16> %40
+; CHECK-NEXT: %44 = insertelement <8 x i16> %43, i16 %3, i32 5
+; CHECK-NEXT: %45 = icmp eq i32 13, %4
+; CHECK-NEXT: %46 = select i1 %45, <8 x i16> %44, <8 x i16> %43
+; CHECK-NEXT: %47 = insertelement <8 x i16> %46, i16 %3, i32 6
+; CHECK-NEXT: %48 = icmp eq i32 14, %4
+; CHECK-NEXT: %49 = select i1 %48, <8 x i16> %47, <8 x i16> %46
+; CHECK-NEXT: %50 = insertelement <8 x i16> %49, i16 %3, i32 7
+; CHECK-NEXT: %51 = icmp eq i32 15, %4
+; CHECK-NEXT: %52 = select i1 %51, <8 x i16> %50, <8 x i16> %49
+; CHECK-NEXT: store <8 x i16> %52, <8 x i16>* %0, align 16
+; CHECK-NEXT: ret <8 x i16> %28
+; CHECK-NEXT: }
+
+define <16 x i32> @insert_16xi32_var_idx(<16 x i32>, i32, i32) {
+entry:
+ %3 = insertelement <16 x i32> %0, i32 %1, i32 %2
+ ret <16 x i32> %3
+}
+; CHECK-LABEL: define <4 x i32> @insert_16xi32_var_idx(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %9 = insertelement <4 x i32> %3, i32 %7, i32 0
+; CHECK-NEXT: %10 = icmp eq i32 0, %8
+; CHECK-NEXT: %11 = select i1 %10, <4 x i32> %9, <4 x i32> %3
+; CHECK-NEXT: %12 = insertelement <4 x i32> %11, i32 %7, i32 1
+; CHECK-NEXT: %13 = icmp eq i32 1, %8
+; CHECK-NEXT: %14 = select i1 %13, <4 x i32> %12, <4 x i32> %11
+; CHECK-NEXT: %15 = insertelement <4 x i32> %14, i32 %7, i32 2
+; CHECK-NEXT: %16 = icmp eq i32 2, %8
+; CHECK-NEXT: %17 = select i1 %16, <4 x i32> %15, <4 x i32> %14
+; CHECK-NEXT: %18 = insertelement <4 x i32> %17, i32 %7, i32 3
+; CHECK-NEXT: %19 = icmp eq i32 3, %8
+; CHECK-NEXT: %20 = select i1 %19, <4 x i32> %18, <4 x i32> %17
+; CHECK-NEXT: %21 = insertelement <4 x i32> %4, i32 %7, i32 0
+; CHECK-NEXT: %22 = icmp eq i32 4, %8
+; CHECK-NEXT: %23 = select i1 %22, <4 x i32> %21, <4 x i32> %4
+; CHECK-NEXT: %24 = insertelement <4 x i32> %23, i32 %7, i32 1
+; CHECK-NEXT: %25 = icmp eq i32 5, %8
+; CHECK-NEXT: %26 = select i1 %25, <4 x i32> %24, <4 x i32> %23
+; CHECK-NEXT: %27 = insertelement <4 x i32> %26, i32 %7, i32 2
+; CHECK-NEXT: %28 = icmp eq i32 6, %8
+; CHECK-NEXT: %29 = select i1 %28, <4 x i32> %27, <4 x i32> %26
+; CHECK-NEXT: %30 = insertelement <4 x i32> %29, i32 %7, i32 3
+; CHECK-NEXT: %31 = icmp eq i32 7, %8
+; CHECK-NEXT: %32 = select i1 %31, <4 x i32> %30, <4 x i32> %29
+; CHECK-NEXT: %33 = insertelement <4 x i32> %5, i32 %7, i32 0
+; CHECK-NEXT: %34 = icmp eq i32 8, %8
+; CHECK-NEXT: %35 = select i1 %34, <4 x i32> %33, <4 x i32> %5
+; CHECK-NEXT: %36 = insertelement <4 x i32> %35, i32 %7, i32 1
+; CHECK-NEXT: %37 = icmp eq i32 9, %8
+; CHECK-NEXT: %38 = select i1 %37, <4 x i32> %36, <4 x i32> %35
+; CHECK-NEXT: %39 = insertelement <4 x i32> %38, i32 %7, i32 2
+; CHECK-NEXT: %40 = icmp eq i32 10, %8
+; CHECK-NEXT: %41 = select i1 %40, <4 x i32> %39, <4 x i32> %38
+; CHECK-NEXT: %42 = insertelement <4 x i32> %41, i32 %7, i32 3
+; CHECK-NEXT: %43 = icmp eq i32 11, %8
+; CHECK-NEXT: %44 = select i1 %43, <4 x i32> %42, <4 x i32> %41
+; CHECK-NEXT: %45 = insertelement <4 x i32> %6, i32 %7, i32 0
+; CHECK-NEXT: %46 = icmp eq i32 12, %8
+; CHECK-NEXT: %47 = select i1 %46, <4 x i32> %45, <4 x i32> %6
+; CHECK-NEXT: %48 = insertelement <4 x i32> %47, i32 %7, i32 1
+; CHECK-NEXT: %49 = icmp eq i32 13, %8
+; CHECK-NEXT: %50 = select i1 %49, <4 x i32> %48, <4 x i32> %47
+; CHECK-NEXT: %51 = insertelement <4 x i32> %50, i32 %7, i32 2
+; CHECK-NEXT: %52 = icmp eq i32 14, %8
+; CHECK-NEXT: %53 = select i1 %52, <4 x i32> %51, <4 x i32> %50
+; CHECK-NEXT: %54 = insertelement <4 x i32> %53, i32 %7, i32 3
+; CHECK-NEXT: %55 = icmp eq i32 15, %8
+; CHECK-NEXT: %56 = select i1 %55, <4 x i32> %54, <4 x i32> %53
+; CHECK-NEXT: store <4 x i32> %32, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %44, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %56, <4 x i32>* %2, align 16
+; CHECK-NEXT: ret <4 x i32> %20
+; CHECK-NEXT: }
+
+define <16 x i64> @insert_16xi64_var_idx(<16 x i64>, i64, i32) {
+entry:
+ %3 = insertelement <16 x i64> %0, i64 %1, i32 %2
+ ret <16 x i64> %3
+}
+; CHECK-LABEL: define <2 x i64> @insert_16xi64_var_idx(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %17 = insertelement <2 x i64> %7, i64 %15, i32 0
+; CHECK-NEXT: %18 = icmp eq i32 0, %16
+; CHECK-NEXT: %19 = select i1 %18, <2 x i64> %17, <2 x i64> %7
+; CHECK-NEXT: %20 = insertelement <2 x i64> %19, i64 %15, i32 1
+; CHECK-NEXT: %21 = icmp eq i32 1, %16
+; CHECK-NEXT: %22 = select i1 %21, <2 x i64> %20, <2 x i64> %19
+; CHECK-NEXT: %23 = insertelement <2 x i64> %8, i64 %15, i32 0
+; CHECK-NEXT: %24 = icmp eq i32 2, %16
+; CHECK-NEXT: %25 = select i1 %24, <2 x i64> %23, <2 x i64> %8
+; CHECK-NEXT: %26 = insertelement <2 x i64> %25, i64 %15, i32 1
+; CHECK-NEXT: %27 = icmp eq i32 3, %16
+; CHECK-NEXT: %28 = select i1 %27, <2 x i64> %26, <2 x i64> %25
+; CHECK-NEXT: %29 = insertelement <2 x i64> %9, i64 %15, i32 0
+; CHECK-NEXT: %30 = icmp eq i32 4, %16
+; CHECK-NEXT: %31 = select i1 %30, <2 x i64> %29, <2 x i64> %9
+; CHECK-NEXT: %32 = insertelement <2 x i64> %31, i64 %15, i32 1
+; CHECK-NEXT: %33 = icmp eq i32 5, %16
+; CHECK-NEXT: %34 = select i1 %33, <2 x i64> %32, <2 x i64> %31
+; CHECK-NEXT: %35 = insertelement <2 x i64> %10, i64 %15, i32 0
+; CHECK-NEXT: %36 = icmp eq i32 6, %16
+; CHECK-NEXT: %37 = select i1 %36, <2 x i64> %35, <2 x i64> %10
+; CHECK-NEXT: %38 = insertelement <2 x i64> %37, i64 %15, i32 1
+; CHECK-NEXT: %39 = icmp eq i32 7, %16
+; CHECK-NEXT: %40 = select i1 %39, <2 x i64> %38, <2 x i64> %37
+; CHECK-NEXT: %41 = insertelement <2 x i64> %11, i64 %15, i32 0
+; CHECK-NEXT: %42 = icmp eq i32 8, %16
+; CHECK-NEXT: %43 = select i1 %42, <2 x i64> %41, <2 x i64> %11
+; CHECK-NEXT: %44 = insertelement <2 x i64> %43, i64 %15, i32 1
+; CHECK-NEXT: %45 = icmp eq i32 9, %16
+; CHECK-NEXT: %46 = select i1 %45, <2 x i64> %44, <2 x i64> %43
+; CHECK-NEXT: %47 = insertelement <2 x i64> %12, i64 %15, i32 0
+; CHECK-NEXT: %48 = icmp eq i32 10, %16
+; CHECK-NEXT: %49 = select i1 %48, <2 x i64> %47, <2 x i64> %12
+; CHECK-NEXT: %50 = insertelement <2 x i64> %49, i64 %15, i32 1
+; CHECK-NEXT: %51 = icmp eq i32 11, %16
+; CHECK-NEXT: %52 = select i1 %51, <2 x i64> %50, <2 x i64> %49
+; CHECK-NEXT: %53 = insertelement <2 x i64> %13, i64 %15, i32 0
+; CHECK-NEXT: %54 = icmp eq i32 12, %16
+; CHECK-NEXT: %55 = select i1 %54, <2 x i64> %53, <2 x i64> %13
+; CHECK-NEXT: %56 = insertelement <2 x i64> %55, i64 %15, i32 1
+; CHECK-NEXT: %57 = icmp eq i32 13, %16
+; CHECK-NEXT: %58 = select i1 %57, <2 x i64> %56, <2 x i64> %55
+; CHECK-NEXT: %59 = insertelement <2 x i64> %14, i64 %15, i32 0
+; CHECK-NEXT: %60 = icmp eq i32 14, %16
+; CHECK-NEXT: %61 = select i1 %60, <2 x i64> %59, <2 x i64> %14
+; CHECK-NEXT: %62 = insertelement <2 x i64> %61, i64 %15, i32 1
+; CHECK-NEXT: %63 = icmp eq i32 15, %16
+; CHECK-NEXT: %64 = select i1 %63, <2 x i64> %62, <2 x i64> %61
+; CHECK-NEXT: store <2 x i64> %28, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %34, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %40, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %46, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %52, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %58, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %64, <2 x i64>* %6, align 16
+; CHECK-NEXT: ret <2 x i64> %22
+; CHECK-NEXT: }
+
+define <16 x i8*> @insert_16xi8ptr_var_idx(<16 x i8*>, i8*, i32) {
+entry:
+ %3 = insertelement <16 x i8*> %0, i8* %1, i32 %2
+ ret <16 x i8*> %3
+}
+; CHECK-LABEL: define <4 x i8*> @insert_16xi8ptr_var_idx(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %9 = insertelement <4 x i8*> %3, i8* %7, i32 0
+; CHECK-NEXT: %10 = icmp eq i32 0, %8
+; CHECK-NEXT: %11 = select i1 %10, <4 x i8*> %9, <4 x i8*> %3
+; CHECK-NEXT: %12 = insertelement <4 x i8*> %11, i8* %7, i32 1
+; CHECK-NEXT: %13 = icmp eq i32 1, %8
+; CHECK-NEXT: %14 = select i1 %13, <4 x i8*> %12, <4 x i8*> %11
+; CHECK-NEXT: %15 = insertelement <4 x i8*> %14, i8* %7, i32 2
+; CHECK-NEXT: %16 = icmp eq i32 2, %8
+; CHECK-NEXT: %17 = select i1 %16, <4 x i8*> %15, <4 x i8*> %14
+; CHECK-NEXT: %18 = insertelement <4 x i8*> %17, i8* %7, i32 3
+; CHECK-NEXT: %19 = icmp eq i32 3, %8
+; CHECK-NEXT: %20 = select i1 %19, <4 x i8*> %18, <4 x i8*> %17
+; CHECK-NEXT: %21 = insertelement <4 x i8*> %4, i8* %7, i32 0
+; CHECK-NEXT: %22 = icmp eq i32 4, %8
+; CHECK-NEXT: %23 = select i1 %22, <4 x i8*> %21, <4 x i8*> %4
+; CHECK-NEXT: %24 = insertelement <4 x i8*> %23, i8* %7, i32 1
+; CHECK-NEXT: %25 = icmp eq i32 5, %8
+; CHECK-NEXT: %26 = select i1 %25, <4 x i8*> %24, <4 x i8*> %23
+; CHECK-NEXT: %27 = insertelement <4 x i8*> %26, i8* %7, i32 2
+; CHECK-NEXT: %28 = icmp eq i32 6, %8
+; CHECK-NEXT: %29 = select i1 %28, <4 x i8*> %27, <4 x i8*> %26
+; CHECK-NEXT: %30 = insertelement <4 x i8*> %29, i8* %7, i32 3
+; CHECK-NEXT: %31 = icmp eq i32 7, %8
+; CHECK-NEXT: %32 = select i1 %31, <4 x i8*> %30, <4 x i8*> %29
+; CHECK-NEXT: %33 = insertelement <4 x i8*> %5, i8* %7, i32 0
+; CHECK-NEXT: %34 = icmp eq i32 8, %8
+; CHECK-NEXT: %35 = select i1 %34, <4 x i8*> %33, <4 x i8*> %5
+; CHECK-NEXT: %36 = insertelement <4 x i8*> %35, i8* %7, i32 1
+; CHECK-NEXT: %37 = icmp eq i32 9, %8
+; CHECK-NEXT: %38 = select i1 %37, <4 x i8*> %36, <4 x i8*> %35
+; CHECK-NEXT: %39 = insertelement <4 x i8*> %38, i8* %7, i32 2
+; CHECK-NEXT: %40 = icmp eq i32 10, %8
+; CHECK-NEXT: %41 = select i1 %40, <4 x i8*> %39, <4 x i8*> %38
+; CHECK-NEXT: %42 = insertelement <4 x i8*> %41, i8* %7, i32 3
+; CHECK-NEXT: %43 = icmp eq i32 11, %8
+; CHECK-NEXT: %44 = select i1 %43, <4 x i8*> %42, <4 x i8*> %41
+; CHECK-NEXT: %45 = insertelement <4 x i8*> %6, i8* %7, i32 0
+; CHECK-NEXT: %46 = icmp eq i32 12, %8
+; CHECK-NEXT: %47 = select i1 %46, <4 x i8*> %45, <4 x i8*> %6
+; CHECK-NEXT: %48 = insertelement <4 x i8*> %47, i8* %7, i32 1
+; CHECK-NEXT: %49 = icmp eq i32 13, %8
+; CHECK-NEXT: %50 = select i1 %49, <4 x i8*> %48, <4 x i8*> %47
+; CHECK-NEXT: %51 = insertelement <4 x i8*> %50, i8* %7, i32 2
+; CHECK-NEXT: %52 = icmp eq i32 14, %8
+; CHECK-NEXT: %53 = select i1 %52, <4 x i8*> %51, <4 x i8*> %50
+; CHECK-NEXT: %54 = insertelement <4 x i8*> %53, i8* %7, i32 3
+; CHECK-NEXT: %55 = icmp eq i32 15, %8
+; CHECK-NEXT: %56 = select i1 %55, <4 x i8*> %54, <4 x i8*> %53
+; CHECK-NEXT: store <4 x i8*> %32, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %44, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %56, <4 x i8*>* %2, align 16
+; CHECK-NEXT: ret <4 x i8*> %20
+; CHECK-NEXT: }
+
+define <16 x float> @insert_16xfloat_var_idx(<16 x float>, float, i32) {
+entry:
+ %3 = insertelement <16 x float> %0, float %1, i32 %2
+ ret <16 x float> %3
+}
+; CHECK-LABEL: define <4 x float> @insert_16xfloat_var_idx(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, float, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %9 = insertelement <4 x float> %3, float %7, i32 0
+; CHECK-NEXT: %10 = icmp eq i32 0, %8
+; CHECK-NEXT: %11 = select i1 %10, <4 x float> %9, <4 x float> %3
+; CHECK-NEXT: %12 = insertelement <4 x float> %11, float %7, i32 1
+; CHECK-NEXT: %13 = icmp eq i32 1, %8
+; CHECK-NEXT: %14 = select i1 %13, <4 x float> %12, <4 x float> %11
+; CHECK-NEXT: %15 = insertelement <4 x float> %14, float %7, i32 2
+; CHECK-NEXT: %16 = icmp eq i32 2, %8
+; CHECK-NEXT: %17 = select i1 %16, <4 x float> %15, <4 x float> %14
+; CHECK-NEXT: %18 = insertelement <4 x float> %17, float %7, i32 3
+; CHECK-NEXT: %19 = icmp eq i32 3, %8
+; CHECK-NEXT: %20 = select i1 %19, <4 x float> %18, <4 x float> %17
+; CHECK-NEXT: %21 = insertelement <4 x float> %4, float %7, i32 0
+; CHECK-NEXT: %22 = icmp eq i32 4, %8
+; CHECK-NEXT: %23 = select i1 %22, <4 x float> %21, <4 x float> %4
+; CHECK-NEXT: %24 = insertelement <4 x float> %23, float %7, i32 1
+; CHECK-NEXT: %25 = icmp eq i32 5, %8
+; CHECK-NEXT: %26 = select i1 %25, <4 x float> %24, <4 x float> %23
+; CHECK-NEXT: %27 = insertelement <4 x float> %26, float %7, i32 2
+; CHECK-NEXT: %28 = icmp eq i32 6, %8
+; CHECK-NEXT: %29 = select i1 %28, <4 x float> %27, <4 x float> %26
+; CHECK-NEXT: %30 = insertelement <4 x float> %29, float %7, i32 3
+; CHECK-NEXT: %31 = icmp eq i32 7, %8
+; CHECK-NEXT: %32 = select i1 %31, <4 x float> %30, <4 x float> %29
+; CHECK-NEXT: %33 = insertelement <4 x float> %5, float %7, i32 0
+; CHECK-NEXT: %34 = icmp eq i32 8, %8
+; CHECK-NEXT: %35 = select i1 %34, <4 x float> %33, <4 x float> %5
+; CHECK-NEXT: %36 = insertelement <4 x float> %35, float %7, i32 1
+; CHECK-NEXT: %37 = icmp eq i32 9, %8
+; CHECK-NEXT: %38 = select i1 %37, <4 x float> %36, <4 x float> %35
+; CHECK-NEXT: %39 = insertelement <4 x float> %38, float %7, i32 2
+; CHECK-NEXT: %40 = icmp eq i32 10, %8
+; CHECK-NEXT: %41 = select i1 %40, <4 x float> %39, <4 x float> %38
+; CHECK-NEXT: %42 = insertelement <4 x float> %41, float %7, i32 3
+; CHECK-NEXT: %43 = icmp eq i32 11, %8
+; CHECK-NEXT: %44 = select i1 %43, <4 x float> %42, <4 x float> %41
+; CHECK-NEXT: %45 = insertelement <4 x float> %6, float %7, i32 0
+; CHECK-NEXT: %46 = icmp eq i32 12, %8
+; CHECK-NEXT: %47 = select i1 %46, <4 x float> %45, <4 x float> %6
+; CHECK-NEXT: %48 = insertelement <4 x float> %47, float %7, i32 1
+; CHECK-NEXT: %49 = icmp eq i32 13, %8
+; CHECK-NEXT: %50 = select i1 %49, <4 x float> %48, <4 x float> %47
+; CHECK-NEXT: %51 = insertelement <4 x float> %50, float %7, i32 2
+; CHECK-NEXT: %52 = icmp eq i32 14, %8
+; CHECK-NEXT: %53 = select i1 %52, <4 x float> %51, <4 x float> %50
+; CHECK-NEXT: %54 = insertelement <4 x float> %53, float %7, i32 3
+; CHECK-NEXT: %55 = icmp eq i32 15, %8
+; CHECK-NEXT: %56 = select i1 %55, <4 x float> %54, <4 x float> %53
+; CHECK-NEXT: store <4 x float> %32, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %44, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %56, <4 x float>* %2, align 16
+; CHECK-NEXT: ret <4 x float> %20
+; CHECK-NEXT: }
+
+define <16 x double> @insert_16xdouble_var_idx(<16 x double>, double, i32) {
+entry:
+ %3 = insertelement <16 x double> %0, double %1, i32 %2
+ ret <16 x double> %3
+}
+; CHECK-LABEL: define <2 x double> @insert_16xdouble_var_idx(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %17 = insertelement <2 x double> %7, double %15, i32 0
+; CHECK-NEXT: %18 = icmp eq i32 0, %16
+; CHECK-NEXT: %19 = select i1 %18, <2 x double> %17, <2 x double> %7
+; CHECK-NEXT: %20 = insertelement <2 x double> %19, double %15, i32 1
+; CHECK-NEXT: %21 = icmp eq i32 1, %16
+; CHECK-NEXT: %22 = select i1 %21, <2 x double> %20, <2 x double> %19
+; CHECK-NEXT: %23 = insertelement <2 x double> %8, double %15, i32 0
+; CHECK-NEXT: %24 = icmp eq i32 2, %16
+; CHECK-NEXT: %25 = select i1 %24, <2 x double> %23, <2 x double> %8
+; CHECK-NEXT: %26 = insertelement <2 x double> %25, double %15, i32 1
+; CHECK-NEXT: %27 = icmp eq i32 3, %16
+; CHECK-NEXT: %28 = select i1 %27, <2 x double> %26, <2 x double> %25
+; CHECK-NEXT: %29 = insertelement <2 x double> %9, double %15, i32 0
+; CHECK-NEXT: %30 = icmp eq i32 4, %16
+; CHECK-NEXT: %31 = select i1 %30, <2 x double> %29, <2 x double> %9
+; CHECK-NEXT: %32 = insertelement <2 x double> %31, double %15, i32 1
+; CHECK-NEXT: %33 = icmp eq i32 5, %16
+; CHECK-NEXT: %34 = select i1 %33, <2 x double> %32, <2 x double> %31
+; CHECK-NEXT: %35 = insertelement <2 x double> %10, double %15, i32 0
+; CHECK-NEXT: %36 = icmp eq i32 6, %16
+; CHECK-NEXT: %37 = select i1 %36, <2 x double> %35, <2 x double> %10
+; CHECK-NEXT: %38 = insertelement <2 x double> %37, double %15, i32 1
+; CHECK-NEXT: %39 = icmp eq i32 7, %16
+; CHECK-NEXT: %40 = select i1 %39, <2 x double> %38, <2 x double> %37
+; CHECK-NEXT: %41 = insertelement <2 x double> %11, double %15, i32 0
+; CHECK-NEXT: %42 = icmp eq i32 8, %16
+; CHECK-NEXT: %43 = select i1 %42, <2 x double> %41, <2 x double> %11
+; CHECK-NEXT: %44 = insertelement <2 x double> %43, double %15, i32 1
+; CHECK-NEXT: %45 = icmp eq i32 9, %16
+; CHECK-NEXT: %46 = select i1 %45, <2 x double> %44, <2 x double> %43
+; CHECK-NEXT: %47 = insertelement <2 x double> %12, double %15, i32 0
+; CHECK-NEXT: %48 = icmp eq i32 10, %16
+; CHECK-NEXT: %49 = select i1 %48, <2 x double> %47, <2 x double> %12
+; CHECK-NEXT: %50 = insertelement <2 x double> %49, double %15, i32 1
+; CHECK-NEXT: %51 = icmp eq i32 11, %16
+; CHECK-NEXT: %52 = select i1 %51, <2 x double> %50, <2 x double> %49
+; CHECK-NEXT: %53 = insertelement <2 x double> %13, double %15, i32 0
+; CHECK-NEXT: %54 = icmp eq i32 12, %16
+; CHECK-NEXT: %55 = select i1 %54, <2 x double> %53, <2 x double> %13
+; CHECK-NEXT: %56 = insertelement <2 x double> %55, double %15, i32 1
+; CHECK-NEXT: %57 = icmp eq i32 13, %16
+; CHECK-NEXT: %58 = select i1 %57, <2 x double> %56, <2 x double> %55
+; CHECK-NEXT: %59 = insertelement <2 x double> %14, double %15, i32 0
+; CHECK-NEXT: %60 = icmp eq i32 14, %16
+; CHECK-NEXT: %61 = select i1 %60, <2 x double> %59, <2 x double> %14
+; CHECK-NEXT: %62 = insertelement <2 x double> %61, double %15, i32 1
+; CHECK-NEXT: %63 = icmp eq i32 15, %16
+; CHECK-NEXT: %64 = select i1 %63, <2 x double> %62, <2 x double> %61
+; CHECK-NEXT: store <2 x double> %28, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %34, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %40, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %46, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %52, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %58, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %64, <2 x double>* %6, align 16
+; CHECK-NEXT: ret <2 x double> %22
+; CHECK-NEXT: }
+
+define <20 x i8> @insert_20xi8_var_idx(<20 x i8>, i8, i32) {
+entry:
+ %3 = insertelement <20 x i8> %0, i8 %1, i32 %2
+ ret <20 x i8> %3
+}
+; CHECK-LABEL: define <16 x i8> @insert_20xi8_var_idx(<16 x i8>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>, i8, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %5 = insertelement <16 x i8> %1, i8 %3, i32 0
+; CHECK-NEXT: %6 = icmp eq i32 0, %4
+; CHECK-NEXT: %7 = select i1 %6, <16 x i8> %5, <16 x i8> %1
+; CHECK-NEXT: %8 = insertelement <16 x i8> %7, i8 %3, i32 1
+; CHECK-NEXT: %9 = icmp eq i32 1, %4
+; CHECK-NEXT: %10 = select i1 %9, <16 x i8> %8, <16 x i8> %7
+; CHECK-NEXT: %11 = insertelement <16 x i8> %10, i8 %3, i32 2
+; CHECK-NEXT: %12 = icmp eq i32 2, %4
+; CHECK-NEXT: %13 = select i1 %12, <16 x i8> %11, <16 x i8> %10
+; CHECK-NEXT: %14 = insertelement <16 x i8> %13, i8 %3, i32 3
+; CHECK-NEXT: %15 = icmp eq i32 3, %4
+; CHECK-NEXT: %16 = select i1 %15, <16 x i8> %14, <16 x i8> %13
+; CHECK-NEXT: %17 = insertelement <16 x i8> %16, i8 %3, i32 4
+; CHECK-NEXT: %18 = icmp eq i32 4, %4
+; CHECK-NEXT: %19 = select i1 %18, <16 x i8> %17, <16 x i8> %16
+; CHECK-NEXT: %20 = insertelement <16 x i8> %19, i8 %3, i32 5
+; CHECK-NEXT: %21 = icmp eq i32 5, %4
+; CHECK-NEXT: %22 = select i1 %21, <16 x i8> %20, <16 x i8> %19
+; CHECK-NEXT: %23 = insertelement <16 x i8> %22, i8 %3, i32 6
+; CHECK-NEXT: %24 = icmp eq i32 6, %4
+; CHECK-NEXT: %25 = select i1 %24, <16 x i8> %23, <16 x i8> %22
+; CHECK-NEXT: %26 = insertelement <16 x i8> %25, i8 %3, i32 7
+; CHECK-NEXT: %27 = icmp eq i32 7, %4
+; CHECK-NEXT: %28 = select i1 %27, <16 x i8> %26, <16 x i8> %25
+; CHECK-NEXT: %29 = insertelement <16 x i8> %28, i8 %3, i32 8
+; CHECK-NEXT: %30 = icmp eq i32 8, %4
+; CHECK-NEXT: %31 = select i1 %30, <16 x i8> %29, <16 x i8> %28
+; CHECK-NEXT: %32 = insertelement <16 x i8> %31, i8 %3, i32 9
+; CHECK-NEXT: %33 = icmp eq i32 9, %4
+; CHECK-NEXT: %34 = select i1 %33, <16 x i8> %32, <16 x i8> %31
+; CHECK-NEXT: %35 = insertelement <16 x i8> %34, i8 %3, i32 10
+; CHECK-NEXT: %36 = icmp eq i32 10, %4
+; CHECK-NEXT: %37 = select i1 %36, <16 x i8> %35, <16 x i8> %34
+; CHECK-NEXT: %38 = insertelement <16 x i8> %37, i8 %3, i32 11
+; CHECK-NEXT: %39 = icmp eq i32 11, %4
+; CHECK-NEXT: %40 = select i1 %39, <16 x i8> %38, <16 x i8> %37
+; CHECK-NEXT: %41 = insertelement <16 x i8> %40, i8 %3, i32 12
+; CHECK-NEXT: %42 = icmp eq i32 12, %4
+; CHECK-NEXT: %43 = select i1 %42, <16 x i8> %41, <16 x i8> %40
+; CHECK-NEXT: %44 = insertelement <16 x i8> %43, i8 %3, i32 13
+; CHECK-NEXT: %45 = icmp eq i32 13, %4
+; CHECK-NEXT: %46 = select i1 %45, <16 x i8> %44, <16 x i8> %43
+; CHECK-NEXT: %47 = insertelement <16 x i8> %46, i8 %3, i32 14
+; CHECK-NEXT: %48 = icmp eq i32 14, %4
+; CHECK-NEXT: %49 = select i1 %48, <16 x i8> %47, <16 x i8> %46
+; CHECK-NEXT: %50 = insertelement <16 x i8> %49, i8 %3, i32 15
+; CHECK-NEXT: %51 = icmp eq i32 15, %4
+; CHECK-NEXT: %52 = select i1 %51, <16 x i8> %50, <16 x i8> %49
+; CHECK-NEXT: %53 = insertelement <16 x i8> %2, i8 %3, i32 0
+; CHECK-NEXT: %54 = icmp eq i32 16, %4
+; CHECK-NEXT: %55 = select i1 %54, <16 x i8> %53, <16 x i8> %2
+; CHECK-NEXT: %56 = insertelement <16 x i8> %55, i8 %3, i32 1
+; CHECK-NEXT: %57 = icmp eq i32 17, %4
+; CHECK-NEXT: %58 = select i1 %57, <16 x i8> %56, <16 x i8> %55
+; CHECK-NEXT: %59 = insertelement <16 x i8> %58, i8 %3, i32 2
+; CHECK-NEXT: %60 = icmp eq i32 18, %4
+; CHECK-NEXT: %61 = select i1 %60, <16 x i8> %59, <16 x i8> %58
+; CHECK-NEXT: %62 = insertelement <16 x i8> %61, i8 %3, i32 3
+; CHECK-NEXT: %63 = icmp eq i32 19, %4
+; CHECK-NEXT: %64 = select i1 %63, <16 x i8> %62, <16 x i8> %61
+; CHECK-NEXT: store <16 x i8> %64, <16 x i8>* %0, align 16
+; CHECK-NEXT: ret <16 x i8> %52
+; CHECK-NEXT: }
+
+define <20 x i16> @insert_20xi16_var_idx(<20 x i16>, i16, i32) {
+entry:
+ %3 = insertelement <20 x i16> %0, i16 %1, i32 %2
+ ret <20 x i16> %3
+}
+; CHECK-LABEL: define <8 x i16> @insert_20xi16_var_idx(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>, i16, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %7 = insertelement <8 x i16> %2, i16 %5, i32 0
+; CHECK-NEXT: %8 = icmp eq i32 0, %6
+; CHECK-NEXT: %9 = select i1 %8, <8 x i16> %7, <8 x i16> %2
+; CHECK-NEXT: %10 = insertelement <8 x i16> %9, i16 %5, i32 1
+; CHECK-NEXT: %11 = icmp eq i32 1, %6
+; CHECK-NEXT: %12 = select i1 %11, <8 x i16> %10, <8 x i16> %9
+; CHECK-NEXT: %13 = insertelement <8 x i16> %12, i16 %5, i32 2
+; CHECK-NEXT: %14 = icmp eq i32 2, %6
+; CHECK-NEXT: %15 = select i1 %14, <8 x i16> %13, <8 x i16> %12
+; CHECK-NEXT: %16 = insertelement <8 x i16> %15, i16 %5, i32 3
+; CHECK-NEXT: %17 = icmp eq i32 3, %6
+; CHECK-NEXT: %18 = select i1 %17, <8 x i16> %16, <8 x i16> %15
+; CHECK-NEXT: %19 = insertelement <8 x i16> %18, i16 %5, i32 4
+; CHECK-NEXT: %20 = icmp eq i32 4, %6
+; CHECK-NEXT: %21 = select i1 %20, <8 x i16> %19, <8 x i16> %18
+; CHECK-NEXT: %22 = insertelement <8 x i16> %21, i16 %5, i32 5
+; CHECK-NEXT: %23 = icmp eq i32 5, %6
+; CHECK-NEXT: %24 = select i1 %23, <8 x i16> %22, <8 x i16> %21
+; CHECK-NEXT: %25 = insertelement <8 x i16> %24, i16 %5, i32 6
+; CHECK-NEXT: %26 = icmp eq i32 6, %6
+; CHECK-NEXT: %27 = select i1 %26, <8 x i16> %25, <8 x i16> %24
+; CHECK-NEXT: %28 = insertelement <8 x i16> %27, i16 %5, i32 7
+; CHECK-NEXT: %29 = icmp eq i32 7, %6
+; CHECK-NEXT: %30 = select i1 %29, <8 x i16> %28, <8 x i16> %27
+; CHECK-NEXT: %31 = insertelement <8 x i16> %3, i16 %5, i32 0
+; CHECK-NEXT: %32 = icmp eq i32 8, %6
+; CHECK-NEXT: %33 = select i1 %32, <8 x i16> %31, <8 x i16> %3
+; CHECK-NEXT: %34 = insertelement <8 x i16> %33, i16 %5, i32 1
+; CHECK-NEXT: %35 = icmp eq i32 9, %6
+; CHECK-NEXT: %36 = select i1 %35, <8 x i16> %34, <8 x i16> %33
+; CHECK-NEXT: %37 = insertelement <8 x i16> %36, i16 %5, i32 2
+; CHECK-NEXT: %38 = icmp eq i32 10, %6
+; CHECK-NEXT: %39 = select i1 %38, <8 x i16> %37, <8 x i16> %36
+; CHECK-NEXT: %40 = insertelement <8 x i16> %39, i16 %5, i32 3
+; CHECK-NEXT: %41 = icmp eq i32 11, %6
+; CHECK-NEXT: %42 = select i1 %41, <8 x i16> %40, <8 x i16> %39
+; CHECK-NEXT: %43 = insertelement <8 x i16> %42, i16 %5, i32 4
+; CHECK-NEXT: %44 = icmp eq i32 12, %6
+; CHECK-NEXT: %45 = select i1 %44, <8 x i16> %43, <8 x i16> %42
+; CHECK-NEXT: %46 = insertelement <8 x i16> %45, i16 %5, i32 5
+; CHECK-NEXT: %47 = icmp eq i32 13, %6
+; CHECK-NEXT: %48 = select i1 %47, <8 x i16> %46, <8 x i16> %45
+; CHECK-NEXT: %49 = insertelement <8 x i16> %48, i16 %5, i32 6
+; CHECK-NEXT: %50 = icmp eq i32 14, %6
+; CHECK-NEXT: %51 = select i1 %50, <8 x i16> %49, <8 x i16> %48
+; CHECK-NEXT: %52 = insertelement <8 x i16> %51, i16 %5, i32 7
+; CHECK-NEXT: %53 = icmp eq i32 15, %6
+; CHECK-NEXT: %54 = select i1 %53, <8 x i16> %52, <8 x i16> %51
+; CHECK-NEXT: %55 = insertelement <8 x i16> %4, i16 %5, i32 0
+; CHECK-NEXT: %56 = icmp eq i32 16, %6
+; CHECK-NEXT: %57 = select i1 %56, <8 x i16> %55, <8 x i16> %4
+; CHECK-NEXT: %58 = insertelement <8 x i16> %57, i16 %5, i32 1
+; CHECK-NEXT: %59 = icmp eq i32 17, %6
+; CHECK-NEXT: %60 = select i1 %59, <8 x i16> %58, <8 x i16> %57
+; CHECK-NEXT: %61 = insertelement <8 x i16> %60, i16 %5, i32 2
+; CHECK-NEXT: %62 = icmp eq i32 18, %6
+; CHECK-NEXT: %63 = select i1 %62, <8 x i16> %61, <8 x i16> %60
+; CHECK-NEXT: %64 = insertelement <8 x i16> %63, i16 %5, i32 3
+; CHECK-NEXT: %65 = icmp eq i32 19, %6
+; CHECK-NEXT: %66 = select i1 %65, <8 x i16> %64, <8 x i16> %63
+; CHECK-NEXT: store <8 x i16> %54, <8 x i16>* %0, align 16
+; CHECK-NEXT: store <8 x i16> %66, <8 x i16>* %1, align 16
+; CHECK-NEXT: ret <8 x i16> %30
+; CHECK-NEXT: }
+
+define <20 x i32> @insert_20xi32_var_idx(<20 x i32>, i32, i32) {
+entry:
+ %3 = insertelement <20 x i32> %0, i32 %1, i32 %2
+ ret <20 x i32> %3
+}
+; CHECK-LABEL: define <4 x i32> @insert_20xi32_var_idx(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %11 = insertelement <4 x i32> %4, i32 %9, i32 0
+; CHECK-NEXT: %12 = icmp eq i32 0, %10
+; CHECK-NEXT: %13 = select i1 %12, <4 x i32> %11, <4 x i32> %4
+; CHECK-NEXT: %14 = insertelement <4 x i32> %13, i32 %9, i32 1
+; CHECK-NEXT: %15 = icmp eq i32 1, %10
+; CHECK-NEXT: %16 = select i1 %15, <4 x i32> %14, <4 x i32> %13
+; CHECK-NEXT: %17 = insertelement <4 x i32> %16, i32 %9, i32 2
+; CHECK-NEXT: %18 = icmp eq i32 2, %10
+; CHECK-NEXT: %19 = select i1 %18, <4 x i32> %17, <4 x i32> %16
+; CHECK-NEXT: %20 = insertelement <4 x i32> %19, i32 %9, i32 3
+; CHECK-NEXT: %21 = icmp eq i32 3, %10
+; CHECK-NEXT: %22 = select i1 %21, <4 x i32> %20, <4 x i32> %19
+; CHECK-NEXT: %23 = insertelement <4 x i32> %5, i32 %9, i32 0
+; CHECK-NEXT: %24 = icmp eq i32 4, %10
+; CHECK-NEXT: %25 = select i1 %24, <4 x i32> %23, <4 x i32> %5
+; CHECK-NEXT: %26 = insertelement <4 x i32> %25, i32 %9, i32 1
+; CHECK-NEXT: %27 = icmp eq i32 5, %10
+; CHECK-NEXT: %28 = select i1 %27, <4 x i32> %26, <4 x i32> %25
+; CHECK-NEXT: %29 = insertelement <4 x i32> %28, i32 %9, i32 2
+; CHECK-NEXT: %30 = icmp eq i32 6, %10
+; CHECK-NEXT: %31 = select i1 %30, <4 x i32> %29, <4 x i32> %28
+; CHECK-NEXT: %32 = insertelement <4 x i32> %31, i32 %9, i32 3
+; CHECK-NEXT: %33 = icmp eq i32 7, %10
+; CHECK-NEXT: %34 = select i1 %33, <4 x i32> %32, <4 x i32> %31
+; CHECK-NEXT: %35 = insertelement <4 x i32> %6, i32 %9, i32 0
+; CHECK-NEXT: %36 = icmp eq i32 8, %10
+; CHECK-NEXT: %37 = select i1 %36, <4 x i32> %35, <4 x i32> %6
+; CHECK-NEXT: %38 = insertelement <4 x i32> %37, i32 %9, i32 1
+; CHECK-NEXT: %39 = icmp eq i32 9, %10
+; CHECK-NEXT: %40 = select i1 %39, <4 x i32> %38, <4 x i32> %37
+; CHECK-NEXT: %41 = insertelement <4 x i32> %40, i32 %9, i32 2
+; CHECK-NEXT: %42 = icmp eq i32 10, %10
+; CHECK-NEXT: %43 = select i1 %42, <4 x i32> %41, <4 x i32> %40
+; CHECK-NEXT: %44 = insertelement <4 x i32> %43, i32 %9, i32 3
+; CHECK-NEXT: %45 = icmp eq i32 11, %10
+; CHECK-NEXT: %46 = select i1 %45, <4 x i32> %44, <4 x i32> %43
+; CHECK-NEXT: %47 = insertelement <4 x i32> %7, i32 %9, i32 0
+; CHECK-NEXT: %48 = icmp eq i32 12, %10
+; CHECK-NEXT: %49 = select i1 %48, <4 x i32> %47, <4 x i32> %7
+; CHECK-NEXT: %50 = insertelement <4 x i32> %49, i32 %9, i32 1
+; CHECK-NEXT: %51 = icmp eq i32 13, %10
+; CHECK-NEXT: %52 = select i1 %51, <4 x i32> %50, <4 x i32> %49
+; CHECK-NEXT: %53 = insertelement <4 x i32> %52, i32 %9, i32 2
+; CHECK-NEXT: %54 = icmp eq i32 14, %10
+; CHECK-NEXT: %55 = select i1 %54, <4 x i32> %53, <4 x i32> %52
+; CHECK-NEXT: %56 = insertelement <4 x i32> %55, i32 %9, i32 3
+; CHECK-NEXT: %57 = icmp eq i32 15, %10
+; CHECK-NEXT: %58 = select i1 %57, <4 x i32> %56, <4 x i32> %55
+; CHECK-NEXT: %59 = insertelement <4 x i32> %8, i32 %9, i32 0
+; CHECK-NEXT: %60 = icmp eq i32 16, %10
+; CHECK-NEXT: %61 = select i1 %60, <4 x i32> %59, <4 x i32> %8
+; CHECK-NEXT: %62 = insertelement <4 x i32> %61, i32 %9, i32 1
+; CHECK-NEXT: %63 = icmp eq i32 17, %10
+; CHECK-NEXT: %64 = select i1 %63, <4 x i32> %62, <4 x i32> %61
+; CHECK-NEXT: %65 = insertelement <4 x i32> %64, i32 %9, i32 2
+; CHECK-NEXT: %66 = icmp eq i32 18, %10
+; CHECK-NEXT: %67 = select i1 %66, <4 x i32> %65, <4 x i32> %64
+; CHECK-NEXT: %68 = insertelement <4 x i32> %67, i32 %9, i32 3
+; CHECK-NEXT: %69 = icmp eq i32 19, %10
+; CHECK-NEXT: %70 = select i1 %69, <4 x i32> %68, <4 x i32> %67
+; CHECK-NEXT: store <4 x i32> %34, <4 x i32>* %0, align 16
+; CHECK-NEXT: store <4 x i32> %46, <4 x i32>* %1, align 16
+; CHECK-NEXT: store <4 x i32> %58, <4 x i32>* %2, align 16
+; CHECK-NEXT: store <4 x i32> %70, <4 x i32>* %3, align 16
+; CHECK-NEXT: ret <4 x i32> %22
+; CHECK-NEXT: }
+
+define <20 x i64> @insert_20xi64_var_idx(<20 x i64>, i64, i32) {
+entry:
+ %3 = insertelement <20 x i64> %0, i64 %1, i32 %2
+ ret <20 x i64> %3
+}
+; CHECK-LABEL: define <2 x i64> @insert_20xi64_var_idx(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %21 = insertelement <2 x i64> %9, i64 %19, i32 0
+; CHECK-NEXT: %22 = icmp eq i32 0, %20
+; CHECK-NEXT: %23 = select i1 %22, <2 x i64> %21, <2 x i64> %9
+; CHECK-NEXT: %24 = insertelement <2 x i64> %23, i64 %19, i32 1
+; CHECK-NEXT: %25 = icmp eq i32 1, %20
+; CHECK-NEXT: %26 = select i1 %25, <2 x i64> %24, <2 x i64> %23
+; CHECK-NEXT: %27 = insertelement <2 x i64> %10, i64 %19, i32 0
+; CHECK-NEXT: %28 = icmp eq i32 2, %20
+; CHECK-NEXT: %29 = select i1 %28, <2 x i64> %27, <2 x i64> %10
+; CHECK-NEXT: %30 = insertelement <2 x i64> %29, i64 %19, i32 1
+; CHECK-NEXT: %31 = icmp eq i32 3, %20
+; CHECK-NEXT: %32 = select i1 %31, <2 x i64> %30, <2 x i64> %29
+; CHECK-NEXT: %33 = insertelement <2 x i64> %11, i64 %19, i32 0
+; CHECK-NEXT: %34 = icmp eq i32 4, %20
+; CHECK-NEXT: %35 = select i1 %34, <2 x i64> %33, <2 x i64> %11
+; CHECK-NEXT: %36 = insertelement <2 x i64> %35, i64 %19, i32 1
+; CHECK-NEXT: %37 = icmp eq i32 5, %20
+; CHECK-NEXT: %38 = select i1 %37, <2 x i64> %36, <2 x i64> %35
+; CHECK-NEXT: %39 = insertelement <2 x i64> %12, i64 %19, i32 0
+; CHECK-NEXT: %40 = icmp eq i32 6, %20
+; CHECK-NEXT: %41 = select i1 %40, <2 x i64> %39, <2 x i64> %12
+; CHECK-NEXT: %42 = insertelement <2 x i64> %41, i64 %19, i32 1
+; CHECK-NEXT: %43 = icmp eq i32 7, %20
+; CHECK-NEXT: %44 = select i1 %43, <2 x i64> %42, <2 x i64> %41
+; CHECK-NEXT: %45 = insertelement <2 x i64> %13, i64 %19, i32 0
+; CHECK-NEXT: %46 = icmp eq i32 8, %20
+; CHECK-NEXT: %47 = select i1 %46, <2 x i64> %45, <2 x i64> %13
+; CHECK-NEXT: %48 = insertelement <2 x i64> %47, i64 %19, i32 1
+; CHECK-NEXT: %49 = icmp eq i32 9, %20
+; CHECK-NEXT: %50 = select i1 %49, <2 x i64> %48, <2 x i64> %47
+; CHECK-NEXT: %51 = insertelement <2 x i64> %14, i64 %19, i32 0
+; CHECK-NEXT: %52 = icmp eq i32 10, %20
+; CHECK-NEXT: %53 = select i1 %52, <2 x i64> %51, <2 x i64> %14
+; CHECK-NEXT: %54 = insertelement <2 x i64> %53, i64 %19, i32 1
+; CHECK-NEXT: %55 = icmp eq i32 11, %20
+; CHECK-NEXT: %56 = select i1 %55, <2 x i64> %54, <2 x i64> %53
+; CHECK-NEXT: %57 = insertelement <2 x i64> %15, i64 %19, i32 0
+; CHECK-NEXT: %58 = icmp eq i32 12, %20
+; CHECK-NEXT: %59 = select i1 %58, <2 x i64> %57, <2 x i64> %15
+; CHECK-NEXT: %60 = insertelement <2 x i64> %59, i64 %19, i32 1
+; CHECK-NEXT: %61 = icmp eq i32 13, %20
+; CHECK-NEXT: %62 = select i1 %61, <2 x i64> %60, <2 x i64> %59
+; CHECK-NEXT: %63 = insertelement <2 x i64> %16, i64 %19, i32 0
+; CHECK-NEXT: %64 = icmp eq i32 14, %20
+; CHECK-NEXT: %65 = select i1 %64, <2 x i64> %63, <2 x i64> %16
+; CHECK-NEXT: %66 = insertelement <2 x i64> %65, i64 %19, i32 1
+; CHECK-NEXT: %67 = icmp eq i32 15, %20
+; CHECK-NEXT: %68 = select i1 %67, <2 x i64> %66, <2 x i64> %65
+; CHECK-NEXT: %69 = insertelement <2 x i64> %17, i64 %19, i32 0
+; CHECK-NEXT: %70 = icmp eq i32 16, %20
+; CHECK-NEXT: %71 = select i1 %70, <2 x i64> %69, <2 x i64> %17
+; CHECK-NEXT: %72 = insertelement <2 x i64> %71, i64 %19, i32 1
+; CHECK-NEXT: %73 = icmp eq i32 17, %20
+; CHECK-NEXT: %74 = select i1 %73, <2 x i64> %72, <2 x i64> %71
+; CHECK-NEXT: %75 = insertelement <2 x i64> %18, i64 %19, i32 0
+; CHECK-NEXT: %76 = icmp eq i32 18, %20
+; CHECK-NEXT: %77 = select i1 %76, <2 x i64> %75, <2 x i64> %18
+; CHECK-NEXT: %78 = insertelement <2 x i64> %77, i64 %19, i32 1
+; CHECK-NEXT: %79 = icmp eq i32 19, %20
+; CHECK-NEXT: %80 = select i1 %79, <2 x i64> %78, <2 x i64> %77
+; CHECK-NEXT: store <2 x i64> %32, <2 x i64>* %0, align 16
+; CHECK-NEXT: store <2 x i64> %38, <2 x i64>* %1, align 16
+; CHECK-NEXT: store <2 x i64> %44, <2 x i64>* %2, align 16
+; CHECK-NEXT: store <2 x i64> %50, <2 x i64>* %3, align 16
+; CHECK-NEXT: store <2 x i64> %56, <2 x i64>* %4, align 16
+; CHECK-NEXT: store <2 x i64> %62, <2 x i64>* %5, align 16
+; CHECK-NEXT: store <2 x i64> %68, <2 x i64>* %6, align 16
+; CHECK-NEXT: store <2 x i64> %74, <2 x i64>* %7, align 16
+; CHECK-NEXT: store <2 x i64> %80, <2 x i64>* %8, align 16
+; CHECK-NEXT: ret <2 x i64> %26
+; CHECK-NEXT: }
+
+define <20 x i8*> @insert_20xi8ptr_var_idx(<20 x i8*>, i8*, i32) {
+entry:
+ %3 = insertelement <20 x i8*> %0, i8* %1, i32 %2
+ ret <20 x i8*> %3
+}
+; CHECK-LABEL: define <4 x i8*> @insert_20xi8ptr_var_idx(<4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, i8*, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %11 = insertelement <4 x i8*> %4, i8* %9, i32 0
+; CHECK-NEXT: %12 = icmp eq i32 0, %10
+; CHECK-NEXT: %13 = select i1 %12, <4 x i8*> %11, <4 x i8*> %4
+; CHECK-NEXT: %14 = insertelement <4 x i8*> %13, i8* %9, i32 1
+; CHECK-NEXT: %15 = icmp eq i32 1, %10
+; CHECK-NEXT: %16 = select i1 %15, <4 x i8*> %14, <4 x i8*> %13
+; CHECK-NEXT: %17 = insertelement <4 x i8*> %16, i8* %9, i32 2
+; CHECK-NEXT: %18 = icmp eq i32 2, %10
+; CHECK-NEXT: %19 = select i1 %18, <4 x i8*> %17, <4 x i8*> %16
+; CHECK-NEXT: %20 = insertelement <4 x i8*> %19, i8* %9, i32 3
+; CHECK-NEXT: %21 = icmp eq i32 3, %10
+; CHECK-NEXT: %22 = select i1 %21, <4 x i8*> %20, <4 x i8*> %19
+; CHECK-NEXT: %23 = insertelement <4 x i8*> %5, i8* %9, i32 0
+; CHECK-NEXT: %24 = icmp eq i32 4, %10
+; CHECK-NEXT: %25 = select i1 %24, <4 x i8*> %23, <4 x i8*> %5
+; CHECK-NEXT: %26 = insertelement <4 x i8*> %25, i8* %9, i32 1
+; CHECK-NEXT: %27 = icmp eq i32 5, %10
+; CHECK-NEXT: %28 = select i1 %27, <4 x i8*> %26, <4 x i8*> %25
+; CHECK-NEXT: %29 = insertelement <4 x i8*> %28, i8* %9, i32 2
+; CHECK-NEXT: %30 = icmp eq i32 6, %10
+; CHECK-NEXT: %31 = select i1 %30, <4 x i8*> %29, <4 x i8*> %28
+; CHECK-NEXT: %32 = insertelement <4 x i8*> %31, i8* %9, i32 3
+; CHECK-NEXT: %33 = icmp eq i32 7, %10
+; CHECK-NEXT: %34 = select i1 %33, <4 x i8*> %32, <4 x i8*> %31
+; CHECK-NEXT: %35 = insertelement <4 x i8*> %6, i8* %9, i32 0
+; CHECK-NEXT: %36 = icmp eq i32 8, %10
+; CHECK-NEXT: %37 = select i1 %36, <4 x i8*> %35, <4 x i8*> %6
+; CHECK-NEXT: %38 = insertelement <4 x i8*> %37, i8* %9, i32 1
+; CHECK-NEXT: %39 = icmp eq i32 9, %10
+; CHECK-NEXT: %40 = select i1 %39, <4 x i8*> %38, <4 x i8*> %37
+; CHECK-NEXT: %41 = insertelement <4 x i8*> %40, i8* %9, i32 2
+; CHECK-NEXT: %42 = icmp eq i32 10, %10
+; CHECK-NEXT: %43 = select i1 %42, <4 x i8*> %41, <4 x i8*> %40
+; CHECK-NEXT: %44 = insertelement <4 x i8*> %43, i8* %9, i32 3
+; CHECK-NEXT: %45 = icmp eq i32 11, %10
+; CHECK-NEXT: %46 = select i1 %45, <4 x i8*> %44, <4 x i8*> %43
+; CHECK-NEXT: %47 = insertelement <4 x i8*> %7, i8* %9, i32 0
+; CHECK-NEXT: %48 = icmp eq i32 12, %10
+; CHECK-NEXT: %49 = select i1 %48, <4 x i8*> %47, <4 x i8*> %7
+; CHECK-NEXT: %50 = insertelement <4 x i8*> %49, i8* %9, i32 1
+; CHECK-NEXT: %51 = icmp eq i32 13, %10
+; CHECK-NEXT: %52 = select i1 %51, <4 x i8*> %50, <4 x i8*> %49
+; CHECK-NEXT: %53 = insertelement <4 x i8*> %52, i8* %9, i32 2
+; CHECK-NEXT: %54 = icmp eq i32 14, %10
+; CHECK-NEXT: %55 = select i1 %54, <4 x i8*> %53, <4 x i8*> %52
+; CHECK-NEXT: %56 = insertelement <4 x i8*> %55, i8* %9, i32 3
+; CHECK-NEXT: %57 = icmp eq i32 15, %10
+; CHECK-NEXT: %58 = select i1 %57, <4 x i8*> %56, <4 x i8*> %55
+; CHECK-NEXT: %59 = insertelement <4 x i8*> %8, i8* %9, i32 0
+; CHECK-NEXT: %60 = icmp eq i32 16, %10
+; CHECK-NEXT: %61 = select i1 %60, <4 x i8*> %59, <4 x i8*> %8
+; CHECK-NEXT: %62 = insertelement <4 x i8*> %61, i8* %9, i32 1
+; CHECK-NEXT: %63 = icmp eq i32 17, %10
+; CHECK-NEXT: %64 = select i1 %63, <4 x i8*> %62, <4 x i8*> %61
+; CHECK-NEXT: %65 = insertelement <4 x i8*> %64, i8* %9, i32 2
+; CHECK-NEXT: %66 = icmp eq i32 18, %10
+; CHECK-NEXT: %67 = select i1 %66, <4 x i8*> %65, <4 x i8*> %64
+; CHECK-NEXT: %68 = insertelement <4 x i8*> %67, i8* %9, i32 3
+; CHECK-NEXT: %69 = icmp eq i32 19, %10
+; CHECK-NEXT: %70 = select i1 %69, <4 x i8*> %68, <4 x i8*> %67
+; CHECK-NEXT: store <4 x i8*> %34, <4 x i8*>* %0, align 16
+; CHECK-NEXT: store <4 x i8*> %46, <4 x i8*>* %1, align 16
+; CHECK-NEXT: store <4 x i8*> %58, <4 x i8*>* %2, align 16
+; CHECK-NEXT: store <4 x i8*> %70, <4 x i8*>* %3, align 16
+; CHECK-NEXT: ret <4 x i8*> %22
+; CHECK-NEXT: }
+
+define <20 x float> @insert_20xfloat_var_idx(<20 x float>, float, i32) {
+entry:
+ %3 = insertelement <20 x float> %0, float %1, i32 %2
+ ret <20 x float> %3
+}
+; CHECK-LABEL: define <4 x float> @insert_20xfloat_var_idx(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>, float, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %11 = insertelement <4 x float> %4, float %9, i32 0
+; CHECK-NEXT: %12 = icmp eq i32 0, %10
+; CHECK-NEXT: %13 = select i1 %12, <4 x float> %11, <4 x float> %4
+; CHECK-NEXT: %14 = insertelement <4 x float> %13, float %9, i32 1
+; CHECK-NEXT: %15 = icmp eq i32 1, %10
+; CHECK-NEXT: %16 = select i1 %15, <4 x float> %14, <4 x float> %13
+; CHECK-NEXT: %17 = insertelement <4 x float> %16, float %9, i32 2
+; CHECK-NEXT: %18 = icmp eq i32 2, %10
+; CHECK-NEXT: %19 = select i1 %18, <4 x float> %17, <4 x float> %16
+; CHECK-NEXT: %20 = insertelement <4 x float> %19, float %9, i32 3
+; CHECK-NEXT: %21 = icmp eq i32 3, %10
+; CHECK-NEXT: %22 = select i1 %21, <4 x float> %20, <4 x float> %19
+; CHECK-NEXT: %23 = insertelement <4 x float> %5, float %9, i32 0
+; CHECK-NEXT: %24 = icmp eq i32 4, %10
+; CHECK-NEXT: %25 = select i1 %24, <4 x float> %23, <4 x float> %5
+; CHECK-NEXT: %26 = insertelement <4 x float> %25, float %9, i32 1
+; CHECK-NEXT: %27 = icmp eq i32 5, %10
+; CHECK-NEXT: %28 = select i1 %27, <4 x float> %26, <4 x float> %25
+; CHECK-NEXT: %29 = insertelement <4 x float> %28, float %9, i32 2
+; CHECK-NEXT: %30 = icmp eq i32 6, %10
+; CHECK-NEXT: %31 = select i1 %30, <4 x float> %29, <4 x float> %28
+; CHECK-NEXT: %32 = insertelement <4 x float> %31, float %9, i32 3
+; CHECK-NEXT: %33 = icmp eq i32 7, %10
+; CHECK-NEXT: %34 = select i1 %33, <4 x float> %32, <4 x float> %31
+; CHECK-NEXT: %35 = insertelement <4 x float> %6, float %9, i32 0
+; CHECK-NEXT: %36 = icmp eq i32 8, %10
+; CHECK-NEXT: %37 = select i1 %36, <4 x float> %35, <4 x float> %6
+; CHECK-NEXT: %38 = insertelement <4 x float> %37, float %9, i32 1
+; CHECK-NEXT: %39 = icmp eq i32 9, %10
+; CHECK-NEXT: %40 = select i1 %39, <4 x float> %38, <4 x float> %37
+; CHECK-NEXT: %41 = insertelement <4 x float> %40, float %9, i32 2
+; CHECK-NEXT: %42 = icmp eq i32 10, %10
+; CHECK-NEXT: %43 = select i1 %42, <4 x float> %41, <4 x float> %40
+; CHECK-NEXT: %44 = insertelement <4 x float> %43, float %9, i32 3
+; CHECK-NEXT: %45 = icmp eq i32 11, %10
+; CHECK-NEXT: %46 = select i1 %45, <4 x float> %44, <4 x float> %43
+; CHECK-NEXT: %47 = insertelement <4 x float> %7, float %9, i32 0
+; CHECK-NEXT: %48 = icmp eq i32 12, %10
+; CHECK-NEXT: %49 = select i1 %48, <4 x float> %47, <4 x float> %7
+; CHECK-NEXT: %50 = insertelement <4 x float> %49, float %9, i32 1
+; CHECK-NEXT: %51 = icmp eq i32 13, %10
+; CHECK-NEXT: %52 = select i1 %51, <4 x float> %50, <4 x float> %49
+; CHECK-NEXT: %53 = insertelement <4 x float> %52, float %9, i32 2
+; CHECK-NEXT: %54 = icmp eq i32 14, %10
+; CHECK-NEXT: %55 = select i1 %54, <4 x float> %53, <4 x float> %52
+; CHECK-NEXT: %56 = insertelement <4 x float> %55, float %9, i32 3
+; CHECK-NEXT: %57 = icmp eq i32 15, %10
+; CHECK-NEXT: %58 = select i1 %57, <4 x float> %56, <4 x float> %55
+; CHECK-NEXT: %59 = insertelement <4 x float> %8, float %9, i32 0
+; CHECK-NEXT: %60 = icmp eq i32 16, %10
+; CHECK-NEXT: %61 = select i1 %60, <4 x float> %59, <4 x float> %8
+; CHECK-NEXT: %62 = insertelement <4 x float> %61, float %9, i32 1
+; CHECK-NEXT: %63 = icmp eq i32 17, %10
+; CHECK-NEXT: %64 = select i1 %63, <4 x float> %62, <4 x float> %61
+; CHECK-NEXT: %65 = insertelement <4 x float> %64, float %9, i32 2
+; CHECK-NEXT: %66 = icmp eq i32 18, %10
+; CHECK-NEXT: %67 = select i1 %66, <4 x float> %65, <4 x float> %64
+; CHECK-NEXT: %68 = insertelement <4 x float> %67, float %9, i32 3
+; CHECK-NEXT: %69 = icmp eq i32 19, %10
+; CHECK-NEXT: %70 = select i1 %69, <4 x float> %68, <4 x float> %67
+; CHECK-NEXT: store <4 x float> %34, <4 x float>* %0, align 16
+; CHECK-NEXT: store <4 x float> %46, <4 x float>* %1, align 16
+; CHECK-NEXT: store <4 x float> %58, <4 x float>* %2, align 16
+; CHECK-NEXT: store <4 x float> %70, <4 x float>* %3, align 16
+; CHECK-NEXT: ret <4 x float> %22
+; CHECK-NEXT: }
+
+define <20 x double> @insert_20xdouble_var_idx(<20 x double>, double, i32) {
+entry:
+ %3 = insertelement <20 x double> %0, double %1, i32 %2
+ ret <20 x double> %3
+}
+; CHECK-LABEL: define <2 x double> @insert_20xdouble_var_idx(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double, i32) {
+; CHECK: entry:
+; CHECK-NEXT: %21 = insertelement <2 x double> %9, double %19, i32 0
+; CHECK-NEXT: %22 = icmp eq i32 0, %20
+; CHECK-NEXT: %23 = select i1 %22, <2 x double> %21, <2 x double> %9
+; CHECK-NEXT: %24 = insertelement <2 x double> %23, double %19, i32 1
+; CHECK-NEXT: %25 = icmp eq i32 1, %20
+; CHECK-NEXT: %26 = select i1 %25, <2 x double> %24, <2 x double> %23
+; CHECK-NEXT: %27 = insertelement <2 x double> %10, double %19, i32 0
+; CHECK-NEXT: %28 = icmp eq i32 2, %20
+; CHECK-NEXT: %29 = select i1 %28, <2 x double> %27, <2 x double> %10
+; CHECK-NEXT: %30 = insertelement <2 x double> %29, double %19, i32 1
+; CHECK-NEXT: %31 = icmp eq i32 3, %20
+; CHECK-NEXT: %32 = select i1 %31, <2 x double> %30, <2 x double> %29
+; CHECK-NEXT: %33 = insertelement <2 x double> %11, double %19, i32 0
+; CHECK-NEXT: %34 = icmp eq i32 4, %20
+; CHECK-NEXT: %35 = select i1 %34, <2 x double> %33, <2 x double> %11
+; CHECK-NEXT: %36 = insertelement <2 x double> %35, double %19, i32 1
+; CHECK-NEXT: %37 = icmp eq i32 5, %20
+; CHECK-NEXT: %38 = select i1 %37, <2 x double> %36, <2 x double> %35
+; CHECK-NEXT: %39 = insertelement <2 x double> %12, double %19, i32 0
+; CHECK-NEXT: %40 = icmp eq i32 6, %20
+; CHECK-NEXT: %41 = select i1 %40, <2 x double> %39, <2 x double> %12
+; CHECK-NEXT: %42 = insertelement <2 x double> %41, double %19, i32 1
+; CHECK-NEXT: %43 = icmp eq i32 7, %20
+; CHECK-NEXT: %44 = select i1 %43, <2 x double> %42, <2 x double> %41
+; CHECK-NEXT: %45 = insertelement <2 x double> %13, double %19, i32 0
+; CHECK-NEXT: %46 = icmp eq i32 8, %20
+; CHECK-NEXT: %47 = select i1 %46, <2 x double> %45, <2 x double> %13
+; CHECK-NEXT: %48 = insertelement <2 x double> %47, double %19, i32 1
+; CHECK-NEXT: %49 = icmp eq i32 9, %20
+; CHECK-NEXT: %50 = select i1 %49, <2 x double> %48, <2 x double> %47
+; CHECK-NEXT: %51 = insertelement <2 x double> %14, double %19, i32 0
+; CHECK-NEXT: %52 = icmp eq i32 10, %20
+; CHECK-NEXT: %53 = select i1 %52, <2 x double> %51, <2 x double> %14
+; CHECK-NEXT: %54 = insertelement <2 x double> %53, double %19, i32 1
+; CHECK-NEXT: %55 = icmp eq i32 11, %20
+; CHECK-NEXT: %56 = select i1 %55, <2 x double> %54, <2 x double> %53
+; CHECK-NEXT: %57 = insertelement <2 x double> %15, double %19, i32 0
+; CHECK-NEXT: %58 = icmp eq i32 12, %20
+; CHECK-NEXT: %59 = select i1 %58, <2 x double> %57, <2 x double> %15
+; CHECK-NEXT: %60 = insertelement <2 x double> %59, double %19, i32 1
+; CHECK-NEXT: %61 = icmp eq i32 13, %20
+; CHECK-NEXT: %62 = select i1 %61, <2 x double> %60, <2 x double> %59
+; CHECK-NEXT: %63 = insertelement <2 x double> %16, double %19, i32 0
+; CHECK-NEXT: %64 = icmp eq i32 14, %20
+; CHECK-NEXT: %65 = select i1 %64, <2 x double> %63, <2 x double> %16
+; CHECK-NEXT: %66 = insertelement <2 x double> %65, double %19, i32 1
+; CHECK-NEXT: %67 = icmp eq i32 15, %20
+; CHECK-NEXT: %68 = select i1 %67, <2 x double> %66, <2 x double> %65
+; CHECK-NEXT: %69 = insertelement <2 x double> %17, double %19, i32 0
+; CHECK-NEXT: %70 = icmp eq i32 16, %20
+; CHECK-NEXT: %71 = select i1 %70, <2 x double> %69, <2 x double> %17
+; CHECK-NEXT: %72 = insertelement <2 x double> %71, double %19, i32 1
+; CHECK-NEXT: %73 = icmp eq i32 17, %20
+; CHECK-NEXT: %74 = select i1 %73, <2 x double> %72, <2 x double> %71
+; CHECK-NEXT: %75 = insertelement <2 x double> %18, double %19, i32 0
+; CHECK-NEXT: %76 = icmp eq i32 18, %20
+; CHECK-NEXT: %77 = select i1 %76, <2 x double> %75, <2 x double> %18
+; CHECK-NEXT: %78 = insertelement <2 x double> %77, double %19, i32 1
+; CHECK-NEXT: %79 = icmp eq i32 19, %20
+; CHECK-NEXT: %80 = select i1 %79, <2 x double> %78, <2 x double> %77
+; CHECK-NEXT: store <2 x double> %32, <2 x double>* %0, align 16
+; CHECK-NEXT: store <2 x double> %38, <2 x double>* %1, align 16
+; CHECK-NEXT: store <2 x double> %44, <2 x double>* %2, align 16
+; CHECK-NEXT: store <2 x double> %50, <2 x double>* %3, align 16
+; CHECK-NEXT: store <2 x double> %56, <2 x double>* %4, align 16
+; CHECK-NEXT: store <2 x double> %62, <2 x double>* %5, align 16
+; CHECK-NEXT: store <2 x double> %68, <2 x double>* %6, align 16
+; CHECK-NEXT: store <2 x double> %74, <2 x double>* %7, align 16
+; CHECK-NEXT: store <2 x double> %80, <2 x double>* %8, align 16
+; CHECK-NEXT: ret <2 x double> %26
+; CHECK-NEXT: }
+
« no previous file with comments | « test/Transforms/NaCl/vector-canonicalization-extracts.ll ('k') | test/Transforms/NaCl/vector-canonicalization-loads.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698