321 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -mcpu=pwr8 -mattr=+vsx \3; RUN: -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s4 5; RUN: llc -verify-machineinstrs -mcpu=pwr9 -mattr=-power9-vector \6; RUN: -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s7 8; RUN: llc -verify-machineinstrs -mcpu=pwr9 -mattr=+vsx \9; RUN: -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s \10; RUN: --check-prefix=CHECK-P9 --implicit-check-not xxswapd11 12define <2 x double> @test00(ptr %p1, ptr %p2) {13; CHECK-LABEL: test00:14; CHECK: # %bb.0:15; CHECK-NEXT: lxvdsx 34, 0, 316; CHECK-NEXT: blr17;18; CHECK-P9-LABEL: test00:19; CHECK-P9: # %bb.0:20; CHECK-P9-NEXT: lxvdsx 34, 0, 321; CHECK-P9-NEXT: blr22 %v1 = load <2 x double>, ptr %p123 %v2 = load <2 x double>, ptr %p224 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 0, i32 0>25 ret <2 x double> %v326}27 28define <2 x double> @test01(ptr %p1, ptr %p2) {29; CHECK-LABEL: test01:30; CHECK: # %bb.0:31; CHECK-NEXT: lxvd2x 0, 0, 332; CHECK-NEXT: xxswapd 34, 033; CHECK-NEXT: blr34;35; CHECK-P9-LABEL: test01:36; CHECK-P9: # %bb.0:37; CHECK-P9-NEXT: lxv 34, 0(3)38; CHECK-P9-NEXT: blr39 %v1 = load <2 x double>, ptr %p140 %v2 = load <2 x double>, ptr %p241 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 0, i32 1>42 ret <2 x double> %v343}44 45define <2 x double> @test02(ptr %p1, ptr %p2) {46; CHECK-LABEL: test02:47; CHECK: # %bb.0:48; CHECK-NEXT: lxvd2x 0, 0, 349; CHECK-NEXT: lxvd2x 1, 0, 450; CHECK-NEXT: xxswapd 0, 051; CHECK-NEXT: xxswapd 1, 152; CHECK-NEXT: xxmrgld 34, 1, 053; CHECK-NEXT: blr54;55; CHECK-P9-LABEL: test02:56; CHECK-P9: # %bb.0:57; CHECK-P9-NEXT: lxv 0, 0(3)58; CHECK-P9-NEXT: lxv 1, 0(4)59; CHECK-P9-NEXT: xxmrgld 34, 1, 060; CHECK-P9-NEXT: blr61 %v1 = load <2 x double>, ptr %p162 %v2 = load <2 x double>, ptr %p263 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 0, i32 2>64 ret <2 x double> %v365}66 67define <2 x double> @test03(ptr %p1, ptr %p2) {68; CHECK-LABEL: test03:69; CHECK: # %bb.0:70; CHECK-NEXT: lxvd2x 0, 0, 371; CHECK-NEXT: lxvd2x 1, 0, 472; CHECK-NEXT: xxswapd 0, 073; CHECK-NEXT: xxswapd 1, 174; CHECK-NEXT: xxpermdi 34, 1, 0, 175; CHECK-NEXT: blr76;77; CHECK-P9-LABEL: test03:78; CHECK-P9: # %bb.0:79; CHECK-P9-NEXT: lxv 0, 0(3)80; CHECK-P9-NEXT: lxv 1, 0(4)81; CHECK-P9-NEXT: xxpermdi 34, 1, 0, 182; CHECK-P9-NEXT: blr83 %v1 = load <2 x double>, ptr %p184 %v2 = load <2 x double>, ptr %p285 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 0, i32 3>86 ret <2 x double> %v387}88 89define <2 x double> @test10(ptr %p1, ptr %p2) {90; CHECK-LABEL: test10:91; CHECK: # %bb.0:92; CHECK-NEXT: lxvd2x 34, 0, 393; CHECK-NEXT: blr94;95; CHECK-P9-LABEL: test10:96; CHECK-P9: # %bb.0:97; CHECK-P9-NEXT: lxvd2x 34, 0, 398; CHECK-P9-NEXT: blr99 %v1 = load <2 x double>, ptr %p1100 %v2 = load <2 x double>, ptr %p2101 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 1, i32 0>102 ret <2 x double> %v3103}104 105define <2 x double> @test11(ptr %p1, ptr %p2) {106; CHECK-LABEL: test11:107; CHECK: # %bb.0:108; CHECK-NEXT: addi 3, 3, 8109; CHECK-NEXT: lxvdsx 34, 0, 3110; CHECK-NEXT: blr111;112; CHECK-P9-LABEL: test11:113; CHECK-P9: # %bb.0:114; CHECK-P9-NEXT: addi 3, 3, 8115; CHECK-P9-NEXT: lxvdsx 34, 0, 3116; CHECK-P9-NEXT: blr117 %v1 = load <2 x double>, ptr %p1118 %v2 = load <2 x double>, ptr %p2119 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 1, i32 1>120 ret <2 x double> %v3121}122 123define <2 x double> @test12(ptr %p1, ptr %p2) {124; CHECK-LABEL: test12:125; CHECK: # %bb.0:126; CHECK-NEXT: lxvd2x 0, 0, 3127; CHECK-NEXT: lxvd2x 1, 0, 4128; CHECK-NEXT: xxswapd 0, 0129; CHECK-NEXT: xxswapd 1, 1130; CHECK-NEXT: xxpermdi 34, 1, 0, 2131; CHECK-NEXT: blr132;133; CHECK-P9-LABEL: test12:134; CHECK-P9: # %bb.0:135; CHECK-P9-NEXT: lxv 0, 0(3)136; CHECK-P9-NEXT: lxv 1, 0(4)137; CHECK-P9-NEXT: xxpermdi 34, 1, 0, 2138; CHECK-P9-NEXT: blr139 %v1 = load <2 x double>, ptr %p1140 %v2 = load <2 x double>, ptr %p2141 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 1, i32 2>142 ret <2 x double> %v3143}144 145define <2 x double> @test13(ptr %p1, ptr %p2) {146; CHECK-LABEL: test13:147; CHECK: # %bb.0:148; CHECK-NEXT: lxvd2x 0, 0, 3149; CHECK-NEXT: lxvd2x 1, 0, 4150; CHECK-NEXT: xxswapd 0, 0151; CHECK-NEXT: xxswapd 1, 1152; CHECK-NEXT: xxmrghd 34, 1, 0153; CHECK-NEXT: blr154;155; CHECK-P9-LABEL: test13:156; CHECK-P9: # %bb.0:157; CHECK-P9-NEXT: lxv 0, 0(3)158; CHECK-P9-NEXT: lxv 1, 0(4)159; CHECK-P9-NEXT: xxmrghd 34, 1, 0160; CHECK-P9-NEXT: blr161 %v1 = load <2 x double>, ptr %p1162 %v2 = load <2 x double>, ptr %p2163 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 1, i32 3>164 ret <2 x double> %v3165}166 167define <2 x double> @test20(ptr %p1, ptr %p2) {168; CHECK-LABEL: test20:169; CHECK: # %bb.0:170; CHECK-NEXT: lxvd2x 0, 0, 3171; CHECK-NEXT: lxvd2x 1, 0, 4172; CHECK-NEXT: xxswapd 0, 0173; CHECK-NEXT: xxswapd 1, 1174; CHECK-NEXT: xxmrgld 34, 0, 1175; CHECK-NEXT: blr176;177; CHECK-P9-LABEL: test20:178; CHECK-P9: # %bb.0:179; CHECK-P9-NEXT: lxv 0, 0(3)180; CHECK-P9-NEXT: lxv 1, 0(4)181; CHECK-P9-NEXT: xxmrgld 34, 0, 1182; CHECK-P9-NEXT: blr183 %v1 = load <2 x double>, ptr %p1184 %v2 = load <2 x double>, ptr %p2185 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 2, i32 0>186 ret <2 x double> %v3187}188 189define <2 x double> @test21(ptr %p1, ptr %p2) {190; CHECK-LABEL: test21:191; CHECK: # %bb.0:192; CHECK-NEXT: lxvd2x 0, 0, 3193; CHECK-NEXT: lxvd2x 1, 0, 4194; CHECK-NEXT: xxswapd 0, 0195; CHECK-NEXT: xxswapd 1, 1196; CHECK-NEXT: xxpermdi 34, 0, 1, 1197; CHECK-NEXT: blr198;199; CHECK-P9-LABEL: test21:200; CHECK-P9: # %bb.0:201; CHECK-P9-NEXT: lxv 0, 0(3)202; CHECK-P9-NEXT: lxv 1, 0(4)203; CHECK-P9-NEXT: xxpermdi 34, 0, 1, 1204; CHECK-P9-NEXT: blr205 %v1 = load <2 x double>, ptr %p1206 %v2 = load <2 x double>, ptr %p2207 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 2, i32 1>208 ret <2 x double> %v3209}210 211define <2 x double> @test22(ptr %p1, ptr %p2) {212; CHECK-LABEL: test22:213; CHECK: # %bb.0:214; CHECK-NEXT: lxvdsx 34, 0, 4215; CHECK-NEXT: blr216;217; CHECK-P9-LABEL: test22:218; CHECK-P9: # %bb.0:219; CHECK-P9-NEXT: lxvdsx 34, 0, 4220; CHECK-P9-NEXT: blr221 %v1 = load <2 x double>, ptr %p1222 %v2 = load <2 x double>, ptr %p2223 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 2, i32 2>224 ret <2 x double> %v3225}226 227define <2 x double> @test23(ptr %p1, ptr %p2) {228; CHECK-LABEL: test23:229; CHECK: # %bb.0:230; CHECK-NEXT: lxvd2x 0, 0, 4231; CHECK-NEXT: xxswapd 34, 0232; CHECK-NEXT: blr233;234; CHECK-P9-LABEL: test23:235; CHECK-P9: # %bb.0:236; CHECK-P9-NEXT: lxv 34, 0(4)237; CHECK-P9-NEXT: blr238 %v1 = load <2 x double>, ptr %p1239 %v2 = load <2 x double>, ptr %p2240 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 2, i32 3>241 ret <2 x double> %v3242}243 244define <2 x double> @test30(ptr %p1, ptr %p2) {245; CHECK-LABEL: test30:246; CHECK: # %bb.0:247; CHECK-NEXT: lxvd2x 0, 0, 3248; CHECK-NEXT: lxvd2x 1, 0, 4249; CHECK-NEXT: xxswapd 0, 0250; CHECK-NEXT: xxswapd 1, 1251; CHECK-NEXT: xxpermdi 34, 0, 1, 2252; CHECK-NEXT: blr253;254; CHECK-P9-LABEL: test30:255; CHECK-P9: # %bb.0:256; CHECK-P9-NEXT: lxv 0, 0(3)257; CHECK-P9-NEXT: lxv 1, 0(4)258; CHECK-P9-NEXT: xxpermdi 34, 0, 1, 2259; CHECK-P9-NEXT: blr260 %v1 = load <2 x double>, ptr %p1261 %v2 = load <2 x double>, ptr %p2262 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 3, i32 0>263 ret <2 x double> %v3264}265 266define <2 x double> @test31(ptr %p1, ptr %p2) {267; CHECK-LABEL: test31:268; CHECK: # %bb.0:269; CHECK-NEXT: lxvd2x 0, 0, 3270; CHECK-NEXT: lxvd2x 1, 0, 4271; CHECK-NEXT: xxswapd 0, 0272; CHECK-NEXT: xxswapd 1, 1273; CHECK-NEXT: xxmrghd 34, 0, 1274; CHECK-NEXT: blr275;276; CHECK-P9-LABEL: test31:277; CHECK-P9: # %bb.0:278; CHECK-P9-NEXT: lxv 0, 0(3)279; CHECK-P9-NEXT: lxv 1, 0(4)280; CHECK-P9-NEXT: xxmrghd 34, 0, 1281; CHECK-P9-NEXT: blr282 %v1 = load <2 x double>, ptr %p1283 %v2 = load <2 x double>, ptr %p2284 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 3, i32 1>285 ret <2 x double> %v3286}287 288define <2 x double> @test32(ptr %p1, ptr %p2) {289; CHECK-LABEL: test32:290; CHECK: # %bb.0:291; CHECK-NEXT: lxvd2x 34, 0, 4292; CHECK-NEXT: blr293;294; CHECK-P9-LABEL: test32:295; CHECK-P9: # %bb.0:296; CHECK-P9-NEXT: lxvd2x 34, 0, 4297; CHECK-P9-NEXT: blr298 %v1 = load <2 x double>, ptr %p1299 %v2 = load <2 x double>, ptr %p2300 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 3, i32 2>301 ret <2 x double> %v3302}303 304define <2 x double> @test33(ptr %p1, ptr %p2) {305; CHECK-LABEL: test33:306; CHECK: # %bb.0:307; CHECK-NEXT: addi 3, 4, 8308; CHECK-NEXT: lxvdsx 34, 0, 3309; CHECK-NEXT: blr310;311; CHECK-P9-LABEL: test33:312; CHECK-P9: # %bb.0:313; CHECK-P9-NEXT: addi 3, 4, 8314; CHECK-P9-NEXT: lxvdsx 34, 0, 3315; CHECK-P9-NEXT: blr316 %v1 = load <2 x double>, ptr %p1317 %v2 = load <2 x double>, ptr %p2318 %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 3, i32 3>319 ret <2 x double> %v3320}321