; RUN: llc < %s -march=x86-64 -mattr=+avx2 | FileCheck %s ; CHECK-LABEL: phaddw1: ; CHECK: vphaddw define <16 x i16> @phaddw1(<16 x i16> %x, <16 x i16> %y) { %a = shufflevector <16 x i16> %x, <16 x i16> %y, <16 x i32> %b = shufflevector <16 x i16> %x, <16 x i16> %y, <16 x i32> %r = add <16 x i16> %a, %b ret <16 x i16> %r } ; CHECK-LABEL: phaddw2: ; CHECK: vphaddw define <16 x i16> @phaddw2(<16 x i16> %x, <16 x i16> %y) { %a = shufflevector <16 x i16> %x, <16 x i16> %y, <16 x i32> %b = shufflevector <16 x i16> %y, <16 x i16> %x, <16 x i32> %r = add <16 x i16> %a, %b ret <16 x i16> %r } ; CHECK-LABEL: phaddd1: ; CHECK: vphaddd define <8 x i32> @phaddd1(<8 x i32> %x, <8 x i32> %y) { %a = shufflevector <8 x i32> %x, <8 x i32> %y, <8 x i32> %b = shufflevector <8 x i32> %x, <8 x i32> %y, <8 x i32> %r = add <8 x i32> %a, %b ret <8 x i32> %r } ; CHECK-LABEL: phaddd2: ; CHECK: vphaddd define <8 x i32> @phaddd2(<8 x i32> %x, <8 x i32> %y) { %a = shufflevector <8 x i32> %x, <8 x i32> %y, <8 x i32> %b = shufflevector <8 x i32> %y, <8 x i32> %x, <8 x i32> %r = add <8 x i32> %a, %b ret <8 x i32> %r } ; CHECK-LABEL: phaddd3: ; CHECK: vphaddd define <8 x i32> @phaddd3(<8 x i32> %x) { %a = shufflevector <8 x i32> %x, <8 x i32> undef, <8 x i32> %b = shufflevector <8 x i32> %x, <8 x i32> undef, <8 x i32> %r = add <8 x i32> %a, %b ret <8 x i32> %r } ; CHECK-LABEL: phsubw1: ; CHECK: vphsubw define <16 x i16> @phsubw1(<16 x i16> %x, <16 x i16> %y) { %a = shufflevector <16 x i16> %x, <16 x i16> %y, <16 x i32> %b = shufflevector <16 x i16> %x, <16 x i16> %y, <16 x i32> %r = sub <16 x i16> %a, %b ret <16 x i16> %r } ; CHECK-LABEL: phsubd1: ; CHECK: vphsubd define <8 x i32> @phsubd1(<8 x i32> %x, <8 x i32> %y) { %a = shufflevector <8 x i32> %x, <8 x i32> %y, <8 x i32> %b = shufflevector <8 x i32> %x, <8 x i32> %y, <8 x i32> %r = sub <8 x i32> %a, %b ret <8 x i32> %r } ; CHECK-LABEL: phsubd2: ; CHECK: vphsubd define <8 x i32> @phsubd2(<8 x i32> %x, <8 x i32> %y) { %a = shufflevector <8 x i32> %x, <8 x i32> %y, <8 x i32> %b = shufflevector <8 x i32> %x, <8 x i32> %y, <8 x i32> %r = sub <8 x i32> %a, %b ret <8 x i32> %r }