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