11ceaec3eSKai Luo; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 21ceaec3eSKai Luo; RUN: llc -mtriple=powerpc64-unknown-unknown -verify-machineinstrs -mcpu=pwr8 \ 31ceaec3eSKai Luo; RUN: < %s | FileCheck %s --check-prefix=CHECK-BE 41ceaec3eSKai Luo; RUN: llc -mtriple=powerpc64le-unknown-unknown -verify-machineinstrs -mcpu=pwr8 \ 51ceaec3eSKai Luo; RUN: < %s | FileCheck %s --check-prefix=CHECK-LE 61ceaec3eSKai Luo 71ceaec3eSKai Luodefine noundef <2 x double> @vec_promote_double_zeroed(ptr nocapture noundef readonly %p) { 81ceaec3eSKai Luo; CHECK-BE-LABEL: vec_promote_double_zeroed: 91ceaec3eSKai Luo; CHECK-BE: # %bb.0: # %entry 101ceaec3eSKai Luo; CHECK-BE-NEXT: lfd 0, 0(3) 111ceaec3eSKai Luo; CHECK-BE-NEXT: xxlxor 1, 1, 1 121ceaec3eSKai Luo; CHECK-BE-NEXT: xxmrghd 34, 0, 1 131ceaec3eSKai Luo; CHECK-BE-NEXT: blr 141ceaec3eSKai Luo; 151ceaec3eSKai Luo; CHECK-LE-LABEL: vec_promote_double_zeroed: 161ceaec3eSKai Luo; CHECK-LE: # %bb.0: # %entry 171ceaec3eSKai Luo; CHECK-LE-NEXT: lfd 0, 0(3) 181ceaec3eSKai Luo; CHECK-LE-NEXT: xxlxor 1, 1, 1 191ceaec3eSKai Luo; CHECK-LE-NEXT: xxmrghd 34, 1, 0 201ceaec3eSKai Luo; CHECK-LE-NEXT: blr 211ceaec3eSKai Luoentry: 221ceaec3eSKai Luo %0 = load double, ptr %p, align 8 231ceaec3eSKai Luo %vecins.i = insertelement <2 x double> <double poison, double 0.0>, double %0, i64 0 241ceaec3eSKai Luo ret <2 x double> %vecins.i 251ceaec3eSKai Luo} 261ceaec3eSKai Luo 271ceaec3eSKai Luodefine noundef <2 x double> @vec_promote_double(ptr nocapture noundef readonly %p) { 281ceaec3eSKai Luo; CHECK-BE-LABEL: vec_promote_double: 291ceaec3eSKai Luo; CHECK-BE: # %bb.0: # %entry 301ceaec3eSKai Luo; CHECK-BE-NEXT: lxvdsx 34, 0, 3 311ceaec3eSKai Luo; CHECK-BE-NEXT: blr 321ceaec3eSKai Luo; 331ceaec3eSKai Luo; CHECK-LE-LABEL: vec_promote_double: 341ceaec3eSKai Luo; CHECK-LE: # %bb.0: # %entry 351ceaec3eSKai Luo; CHECK-LE-NEXT: lxvdsx 34, 0, 3 361ceaec3eSKai Luo; CHECK-LE-NEXT: blr 371ceaec3eSKai Luoentry: 381ceaec3eSKai Luo %0 = load double, ptr %p, align 8 391ceaec3eSKai Luo %vecins.i = insertelement <2 x double> poison, double %0, i64 0 401ceaec3eSKai Luo ret <2 x double> %vecins.i 411ceaec3eSKai Luo} 421ceaec3eSKai Luo 431ceaec3eSKai Luodefine noundef <4 x float> @vec_promote_float_zeroed(ptr nocapture noundef readonly %p) { 441ceaec3eSKai Luo; CHECK-BE-LABEL: vec_promote_float_zeroed: 451ceaec3eSKai Luo; CHECK-BE: # %bb.0: # %entry 46*b922a362SQiu Chaofan; CHECK-BE-NEXT: lfs 0, 0(3) 47*b922a362SQiu Chaofan; CHECK-BE-NEXT: xxlxor 1, 1, 1 48*b922a362SQiu Chaofan; CHECK-BE-NEXT: xxmrghd 0, 0, 1 49*b922a362SQiu Chaofan; CHECK-BE-NEXT: xxspltd 1, 1, 0 50*b922a362SQiu Chaofan; CHECK-BE-NEXT: xvcvdpsp 34, 0 51*b922a362SQiu Chaofan; CHECK-BE-NEXT: xvcvdpsp 35, 1 52*b922a362SQiu Chaofan; CHECK-BE-NEXT: vmrgew 2, 2, 3 531ceaec3eSKai Luo; CHECK-BE-NEXT: blr 541ceaec3eSKai Luo; 551ceaec3eSKai Luo; CHECK-LE-LABEL: vec_promote_float_zeroed: 561ceaec3eSKai Luo; CHECK-LE: # %bb.0: # %entry 57*b922a362SQiu Chaofan; CHECK-LE-NEXT: lfs 0, 0(3) 58*b922a362SQiu Chaofan; CHECK-LE-NEXT: xxlxor 1, 1, 1 59*b922a362SQiu Chaofan; CHECK-LE-NEXT: xxmrghd 0, 1, 0 60*b922a362SQiu Chaofan; CHECK-LE-NEXT: xxspltd 1, 1, 0 61*b922a362SQiu Chaofan; CHECK-LE-NEXT: xvcvdpsp 34, 0 62*b922a362SQiu Chaofan; CHECK-LE-NEXT: xvcvdpsp 35, 1 63*b922a362SQiu Chaofan; CHECK-LE-NEXT: vmrgew 2, 3, 2 641ceaec3eSKai Luo; CHECK-LE-NEXT: blr 651ceaec3eSKai Luoentry: 661ceaec3eSKai Luo %0 = load float, ptr %p, align 8 671ceaec3eSKai Luo %vecins.i = insertelement <4 x float> <float poison, float 0.0, float 0.0, float 0.0>, float %0, i64 0 681ceaec3eSKai Luo ret <4 x float> %vecins.i 691ceaec3eSKai Luo} 701ceaec3eSKai Luo 711ceaec3eSKai Luodefine noundef <4 x float> @vec_promote_float(ptr nocapture noundef readonly %p) { 721ceaec3eSKai Luo; CHECK-BE-LABEL: vec_promote_float: 731ceaec3eSKai Luo; CHECK-BE: # %bb.0: # %entry 741ceaec3eSKai Luo; CHECK-BE-NEXT: lfiwzx 0, 0, 3 751ceaec3eSKai Luo; CHECK-BE-NEXT: xxspltw 34, 0, 1 761ceaec3eSKai Luo; CHECK-BE-NEXT: blr 771ceaec3eSKai Luo; 781ceaec3eSKai Luo; CHECK-LE-LABEL: vec_promote_float: 791ceaec3eSKai Luo; CHECK-LE: # %bb.0: # %entry 801ceaec3eSKai Luo; CHECK-LE-NEXT: lfiwzx 0, 0, 3 811ceaec3eSKai Luo; CHECK-LE-NEXT: xxspltw 34, 0, 1 821ceaec3eSKai Luo; CHECK-LE-NEXT: blr 831ceaec3eSKai Luoentry: 841ceaec3eSKai Luo %0 = load float, ptr %p, align 8 851ceaec3eSKai Luo %vecins.i = insertelement <4 x float> poison, float %0, i64 0 861ceaec3eSKai Luo ret <4 x float> %vecins.i 871ceaec3eSKai Luo} 881ceaec3eSKai Luo 891ceaec3eSKai Luodefine noundef <2 x i64> @vec_promote_long_long_zeroed(ptr nocapture noundef readonly %p) { 901ceaec3eSKai Luo; CHECK-BE-LABEL: vec_promote_long_long_zeroed: 911ceaec3eSKai Luo; CHECK-BE: # %bb.0: # %entry 921ceaec3eSKai Luo; CHECK-BE-NEXT: ld 3, 0(3) 931ceaec3eSKai Luo; CHECK-BE-NEXT: li 4, 0 941ceaec3eSKai Luo; CHECK-BE-NEXT: mtfprd 0, 4 951ceaec3eSKai Luo; CHECK-BE-NEXT: mtfprd 1, 3 961ceaec3eSKai Luo; CHECK-BE-NEXT: xxmrghd 34, 1, 0 971ceaec3eSKai Luo; CHECK-BE-NEXT: blr 981ceaec3eSKai Luo; 991ceaec3eSKai Luo; CHECK-LE-LABEL: vec_promote_long_long_zeroed: 1001ceaec3eSKai Luo; CHECK-LE: # %bb.0: # %entry 1011ceaec3eSKai Luo; CHECK-LE-NEXT: ld 3, 0(3) 1021ceaec3eSKai Luo; CHECK-LE-NEXT: li 4, 0 1031ceaec3eSKai Luo; CHECK-LE-NEXT: mtfprd 0, 4 1041ceaec3eSKai Luo; CHECK-LE-NEXT: mtfprd 1, 3 1051ceaec3eSKai Luo; CHECK-LE-NEXT: xxmrghd 34, 0, 1 1061ceaec3eSKai Luo; CHECK-LE-NEXT: blr 1071ceaec3eSKai Luoentry: 1081ceaec3eSKai Luo %0 = load i64, ptr %p, align 8 1091ceaec3eSKai Luo %vecins.i = insertelement <2 x i64> <i64 poison, i64 0>, i64 %0, i64 0 1101ceaec3eSKai Luo ret <2 x i64> %vecins.i 1111ceaec3eSKai Luo} 1121ceaec3eSKai Luo 1131ceaec3eSKai Luodefine noundef <2 x i64> @vec_promote_long_long(ptr nocapture noundef readonly %p) { 1141ceaec3eSKai Luo; CHECK-BE-LABEL: vec_promote_long_long: 1151ceaec3eSKai Luo; CHECK-BE: # %bb.0: # %entry 1161ceaec3eSKai Luo; CHECK-BE-NEXT: lxvdsx 34, 0, 3 1171ceaec3eSKai Luo; CHECK-BE-NEXT: blr 1181ceaec3eSKai Luo; 1191ceaec3eSKai Luo; CHECK-LE-LABEL: vec_promote_long_long: 1201ceaec3eSKai Luo; CHECK-LE: # %bb.0: # %entry 1211ceaec3eSKai Luo; CHECK-LE-NEXT: lxvdsx 34, 0, 3 1221ceaec3eSKai Luo; CHECK-LE-NEXT: blr 1231ceaec3eSKai Luoentry: 1241ceaec3eSKai Luo %0 = load i64, ptr %p, align 8 1251ceaec3eSKai Luo %vecins.i = insertelement <2 x i64> poison, i64 %0, i64 0 1261ceaec3eSKai Luo ret <2 x i64> %vecins.i 1271ceaec3eSKai Luo} 1281ceaec3eSKai Luo 1291ceaec3eSKai Luodefine noundef <4 x i32> @vec_promote_int_zeroed(ptr nocapture noundef readonly %p) { 1301ceaec3eSKai Luo; CHECK-BE-LABEL: vec_promote_int_zeroed: 1311ceaec3eSKai Luo; CHECK-BE: # %bb.0: # %entry 1321ceaec3eSKai Luo; CHECK-BE-NEXT: lwz 3, 0(3) 1331ceaec3eSKai Luo; CHECK-BE-NEXT: li 4, 0 1341ceaec3eSKai Luo; CHECK-BE-NEXT: li 5, 0 135*b922a362SQiu Chaofan; CHECK-BE-NEXT: rldimi 4, 4, 32, 0 136*b922a362SQiu Chaofan; CHECK-BE-NEXT: rldimi 5, 3, 32, 0 137*b922a362SQiu Chaofan; CHECK-BE-NEXT: mtfprd 1, 4 138*b922a362SQiu Chaofan; CHECK-BE-NEXT: mtfprd 0, 5 1391ceaec3eSKai Luo; CHECK-BE-NEXT: xxmrghd 34, 0, 1 1401ceaec3eSKai Luo; CHECK-BE-NEXT: blr 1411ceaec3eSKai Luo; 1421ceaec3eSKai Luo; CHECK-LE-LABEL: vec_promote_int_zeroed: 1431ceaec3eSKai Luo; CHECK-LE: # %bb.0: # %entry 1441ceaec3eSKai Luo; CHECK-LE-NEXT: lwz 3, 0(3) 1451ceaec3eSKai Luo; CHECK-LE-NEXT: li 4, 0 1461ceaec3eSKai Luo; CHECK-LE-NEXT: rldimi 3, 4, 32, 0 1471ceaec3eSKai Luo; CHECK-LE-NEXT: rldimi 4, 4, 32, 0 1481ceaec3eSKai Luo; CHECK-LE-NEXT: mtfprd 0, 3 1491ceaec3eSKai Luo; CHECK-LE-NEXT: mtfprd 1, 4 1501ceaec3eSKai Luo; CHECK-LE-NEXT: xxmrghd 34, 1, 0 1511ceaec3eSKai Luo; CHECK-LE-NEXT: blr 1521ceaec3eSKai Luoentry: 1531ceaec3eSKai Luo %0 = load i32, ptr %p, align 4 1541ceaec3eSKai Luo %vecins.i = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %0, i64 0 1551ceaec3eSKai Luo ret <4 x i32> %vecins.i 1561ceaec3eSKai Luo} 1571ceaec3eSKai Luo 1581ceaec3eSKai Luodefine noundef <4 x i32> @vec_promote_int(ptr nocapture noundef readonly %p) { 1591ceaec3eSKai Luo; CHECK-BE-LABEL: vec_promote_int: 1601ceaec3eSKai Luo; CHECK-BE: # %bb.0: # %entry 1611ceaec3eSKai Luo; CHECK-BE-NEXT: lfiwzx 0, 0, 3 1621ceaec3eSKai Luo; CHECK-BE-NEXT: xxspltw 34, 0, 1 1631ceaec3eSKai Luo; CHECK-BE-NEXT: blr 1641ceaec3eSKai Luo; 1651ceaec3eSKai Luo; CHECK-LE-LABEL: vec_promote_int: 1661ceaec3eSKai Luo; CHECK-LE: # %bb.0: # %entry 1671ceaec3eSKai Luo; CHECK-LE-NEXT: lfiwzx 0, 0, 3 1681ceaec3eSKai Luo; CHECK-LE-NEXT: xxspltw 34, 0, 1 1691ceaec3eSKai Luo; CHECK-LE-NEXT: blr 1701ceaec3eSKai Luoentry: 1711ceaec3eSKai Luo %0 = load i32, ptr %p, align 4 1721ceaec3eSKai Luo %vecins.i = insertelement <4 x i32> poison, i32 %0, i64 0 1731ceaec3eSKai Luo ret <4 x i32> %vecins.i 1741ceaec3eSKai Luo} 1751ceaec3eSKai Luo 1761ceaec3eSKai Luodefine noundef <8 x i16> @vec_promote_short_zeroed(ptr nocapture noundef readonly %p) { 1771ceaec3eSKai Luo; CHECK-BE-LABEL: vec_promote_short_zeroed: 1781ceaec3eSKai Luo; CHECK-BE: # %bb.0: # %entry 1791ceaec3eSKai Luo; CHECK-BE-NEXT: addis 4, 2, .LCPI8_0@toc@ha 1801ceaec3eSKai Luo; CHECK-BE-NEXT: lhz 3, 0(3) 1811ceaec3eSKai Luo; CHECK-BE-NEXT: addi 4, 4, .LCPI8_0@toc@l 1821ceaec3eSKai Luo; CHECK-BE-NEXT: mtvsrwz 36, 3 183*b922a362SQiu Chaofan; CHECK-BE-NEXT: lxvw4x 34, 0, 4 184*b922a362SQiu Chaofan; CHECK-BE-NEXT: li 4, 0 185*b922a362SQiu Chaofan; CHECK-BE-NEXT: mtvsrwz 35, 4 1861ceaec3eSKai Luo; CHECK-BE-NEXT: vperm 2, 4, 3, 2 1871ceaec3eSKai Luo; CHECK-BE-NEXT: blr 1881ceaec3eSKai Luo; 1891ceaec3eSKai Luo; CHECK-LE-LABEL: vec_promote_short_zeroed: 1901ceaec3eSKai Luo; CHECK-LE: # %bb.0: # %entry 1911ceaec3eSKai Luo; CHECK-LE-NEXT: addis 4, 2, .LCPI8_0@toc@ha 1921ceaec3eSKai Luo; CHECK-LE-NEXT: lhz 3, 0(3) 1931ceaec3eSKai Luo; CHECK-LE-NEXT: addi 4, 4, .LCPI8_0@toc@l 194*b922a362SQiu Chaofan; CHECK-LE-NEXT: mtvsrd 36, 3 1951ceaec3eSKai Luo; CHECK-LE-NEXT: lxvd2x 0, 0, 4 1961ceaec3eSKai Luo; CHECK-LE-NEXT: li 4, 0 197*b922a362SQiu Chaofan; CHECK-LE-NEXT: mtvsrd 35, 4 198*b922a362SQiu Chaofan; CHECK-LE-NEXT: xxswapd 34, 0 199*b922a362SQiu Chaofan; CHECK-LE-NEXT: vperm 2, 3, 4, 2 2001ceaec3eSKai Luo; CHECK-LE-NEXT: blr 2011ceaec3eSKai Luoentry: 2021ceaec3eSKai Luo %0 = load i16, ptr %p, align 2 2031ceaec3eSKai Luo %vecins.i = insertelement <8 x i16> <i16 poison, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, i16 %0, i64 0 2041ceaec3eSKai Luo ret <8 x i16> %vecins.i 2051ceaec3eSKai Luo} 2061ceaec3eSKai Luo 2071ceaec3eSKai Luodefine noundef <8 x i16> @vec_promote_short(ptr nocapture noundef readonly %p) { 2081ceaec3eSKai Luo; CHECK-BE-LABEL: vec_promote_short: 2091ceaec3eSKai Luo; CHECK-BE: # %bb.0: # %entry 2101ceaec3eSKai Luo; CHECK-BE-NEXT: lhzx 3, 0, 3 2111ceaec3eSKai Luo; CHECK-BE-NEXT: mtvsrwz 34, 3 2121ceaec3eSKai Luo; CHECK-BE-NEXT: vsplth 2, 2, 3 2131ceaec3eSKai Luo; CHECK-BE-NEXT: blr 2141ceaec3eSKai Luo; 2151ceaec3eSKai Luo; CHECK-LE-LABEL: vec_promote_short: 2161ceaec3eSKai Luo; CHECK-LE: # %bb.0: # %entry 2171ceaec3eSKai Luo; CHECK-LE-NEXT: lhzx 3, 0, 3 2181ceaec3eSKai Luo; CHECK-LE-NEXT: mtvsrwz 34, 3 2191ceaec3eSKai Luo; CHECK-LE-NEXT: vsplth 2, 2, 3 2201ceaec3eSKai Luo; CHECK-LE-NEXT: blr 2211ceaec3eSKai Luoentry: 2221ceaec3eSKai Luo %0 = load i16, ptr %p, align 2 2231ceaec3eSKai Luo %vecins.i = insertelement <8 x i16> poison, i16 %0, i64 0 2241ceaec3eSKai Luo ret <8 x i16> %vecins.i 2251ceaec3eSKai Luo} 2261ceaec3eSKai Luo 2271ceaec3eSKai Luodefine noundef <16 x i8> @vec_promote_char_zeroed(ptr nocapture noundef readonly %p) { 2281ceaec3eSKai Luo; CHECK-BE-LABEL: vec_promote_char_zeroed: 2291ceaec3eSKai Luo; CHECK-BE: # %bb.0: # %entry 2301ceaec3eSKai Luo; CHECK-BE-NEXT: addis 4, 2, .LCPI10_0@toc@ha 2311ceaec3eSKai Luo; CHECK-BE-NEXT: lbz 3, 0(3) 2321ceaec3eSKai Luo; CHECK-BE-NEXT: addi 4, 4, .LCPI10_0@toc@l 2331ceaec3eSKai Luo; CHECK-BE-NEXT: mtvsrwz 36, 3 234*b922a362SQiu Chaofan; CHECK-BE-NEXT: lxvw4x 34, 0, 4 235*b922a362SQiu Chaofan; CHECK-BE-NEXT: li 4, 0 236*b922a362SQiu Chaofan; CHECK-BE-NEXT: mtvsrwz 35, 4 2371ceaec3eSKai Luo; CHECK-BE-NEXT: vperm 2, 4, 3, 2 2381ceaec3eSKai Luo; CHECK-BE-NEXT: blr 2391ceaec3eSKai Luo; 2401ceaec3eSKai Luo; CHECK-LE-LABEL: vec_promote_char_zeroed: 2411ceaec3eSKai Luo; CHECK-LE: # %bb.0: # %entry 2421ceaec3eSKai Luo; CHECK-LE-NEXT: addis 4, 2, .LCPI10_0@toc@ha 2431ceaec3eSKai Luo; CHECK-LE-NEXT: lbz 3, 0(3) 2441ceaec3eSKai Luo; CHECK-LE-NEXT: addi 4, 4, .LCPI10_0@toc@l 245*b922a362SQiu Chaofan; CHECK-LE-NEXT: mtvsrd 36, 3 2461ceaec3eSKai Luo; CHECK-LE-NEXT: lxvd2x 0, 0, 4 2471ceaec3eSKai Luo; CHECK-LE-NEXT: li 4, 0 248*b922a362SQiu Chaofan; CHECK-LE-NEXT: mtvsrd 35, 4 249*b922a362SQiu Chaofan; CHECK-LE-NEXT: xxswapd 34, 0 250*b922a362SQiu Chaofan; CHECK-LE-NEXT: vperm 2, 3, 4, 2 2511ceaec3eSKai Luo; CHECK-LE-NEXT: blr 2521ceaec3eSKai Luoentry: 2531ceaec3eSKai Luo %0 = load i8, ptr %p, align 1 2541ceaec3eSKai Luo %vecins.i = insertelement <16 x i8> <i8 poison, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, i8 %0, i64 0 2551ceaec3eSKai Luo ret <16 x i8> %vecins.i 2561ceaec3eSKai Luo} 2571ceaec3eSKai Luo 2581ceaec3eSKai Luodefine noundef <16 x i8> @vec_promote_char(ptr nocapture noundef readonly %p) { 2591ceaec3eSKai Luo; CHECK-BE-LABEL: vec_promote_char: 2601ceaec3eSKai Luo; CHECK-BE: # %bb.0: # %entry 2611ceaec3eSKai Luo; CHECK-BE-NEXT: lbzx 3, 0, 3 2621ceaec3eSKai Luo; CHECK-BE-NEXT: mtvsrwz 34, 3 2631ceaec3eSKai Luo; CHECK-BE-NEXT: vspltb 2, 2, 7 2641ceaec3eSKai Luo; CHECK-BE-NEXT: blr 2651ceaec3eSKai Luo; 2661ceaec3eSKai Luo; CHECK-LE-LABEL: vec_promote_char: 2671ceaec3eSKai Luo; CHECK-LE: # %bb.0: # %entry 2681ceaec3eSKai Luo; CHECK-LE-NEXT: lbzx 3, 0, 3 2691ceaec3eSKai Luo; CHECK-LE-NEXT: mtvsrwz 34, 3 2701ceaec3eSKai Luo; CHECK-LE-NEXT: vspltb 2, 2, 7 2711ceaec3eSKai Luo; CHECK-LE-NEXT: blr 2721ceaec3eSKai Luoentry: 2731ceaec3eSKai Luo %0 = load i8, ptr %p, align 1 2741ceaec3eSKai Luo %vecins.i = insertelement <16 x i8> poison, i8 %0, i64 0 2751ceaec3eSKai Luo ret <16 x i8> %vecins.i 2761ceaec3eSKai Luo} 277