xref: /llvm-project/llvm/test/Transforms/Scalarizer/min-bits.ll (revision 1bc9b67bd87d7ec51045951c93fd5db953faa745)
12e07adcdSNicolai Hähnle; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2*1bc9b67bSMatt Arsenault; RUN: opt %s -passes='function(scalarizer<load-store;min-bits=16>,dce)' -S | FileCheck %s --check-prefixes=CHECK,MIN16
3*1bc9b67bSMatt Arsenault; RUN: opt %s -passes='function(scalarizer<load-store;min-bits=32>,dce)' -S | FileCheck %s --check-prefixes=CHECK,MIN32
42e07adcdSNicolai Hähnletarget datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
52e07adcdSNicolai Hähnle
62e07adcdSNicolai Hähnledefine void @load_add_store_v2i16(ptr %pa, ptr %pb) {
72cb5c6d1SNicolai Hähnle; MIN16-LABEL: @load_add_store_v2i16(
82cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[PB_I1:%.*]] = getelementptr i16, ptr [[PB:%.*]], i32 1
92cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = load i16, ptr [[PA:%.*]], align 8
102cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[PA_I1:%.*]] = getelementptr i16, ptr [[PA]], i32 1
112cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = load i16, ptr [[PA_I1]], align 2
122cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I0:%.*]] = load i16, ptr [[PB]], align 8
132cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I1:%.*]] = load i16, ptr [[PB_I1]], align 2
142cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[C_I0:%.*]] = add i16 [[A_I0]], [[B_I0]]
152cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[C_I1:%.*]] = add i16 [[A_I1]], [[B_I1]]
162cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store i16 [[C_I0]], ptr [[PA]], align 8
172cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store i16 [[C_I1]], ptr [[PA_I1]], align 2
182cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret void
192cb5c6d1SNicolai Hähnle;
202cb5c6d1SNicolai Hähnle; MIN32-LABEL: @load_add_store_v2i16(
212cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A:%.*]] = load <2 x i16>, ptr [[PA:%.*]], align 8
222cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[B:%.*]] = load <2 x i16>, ptr [[PB:%.*]], align 8
232cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[C:%.*]] = add <2 x i16> [[A]], [[B]]
242cb5c6d1SNicolai Hähnle; MIN32-NEXT:    store <2 x i16> [[C]], ptr [[PA]], align 8
252cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret void
262e07adcdSNicolai Hähnle;
272e07adcdSNicolai Hähnle  %a = load <2 x i16>, ptr %pa, align 8
282e07adcdSNicolai Hähnle  %b = load <2 x i16>, ptr %pb, align 8
292e07adcdSNicolai Hähnle  %c = add <2 x i16> %a, %b
302e07adcdSNicolai Hähnle  store <2 x i16> %c, ptr %pa, align 8
312e07adcdSNicolai Hähnle  ret void
322e07adcdSNicolai Hähnle}
332e07adcdSNicolai Hähnle
342e07adcdSNicolai Hähnledefine void @load_add_store_v3i16(ptr %pa, ptr %pb) {
352cb5c6d1SNicolai Hähnle; MIN16-LABEL: @load_add_store_v3i16(
362cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[PB_I1:%.*]] = getelementptr i16, ptr [[PB:%.*]], i32 1
372cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[PB_I2:%.*]] = getelementptr i16, ptr [[PB]], i32 2
382cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = load i16, ptr [[PA:%.*]], align 8
392cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[PA_I1:%.*]] = getelementptr i16, ptr [[PA]], i32 1
402cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = load i16, ptr [[PA_I1]], align 2
412cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[PA_I2:%.*]] = getelementptr i16, ptr [[PA]], i32 2
422cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I2:%.*]] = load i16, ptr [[PA_I2]], align 4
432cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I0:%.*]] = load i16, ptr [[PB]], align 8
442cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I1:%.*]] = load i16, ptr [[PB_I1]], align 2
452cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I2:%.*]] = load i16, ptr [[PB_I2]], align 4
462cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[C_I0:%.*]] = add i16 [[A_I0]], [[B_I0]]
472cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[C_I1:%.*]] = add i16 [[A_I1]], [[B_I1]]
482cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[C_I2:%.*]] = add i16 [[A_I2]], [[B_I2]]
492cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store i16 [[C_I0]], ptr [[PA]], align 8
502cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store i16 [[C_I1]], ptr [[PA_I1]], align 2
512cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store i16 [[C_I2]], ptr [[PA_I2]], align 4
522cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret void
532cb5c6d1SNicolai Hähnle;
542cb5c6d1SNicolai Hähnle; MIN32-LABEL: @load_add_store_v3i16(
552cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[PB_I1:%.*]] = getelementptr <2 x i16>, ptr [[PB:%.*]], i32 1
562cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I0:%.*]] = load <2 x i16>, ptr [[PA:%.*]], align 8
572cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[PA_I1:%.*]] = getelementptr <2 x i16>, ptr [[PA]], i32 1
582cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I1:%.*]] = load i16, ptr [[PA_I1]], align 4
592cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[B_I0:%.*]] = load <2 x i16>, ptr [[PB]], align 8
602cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[B_I1:%.*]] = load i16, ptr [[PB_I1]], align 4
612cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[C_I0:%.*]] = add <2 x i16> [[A_I0]], [[B_I0]]
622cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[C_I1:%.*]] = add i16 [[A_I1]], [[B_I1]]
632cb5c6d1SNicolai Hähnle; MIN32-NEXT:    store <2 x i16> [[C_I0]], ptr [[PA]], align 8
642cb5c6d1SNicolai Hähnle; MIN32-NEXT:    store i16 [[C_I1]], ptr [[PA_I1]], align 4
652cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret void
662e07adcdSNicolai Hähnle;
672e07adcdSNicolai Hähnle  %a = load <3 x i16>, ptr %pa, align 8
682e07adcdSNicolai Hähnle  %b = load <3 x i16>, ptr %pb, align 8
692e07adcdSNicolai Hähnle  %c = add <3 x i16> %a, %b
702e07adcdSNicolai Hähnle  store <3 x i16> %c, ptr %pa, align 8
712e07adcdSNicolai Hähnle  ret void
722e07adcdSNicolai Hähnle}
732e07adcdSNicolai Hähnle
742e07adcdSNicolai Hähnledefine void @load_add_store_v4i16(ptr %pa, ptr %pb) {
752cb5c6d1SNicolai Hähnle; MIN16-LABEL: @load_add_store_v4i16(
762cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[PB_I1:%.*]] = getelementptr i16, ptr [[PB:%.*]], i32 1
772cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[PB_I2:%.*]] = getelementptr i16, ptr [[PB]], i32 2
782cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[PB_I3:%.*]] = getelementptr i16, ptr [[PB]], i32 3
792cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = load i16, ptr [[PA:%.*]], align 8
802cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[PA_I1:%.*]] = getelementptr i16, ptr [[PA]], i32 1
812cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = load i16, ptr [[PA_I1]], align 2
822cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[PA_I2:%.*]] = getelementptr i16, ptr [[PA]], i32 2
832cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I2:%.*]] = load i16, ptr [[PA_I2]], align 4
842cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[PA_I3:%.*]] = getelementptr i16, ptr [[PA]], i32 3
852cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I3:%.*]] = load i16, ptr [[PA_I3]], align 2
862cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I0:%.*]] = load i16, ptr [[PB]], align 8
872cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I1:%.*]] = load i16, ptr [[PB_I1]], align 2
882cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I2:%.*]] = load i16, ptr [[PB_I2]], align 4
892cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I3:%.*]] = load i16, ptr [[PB_I3]], align 2
902cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[C_I0:%.*]] = add i16 [[A_I0]], [[B_I0]]
912cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[C_I1:%.*]] = add i16 [[A_I1]], [[B_I1]]
922cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[C_I2:%.*]] = add i16 [[A_I2]], [[B_I2]]
932cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[C_I3:%.*]] = add i16 [[A_I3]], [[B_I3]]
942cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store i16 [[C_I0]], ptr [[PA]], align 8
952cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store i16 [[C_I1]], ptr [[PA_I1]], align 2
962cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store i16 [[C_I2]], ptr [[PA_I2]], align 4
972cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store i16 [[C_I3]], ptr [[PA_I3]], align 2
982cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret void
992cb5c6d1SNicolai Hähnle;
1002cb5c6d1SNicolai Hähnle; MIN32-LABEL: @load_add_store_v4i16(
1012cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[PB_I1:%.*]] = getelementptr <2 x i16>, ptr [[PB:%.*]], i32 1
1022cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I0:%.*]] = load <2 x i16>, ptr [[PA:%.*]], align 8
1032cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[PA_I1:%.*]] = getelementptr <2 x i16>, ptr [[PA]], i32 1
1042cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I1:%.*]] = load <2 x i16>, ptr [[PA_I1]], align 4
1052cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[B_I0:%.*]] = load <2 x i16>, ptr [[PB]], align 8
1062cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[B_I1:%.*]] = load <2 x i16>, ptr [[PB_I1]], align 4
1072cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[C_I0:%.*]] = add <2 x i16> [[A_I0]], [[B_I0]]
1082cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[C_I1:%.*]] = add <2 x i16> [[A_I1]], [[B_I1]]
1092cb5c6d1SNicolai Hähnle; MIN32-NEXT:    store <2 x i16> [[C_I0]], ptr [[PA]], align 8
1102cb5c6d1SNicolai Hähnle; MIN32-NEXT:    store <2 x i16> [[C_I1]], ptr [[PA_I1]], align 4
1112cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret void
1122e07adcdSNicolai Hähnle;
1132e07adcdSNicolai Hähnle  %a = load <4 x i16>, ptr %pa, align 8
1142e07adcdSNicolai Hähnle  %b = load <4 x i16>, ptr %pb, align 8
1152e07adcdSNicolai Hähnle  %c = add <4 x i16> %a, %b
1162e07adcdSNicolai Hähnle  store <4 x i16> %c, ptr %pa, align 8
1172e07adcdSNicolai Hähnle  ret void
1182e07adcdSNicolai Hähnle}
1192e07adcdSNicolai Hähnle
1202cb5c6d1SNicolai Hähnledefine void @load_add_store_v4i10(ptr %pa, ptr %pb) {
1212cb5c6d1SNicolai Hähnle; MIN16-LABEL: @load_add_store_v4i10(
1222cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A:%.*]] = load <4 x i10>, ptr [[PA:%.*]], align 8
1232cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = extractelement <4 x i10> [[A]], i64 0
1242cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = extractelement <4 x i10> [[A]], i64 1
1252cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I2:%.*]] = extractelement <4 x i10> [[A]], i64 2
1262cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I3:%.*]] = extractelement <4 x i10> [[A]], i64 3
1272cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B:%.*]] = load <4 x i10>, ptr [[PB:%.*]], align 8
1282cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I0:%.*]] = extractelement <4 x i10> [[B]], i64 0
1292cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[C_I0:%.*]] = add i10 [[A_I0]], [[B_I0]]
1302cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I1:%.*]] = extractelement <4 x i10> [[B]], i64 1
1312cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[C_I1:%.*]] = add i10 [[A_I1]], [[B_I1]]
1322cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I2:%.*]] = extractelement <4 x i10> [[B]], i64 2
1332cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[C_I2:%.*]] = add i10 [[A_I2]], [[B_I2]]
1342cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I3:%.*]] = extractelement <4 x i10> [[B]], i64 3
1352cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[C_I3:%.*]] = add i10 [[A_I3]], [[B_I3]]
1362cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[C_UPTO0:%.*]] = insertelement <4 x i10> poison, i10 [[C_I0]], i64 0
1372cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[C_UPTO1:%.*]] = insertelement <4 x i10> [[C_UPTO0]], i10 [[C_I1]], i64 1
1382cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[C_UPTO2:%.*]] = insertelement <4 x i10> [[C_UPTO1]], i10 [[C_I2]], i64 2
1392cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[C:%.*]] = insertelement <4 x i10> [[C_UPTO2]], i10 [[C_I3]], i64 3
1402cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store <4 x i10> [[C]], ptr [[PA]], align 8
1412cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret void
1422cb5c6d1SNicolai Hähnle;
1432cb5c6d1SNicolai Hähnle; MIN32-LABEL: @load_add_store_v4i10(
1442cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A:%.*]] = load <4 x i10>, ptr [[PA:%.*]], align 8
1452cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I0:%.*]] = shufflevector <4 x i10> [[A]], <4 x i10> poison, <3 x i32> <i32 0, i32 1, i32 2>
1462cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I1:%.*]] = extractelement <4 x i10> [[A]], i64 3
1472cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[B:%.*]] = load <4 x i10>, ptr [[PB:%.*]], align 8
1482cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[B_I0:%.*]] = shufflevector <4 x i10> [[B]], <4 x i10> poison, <3 x i32> <i32 0, i32 1, i32 2>
1492cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[C_I0:%.*]] = add <3 x i10> [[A_I0]], [[B_I0]]
1502cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[B_I1:%.*]] = extractelement <4 x i10> [[B]], i64 3
1512cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[C_I1:%.*]] = add i10 [[A_I1]], [[B_I1]]
1522cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[TMP1:%.*]] = shufflevector <3 x i10> [[C_I0]], <3 x i10> [[C_I0]], <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
1532cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[C:%.*]] = insertelement <4 x i10> [[TMP1]], i10 [[C_I1]], i64 3
1542cb5c6d1SNicolai Hähnle; MIN32-NEXT:    store <4 x i10> [[C]], ptr [[PA]], align 8
1552cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret void
1562cb5c6d1SNicolai Hähnle;
1572cb5c6d1SNicolai Hähnle  %a = load <4 x i10>, ptr %pa, align 8
1582cb5c6d1SNicolai Hähnle  %b = load <4 x i10>, ptr %pb, align 8
1592cb5c6d1SNicolai Hähnle  %c = add <4 x i10> %a, %b
1602cb5c6d1SNicolai Hähnle  store <4 x i10> %c, ptr %pa, align 8
1612cb5c6d1SNicolai Hähnle  ret void
1622cb5c6d1SNicolai Hähnle}
1632cb5c6d1SNicolai Hähnle
1642e07adcdSNicolai Hähnledefine <2 x half> @select_uniform_condition_v2f16(<2 x half> %a, <2 x half> %b, i1 %cc) {
1652cb5c6d1SNicolai Hähnle; MIN16-LABEL: @select_uniform_condition_v2f16(
1662cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = extractelement <2 x half> [[A:%.*]], i64 0
1672cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I0:%.*]] = extractelement <2 x half> [[B:%.*]], i64 0
1682cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I0:%.*]] = select i1 [[CC:%.*]], half [[A_I0]], half [[B_I0]]
1692cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = extractelement <2 x half> [[A]], i64 1
1702cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I1:%.*]] = extractelement <2 x half> [[B]], i64 1
1712cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I1:%.*]] = select i1 [[CC]], half [[A_I1]], half [[B_I1]]
1722cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO0:%.*]] = insertelement <2 x half> poison, half [[R_I0]], i64 0
1732cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R:%.*]] = insertelement <2 x half> [[R_UPTO0]], half [[R_I1]], i64 1
1742cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret <2 x half> [[R]]
1752cb5c6d1SNicolai Hähnle;
1762cb5c6d1SNicolai Hähnle; MIN32-LABEL: @select_uniform_condition_v2f16(
1772cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R:%.*]] = select i1 [[CC:%.*]], <2 x half> [[A:%.*]], <2 x half> [[B:%.*]]
1782cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret <2 x half> [[R]]
1792e07adcdSNicolai Hähnle;
1802e07adcdSNicolai Hähnle  %r = select i1 %cc, <2 x half> %a, <2 x half> %b
1812e07adcdSNicolai Hähnle  ret <2 x half> %r
1822e07adcdSNicolai Hähnle}
1832e07adcdSNicolai Hähnle
1842e07adcdSNicolai Hähnledefine <3 x half> @select_uniform_condition_v3f16(<3 x half> %a, <3 x half> %b, i1 %cc) {
1852cb5c6d1SNicolai Hähnle; MIN16-LABEL: @select_uniform_condition_v3f16(
1862cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = extractelement <3 x half> [[A:%.*]], i64 0
1872cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I0:%.*]] = extractelement <3 x half> [[B:%.*]], i64 0
1882cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I0:%.*]] = select i1 [[CC:%.*]], half [[A_I0]], half [[B_I0]]
1892cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = extractelement <3 x half> [[A]], i64 1
1902cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I1:%.*]] = extractelement <3 x half> [[B]], i64 1
1912cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I1:%.*]] = select i1 [[CC]], half [[A_I1]], half [[B_I1]]
1922cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I2:%.*]] = extractelement <3 x half> [[A]], i64 2
1932cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I2:%.*]] = extractelement <3 x half> [[B]], i64 2
1942cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I2:%.*]] = select i1 [[CC]], half [[A_I2]], half [[B_I2]]
1952cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO0:%.*]] = insertelement <3 x half> poison, half [[R_I0]], i64 0
1962cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO1:%.*]] = insertelement <3 x half> [[R_UPTO0]], half [[R_I1]], i64 1
1972cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R:%.*]] = insertelement <3 x half> [[R_UPTO1]], half [[R_I2]], i64 2
1982cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret <3 x half> [[R]]
1992cb5c6d1SNicolai Hähnle;
2002cb5c6d1SNicolai Hähnle; MIN32-LABEL: @select_uniform_condition_v3f16(
2012cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I0:%.*]] = shufflevector <3 x half> [[A:%.*]], <3 x half> poison, <2 x i32> <i32 0, i32 1>
2022cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[B_I0:%.*]] = shufflevector <3 x half> [[B:%.*]], <3 x half> poison, <2 x i32> <i32 0, i32 1>
2032cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R_I0:%.*]] = select i1 [[CC:%.*]], <2 x half> [[A_I0]], <2 x half> [[B_I0]]
2042cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I1:%.*]] = extractelement <3 x half> [[A]], i64 2
2052cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[B_I1:%.*]] = extractelement <3 x half> [[B]], i64 2
2062cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R_I1:%.*]] = select i1 [[CC]], half [[A_I1]], half [[B_I1]]
2072cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[TMP1:%.*]] = shufflevector <2 x half> [[R_I0]], <2 x half> [[R_I0]], <3 x i32> <i32 0, i32 1, i32 poison>
2082cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R:%.*]] = insertelement <3 x half> [[TMP1]], half [[R_I1]], i64 2
2092cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret <3 x half> [[R]]
2102e07adcdSNicolai Hähnle;
2112e07adcdSNicolai Hähnle  %r = select i1 %cc, <3 x half> %a, <3 x half> %b
2122e07adcdSNicolai Hähnle  ret <3 x half> %r
2132e07adcdSNicolai Hähnle}
2142e07adcdSNicolai Hähnle
2152e07adcdSNicolai Hähnledefine <4 x half> @select_uniform_condition_v4f16(<4 x half> %a, <4 x half> %b, i1 %cc) {
2162cb5c6d1SNicolai Hähnle; MIN16-LABEL: @select_uniform_condition_v4f16(
2172cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = extractelement <4 x half> [[A:%.*]], i64 0
2182cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I0:%.*]] = extractelement <4 x half> [[B:%.*]], i64 0
2192cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I0:%.*]] = select i1 [[CC:%.*]], half [[A_I0]], half [[B_I0]]
2202cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = extractelement <4 x half> [[A]], i64 1
2212cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I1:%.*]] = extractelement <4 x half> [[B]], i64 1
2222cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I1:%.*]] = select i1 [[CC]], half [[A_I1]], half [[B_I1]]
2232cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I2:%.*]] = extractelement <4 x half> [[A]], i64 2
2242cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I2:%.*]] = extractelement <4 x half> [[B]], i64 2
2252cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I2:%.*]] = select i1 [[CC]], half [[A_I2]], half [[B_I2]]
2262cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I3:%.*]] = extractelement <4 x half> [[A]], i64 3
2272cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I3:%.*]] = extractelement <4 x half> [[B]], i64 3
2282cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I3:%.*]] = select i1 [[CC]], half [[A_I3]], half [[B_I3]]
2292cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO0:%.*]] = insertelement <4 x half> poison, half [[R_I0]], i64 0
2302cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO1:%.*]] = insertelement <4 x half> [[R_UPTO0]], half [[R_I1]], i64 1
2312cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO2:%.*]] = insertelement <4 x half> [[R_UPTO1]], half [[R_I2]], i64 2
2322cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R:%.*]] = insertelement <4 x half> [[R_UPTO2]], half [[R_I3]], i64 3
2332cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret <4 x half> [[R]]
2342cb5c6d1SNicolai Hähnle;
2352cb5c6d1SNicolai Hähnle; MIN32-LABEL: @select_uniform_condition_v4f16(
2362cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I0:%.*]] = shufflevector <4 x half> [[A:%.*]], <4 x half> poison, <2 x i32> <i32 0, i32 1>
2372cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[B_I0:%.*]] = shufflevector <4 x half> [[B:%.*]], <4 x half> poison, <2 x i32> <i32 0, i32 1>
2382cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R_I0:%.*]] = select i1 [[CC:%.*]], <2 x half> [[A_I0]], <2 x half> [[B_I0]]
2392cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I1:%.*]] = shufflevector <4 x half> [[A]], <4 x half> poison, <2 x i32> <i32 2, i32 3>
2402cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[B_I1:%.*]] = shufflevector <4 x half> [[B]], <4 x half> poison, <2 x i32> <i32 2, i32 3>
2412cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R_I1:%.*]] = select i1 [[CC]], <2 x half> [[A_I1]], <2 x half> [[B_I1]]
2422cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[TMP1:%.*]] = shufflevector <2 x half> [[R_I0]], <2 x half> [[R_I0]], <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>
2432cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[TMP2:%.*]] = shufflevector <2 x half> [[R_I1]], <2 x half> [[R_I1]], <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>
2442cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R:%.*]] = shufflevector <4 x half> [[TMP1]], <4 x half> [[TMP2]], <4 x i32> <i32 0, i32 1, i32 4, i32 5>
2452cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret <4 x half> [[R]]
2462e07adcdSNicolai Hähnle;
2472e07adcdSNicolai Hähnle  %r = select i1 %cc, <4 x half> %a, <4 x half> %b
2482e07adcdSNicolai Hähnle  ret <4 x half> %r
2492e07adcdSNicolai Hähnle}
2502e07adcdSNicolai Hähnle
2512e07adcdSNicolai Hähnledefine <4 x half> @select_vector_condition_v4f16(<4 x half> %a, <4 x half> %b, <4 x i1> %cc) {
2522e07adcdSNicolai Hähnle; CHECK-LABEL: @select_vector_condition_v4f16(
2532cb5c6d1SNicolai Hähnle; CHECK-NEXT:    [[R:%.*]] = select <4 x i1> [[CC:%.*]], <4 x half> [[A:%.*]], <4 x half> [[B:%.*]]
2542e07adcdSNicolai Hähnle; CHECK-NEXT:    ret <4 x half> [[R]]
2552e07adcdSNicolai Hähnle;
2562e07adcdSNicolai Hähnle  %r = select <4 x i1> %cc, <4 x half> %a, <4 x half> %b
2572e07adcdSNicolai Hähnle  ret <4 x half> %r
2582e07adcdSNicolai Hähnle}
2592e07adcdSNicolai Hähnle
2602e07adcdSNicolai Hähnledefine <2 x half> @unary_v2f16(<2 x half> %a) {
2612cb5c6d1SNicolai Hähnle; MIN16-LABEL: @unary_v2f16(
2622cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = extractelement <2 x half> [[A:%.*]], i64 0
2632cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I0:%.*]] = fneg half [[A_I0]]
2642cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = extractelement <2 x half> [[A]], i64 1
2652cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I1:%.*]] = fneg half [[A_I1]]
2662cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO0:%.*]] = insertelement <2 x half> poison, half [[R_I0]], i64 0
2672cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R:%.*]] = insertelement <2 x half> [[R_UPTO0]], half [[R_I1]], i64 1
2682cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret <2 x half> [[R]]
2692cb5c6d1SNicolai Hähnle;
2702cb5c6d1SNicolai Hähnle; MIN32-LABEL: @unary_v2f16(
2712cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R:%.*]] = fneg <2 x half> [[A:%.*]]
2722cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret <2 x half> [[R]]
2732e07adcdSNicolai Hähnle;
2742e07adcdSNicolai Hähnle  %r = fneg <2 x half> %a
2752e07adcdSNicolai Hähnle  ret <2 x half> %r
2762e07adcdSNicolai Hähnle}
2772e07adcdSNicolai Hähnle
2782e07adcdSNicolai Hähnledefine <3 x half> @unary_v3f16(<3 x half> %a) {
2792cb5c6d1SNicolai Hähnle; MIN16-LABEL: @unary_v3f16(
2802cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = extractelement <3 x half> [[A:%.*]], i64 0
2812cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I0:%.*]] = fneg half [[A_I0]]
2822cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = extractelement <3 x half> [[A]], i64 1
2832cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I1:%.*]] = fneg half [[A_I1]]
2842cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I2:%.*]] = extractelement <3 x half> [[A]], i64 2
2852cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I2:%.*]] = fneg half [[A_I2]]
2862cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO0:%.*]] = insertelement <3 x half> poison, half [[R_I0]], i64 0
2872cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO1:%.*]] = insertelement <3 x half> [[R_UPTO0]], half [[R_I1]], i64 1
2882cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R:%.*]] = insertelement <3 x half> [[R_UPTO1]], half [[R_I2]], i64 2
2892cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret <3 x half> [[R]]
2902cb5c6d1SNicolai Hähnle;
2912cb5c6d1SNicolai Hähnle; MIN32-LABEL: @unary_v3f16(
2922cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I0:%.*]] = shufflevector <3 x half> [[A:%.*]], <3 x half> poison, <2 x i32> <i32 0, i32 1>
2932cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R_I0:%.*]] = fneg <2 x half> [[A_I0]]
2942cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I1:%.*]] = extractelement <3 x half> [[A]], i64 2
2952cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R_I1:%.*]] = fneg half [[A_I1]]
2962cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[TMP1:%.*]] = shufflevector <2 x half> [[R_I0]], <2 x half> [[R_I0]], <3 x i32> <i32 0, i32 1, i32 poison>
2972cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R:%.*]] = insertelement <3 x half> [[TMP1]], half [[R_I1]], i64 2
2982cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret <3 x half> [[R]]
2992e07adcdSNicolai Hähnle;
3002e07adcdSNicolai Hähnle  %r = fneg <3 x half> %a
3012e07adcdSNicolai Hähnle  ret <3 x half> %r
3022e07adcdSNicolai Hähnle}
3032e07adcdSNicolai Hähnle
3042e07adcdSNicolai Hähnledefine <4 x half> @unary_v4f16(<4 x half> %a) {
3052cb5c6d1SNicolai Hähnle; MIN16-LABEL: @unary_v4f16(
3062cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = extractelement <4 x half> [[A:%.*]], i64 0
3072cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I0:%.*]] = fneg half [[A_I0]]
3082cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = extractelement <4 x half> [[A]], i64 1
3092cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I1:%.*]] = fneg half [[A_I1]]
3102cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I2:%.*]] = extractelement <4 x half> [[A]], i64 2
3112cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I2:%.*]] = fneg half [[A_I2]]
3122cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I3:%.*]] = extractelement <4 x half> [[A]], i64 3
3132cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I3:%.*]] = fneg half [[A_I3]]
3142cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO0:%.*]] = insertelement <4 x half> poison, half [[R_I0]], i64 0
3152cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO1:%.*]] = insertelement <4 x half> [[R_UPTO0]], half [[R_I1]], i64 1
3162cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO2:%.*]] = insertelement <4 x half> [[R_UPTO1]], half [[R_I2]], i64 2
3172cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R:%.*]] = insertelement <4 x half> [[R_UPTO2]], half [[R_I3]], i64 3
3182cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret <4 x half> [[R]]
3192cb5c6d1SNicolai Hähnle;
3202cb5c6d1SNicolai Hähnle; MIN32-LABEL: @unary_v4f16(
3212cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I0:%.*]] = shufflevector <4 x half> [[A:%.*]], <4 x half> poison, <2 x i32> <i32 0, i32 1>
3222cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R_I0:%.*]] = fneg <2 x half> [[A_I0]]
3232cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I1:%.*]] = shufflevector <4 x half> [[A]], <4 x half> poison, <2 x i32> <i32 2, i32 3>
3242cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R_I1:%.*]] = fneg <2 x half> [[A_I1]]
3252cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[TMP1:%.*]] = shufflevector <2 x half> [[R_I0]], <2 x half> [[R_I0]], <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>
3262cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[TMP2:%.*]] = shufflevector <2 x half> [[R_I1]], <2 x half> [[R_I1]], <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>
3272cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R:%.*]] = shufflevector <4 x half> [[TMP1]], <4 x half> [[TMP2]], <4 x i32> <i32 0, i32 1, i32 4, i32 5>
3282cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret <4 x half> [[R]]
3292e07adcdSNicolai Hähnle;
3302e07adcdSNicolai Hähnle  %r = fneg <4 x half> %a
3312e07adcdSNicolai Hähnle  ret <4 x half> %r
3322e07adcdSNicolai Hähnle}
3332e07adcdSNicolai Hähnle
3342e07adcdSNicolai Hähnledefine <2 x half> @binary_v2f16(<2 x half> %a, <2 x half> %b) {
3352cb5c6d1SNicolai Hähnle; MIN16-LABEL: @binary_v2f16(
3362cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = extractelement <2 x half> [[A:%.*]], i64 0
3372cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I0:%.*]] = extractelement <2 x half> [[B:%.*]], i64 0
3382cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I0:%.*]] = fadd half [[A_I0]], [[B_I0]]
3392cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = extractelement <2 x half> [[A]], i64 1
3402cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I1:%.*]] = extractelement <2 x half> [[B]], i64 1
3412cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I1:%.*]] = fadd half [[A_I1]], [[B_I1]]
3422cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO0:%.*]] = insertelement <2 x half> poison, half [[R_I0]], i64 0
3432cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R:%.*]] = insertelement <2 x half> [[R_UPTO0]], half [[R_I1]], i64 1
3442cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret <2 x half> [[R]]
3452cb5c6d1SNicolai Hähnle;
3462cb5c6d1SNicolai Hähnle; MIN32-LABEL: @binary_v2f16(
3472cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R:%.*]] = fadd <2 x half> [[A:%.*]], [[B:%.*]]
3482cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret <2 x half> [[R]]
3492e07adcdSNicolai Hähnle;
3502e07adcdSNicolai Hähnle  %r = fadd <2 x half> %a, %b
3512e07adcdSNicolai Hähnle  ret <2 x half> %r
3522e07adcdSNicolai Hähnle}
3532e07adcdSNicolai Hähnle
3542e07adcdSNicolai Hähnledefine <3 x half> @binary_v3f16(<3 x half> %a, <3 x half> %b) {
3552cb5c6d1SNicolai Hähnle; MIN16-LABEL: @binary_v3f16(
3562cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = extractelement <3 x half> [[A:%.*]], i64 0
3572cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I0:%.*]] = extractelement <3 x half> [[B:%.*]], i64 0
3582cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I0:%.*]] = fadd half [[A_I0]], [[B_I0]]
3592cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = extractelement <3 x half> [[A]], i64 1
3602cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I1:%.*]] = extractelement <3 x half> [[B]], i64 1
3612cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I1:%.*]] = fadd half [[A_I1]], [[B_I1]]
3622cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I2:%.*]] = extractelement <3 x half> [[A]], i64 2
3632cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I2:%.*]] = extractelement <3 x half> [[B]], i64 2
3642cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I2:%.*]] = fadd half [[A_I2]], [[B_I2]]
3652cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO0:%.*]] = insertelement <3 x half> poison, half [[R_I0]], i64 0
3662cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO1:%.*]] = insertelement <3 x half> [[R_UPTO0]], half [[R_I1]], i64 1
3672cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R:%.*]] = insertelement <3 x half> [[R_UPTO1]], half [[R_I2]], i64 2
3682cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret <3 x half> [[R]]
3692cb5c6d1SNicolai Hähnle;
3702cb5c6d1SNicolai Hähnle; MIN32-LABEL: @binary_v3f16(
3712cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I0:%.*]] = shufflevector <3 x half> [[A:%.*]], <3 x half> poison, <2 x i32> <i32 0, i32 1>
3722cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[B_I0:%.*]] = shufflevector <3 x half> [[B:%.*]], <3 x half> poison, <2 x i32> <i32 0, i32 1>
3732cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R_I0:%.*]] = fadd <2 x half> [[A_I0]], [[B_I0]]
3742cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I1:%.*]] = extractelement <3 x half> [[A]], i64 2
3752cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[B_I1:%.*]] = extractelement <3 x half> [[B]], i64 2
3762cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R_I1:%.*]] = fadd half [[A_I1]], [[B_I1]]
3772cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[TMP1:%.*]] = shufflevector <2 x half> [[R_I0]], <2 x half> [[R_I0]], <3 x i32> <i32 0, i32 1, i32 poison>
3782cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R:%.*]] = insertelement <3 x half> [[TMP1]], half [[R_I1]], i64 2
3792cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret <3 x half> [[R]]
3802e07adcdSNicolai Hähnle;
3812e07adcdSNicolai Hähnle  %r = fadd <3 x half> %a, %b
3822e07adcdSNicolai Hähnle  ret <3 x half> %r
3832e07adcdSNicolai Hähnle}
3842e07adcdSNicolai Hähnle
3852e07adcdSNicolai Hähnledefine <4 x half> @binary_v4f16(<4 x half> %a, <4 x half> %b) {
3862cb5c6d1SNicolai Hähnle; MIN16-LABEL: @binary_v4f16(
3872cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = extractelement <4 x half> [[A:%.*]], i64 0
3882cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I0:%.*]] = extractelement <4 x half> [[B:%.*]], i64 0
3892cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I0:%.*]] = fadd half [[A_I0]], [[B_I0]]
3902cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = extractelement <4 x half> [[A]], i64 1
3912cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I1:%.*]] = extractelement <4 x half> [[B]], i64 1
3922cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I1:%.*]] = fadd half [[A_I1]], [[B_I1]]
3932cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I2:%.*]] = extractelement <4 x half> [[A]], i64 2
3942cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I2:%.*]] = extractelement <4 x half> [[B]], i64 2
3952cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I2:%.*]] = fadd half [[A_I2]], [[B_I2]]
3962cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I3:%.*]] = extractelement <4 x half> [[A]], i64 3
3972cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I3:%.*]] = extractelement <4 x half> [[B]], i64 3
3982cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I3:%.*]] = fadd half [[A_I3]], [[B_I3]]
3992cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO0:%.*]] = insertelement <4 x half> poison, half [[R_I0]], i64 0
4002cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO1:%.*]] = insertelement <4 x half> [[R_UPTO0]], half [[R_I1]], i64 1
4012cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO2:%.*]] = insertelement <4 x half> [[R_UPTO1]], half [[R_I2]], i64 2
4022cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R:%.*]] = insertelement <4 x half> [[R_UPTO2]], half [[R_I3]], i64 3
4032cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret <4 x half> [[R]]
4042cb5c6d1SNicolai Hähnle;
4052cb5c6d1SNicolai Hähnle; MIN32-LABEL: @binary_v4f16(
4062cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I0:%.*]] = shufflevector <4 x half> [[A:%.*]], <4 x half> poison, <2 x i32> <i32 0, i32 1>
4072cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[B_I0:%.*]] = shufflevector <4 x half> [[B:%.*]], <4 x half> poison, <2 x i32> <i32 0, i32 1>
4082cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R_I0:%.*]] = fadd <2 x half> [[A_I0]], [[B_I0]]
4092cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I1:%.*]] = shufflevector <4 x half> [[A]], <4 x half> poison, <2 x i32> <i32 2, i32 3>
4102cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[B_I1:%.*]] = shufflevector <4 x half> [[B]], <4 x half> poison, <2 x i32> <i32 2, i32 3>
4112cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R_I1:%.*]] = fadd <2 x half> [[A_I1]], [[B_I1]]
4122cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[TMP1:%.*]] = shufflevector <2 x half> [[R_I0]], <2 x half> [[R_I0]], <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>
4132cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[TMP2:%.*]] = shufflevector <2 x half> [[R_I1]], <2 x half> [[R_I1]], <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>
4142cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R:%.*]] = shufflevector <4 x half> [[TMP1]], <4 x half> [[TMP2]], <4 x i32> <i32 0, i32 1, i32 4, i32 5>
4152cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret <4 x half> [[R]]
4162e07adcdSNicolai Hähnle;
4172e07adcdSNicolai Hähnle  %r = fadd <4 x half> %a, %b
4182e07adcdSNicolai Hähnle  ret <4 x half> %r
4192e07adcdSNicolai Hähnle}
4202e07adcdSNicolai Hähnle
4212e07adcdSNicolai Hähnledefine <2 x i16> @fptosi_v2f16(<2 x half> %a) {
4222cb5c6d1SNicolai Hähnle; MIN16-LABEL: @fptosi_v2f16(
4232cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = extractelement <2 x half> [[A:%.*]], i64 0
4242cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I0:%.*]] = fptosi half [[A_I0]] to i16
4252cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = extractelement <2 x half> [[A]], i64 1
4262cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I1:%.*]] = fptosi half [[A_I1]] to i16
4272cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO0:%.*]] = insertelement <2 x i16> poison, i16 [[R_I0]], i64 0
4282cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R:%.*]] = insertelement <2 x i16> [[R_UPTO0]], i16 [[R_I1]], i64 1
4292cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret <2 x i16> [[R]]
4302cb5c6d1SNicolai Hähnle;
4312cb5c6d1SNicolai Hähnle; MIN32-LABEL: @fptosi_v2f16(
4322cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R:%.*]] = fptosi <2 x half> [[A:%.*]] to <2 x i16>
4332cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret <2 x i16> [[R]]
4342e07adcdSNicolai Hähnle;
4352e07adcdSNicolai Hähnle  %r = fptosi <2 x half> %a to <2 x i16>
4362e07adcdSNicolai Hähnle  ret <2 x i16> %r
4372e07adcdSNicolai Hähnle}
4382e07adcdSNicolai Hähnle
4392e07adcdSNicolai Hähnledefine <3 x i16> @fptosi_v3f16(<3 x half> %a) {
4402cb5c6d1SNicolai Hähnle; MIN16-LABEL: @fptosi_v3f16(
4412cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = extractelement <3 x half> [[A:%.*]], i64 0
4422cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I0:%.*]] = fptosi half [[A_I0]] to i16
4432cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = extractelement <3 x half> [[A]], i64 1
4442cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I1:%.*]] = fptosi half [[A_I1]] to i16
4452cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I2:%.*]] = extractelement <3 x half> [[A]], i64 2
4462cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I2:%.*]] = fptosi half [[A_I2]] to i16
4472cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO0:%.*]] = insertelement <3 x i16> poison, i16 [[R_I0]], i64 0
4482cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO1:%.*]] = insertelement <3 x i16> [[R_UPTO0]], i16 [[R_I1]], i64 1
4492cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R:%.*]] = insertelement <3 x i16> [[R_UPTO1]], i16 [[R_I2]], i64 2
4502cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret <3 x i16> [[R]]
4512cb5c6d1SNicolai Hähnle;
4522cb5c6d1SNicolai Hähnle; MIN32-LABEL: @fptosi_v3f16(
4532cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I0:%.*]] = shufflevector <3 x half> [[A:%.*]], <3 x half> poison, <2 x i32> <i32 0, i32 1>
4542cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R_I0:%.*]] = fptosi <2 x half> [[A_I0]] to <2 x i16>
4552cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I1:%.*]] = extractelement <3 x half> [[A]], i64 2
4562cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R_I1:%.*]] = fptosi half [[A_I1]] to i16
4572cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[TMP1:%.*]] = shufflevector <2 x i16> [[R_I0]], <2 x i16> [[R_I0]], <3 x i32> <i32 0, i32 1, i32 poison>
4582cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R:%.*]] = insertelement <3 x i16> [[TMP1]], i16 [[R_I1]], i64 2
4592cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret <3 x i16> [[R]]
4602e07adcdSNicolai Hähnle;
4612e07adcdSNicolai Hähnle  %r = fptosi <3 x half> %a to <3 x i16>
4622e07adcdSNicolai Hähnle  ret <3 x i16> %r
4632e07adcdSNicolai Hähnle}
4642e07adcdSNicolai Hähnle
4652e07adcdSNicolai Hähnledefine <4 x i16> @fptosi_v4f16(<4 x half> %a) {
4662cb5c6d1SNicolai Hähnle; MIN16-LABEL: @fptosi_v4f16(
4672cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = extractelement <4 x half> [[A:%.*]], i64 0
4682cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I0:%.*]] = fptosi half [[A_I0]] to i16
4692cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = extractelement <4 x half> [[A]], i64 1
4702cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I1:%.*]] = fptosi half [[A_I1]] to i16
4712cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I2:%.*]] = extractelement <4 x half> [[A]], i64 2
4722cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I2:%.*]] = fptosi half [[A_I2]] to i16
4732cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I3:%.*]] = extractelement <4 x half> [[A]], i64 3
4742cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I3:%.*]] = fptosi half [[A_I3]] to i16
4752cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO0:%.*]] = insertelement <4 x i16> poison, i16 [[R_I0]], i64 0
4762cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO1:%.*]] = insertelement <4 x i16> [[R_UPTO0]], i16 [[R_I1]], i64 1
4772cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO2:%.*]] = insertelement <4 x i16> [[R_UPTO1]], i16 [[R_I2]], i64 2
4782cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R:%.*]] = insertelement <4 x i16> [[R_UPTO2]], i16 [[R_I3]], i64 3
4792cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret <4 x i16> [[R]]
4802cb5c6d1SNicolai Hähnle;
4812cb5c6d1SNicolai Hähnle; MIN32-LABEL: @fptosi_v4f16(
4822cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I0:%.*]] = shufflevector <4 x half> [[A:%.*]], <4 x half> poison, <2 x i32> <i32 0, i32 1>
4832cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R_I0:%.*]] = fptosi <2 x half> [[A_I0]] to <2 x i16>
4842cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I1:%.*]] = shufflevector <4 x half> [[A]], <4 x half> poison, <2 x i32> <i32 2, i32 3>
4852cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R_I1:%.*]] = fptosi <2 x half> [[A_I1]] to <2 x i16>
4862cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[TMP1:%.*]] = shufflevector <2 x i16> [[R_I0]], <2 x i16> [[R_I0]], <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>
4872cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[TMP2:%.*]] = shufflevector <2 x i16> [[R_I1]], <2 x i16> [[R_I1]], <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>
4882cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R:%.*]] = shufflevector <4 x i16> [[TMP1]], <4 x i16> [[TMP2]], <4 x i32> <i32 0, i32 1, i32 4, i32 5>
4892cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret <4 x i16> [[R]]
4902e07adcdSNicolai Hähnle;
4912e07adcdSNicolai Hähnle  %r = fptosi <4 x half> %a to <4 x i16>
4922e07adcdSNicolai Hähnle  ret <4 x i16> %r
4932e07adcdSNicolai Hähnle}
4942e07adcdSNicolai Hähnle
4952e07adcdSNicolai Hähnledefine <4 x float> @fpext_v4f16(<4 x half> %a) {
4962cb5c6d1SNicolai Hähnle; MIN16-LABEL: @fpext_v4f16(
4972cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = extractelement <4 x half> [[A:%.*]], i64 0
4982cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I0:%.*]] = fpext half [[A_I0]] to float
4992cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = extractelement <4 x half> [[A]], i64 1
5002cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I1:%.*]] = fpext half [[A_I1]] to float
5012cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I2:%.*]] = extractelement <4 x half> [[A]], i64 2
5022cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I2:%.*]] = fpext half [[A_I2]] to float
5032cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I3:%.*]] = extractelement <4 x half> [[A]], i64 3
5042cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I3:%.*]] = fpext half [[A_I3]] to float
5052cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO0:%.*]] = insertelement <4 x float> poison, float [[R_I0]], i64 0
5062cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO1:%.*]] = insertelement <4 x float> [[R_UPTO0]], float [[R_I1]], i64 1
5072cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO2:%.*]] = insertelement <4 x float> [[R_UPTO1]], float [[R_I2]], i64 2
5082cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R:%.*]] = insertelement <4 x float> [[R_UPTO2]], float [[R_I3]], i64 3
5092cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret <4 x float> [[R]]
5102cb5c6d1SNicolai Hähnle;
5112cb5c6d1SNicolai Hähnle; MIN32-LABEL: @fpext_v4f16(
5122cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R:%.*]] = fpext <4 x half> [[A:%.*]] to <4 x float>
5132cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret <4 x float> [[R]]
5142e07adcdSNicolai Hähnle;
5152e07adcdSNicolai Hähnle  %r = fpext <4 x half> %a to <4 x float>
5162e07adcdSNicolai Hähnle  ret <4 x float> %r
5172e07adcdSNicolai Hähnle}
5182e07adcdSNicolai Hähnle
5192e07adcdSNicolai Hähnledefine <4 x i1> @icmp_v4f16(<4 x i16> %a, <4 x i16> %b) {
5202e07adcdSNicolai Hähnle; CHECK-LABEL: @icmp_v4f16(
5212cb5c6d1SNicolai Hähnle; CHECK-NEXT:    [[R:%.*]] = icmp ugt <4 x i16> [[A:%.*]], [[B:%.*]]
5222e07adcdSNicolai Hähnle; CHECK-NEXT:    ret <4 x i1> [[R]]
5232e07adcdSNicolai Hähnle;
5242e07adcdSNicolai Hähnle  %r = icmp ugt <4 x i16> %a, %b
5252e07adcdSNicolai Hähnle  ret <4 x i1> %r
5262e07adcdSNicolai Hähnle}
5272e07adcdSNicolai Hähnle
5282e07adcdSNicolai Hähnledefine <4 x ptr> @gep1_v4(ptr %base, <4 x i16> %a) {
5292cb5c6d1SNicolai Hähnle; MIN16-LABEL: @gep1_v4(
5302cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = extractelement <4 x i16> [[A:%.*]], i64 0
5312cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_I0:%.*]] = getelementptr i32, ptr [[BASE:%.*]], i16 [[A_I0]]
5322cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = extractelement <4 x i16> [[A]], i64 1
5332cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_I1:%.*]] = getelementptr i32, ptr [[BASE]], i16 [[A_I1]]
5342cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I2:%.*]] = extractelement <4 x i16> [[A]], i64 2
5352cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_I2:%.*]] = getelementptr i32, ptr [[BASE]], i16 [[A_I2]]
5362cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I3:%.*]] = extractelement <4 x i16> [[A]], i64 3
5372cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_I3:%.*]] = getelementptr i32, ptr [[BASE]], i16 [[A_I3]]
5382cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_UPTO0:%.*]] = insertelement <4 x ptr> poison, ptr [[P_I0]], i64 0
5392cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_UPTO1:%.*]] = insertelement <4 x ptr> [[P_UPTO0]], ptr [[P_I1]], i64 1
5402cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_UPTO2:%.*]] = insertelement <4 x ptr> [[P_UPTO1]], ptr [[P_I2]], i64 2
5412cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P:%.*]] = insertelement <4 x ptr> [[P_UPTO2]], ptr [[P_I3]], i64 3
5422cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret <4 x ptr> [[P]]
5432cb5c6d1SNicolai Hähnle;
5442cb5c6d1SNicolai Hähnle; MIN32-LABEL: @gep1_v4(
5452cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[P:%.*]] = getelementptr i32, ptr [[BASE:%.*]], <4 x i16> [[A:%.*]]
5462cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret <4 x ptr> [[P]]
5472e07adcdSNicolai Hähnle;
5482e07adcdSNicolai Hähnle  %p = getelementptr i32, ptr %base, <4 x i16> %a
5492e07adcdSNicolai Hähnle  ret <4 x ptr> %p
5502e07adcdSNicolai Hähnle}
5512e07adcdSNicolai Hähnle
5522e07adcdSNicolai Hähnledefine <4 x ptr> @gep2_v4(<4 x ptr> %base, i16 %a) {
5532e07adcdSNicolai Hähnle; CHECK-LABEL: @gep2_v4(
5542e07adcdSNicolai Hähnle; CHECK-NEXT:    [[BASE_I0:%.*]] = extractelement <4 x ptr> [[BASE:%.*]], i64 0
5552cb5c6d1SNicolai Hähnle; CHECK-NEXT:    [[P_I0:%.*]] = getelementptr i32, ptr [[BASE_I0]], i16 [[A:%.*]]
5562e07adcdSNicolai Hähnle; CHECK-NEXT:    [[BASE_I1:%.*]] = extractelement <4 x ptr> [[BASE]], i64 1
5572cb5c6d1SNicolai Hähnle; CHECK-NEXT:    [[P_I1:%.*]] = getelementptr i32, ptr [[BASE_I1]], i16 [[A]]
5582e07adcdSNicolai Hähnle; CHECK-NEXT:    [[BASE_I2:%.*]] = extractelement <4 x ptr> [[BASE]], i64 2
5592cb5c6d1SNicolai Hähnle; CHECK-NEXT:    [[P_I2:%.*]] = getelementptr i32, ptr [[BASE_I2]], i16 [[A]]
5602e07adcdSNicolai Hähnle; CHECK-NEXT:    [[BASE_I3:%.*]] = extractelement <4 x ptr> [[BASE]], i64 3
5612cb5c6d1SNicolai Hähnle; CHECK-NEXT:    [[P_I3:%.*]] = getelementptr i32, ptr [[BASE_I3]], i16 [[A]]
5622e07adcdSNicolai Hähnle; CHECK-NEXT:    [[P_UPTO0:%.*]] = insertelement <4 x ptr> poison, ptr [[P_I0]], i64 0
5632e07adcdSNicolai Hähnle; CHECK-NEXT:    [[P_UPTO1:%.*]] = insertelement <4 x ptr> [[P_UPTO0]], ptr [[P_I1]], i64 1
5642e07adcdSNicolai Hähnle; CHECK-NEXT:    [[P_UPTO2:%.*]] = insertelement <4 x ptr> [[P_UPTO1]], ptr [[P_I2]], i64 2
5652e07adcdSNicolai Hähnle; CHECK-NEXT:    [[P:%.*]] = insertelement <4 x ptr> [[P_UPTO2]], ptr [[P_I3]], i64 3
5662e07adcdSNicolai Hähnle; CHECK-NEXT:    ret <4 x ptr> [[P]]
5672e07adcdSNicolai Hähnle;
5682e07adcdSNicolai Hähnle  %p = getelementptr i32, <4 x ptr> %base, i16 %a
5692e07adcdSNicolai Hähnle  ret <4 x ptr> %p
5702e07adcdSNicolai Hähnle}
5712e07adcdSNicolai Hähnle
5722e07adcdSNicolai Hähnledefine <4 x ptr> @gep3_v4(<4 x ptr> %base, <4 x i16> %a) {
5732cb5c6d1SNicolai Hähnle; MIN16-LABEL: @gep3_v4(
5742cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[BASE_I0:%.*]] = extractelement <4 x ptr> [[BASE:%.*]], i64 0
5752cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = extractelement <4 x i16> [[A:%.*]], i64 0
5762cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_I0:%.*]] = getelementptr i32, ptr [[BASE_I0]], i16 [[A_I0]]
5772cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[BASE_I1:%.*]] = extractelement <4 x ptr> [[BASE]], i64 1
5782cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = extractelement <4 x i16> [[A]], i64 1
5792cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_I1:%.*]] = getelementptr i32, ptr [[BASE_I1]], i16 [[A_I1]]
5802cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[BASE_I2:%.*]] = extractelement <4 x ptr> [[BASE]], i64 2
5812cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I2:%.*]] = extractelement <4 x i16> [[A]], i64 2
5822cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_I2:%.*]] = getelementptr i32, ptr [[BASE_I2]], i16 [[A_I2]]
5832cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[BASE_I3:%.*]] = extractelement <4 x ptr> [[BASE]], i64 3
5842cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I3:%.*]] = extractelement <4 x i16> [[A]], i64 3
5852cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_I3:%.*]] = getelementptr i32, ptr [[BASE_I3]], i16 [[A_I3]]
5862cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_UPTO0:%.*]] = insertelement <4 x ptr> poison, ptr [[P_I0]], i64 0
5872cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_UPTO1:%.*]] = insertelement <4 x ptr> [[P_UPTO0]], ptr [[P_I1]], i64 1
5882cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_UPTO2:%.*]] = insertelement <4 x ptr> [[P_UPTO1]], ptr [[P_I2]], i64 2
5892cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P:%.*]] = insertelement <4 x ptr> [[P_UPTO2]], ptr [[P_I3]], i64 3
5902cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret <4 x ptr> [[P]]
5912cb5c6d1SNicolai Hähnle;
5922cb5c6d1SNicolai Hähnle; MIN32-LABEL: @gep3_v4(
5932cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[P:%.*]] = getelementptr i32, <4 x ptr> [[BASE:%.*]], <4 x i16> [[A:%.*]]
5942cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret <4 x ptr> [[P]]
5952e07adcdSNicolai Hähnle;
5962e07adcdSNicolai Hähnle  %p = getelementptr i32, <4 x ptr> %base, <4 x i16> %a
5972e07adcdSNicolai Hähnle  ret <4 x ptr> %p
5982e07adcdSNicolai Hähnle}
5992e07adcdSNicolai Hähnle
6002e07adcdSNicolai Hähnledefine void @insertelement_v2i16(ptr %p, <2 x i16> %a, i16 %b) {
6012cb5c6d1SNicolai Hähnle; MIN16-LABEL: @insertelement_v2i16(
6022cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_I1:%.*]] = getelementptr i16, ptr [[P:%.*]], i32 1
6032cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = extractelement <2 x i16> [[A:%.*]], i64 0
6042cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store i16 [[A_I0]], ptr [[P]], align 4
6052cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store i16 [[B:%.*]], ptr [[P_I1]], align 2
6062cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret void
6072cb5c6d1SNicolai Hähnle;
6082cb5c6d1SNicolai Hähnle; MIN32-LABEL: @insertelement_v2i16(
6092cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R:%.*]] = insertelement <2 x i16> [[A:%.*]], i16 [[B:%.*]], i64 1
6102cb5c6d1SNicolai Hähnle; MIN32-NEXT:    store <2 x i16> [[R]], ptr [[P:%.*]], align 4
6112cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret void
6122e07adcdSNicolai Hähnle;
6132e07adcdSNicolai Hähnle  %r = insertelement <2 x i16> %a, i16 %b, i64 1
6142e07adcdSNicolai Hähnle  store <2 x i16> %r, ptr %p
6152e07adcdSNicolai Hähnle  ret void
6162e07adcdSNicolai Hähnle}
6172e07adcdSNicolai Hähnle
6182e07adcdSNicolai Hähnledefine void @insertelement_v3i16(ptr %p, <3 x i16> %a, i16 %b) {
6192cb5c6d1SNicolai Hähnle; MIN16-LABEL: @insertelement_v3i16(
6202cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_I1:%.*]] = getelementptr i16, ptr [[P:%.*]], i32 1
6212cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_I2:%.*]] = getelementptr i16, ptr [[P]], i32 2
6222cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = extractelement <3 x i16> [[A:%.*]], i64 0
6232cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = extractelement <3 x i16> [[A]], i64 1
6242cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store i16 [[A_I0]], ptr [[P]], align 8
6252cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store i16 [[A_I1]], ptr [[P_I1]], align 2
6262cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store i16 [[B:%.*]], ptr [[P_I2]], align 4
6272cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret void
6282cb5c6d1SNicolai Hähnle;
6292cb5c6d1SNicolai Hähnle; MIN32-LABEL: @insertelement_v3i16(
6302cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[P_I1:%.*]] = getelementptr <2 x i16>, ptr [[P:%.*]], i32 1
6312cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I0:%.*]] = shufflevector <3 x i16> [[A:%.*]], <3 x i16> poison, <2 x i32> <i32 0, i32 1>
6322cb5c6d1SNicolai Hähnle; MIN32-NEXT:    store <2 x i16> [[A_I0]], ptr [[P]], align 8
6332cb5c6d1SNicolai Hähnle; MIN32-NEXT:    store i16 [[B:%.*]], ptr [[P_I1]], align 4
6342cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret void
6352e07adcdSNicolai Hähnle;
6362e07adcdSNicolai Hähnle  %r = insertelement <3 x i16> %a, i16 %b, i64 2
6372e07adcdSNicolai Hähnle  store <3 x i16> %r, ptr %p
6382e07adcdSNicolai Hähnle  ret void
6392e07adcdSNicolai Hähnle}
6402e07adcdSNicolai Hähnle
6412e07adcdSNicolai Hähnledefine void @insertelement_v4i16(ptr %p, <4 x i16> %a, i16 %b) {
6422cb5c6d1SNicolai Hähnle; MIN16-LABEL: @insertelement_v4i16(
6432cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_I1:%.*]] = getelementptr i16, ptr [[P:%.*]], i32 1
6442cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_I2:%.*]] = getelementptr i16, ptr [[P]], i32 2
6452cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_I3:%.*]] = getelementptr i16, ptr [[P]], i32 3
6462cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = extractelement <4 x i16> [[A:%.*]], i64 0
6472cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = extractelement <4 x i16> [[A]], i64 1
6482cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I2:%.*]] = extractelement <4 x i16> [[A]], i64 2
6492cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store i16 [[A_I0]], ptr [[P]], align 8
6502cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store i16 [[A_I1]], ptr [[P_I1]], align 2
6512cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store i16 [[A_I2]], ptr [[P_I2]], align 4
6522cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store i16 [[B:%.*]], ptr [[P_I3]], align 2
6532cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret void
6542cb5c6d1SNicolai Hähnle;
6552cb5c6d1SNicolai Hähnle; MIN32-LABEL: @insertelement_v4i16(
6562cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[P_I1:%.*]] = getelementptr <2 x i16>, ptr [[P:%.*]], i32 1
6572cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I0:%.*]] = shufflevector <4 x i16> [[A:%.*]], <4 x i16> poison, <2 x i32> <i32 0, i32 1>
6582cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I1:%.*]] = shufflevector <4 x i16> [[A]], <4 x i16> poison, <2 x i32> <i32 2, i32 3>
6592cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[TMP1:%.*]] = insertelement <2 x i16> [[A_I1]], i16 [[B:%.*]], i64 1
6602cb5c6d1SNicolai Hähnle; MIN32-NEXT:    store <2 x i16> [[A_I0]], ptr [[P]], align 8
6612cb5c6d1SNicolai Hähnle; MIN32-NEXT:    store <2 x i16> [[TMP1]], ptr [[P_I1]], align 4
6622cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret void
6632e07adcdSNicolai Hähnle;
6642e07adcdSNicolai Hähnle  %r = insertelement <4 x i16> %a, i16 %b, i64 3
6652e07adcdSNicolai Hähnle  store <4 x i16> %r, ptr %p
6662e07adcdSNicolai Hähnle  ret void
6672e07adcdSNicolai Hähnle}
6682e07adcdSNicolai Hähnle
6692e07adcdSNicolai Hähnledefine <2 x i16> @load_insertelement_v2i16(ptr %pa, i16 %b) {
6702cb5c6d1SNicolai Hähnle; MIN16-LABEL: @load_insertelement_v2i16(
6712cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = load i16, ptr [[PA:%.*]], align 4
6722cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO0:%.*]] = insertelement <2 x i16> poison, i16 [[A_I0]], i64 0
6732cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R:%.*]] = insertelement <2 x i16> [[R_UPTO0]], i16 [[B:%.*]], i64 1
6742cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret <2 x i16> [[R]]
6752cb5c6d1SNicolai Hähnle;
6762cb5c6d1SNicolai Hähnle; MIN32-LABEL: @load_insertelement_v2i16(
6772cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A:%.*]] = load <2 x i16>, ptr [[PA:%.*]], align 4
6782cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R:%.*]] = insertelement <2 x i16> [[A]], i16 [[B:%.*]], i64 1
6792cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret <2 x i16> [[R]]
6802e07adcdSNicolai Hähnle;
6812e07adcdSNicolai Hähnle  %a = load <2 x i16>, ptr %pa
6822e07adcdSNicolai Hähnle  %r = insertelement <2 x i16> %a, i16 %b, i64 1
6832e07adcdSNicolai Hähnle  ret <2 x i16> %r
6842e07adcdSNicolai Hähnle}
6852e07adcdSNicolai Hähnle
6862e07adcdSNicolai Hähnledefine <3 x i16> @load_insertelement_v3i16(ptr %pa, i16 %b) {
6872cb5c6d1SNicolai Hähnle; MIN16-LABEL: @load_insertelement_v3i16(
6882cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = load i16, ptr [[PA:%.*]], align 8
6892cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[PA_I1:%.*]] = getelementptr i16, ptr [[PA]], i32 1
6902cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = load i16, ptr [[PA_I1]], align 2
6912cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO0:%.*]] = insertelement <3 x i16> poison, i16 [[A_I0]], i64 0
6922cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO1:%.*]] = insertelement <3 x i16> [[R_UPTO0]], i16 [[A_I1]], i64 1
6932cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R:%.*]] = insertelement <3 x i16> [[R_UPTO1]], i16 [[B:%.*]], i64 2
6942cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret <3 x i16> [[R]]
6952cb5c6d1SNicolai Hähnle;
6962cb5c6d1SNicolai Hähnle; MIN32-LABEL: @load_insertelement_v3i16(
6972cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I0:%.*]] = load <2 x i16>, ptr [[PA:%.*]], align 8
6982cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[TMP1:%.*]] = shufflevector <2 x i16> [[A_I0]], <2 x i16> [[A_I0]], <3 x i32> <i32 0, i32 1, i32 poison>
6992cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R:%.*]] = insertelement <3 x i16> [[TMP1]], i16 [[B:%.*]], i64 2
7002cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret <3 x i16> [[R]]
7012e07adcdSNicolai Hähnle;
7022e07adcdSNicolai Hähnle  %a = load <3 x i16>, ptr %pa
7032e07adcdSNicolai Hähnle  %r = insertelement <3 x i16> %a, i16 %b, i64 2
7042e07adcdSNicolai Hähnle  ret <3 x i16> %r
7052e07adcdSNicolai Hähnle}
7062e07adcdSNicolai Hähnle
7072e07adcdSNicolai Hähnledefine <4 x i16> @load_insertelement_v4i16(ptr %pa, i16 %b) {
7082cb5c6d1SNicolai Hähnle; MIN16-LABEL: @load_insertelement_v4i16(
7092cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = load i16, ptr [[PA:%.*]], align 8
7102cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[PA_I1:%.*]] = getelementptr i16, ptr [[PA]], i32 1
7112cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = load i16, ptr [[PA_I1]], align 2
7122cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[PA_I2:%.*]] = getelementptr i16, ptr [[PA]], i32 2
7132cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I2:%.*]] = load i16, ptr [[PA_I2]], align 4
7142cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO0:%.*]] = insertelement <4 x i16> poison, i16 [[A_I0]], i64 0
7152cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO1:%.*]] = insertelement <4 x i16> [[R_UPTO0]], i16 [[A_I1]], i64 1
7162cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO2:%.*]] = insertelement <4 x i16> [[R_UPTO1]], i16 [[A_I2]], i64 2
7172cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R:%.*]] = insertelement <4 x i16> [[R_UPTO2]], i16 [[B:%.*]], i64 3
7182cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret <4 x i16> [[R]]
7192cb5c6d1SNicolai Hähnle;
7202cb5c6d1SNicolai Hähnle; MIN32-LABEL: @load_insertelement_v4i16(
7212cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I0:%.*]] = load <2 x i16>, ptr [[PA:%.*]], align 8
7222cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[PA_I1:%.*]] = getelementptr <2 x i16>, ptr [[PA]], i32 1
7232cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I1:%.*]] = load <2 x i16>, ptr [[PA_I1]], align 4
7242cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[TMP1:%.*]] = insertelement <2 x i16> [[A_I1]], i16 [[B:%.*]], i64 1
7252cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[TMP2:%.*]] = shufflevector <2 x i16> [[A_I0]], <2 x i16> [[A_I0]], <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>
7262cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[TMP3:%.*]] = shufflevector <2 x i16> [[TMP1]], <2 x i16> [[TMP1]], <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>
7272cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R:%.*]] = shufflevector <4 x i16> [[TMP2]], <4 x i16> [[TMP3]], <4 x i32> <i32 0, i32 1, i32 4, i32 5>
7282cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret <4 x i16> [[R]]
7292e07adcdSNicolai Hähnle;
7302e07adcdSNicolai Hähnle  %a = load <4 x i16>, ptr %pa
7312e07adcdSNicolai Hähnle  %r = insertelement <4 x i16> %a, i16 %b, i64 3
7322e07adcdSNicolai Hähnle  ret <4 x i16> %r
7332e07adcdSNicolai Hähnle}
7342e07adcdSNicolai Hähnle
7352e07adcdSNicolai Hähnledefine void @shufflevector_grow(ptr %pa, ptr %pb) {
7362cb5c6d1SNicolai Hähnle; MIN16-LABEL: @shufflevector_grow(
7372cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[PA_I2:%.*]] = getelementptr i16, ptr [[PA:%.*]], i32 2
7382cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[PA_I3:%.*]] = getelementptr i16, ptr [[PA]], i32 3
7392cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[PB_I1:%.*]] = getelementptr i16, ptr [[PB:%.*]], i32 1
7402cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = load i16, ptr [[PA]], align 4
7412cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[PA_I1:%.*]] = getelementptr i16, ptr [[PA]], i32 1
7422cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = load i16, ptr [[PA_I1]], align 2
7432cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I0:%.*]] = load i16, ptr [[PB]], align 4
7442cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I1:%.*]] = load i16, ptr [[PB_I1]], align 2
7452cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store i16 [[A_I0]], ptr [[PA]], align 8
7462cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store i16 [[A_I1]], ptr [[PA_I1]], align 2
7472cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store i16 [[B_I0]], ptr [[PA_I2]], align 4
7482cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store i16 [[B_I1]], ptr [[PA_I3]], align 2
7492cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret void
7502cb5c6d1SNicolai Hähnle;
7512cb5c6d1SNicolai Hähnle; MIN32-LABEL: @shufflevector_grow(
7522cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[PA_I1:%.*]] = getelementptr <2 x i16>, ptr [[PA:%.*]], i32 1
7532cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A:%.*]] = load <2 x i16>, ptr [[PA]], align 4
7542cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[B:%.*]] = load <2 x i16>, ptr [[PB:%.*]], align 4
7552cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R:%.*]] = shufflevector <2 x i16> [[A]], <2 x i16> [[B]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
7562cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R_I0:%.*]] = shufflevector <4 x i16> [[R]], <4 x i16> poison, <2 x i32> <i32 0, i32 1>
7572cb5c6d1SNicolai Hähnle; MIN32-NEXT:    store <2 x i16> [[R_I0]], ptr [[PA]], align 8
7582cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R_I1:%.*]] = shufflevector <4 x i16> [[R]], <4 x i16> poison, <2 x i32> <i32 2, i32 3>
7592cb5c6d1SNicolai Hähnle; MIN32-NEXT:    store <2 x i16> [[R_I1]], ptr [[PA_I1]], align 4
7602cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret void
7612e07adcdSNicolai Hähnle;
7622e07adcdSNicolai Hähnle  %a = load <2 x i16>, ptr %pa
7632e07adcdSNicolai Hähnle  %b = load <2 x i16>, ptr %pb
7642e07adcdSNicolai Hähnle  %r = shufflevector <2 x i16> %a, <2 x i16> %b, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
7652e07adcdSNicolai Hähnle  store <4 x i16> %r, ptr %pa
7662e07adcdSNicolai Hähnle  ret void
7672e07adcdSNicolai Hähnle}
7682e07adcdSNicolai Hähnle
7692e07adcdSNicolai Hähnledefine void @shufflevector_shrink(ptr %pa) {
7702cb5c6d1SNicolai Hähnle; MIN16-LABEL: @shufflevector_shrink(
7712cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[PA_I1:%.*]] = getelementptr i16, ptr [[PA:%.*]], i32 1
7722cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = load i16, ptr [[PA_I1]], align 2
7732cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[PA_I2:%.*]] = getelementptr i16, ptr [[PA]], i32 2
7742cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I2:%.*]] = load i16, ptr [[PA_I2]], align 4
7752cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store i16 [[A_I1]], ptr [[PA]], align 4
7762cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store i16 [[A_I2]], ptr [[PA_I1]], align 2
7772cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret void
7782cb5c6d1SNicolai Hähnle;
7792cb5c6d1SNicolai Hähnle; MIN32-LABEL: @shufflevector_shrink(
7802cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I0:%.*]] = load <2 x i16>, ptr [[PA:%.*]], align 8
7812cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[PA_I1:%.*]] = getelementptr <2 x i16>, ptr [[PA]], i32 1
7822cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I1:%.*]] = load <2 x i16>, ptr [[PA_I1]], align 4
7832cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[TMP1:%.*]] = shufflevector <2 x i16> [[A_I0]], <2 x i16> [[A_I0]], <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>
7842cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[TMP2:%.*]] = shufflevector <2 x i16> [[A_I1]], <2 x i16> [[A_I1]], <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>
7852cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A:%.*]] = shufflevector <4 x i16> [[TMP1]], <4 x i16> [[TMP2]], <4 x i32> <i32 0, i32 1, i32 4, i32 5>
7862cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R:%.*]] = shufflevector <4 x i16> [[A]], <4 x i16> poison, <2 x i32> <i32 1, i32 2>
7872cb5c6d1SNicolai Hähnle; MIN32-NEXT:    store <2 x i16> [[R]], ptr [[PA]], align 4
7882cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret void
7892e07adcdSNicolai Hähnle;
7902e07adcdSNicolai Hähnle  %a = load <4 x i16>, ptr %pa
7912e07adcdSNicolai Hähnle  %r = shufflevector <4 x i16> %a, <4 x i16> poison, <2 x i32> <i32 1, i32 2>
7922e07adcdSNicolai Hähnle  store <2 x i16> %r, ptr %pa
7932e07adcdSNicolai Hähnle  ret void
7942e07adcdSNicolai Hähnle}
7952e07adcdSNicolai Hähnle
7962e07adcdSNicolai Hähnledefine void @phi_v2f16(ptr %base, i64 %bound) {
7972cb5c6d1SNicolai Hähnle; MIN16-LABEL: @phi_v2f16(
7982cb5c6d1SNicolai Hähnle; MIN16-NEXT:  entry:
7992cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[BASE_I1:%.*]] = getelementptr half, ptr [[BASE:%.*]], i32 1
8002cb5c6d1SNicolai Hähnle; MIN16-NEXT:    br label [[LOOP:%.*]]
8012cb5c6d1SNicolai Hähnle; MIN16:       loop:
8022cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[X_I0:%.*]] = phi half [ 0xH0000, [[ENTRY:%.*]] ], [ [[X_NEXT_I0:%.*]], [[LOOP]] ]
8032cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[X_I1:%.*]] = phi half [ 0xH0000, [[ENTRY]] ], [ [[X_NEXT_I1:%.*]], [[LOOP]] ]
8042cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[IDX:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[IDX_NEXT:%.*]], [[LOOP]] ]
8052cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P:%.*]] = getelementptr <2 x half>, ptr [[BASE]], i64 [[IDX]]
8062cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = load half, ptr [[P]], align 2
8072cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_I1:%.*]] = getelementptr half, ptr [[P]], i32 1
8082cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = load half, ptr [[P_I1]], align 2
8092cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[X_NEXT_I0]] = fadd half [[X_I0]], [[A_I0]]
8102cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[X_NEXT_I1]] = fadd half [[X_I1]], [[A_I1]]
8112cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[IDX_NEXT]] = add i64 [[IDX]], 1
8122cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[CC:%.*]] = icmp ult i64 [[IDX_NEXT]], [[BOUND:%.*]]
8132cb5c6d1SNicolai Hähnle; MIN16-NEXT:    br i1 [[CC]], label [[LOOP]], label [[END:%.*]]
8142cb5c6d1SNicolai Hähnle; MIN16:       end:
8152cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store half [[X_NEXT_I0]], ptr [[BASE]], align 4
8162cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store half [[X_NEXT_I1]], ptr [[BASE_I1]], align 2
8172cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret void
8182cb5c6d1SNicolai Hähnle;
8192cb5c6d1SNicolai Hähnle; MIN32-LABEL: @phi_v2f16(
8202cb5c6d1SNicolai Hähnle; MIN32-NEXT:  entry:
8212cb5c6d1SNicolai Hähnle; MIN32-NEXT:    br label [[LOOP:%.*]]
8222cb5c6d1SNicolai Hähnle; MIN32:       loop:
8232cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[X:%.*]] = phi <2 x half> [ zeroinitializer, [[ENTRY:%.*]] ], [ [[X_NEXT:%.*]], [[LOOP]] ]
8242cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[IDX:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[IDX_NEXT:%.*]], [[LOOP]] ]
8252cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[P:%.*]] = getelementptr <2 x half>, ptr [[BASE:%.*]], i64 [[IDX]]
8262cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A:%.*]] = load <2 x half>, ptr [[P]], align 2
8272cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[X_NEXT]] = fadd <2 x half> [[X]], [[A]]
8282cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[IDX_NEXT]] = add i64 [[IDX]], 1
8292cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[CC:%.*]] = icmp ult i64 [[IDX_NEXT]], [[BOUND:%.*]]
8302cb5c6d1SNicolai Hähnle; MIN32-NEXT:    br i1 [[CC]], label [[LOOP]], label [[END:%.*]]
8312cb5c6d1SNicolai Hähnle; MIN32:       end:
8322cb5c6d1SNicolai Hähnle; MIN32-NEXT:    store <2 x half> [[X_NEXT]], ptr [[BASE]], align 4
8332cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret void
8342e07adcdSNicolai Hähnle;
8352e07adcdSNicolai Hähnleentry:
8362e07adcdSNicolai Hähnle  br label %loop
8372e07adcdSNicolai Hähnle
8382e07adcdSNicolai Hähnleloop:
8392e07adcdSNicolai Hähnle  %x = phi <2 x half> [ zeroinitializer, %entry ], [ %x.next, %loop ]
8402e07adcdSNicolai Hähnle  %idx = phi i64 [ 0, %entry ], [ %idx.next, %loop ]
8412e07adcdSNicolai Hähnle  %p = getelementptr <2 x half>, ptr %base, i64 %idx
8422e07adcdSNicolai Hähnle  %a = load <2 x half>, ptr %p, align 2
8432e07adcdSNicolai Hähnle  %x.next = fadd <2 x half> %x, %a
8442e07adcdSNicolai Hähnle  %idx.next = add i64 %idx, 1
8452e07adcdSNicolai Hähnle  %cc = icmp ult i64 %idx.next, %bound
8462e07adcdSNicolai Hähnle  br i1 %cc, label %loop, label %end
8472e07adcdSNicolai Hähnle
8482e07adcdSNicolai Hähnleend:
8492e07adcdSNicolai Hähnle  store <2 x half> %x.next, ptr %base
8502e07adcdSNicolai Hähnle  ret void
8512e07adcdSNicolai Hähnle}
8522e07adcdSNicolai Hähnle
8532e07adcdSNicolai Hähnledefine void @phi_v3f16(ptr %base, i64 %bound) {
8542cb5c6d1SNicolai Hähnle; MIN16-LABEL: @phi_v3f16(
8552cb5c6d1SNicolai Hähnle; MIN16-NEXT:  entry:
8562cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[BASE_I1:%.*]] = getelementptr half, ptr [[BASE:%.*]], i32 1
8572cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[BASE_I2:%.*]] = getelementptr half, ptr [[BASE]], i32 2
8582cb5c6d1SNicolai Hähnle; MIN16-NEXT:    br label [[LOOP:%.*]]
8592cb5c6d1SNicolai Hähnle; MIN16:       loop:
8602cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[X_I0:%.*]] = phi half [ 0xH0000, [[ENTRY:%.*]] ], [ [[X_NEXT_I0:%.*]], [[LOOP]] ]
8612cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[X_I1:%.*]] = phi half [ 0xH0000, [[ENTRY]] ], [ [[X_NEXT_I1:%.*]], [[LOOP]] ]
8622cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[X_I2:%.*]] = phi half [ 0xH0000, [[ENTRY]] ], [ [[X_NEXT_I2:%.*]], [[LOOP]] ]
8632cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[IDX:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[IDX_NEXT:%.*]], [[LOOP]] ]
8642cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P:%.*]] = getelementptr <3 x half>, ptr [[BASE]], i64 [[IDX]]
8652cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = load half, ptr [[P]], align 2
8662cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_I1:%.*]] = getelementptr half, ptr [[P]], i32 1
8672cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = load half, ptr [[P_I1]], align 2
8682cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_I2:%.*]] = getelementptr half, ptr [[P]], i32 2
8692cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I2:%.*]] = load half, ptr [[P_I2]], align 2
8702cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[X_NEXT_I0]] = fadd half [[X_I0]], [[A_I0]]
8712cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[X_NEXT_I1]] = fadd half [[X_I1]], [[A_I1]]
8722cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[X_NEXT_I2]] = fadd half [[X_I2]], [[A_I2]]
8732cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[IDX_NEXT]] = add i64 [[IDX]], 1
8742cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[CC:%.*]] = icmp ult i64 [[IDX_NEXT]], [[BOUND:%.*]]
8752cb5c6d1SNicolai Hähnle; MIN16-NEXT:    br i1 [[CC]], label [[LOOP]], label [[END:%.*]]
8762cb5c6d1SNicolai Hähnle; MIN16:       end:
8772cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store half [[X_NEXT_I0]], ptr [[BASE]], align 8
8782cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store half [[X_NEXT_I1]], ptr [[BASE_I1]], align 2
8792cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store half [[X_NEXT_I2]], ptr [[BASE_I2]], align 4
8802cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret void
8812cb5c6d1SNicolai Hähnle;
8822cb5c6d1SNicolai Hähnle; MIN32-LABEL: @phi_v3f16(
8832cb5c6d1SNicolai Hähnle; MIN32-NEXT:  entry:
8842cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[BASE_I1:%.*]] = getelementptr <2 x half>, ptr [[BASE:%.*]], i32 1
8852cb5c6d1SNicolai Hähnle; MIN32-NEXT:    br label [[LOOP:%.*]]
8862cb5c6d1SNicolai Hähnle; MIN32:       loop:
8872cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[X_I0:%.*]] = phi <2 x half> [ zeroinitializer, [[ENTRY:%.*]] ], [ [[X_NEXT_I0:%.*]], [[LOOP]] ]
8882cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[X_I1:%.*]] = phi half [ 0xH0000, [[ENTRY]] ], [ [[X_NEXT_I1:%.*]], [[LOOP]] ]
8892cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[IDX:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[IDX_NEXT:%.*]], [[LOOP]] ]
8902cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[P:%.*]] = getelementptr <3 x half>, ptr [[BASE]], i64 [[IDX]]
8912cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I0:%.*]] = load <2 x half>, ptr [[P]], align 2
8922cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[P_I1:%.*]] = getelementptr <2 x half>, ptr [[P]], i32 1
8932cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I1:%.*]] = load half, ptr [[P_I1]], align 2
8942cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[X_NEXT_I0]] = fadd <2 x half> [[X_I0]], [[A_I0]]
8952cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[X_NEXT_I1]] = fadd half [[X_I1]], [[A_I1]]
8962cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[IDX_NEXT]] = add i64 [[IDX]], 1
8972cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[CC:%.*]] = icmp ult i64 [[IDX_NEXT]], [[BOUND:%.*]]
8982cb5c6d1SNicolai Hähnle; MIN32-NEXT:    br i1 [[CC]], label [[LOOP]], label [[END:%.*]]
8992cb5c6d1SNicolai Hähnle; MIN32:       end:
9002cb5c6d1SNicolai Hähnle; MIN32-NEXT:    store <2 x half> [[X_NEXT_I0]], ptr [[BASE]], align 8
9012cb5c6d1SNicolai Hähnle; MIN32-NEXT:    store half [[X_NEXT_I1]], ptr [[BASE_I1]], align 4
9022cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret void
9032e07adcdSNicolai Hähnle;
9042e07adcdSNicolai Hähnleentry:
9052e07adcdSNicolai Hähnle  br label %loop
9062e07adcdSNicolai Hähnle
9072e07adcdSNicolai Hähnleloop:
9082e07adcdSNicolai Hähnle  %x = phi <3 x half> [ zeroinitializer, %entry ], [ %x.next, %loop ]
9092e07adcdSNicolai Hähnle  %idx = phi i64 [ 0, %entry ], [ %idx.next, %loop ]
9102e07adcdSNicolai Hähnle  %p = getelementptr <3 x half>, ptr %base, i64 %idx
9112e07adcdSNicolai Hähnle  %a = load <3 x half>, ptr %p, align 2
9122e07adcdSNicolai Hähnle  %x.next = fadd <3 x half> %x, %a
9132e07adcdSNicolai Hähnle  %idx.next = add i64 %idx, 1
9142e07adcdSNicolai Hähnle  %cc = icmp ult i64 %idx.next, %bound
9152e07adcdSNicolai Hähnle  br i1 %cc, label %loop, label %end
9162e07adcdSNicolai Hähnle
9172e07adcdSNicolai Hähnleend:
9182e07adcdSNicolai Hähnle  store <3 x half> %x.next, ptr %base
9192e07adcdSNicolai Hähnle  ret void
9202e07adcdSNicolai Hähnle}
9212e07adcdSNicolai Hähnle
9222e07adcdSNicolai Hähnledefine void @phi_v4f16(ptr %base, i64 %bound) {
9232cb5c6d1SNicolai Hähnle; MIN16-LABEL: @phi_v4f16(
9242cb5c6d1SNicolai Hähnle; MIN16-NEXT:  entry:
9252cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[BASE_I1:%.*]] = getelementptr half, ptr [[BASE:%.*]], i32 1
9262cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[BASE_I2:%.*]] = getelementptr half, ptr [[BASE]], i32 2
9272cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[BASE_I3:%.*]] = getelementptr half, ptr [[BASE]], i32 3
9282cb5c6d1SNicolai Hähnle; MIN16-NEXT:    br label [[LOOP:%.*]]
9292cb5c6d1SNicolai Hähnle; MIN16:       loop:
9302cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[X_I0:%.*]] = phi half [ 0xH0000, [[ENTRY:%.*]] ], [ [[X_NEXT_I0:%.*]], [[LOOP]] ]
9312cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[X_I1:%.*]] = phi half [ 0xH0000, [[ENTRY]] ], [ [[X_NEXT_I1:%.*]], [[LOOP]] ]
9322cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[X_I2:%.*]] = phi half [ 0xH0000, [[ENTRY]] ], [ [[X_NEXT_I2:%.*]], [[LOOP]] ]
9332cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[X_I3:%.*]] = phi half [ 0xH0000, [[ENTRY]] ], [ [[X_NEXT_I3:%.*]], [[LOOP]] ]
9342cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[IDX:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[IDX_NEXT:%.*]], [[LOOP]] ]
9352cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P:%.*]] = getelementptr <4 x half>, ptr [[BASE]], i64 [[IDX]]
9362cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = load half, ptr [[P]], align 2
9372cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_I1:%.*]] = getelementptr half, ptr [[P]], i32 1
9382cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = load half, ptr [[P_I1]], align 2
9392cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_I2:%.*]] = getelementptr half, ptr [[P]], i32 2
9402cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I2:%.*]] = load half, ptr [[P_I2]], align 2
9412cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[P_I3:%.*]] = getelementptr half, ptr [[P]], i32 3
9422cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I3:%.*]] = load half, ptr [[P_I3]], align 2
9432cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[X_NEXT_I0]] = fadd half [[X_I0]], [[A_I0]]
9442cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[X_NEXT_I1]] = fadd half [[X_I1]], [[A_I1]]
9452cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[X_NEXT_I2]] = fadd half [[X_I2]], [[A_I2]]
9462cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[X_NEXT_I3]] = fadd half [[X_I3]], [[A_I3]]
9472cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[IDX_NEXT]] = add i64 [[IDX]], 1
9482cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[CC:%.*]] = icmp ult i64 [[IDX_NEXT]], [[BOUND:%.*]]
9492cb5c6d1SNicolai Hähnle; MIN16-NEXT:    br i1 [[CC]], label [[LOOP]], label [[END:%.*]]
9502cb5c6d1SNicolai Hähnle; MIN16:       end:
9512cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store half [[X_NEXT_I0]], ptr [[BASE]], align 8
9522cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store half [[X_NEXT_I1]], ptr [[BASE_I1]], align 2
9532cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store half [[X_NEXT_I2]], ptr [[BASE_I2]], align 4
9542cb5c6d1SNicolai Hähnle; MIN16-NEXT:    store half [[X_NEXT_I3]], ptr [[BASE_I3]], align 2
9552cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret void
9562cb5c6d1SNicolai Hähnle;
9572cb5c6d1SNicolai Hähnle; MIN32-LABEL: @phi_v4f16(
9582cb5c6d1SNicolai Hähnle; MIN32-NEXT:  entry:
9592cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[BASE_I1:%.*]] = getelementptr <2 x half>, ptr [[BASE:%.*]], i32 1
9602cb5c6d1SNicolai Hähnle; MIN32-NEXT:    br label [[LOOP:%.*]]
9612cb5c6d1SNicolai Hähnle; MIN32:       loop:
9622cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[X_I0:%.*]] = phi <2 x half> [ zeroinitializer, [[ENTRY:%.*]] ], [ [[X_NEXT_I0:%.*]], [[LOOP]] ]
9632cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[X_I1:%.*]] = phi <2 x half> [ zeroinitializer, [[ENTRY]] ], [ [[X_NEXT_I1:%.*]], [[LOOP]] ]
9642cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[IDX:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[IDX_NEXT:%.*]], [[LOOP]] ]
9652cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[P:%.*]] = getelementptr <4 x half>, ptr [[BASE]], i64 [[IDX]]
9662cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I0:%.*]] = load <2 x half>, ptr [[P]], align 2
9672cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[P_I1:%.*]] = getelementptr <2 x half>, ptr [[P]], i32 1
9682cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I1:%.*]] = load <2 x half>, ptr [[P_I1]], align 2
9692cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[X_NEXT_I0]] = fadd <2 x half> [[X_I0]], [[A_I0]]
9702cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[X_NEXT_I1]] = fadd <2 x half> [[X_I1]], [[A_I1]]
9712cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[IDX_NEXT]] = add i64 [[IDX]], 1
9722cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[CC:%.*]] = icmp ult i64 [[IDX_NEXT]], [[BOUND:%.*]]
9732cb5c6d1SNicolai Hähnle; MIN32-NEXT:    br i1 [[CC]], label [[LOOP]], label [[END:%.*]]
9742cb5c6d1SNicolai Hähnle; MIN32:       end:
9752cb5c6d1SNicolai Hähnle; MIN32-NEXT:    store <2 x half> [[X_NEXT_I0]], ptr [[BASE]], align 8
9762cb5c6d1SNicolai Hähnle; MIN32-NEXT:    store <2 x half> [[X_NEXT_I1]], ptr [[BASE_I1]], align 4
9772cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret void
9782e07adcdSNicolai Hähnle;
9792e07adcdSNicolai Hähnleentry:
9802e07adcdSNicolai Hähnle  br label %loop
9812e07adcdSNicolai Hähnle
9822e07adcdSNicolai Hähnleloop:
9832e07adcdSNicolai Hähnle  %x = phi <4 x half> [ zeroinitializer, %entry ], [ %x.next, %loop ]
9842e07adcdSNicolai Hähnle  %idx = phi i64 [ 0, %entry ], [ %idx.next, %loop ]
9852e07adcdSNicolai Hähnle  %p = getelementptr <4 x half>, ptr %base, i64 %idx
9862e07adcdSNicolai Hähnle  %a = load <4 x half>, ptr %p, align 2
9872e07adcdSNicolai Hähnle  %x.next = fadd <4 x half> %x, %a
9882e07adcdSNicolai Hähnle  %idx.next = add i64 %idx, 1
9892e07adcdSNicolai Hähnle  %cc = icmp ult i64 %idx.next, %bound
9902e07adcdSNicolai Hähnle  br i1 %cc, label %loop, label %end
9912e07adcdSNicolai Hähnle
9922e07adcdSNicolai Hähnleend:
9932e07adcdSNicolai Hähnle  store <4 x half> %x.next, ptr %base
9942e07adcdSNicolai Hähnle  ret void
9952e07adcdSNicolai Hähnle}
9962e07adcdSNicolai Hähnle
9972e07adcdSNicolai Hähnledefine <2 x half> @call_v2f16(<2 x half> %a, <2 x half> %b) {
9982cb5c6d1SNicolai Hähnle; MIN16-LABEL: @call_v2f16(
9992cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = extractelement <2 x half> [[A:%.*]], i64 0
10002cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I0:%.*]] = extractelement <2 x half> [[B:%.*]], i64 0
10012cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I0:%.*]] = call half @llvm.minnum.f16(half [[A_I0]], half [[B_I0]])
10022cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = extractelement <2 x half> [[A]], i64 1
10032cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I1:%.*]] = extractelement <2 x half> [[B]], i64 1
10042cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I1:%.*]] = call half @llvm.minnum.f16(half [[A_I1]], half [[B_I1]])
10052cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO0:%.*]] = insertelement <2 x half> poison, half [[R_I0]], i64 0
10062cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R:%.*]] = insertelement <2 x half> [[R_UPTO0]], half [[R_I1]], i64 1
10072cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret <2 x half> [[R]]
10082cb5c6d1SNicolai Hähnle;
10092cb5c6d1SNicolai Hähnle; MIN32-LABEL: @call_v2f16(
10102cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R:%.*]] = call <2 x half> @llvm.minnum.v2f16(<2 x half> [[A:%.*]], <2 x half> [[B:%.*]])
10112cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret <2 x half> [[R]]
10122e07adcdSNicolai Hähnle;
10132e07adcdSNicolai Hähnle  %r = call <2 x half> @llvm.minnum.v2f16(<2 x half> %a, <2 x half> %b)
10142e07adcdSNicolai Hähnle  ret <2 x half> %r
10152e07adcdSNicolai Hähnle}
10162e07adcdSNicolai Hähnle
10172e07adcdSNicolai Hähnledefine <3 x half> @call_v3f16(<3 x half> %a, <3 x half> %b) {
10182cb5c6d1SNicolai Hähnle; MIN16-LABEL: @call_v3f16(
10192cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = extractelement <3 x half> [[A:%.*]], i64 0
10202cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I0:%.*]] = extractelement <3 x half> [[B:%.*]], i64 0
10212cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I0:%.*]] = call half @llvm.minnum.f16(half [[A_I0]], half [[B_I0]])
10222cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = extractelement <3 x half> [[A]], i64 1
10232cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I1:%.*]] = extractelement <3 x half> [[B]], i64 1
10242cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I1:%.*]] = call half @llvm.minnum.f16(half [[A_I1]], half [[B_I1]])
10252cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I2:%.*]] = extractelement <3 x half> [[A]], i64 2
10262cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I2:%.*]] = extractelement <3 x half> [[B]], i64 2
10272cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I2:%.*]] = call half @llvm.minnum.f16(half [[A_I2]], half [[B_I2]])
10282cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO0:%.*]] = insertelement <3 x half> poison, half [[R_I0]], i64 0
10292cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO1:%.*]] = insertelement <3 x half> [[R_UPTO0]], half [[R_I1]], i64 1
10302cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R:%.*]] = insertelement <3 x half> [[R_UPTO1]], half [[R_I2]], i64 2
10312cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret <3 x half> [[R]]
10322cb5c6d1SNicolai Hähnle;
10332cb5c6d1SNicolai Hähnle; MIN32-LABEL: @call_v3f16(
10342cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I0:%.*]] = shufflevector <3 x half> [[A:%.*]], <3 x half> poison, <2 x i32> <i32 0, i32 1>
10352cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[B_I0:%.*]] = shufflevector <3 x half> [[B:%.*]], <3 x half> poison, <2 x i32> <i32 0, i32 1>
10362cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R_I0:%.*]] = call <2 x half> @llvm.minnum.v2f16(<2 x half> [[A_I0]], <2 x half> [[B_I0]])
10372cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I1:%.*]] = extractelement <3 x half> [[A]], i64 2
10382cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[B_I1:%.*]] = extractelement <3 x half> [[B]], i64 2
10392cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R_I1:%.*]] = call half @llvm.minnum.f16(half [[A_I1]], half [[B_I1]])
10402cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[TMP1:%.*]] = shufflevector <2 x half> [[R_I0]], <2 x half> [[R_I0]], <3 x i32> <i32 0, i32 1, i32 poison>
10412cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R:%.*]] = insertelement <3 x half> [[TMP1]], half [[R_I1]], i64 2
10422cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret <3 x half> [[R]]
10432e07adcdSNicolai Hähnle;
10442e07adcdSNicolai Hähnle  %r = call <3 x half> @llvm.minnum.v3f16(<3 x half> %a, <3 x half> %b)
10452e07adcdSNicolai Hähnle  ret <3 x half> %r
10462e07adcdSNicolai Hähnle}
10472e07adcdSNicolai Hähnle
10482e07adcdSNicolai Hähnledefine <4 x half> @call_v4f16(<4 x half> %a, <4 x half> %b) {
10492cb5c6d1SNicolai Hähnle; MIN16-LABEL: @call_v4f16(
10502cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I0:%.*]] = extractelement <4 x half> [[A:%.*]], i64 0
10512cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I0:%.*]] = extractelement <4 x half> [[B:%.*]], i64 0
10522cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I0:%.*]] = call half @llvm.minnum.f16(half [[A_I0]], half [[B_I0]])
10532cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I1:%.*]] = extractelement <4 x half> [[A]], i64 1
10542cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I1:%.*]] = extractelement <4 x half> [[B]], i64 1
10552cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I1:%.*]] = call half @llvm.minnum.f16(half [[A_I1]], half [[B_I1]])
10562cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I2:%.*]] = extractelement <4 x half> [[A]], i64 2
10572cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I2:%.*]] = extractelement <4 x half> [[B]], i64 2
10582cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I2:%.*]] = call half @llvm.minnum.f16(half [[A_I2]], half [[B_I2]])
10592cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[A_I3:%.*]] = extractelement <4 x half> [[A]], i64 3
10602cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[B_I3:%.*]] = extractelement <4 x half> [[B]], i64 3
10612cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_I3:%.*]] = call half @llvm.minnum.f16(half [[A_I3]], half [[B_I3]])
10622cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO0:%.*]] = insertelement <4 x half> poison, half [[R_I0]], i64 0
10632cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO1:%.*]] = insertelement <4 x half> [[R_UPTO0]], half [[R_I1]], i64 1
10642cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R_UPTO2:%.*]] = insertelement <4 x half> [[R_UPTO1]], half [[R_I2]], i64 2
10652cb5c6d1SNicolai Hähnle; MIN16-NEXT:    [[R:%.*]] = insertelement <4 x half> [[R_UPTO2]], half [[R_I3]], i64 3
10662cb5c6d1SNicolai Hähnle; MIN16-NEXT:    ret <4 x half> [[R]]
10672cb5c6d1SNicolai Hähnle;
10682cb5c6d1SNicolai Hähnle; MIN32-LABEL: @call_v4f16(
10692cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I0:%.*]] = shufflevector <4 x half> [[A:%.*]], <4 x half> poison, <2 x i32> <i32 0, i32 1>
10702cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[B_I0:%.*]] = shufflevector <4 x half> [[B:%.*]], <4 x half> poison, <2 x i32> <i32 0, i32 1>
10712cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R_I0:%.*]] = call <2 x half> @llvm.minnum.v2f16(<2 x half> [[A_I0]], <2 x half> [[B_I0]])
10722cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[A_I1:%.*]] = shufflevector <4 x half> [[A]], <4 x half> poison, <2 x i32> <i32 2, i32 3>
10732cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[B_I1:%.*]] = shufflevector <4 x half> [[B]], <4 x half> poison, <2 x i32> <i32 2, i32 3>
10742cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R_I1:%.*]] = call <2 x half> @llvm.minnum.v2f16(<2 x half> [[A_I1]], <2 x half> [[B_I1]])
10752cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[TMP1:%.*]] = shufflevector <2 x half> [[R_I0]], <2 x half> [[R_I0]], <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>
10762cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[TMP2:%.*]] = shufflevector <2 x half> [[R_I1]], <2 x half> [[R_I1]], <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>
10772cb5c6d1SNicolai Hähnle; MIN32-NEXT:    [[R:%.*]] = shufflevector <4 x half> [[TMP1]], <4 x half> [[TMP2]], <4 x i32> <i32 0, i32 1, i32 4, i32 5>
10782cb5c6d1SNicolai Hähnle; MIN32-NEXT:    ret <4 x half> [[R]]
10792e07adcdSNicolai Hähnle;
10802e07adcdSNicolai Hähnle  %r = call <4 x half> @llvm.minnum.v4f16(<4 x half> %a, <4 x half> %b)
10812e07adcdSNicolai Hähnle  ret <4 x half> %r
10822e07adcdSNicolai Hähnle}
10832e07adcdSNicolai Hähnle
10842e07adcdSNicolai Hähnledeclare <2 x half> @llvm.minnum.v2f16(<2 x half>, <2 x half>)
10852e07adcdSNicolai Hähnledeclare <3 x half> @llvm.minnum.v3f16(<3 x half>, <3 x half>)
10862e07adcdSNicolai Hähnledeclare <4 x half> @llvm.minnum.v4f16(<4 x half>, <4 x half>)
1087