251 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=x86_64-linux-gnu -mcpu=skx -global-isel -verify-machineinstrs < %s -o - | FileCheck %s --check-prefix=ALL --check-prefix=SKX3; RUN: llc -mtriple=x86_64-linux-gnu -mcpu=core-avx2 -global-isel -verify-machineinstrs < %s -o - | FileCheck %s --check-prefix=ALL --check-prefix=AVX24; RUN: llc -mtriple=x86_64-linux-gnu -mcpu=corei7-avx -global-isel -verify-machineinstrs < %s -o - | FileCheck %s --check-prefix=ALL --check-prefix=AVX15 6 7define <16 x i8> @test_add_v16i8(<16 x i8> %arg1, <16 x i8> %arg2) {8; ALL-LABEL: test_add_v16i8:9; ALL: # %bb.0:10; ALL-NEXT: vpaddb %xmm1, %xmm0, %xmm011; ALL-NEXT: retq12 %ret = add <16 x i8> %arg1, %arg213 ret <16 x i8> %ret14}15 16define <8 x i16> @test_add_v8i16(<8 x i16> %arg1, <8 x i16> %arg2) {17; ALL-LABEL: test_add_v8i16:18; ALL: # %bb.0:19; ALL-NEXT: vpaddw %xmm1, %xmm0, %xmm020; ALL-NEXT: retq21 %ret = add <8 x i16> %arg1, %arg222 ret <8 x i16> %ret23}24 25define <4 x i32> @test_add_v4i32(<4 x i32> %arg1, <4 x i32> %arg2) {26; ALL-LABEL: test_add_v4i32:27; ALL: # %bb.0:28; ALL-NEXT: vpaddd %xmm1, %xmm0, %xmm029; ALL-NEXT: retq30 %ret = add <4 x i32> %arg1, %arg231 ret <4 x i32> %ret32}33 34define <2 x i64> @test_add_v2i64(<2 x i64> %arg1, <2 x i64> %arg2) {35; ALL-LABEL: test_add_v2i64:36; ALL: # %bb.0:37; ALL-NEXT: vpaddq %xmm1, %xmm0, %xmm038; ALL-NEXT: retq39 %ret = add <2 x i64> %arg1, %arg240 ret <2 x i64> %ret41}42 43define <32 x i8> @test_add_v32i8(<32 x i8> %arg1, <32 x i8> %arg2) {44; SKX-LABEL: test_add_v32i8:45; SKX: # %bb.0:46; SKX-NEXT: vpaddb %ymm1, %ymm0, %ymm047; SKX-NEXT: retq48;49; AVX2-LABEL: test_add_v32i8:50; AVX2: # %bb.0:51; AVX2-NEXT: vpaddb %ymm1, %ymm0, %ymm052; AVX2-NEXT: retq53;54; AVX1-LABEL: test_add_v32i8:55; AVX1: # %bb.0:56; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm257; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm358; AVX1-NEXT: vpaddb %xmm3, %xmm2, %xmm259; AVX1-NEXT: vpaddb %xmm1, %xmm0, %xmm060; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm061; AVX1-NEXT: retq62 %ret = add <32 x i8> %arg1, %arg263 ret <32 x i8> %ret64}65 66define <16 x i16> @test_add_v16i16(<16 x i16> %arg1, <16 x i16> %arg2) {67; SKX-LABEL: test_add_v16i16:68; SKX: # %bb.0:69; SKX-NEXT: vpaddw %ymm1, %ymm0, %ymm070; SKX-NEXT: retq71;72; AVX2-LABEL: test_add_v16i16:73; AVX2: # %bb.0:74; AVX2-NEXT: vpaddw %ymm1, %ymm0, %ymm075; AVX2-NEXT: retq76;77; AVX1-LABEL: test_add_v16i16:78; AVX1: # %bb.0:79; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm280; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm381; AVX1-NEXT: vpaddw %xmm3, %xmm2, %xmm282; AVX1-NEXT: vpaddw %xmm1, %xmm0, %xmm083; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm084; AVX1-NEXT: retq85 %ret = add <16 x i16> %arg1, %arg286 ret <16 x i16> %ret87}88 89define <8 x i32> @test_add_v8i32(<8 x i32> %arg1, <8 x i32> %arg2) {90; SKX-LABEL: test_add_v8i32:91; SKX: # %bb.0:92; SKX-NEXT: vpaddd %ymm1, %ymm0, %ymm093; SKX-NEXT: retq94;95; AVX2-LABEL: test_add_v8i32:96; AVX2: # %bb.0:97; AVX2-NEXT: vpaddd %ymm1, %ymm0, %ymm098; AVX2-NEXT: retq99;100; AVX1-LABEL: test_add_v8i32:101; AVX1: # %bb.0:102; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2103; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3104; AVX1-NEXT: vpaddd %xmm3, %xmm2, %xmm2105; AVX1-NEXT: vpaddd %xmm1, %xmm0, %xmm0106; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0107; AVX1-NEXT: retq108 %ret = add <8 x i32> %arg1, %arg2109 ret <8 x i32> %ret110}111 112define <4 x i64> @test_add_v4i64(<4 x i64> %arg1, <4 x i64> %arg2) {113; SKX-LABEL: test_add_v4i64:114; SKX: # %bb.0:115; SKX-NEXT: vpaddq %ymm1, %ymm0, %ymm0116; SKX-NEXT: retq117;118; AVX2-LABEL: test_add_v4i64:119; AVX2: # %bb.0:120; AVX2-NEXT: vpaddq %ymm1, %ymm0, %ymm0121; AVX2-NEXT: retq122;123; AVX1-LABEL: test_add_v4i64:124; AVX1: # %bb.0:125; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2126; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3127; AVX1-NEXT: vpaddq %xmm3, %xmm2, %xmm2128; AVX1-NEXT: vpaddq %xmm1, %xmm0, %xmm0129; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0130; AVX1-NEXT: retq131 %ret = add <4 x i64> %arg1, %arg2132 ret <4 x i64> %ret133}134 135define <64 x i8> @test_add_v64i8(<64 x i8> %arg1, <64 x i8> %arg2) {136; SKX-LABEL: test_add_v64i8:137; SKX: # %bb.0:138; SKX-NEXT: vpaddb %zmm1, %zmm0, %zmm0139; SKX-NEXT: retq140;141; AVX2-LABEL: test_add_v64i8:142; AVX2: # %bb.0:143; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0144; AVX2-NEXT: vpaddb %ymm3, %ymm1, %ymm1145; AVX2-NEXT: retq146;147; AVX1-LABEL: test_add_v64i8:148; AVX1: # %bb.0:149; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4150; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5151; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6152; AVX1-NEXT: vpaddb %xmm6, %xmm4, %xmm4153; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6154; AVX1-NEXT: vpaddb %xmm6, %xmm5, %xmm5155; AVX1-NEXT: vpaddb %xmm2, %xmm0, %xmm0156; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm1157; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0158; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm1, %ymm1159; AVX1-NEXT: retq160 %ret = add <64 x i8> %arg1, %arg2161 ret <64 x i8> %ret162}163 164define <32 x i16> @test_add_v32i16(<32 x i16> %arg1, <32 x i16> %arg2) {165; SKX-LABEL: test_add_v32i16:166; SKX: # %bb.0:167; SKX-NEXT: vpaddw %zmm1, %zmm0, %zmm0168; SKX-NEXT: retq169;170; AVX2-LABEL: test_add_v32i16:171; AVX2: # %bb.0:172; AVX2-NEXT: vpaddw %ymm2, %ymm0, %ymm0173; AVX2-NEXT: vpaddw %ymm3, %ymm1, %ymm1174; AVX2-NEXT: retq175;176; AVX1-LABEL: test_add_v32i16:177; AVX1: # %bb.0:178; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4179; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5180; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6181; AVX1-NEXT: vpaddw %xmm6, %xmm4, %xmm4182; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6183; AVX1-NEXT: vpaddw %xmm6, %xmm5, %xmm5184; AVX1-NEXT: vpaddw %xmm2, %xmm0, %xmm0185; AVX1-NEXT: vpaddw %xmm3, %xmm1, %xmm1186; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0187; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm1, %ymm1188; AVX1-NEXT: retq189 %ret = add <32 x i16> %arg1, %arg2190 ret <32 x i16> %ret191}192 193define <16 x i32> @test_add_v16i32(<16 x i32> %arg1, <16 x i32> %arg2) {194; SKX-LABEL: test_add_v16i32:195; SKX: # %bb.0:196; SKX-NEXT: vpaddd %zmm1, %zmm0, %zmm0197; SKX-NEXT: retq198;199; AVX2-LABEL: test_add_v16i32:200; AVX2: # %bb.0:201; AVX2-NEXT: vpaddd %ymm2, %ymm0, %ymm0202; AVX2-NEXT: vpaddd %ymm3, %ymm1, %ymm1203; AVX2-NEXT: retq204;205; AVX1-LABEL: test_add_v16i32:206; AVX1: # %bb.0:207; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4208; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5209; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6210; AVX1-NEXT: vpaddd %xmm6, %xmm4, %xmm4211; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6212; AVX1-NEXT: vpaddd %xmm6, %xmm5, %xmm5213; AVX1-NEXT: vpaddd %xmm2, %xmm0, %xmm0214; AVX1-NEXT: vpaddd %xmm3, %xmm1, %xmm1215; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0216; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm1, %ymm1217; AVX1-NEXT: retq218 %ret = add <16 x i32> %arg1, %arg2219 ret <16 x i32> %ret220}221 222define <8 x i64> @test_add_v8i64(<8 x i64> %arg1, <8 x i64> %arg2) {223; SKX-LABEL: test_add_v8i64:224; SKX: # %bb.0:225; SKX-NEXT: vpaddq %zmm1, %zmm0, %zmm0226; SKX-NEXT: retq227;228; AVX2-LABEL: test_add_v8i64:229; AVX2: # %bb.0:230; AVX2-NEXT: vpaddq %ymm2, %ymm0, %ymm0231; AVX2-NEXT: vpaddq %ymm3, %ymm1, %ymm1232; AVX2-NEXT: retq233;234; AVX1-LABEL: test_add_v8i64:235; AVX1: # %bb.0:236; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4237; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5238; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6239; AVX1-NEXT: vpaddq %xmm6, %xmm4, %xmm4240; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6241; AVX1-NEXT: vpaddq %xmm6, %xmm5, %xmm5242; AVX1-NEXT: vpaddq %xmm2, %xmm0, %xmm0243; AVX1-NEXT: vpaddq %xmm3, %xmm1, %xmm1244; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0245; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm1, %ymm1246; AVX1-NEXT: retq247 %ret = add <8 x i64> %arg1, %arg2248 ret <8 x i64> %ret249}250 251