[llvm] [X86] Add test for VPBLENDW Tuning (PR #179906)

via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 6 00:43:28 PDT 2026


https://github.com/mahesh-attarde updated https://github.com/llvm/llvm-project/pull/179906

>From 92815fbcf190f5d0c6120cc655e39e9be1ae13ce Mon Sep 17 00:00:00 2001
From: mattarde <mattarde at intel.com>
Date: Thu, 5 Feb 2026 02:43:18 -0800
Subject: [PATCH 1/3] [X86] Add test for VBLENDW Tuning

---
 llvm/test/CodeGen/X86/x86-inst-tuning.mir | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
 create mode 100644 llvm/test/CodeGen/X86/x86-inst-tuning.mir

diff --git a/llvm/test/CodeGen/X86/x86-inst-tuning.mir b/llvm/test/CodeGen/X86/x86-inst-tuning.mir
new file mode 100644
index 0000000000000..2079faf714522
--- /dev/null
+++ b/llvm/test/CodeGen/X86/x86-inst-tuning.mir
@@ -0,0 +1,17 @@
+# RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f -run-pass=x86-fixup-inst-tuning %s -o - | FileCheck %s
+
+---
+name:            vblendw_test
+tracksRegLiveness: true
+body:             |
+  bb.0:
+    liveins: $xmm0, $xmm1
+    ; CHECK-LABEL: name: vblendw_test
+    ; CHECK:  renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
+    ; CHECK:  renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
+    ; CHECK:  renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
+    ; CHECK:  RET64 implicit $xmm0
+    renamable $xmm0 = VPBLENDWrri killed renamable $xmm0,  renamable $xmm1, -205
+    renamable $xmm0 = VPBLENDWrri killed renamable $xmm0,  renamable $xmm1, 204
+    renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
+    RET64 implicit $xmm0

>From cadf1837a4e930dd0ae6d392db89ab8c6cc0545b Mon Sep 17 00:00:00 2001
From: mattarde <mattarde at intel.com>
Date: Fri, 6 Feb 2026 00:22:22 -0800
Subject: [PATCH 2/3] update more isa and tests

---
 llvm/test/CodeGen/X86/x86-inst-tuning.mir | 304 +++++++++++++++++++++-
 1 file changed, 298 insertions(+), 6 deletions(-)

diff --git a/llvm/test/CodeGen/X86/x86-inst-tuning.mir b/llvm/test/CodeGen/X86/x86-inst-tuning.mir
index 2079faf714522..c339eee5fc06b 100644
--- a/llvm/test/CodeGen/X86/x86-inst-tuning.mir
+++ b/llvm/test/CodeGen/X86/x86-inst-tuning.mir
@@ -1,4 +1,20 @@
-# RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f -run-pass=x86-fixup-inst-tuning %s -o - | FileCheck %s
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6
+# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avxvnni -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVXVNNI
+# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vnni -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX512VNNI
+# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vnni -mattr=+avx512vl -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX512VNNI
+# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx  -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX
+# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx2  -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX2
+# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle -run-pass=x86-fixup-inst-tuning  -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX2VCLS
+# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-perlane-shuffle -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX2FVS
+# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f  -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX512F
+# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle -run-pass=x86-fixup-inst-tuning  -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX512FVCS
+# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+fast-variable-perlane-shuffle -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX512FVS
+# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle -run-pass=x86-fixup-inst-tuning  -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX512BWFCS
+# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+fast-variable-perlane-shuffle -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX512BWFVS
+# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle -run-pass=x86-fixup-inst-tuning  -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX512BWVL
+# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+fast-variable-perlane-shuffle  -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX512BWVL
+# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vbmi,+avx512vl,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle -run-pass=x86-fixup-inst-tuning  -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX512VBMIVL
+# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vbmi,+avx512vl,+fast-variable-perlane-shuffle  -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX512VBMIVL
 
 ---
 name:            vblendw_test
@@ -6,12 +22,288 @@ tracksRegLiveness: true
 body:             |
   bb.0:
     liveins: $xmm0, $xmm1
-    ; CHECK-LABEL: name: vblendw_test
-    ; CHECK:  renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
-    ; CHECK:  renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
-    ; CHECK:  renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
-    ; CHECK:  RET64 implicit $xmm0
+    ; AVXVNNI-LABEL: name: vblendw_test
+    ; AVXVNNI: liveins: $xmm0, $xmm1
+    ; AVXVNNI-NEXT: {{  $}}
+    ; AVXVNNI-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
+    ; AVXVNNI-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
+    ; AVXVNNI-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
+    ; AVXVNNI-NEXT: RET64 implicit $xmm0
+    ;
+    ; AVX512VNNI-LABEL: name: vblendw_test
+    ; AVX512VNNI: liveins: $xmm0, $xmm1
+    ; AVX512VNNI-NEXT: {{  $}}
+    ; AVX512VNNI-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
+    ; AVX512VNNI-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
+    ; AVX512VNNI-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
+    ; AVX512VNNI-NEXT: RET64 implicit $xmm0
+    ;
+    ; AVX-LABEL: name: vblendw_test
+    ; AVX: liveins: $xmm0, $xmm1
+    ; AVX-NEXT: {{  $}}
+    ; AVX-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, renamable $xmm1, -205
+    ; AVX-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, renamable $xmm1, 204
+    ; AVX-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
+    ; AVX-NEXT: RET64 implicit $xmm0
+    ;
+    ; AVX2-LABEL: name: vblendw_test
+    ; AVX2: liveins: $xmm0, $xmm1
+    ; AVX2-NEXT: {{  $}}
+    ; AVX2-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
+    ; AVX2-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
+    ; AVX2-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
+    ; AVX2-NEXT: RET64 implicit $xmm0
+    ;
+    ; AVX2VCLS-LABEL: name: vblendw_test
+    ; AVX2VCLS: liveins: $xmm0, $xmm1
+    ; AVX2VCLS-NEXT: {{  $}}
+    ; AVX2VCLS-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
+    ; AVX2VCLS-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
+    ; AVX2VCLS-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
+    ; AVX2VCLS-NEXT: RET64 implicit $xmm0
+    ;
+    ; AVX2FVS-LABEL: name: vblendw_test
+    ; AVX2FVS: liveins: $xmm0, $xmm1
+    ; AVX2FVS-NEXT: {{  $}}
+    ; AVX2FVS-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
+    ; AVX2FVS-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
+    ; AVX2FVS-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
+    ; AVX2FVS-NEXT: RET64 implicit $xmm0
+    ;
+    ; AVX512F-LABEL: name: vblendw_test
+    ; AVX512F: liveins: $xmm0, $xmm1
+    ; AVX512F-NEXT: {{  $}}
+    ; AVX512F-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
+    ; AVX512F-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
+    ; AVX512F-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
+    ; AVX512F-NEXT: RET64 implicit $xmm0
+    ;
+    ; AVX512FVCS-LABEL: name: vblendw_test
+    ; AVX512FVCS: liveins: $xmm0, $xmm1
+    ; AVX512FVCS-NEXT: {{  $}}
+    ; AVX512FVCS-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
+    ; AVX512FVCS-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
+    ; AVX512FVCS-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
+    ; AVX512FVCS-NEXT: RET64 implicit $xmm0
+    ;
+    ; AVX512FVS-LABEL: name: vblendw_test
+    ; AVX512FVS: liveins: $xmm0, $xmm1
+    ; AVX512FVS-NEXT: {{  $}}
+    ; AVX512FVS-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
+    ; AVX512FVS-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
+    ; AVX512FVS-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
+    ; AVX512FVS-NEXT: RET64 implicit $xmm0
+    ;
+    ; AVX512BWFCS-LABEL: name: vblendw_test
+    ; AVX512BWFCS: liveins: $xmm0, $xmm1
+    ; AVX512BWFCS-NEXT: {{  $}}
+    ; AVX512BWFCS-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
+    ; AVX512BWFCS-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
+    ; AVX512BWFCS-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
+    ; AVX512BWFCS-NEXT: RET64 implicit $xmm0
+    ;
+    ; AVX512BWFVS-LABEL: name: vblendw_test
+    ; AVX512BWFVS: liveins: $xmm0, $xmm1
+    ; AVX512BWFVS-NEXT: {{  $}}
+    ; AVX512BWFVS-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
+    ; AVX512BWFVS-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
+    ; AVX512BWFVS-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
+    ; AVX512BWFVS-NEXT: RET64 implicit $xmm0
+    ;
+    ; AVX512BWVL-LABEL: name: vblendw_test
+    ; AVX512BWVL: liveins: $xmm0, $xmm1
+    ; AVX512BWVL-NEXT: {{  $}}
+    ; AVX512BWVL-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
+    ; AVX512BWVL-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
+    ; AVX512BWVL-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
+    ; AVX512BWVL-NEXT: RET64 implicit $xmm0
+    ;
+    ; AVX512VBMIVL-LABEL: name: vblendw_test
+    ; AVX512VBMIVL: liveins: $xmm0, $xmm1
+    ; AVX512VBMIVL-NEXT: {{  $}}
+    ; AVX512VBMIVL-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
+    ; AVX512VBMIVL-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
+    ; AVX512VBMIVL-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
+    ; AVX512VBMIVL-NEXT: RET64 implicit $xmm0
     renamable $xmm0 = VPBLENDWrri killed renamable $xmm0,  renamable $xmm1, -205
     renamable $xmm0 = VPBLENDWrri killed renamable $xmm0,  renamable $xmm1, 204
     renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
     RET64 implicit $xmm0
+...
+---
+name:            blend_to_mov_test
+tracksRegLiveness: true
+body:             |
+  bb.0:
+    liveins: $xmm0, $xmm1
+    ; AVX-COMMON-LABEL: name: blend_to_mov_test
+    ; AVX-COMMON: liveins: $xmm0, $xmm1
+    ; AVX-COMMON-NEXT: {{  $}}
+    ; AVX-COMMON-NEXT: $xmm0 = MOVSDrr $xmm0, $xmm1
+    ; AVX-COMMON-NEXT: $xmm0 = VMOVSDrr $xmm0, $xmm1
+    ; AVX-COMMON-NEXT: $xmm0 = MOVSDrr $xmm0, $xmm1
+    ; AVX-COMMON-NEXT: $xmm0 = VMOVSDrr $xmm0, $xmm1
+    ; AVX-COMMON-NEXT: RET64 implicit $xmm0
+    $xmm0 = BLENDPDrri $xmm0, $xmm1, 1
+    $xmm0 = VBLENDPDrri $xmm0, $xmm1, 1
+    $xmm0 = BLENDPSrri $xmm0, $xmm1, 3
+    $xmm0 = VBLENDPSrri $xmm0, $xmm1, 3
+    RET64 implicit $xmm0
+...
+---
+name:            vpermilpd_test
+tracksRegLiveness: true
+body:             |
+  bb.0:
+    liveins: $xmm0, $ymm0, $zmm0
+    ; AVX-COMMON-LABEL: name: vpermilpd_test
+    ; AVX-COMMON: liveins: $xmm0, $ymm0, $zmm0
+    ; AVX-COMMON-NEXT: {{  $}}
+    ; AVX-COMMON-NEXT: $xmm0 = VSHUFPDrri $xmm0, $xmm0, 1
+    ; AVX-COMMON-NEXT: $ymm0 = VSHUFPDYrri $ymm0, $ymm0, 2
+    ; AVX-COMMON-NEXT: $xmm0 = VSHUFPDZ128rri $xmm0, $xmm0, 3
+    ; AVX-COMMON-NEXT: $zmm0 = VSHUFPDZrri $zmm0, $zmm0, 4
+    ; AVX-COMMON-NEXT: RET64 implicit $xmm0
+    $xmm0 = VPERMILPDri $xmm0, 1
+    $ymm0 = VPERMILPDYri $ymm0, 2
+    $xmm0 = VPERMILPDZ128ri $xmm0, 3
+    $zmm0 = VPERMILPDZri $zmm0, 4
+    RET64 implicit $xmm0
+...
+---
+name:            vpermilps_test
+tracksRegLiveness: true
+body:             |
+  bb.0:
+    liveins: $xmm0, $ymm0, $zmm0
+    ; AVX-COMMON-LABEL: name: vpermilps_test
+    ; AVX-COMMON: liveins: $xmm0, $ymm0, $zmm0
+    ; AVX-COMMON-NEXT: {{  $}}
+    ; AVX-COMMON-NEXT: $xmm0 = VSHUFPSrri $xmm0, $xmm0, 1
+    ; AVX-COMMON-NEXT: $ymm0 = VSHUFPSYrri $ymm0, $ymm0, 2
+    ; AVX-COMMON-NEXT: $xmm0 = VSHUFPSZ128rri $xmm0, $xmm0, 3
+    ; AVX-COMMON-NEXT: $zmm0 = VSHUFPSZrri $zmm0, $zmm0, 4
+    ; AVX-COMMON-NEXT: RET64 implicit $xmm0
+    $xmm0 = VPERMILPSri $xmm0, 1
+    $ymm0 = VPERMILPSYri $ymm0, 2
+    $xmm0 = VPERMILPSZ128ri $xmm0, 3
+    $zmm0 = VPERMILPSZri $zmm0, 4
+    RET64 implicit $xmm0
+...
+---
+name:            vpermilps_mem_test
+tracksRegLiveness: true
+body:             |
+  bb.0:
+    liveins: $rdi
+    ; AVX-COMMON-LABEL: name: vpermilps_mem_test
+    ; AVX-COMMON: liveins: $rdi
+    ; AVX-COMMON-NEXT: {{  $}}
+    ; AVX-COMMON-NEXT: $xmm0 = VPERMILPSmi $rdi, 1, $noreg, 0, $noreg, 9
+    ; AVX-COMMON-NEXT: $ymm0 = VPERMILPSYmi $rdi, 1, $noreg, 0, $noreg, 9
+    ; AVX-COMMON-NEXT: $xmm0 = VPERMILPSZ128mi $rdi, 1, $noreg, 0, $noreg, 9
+    ; AVX-COMMON-NEXT: $ymm0 = VPERMILPSZ256mi $rdi, 1, $noreg, 0, $noreg, 9
+    ; AVX-COMMON-NEXT: $zmm0 = VPERMILPSZmi $rdi, 1, $noreg, 0, $noreg, 9
+    ; AVX-COMMON-NEXT: RET64 implicit $xmm0
+    $xmm0 = VPERMILPSmi $rdi, 1, $noreg, 0, $noreg, 9
+    $ymm0 = VPERMILPSYmi $rdi, 1, $noreg, 0, $noreg, 9
+    $xmm0 = VPERMILPSZ128mi $rdi, 1, $noreg, 0, $noreg, 9
+    $ymm0 = VPERMILPSZ256mi $rdi, 1, $noreg, 0, $noreg, 9
+    $zmm0 = VPERMILPSZmi $rdi, 1, $noreg, 0, $noreg, 9
+    RET64 implicit $xmm0
+...
+---
+name:            vpermq_insert_test
+tracksRegLiveness: true
+body:             |
+  bb.0:
+    liveins: $ymm0
+    ; AVX-COMMON-LABEL: name: vpermq_insert_test
+    ; AVX-COMMON: liveins: $ymm0
+    ; AVX-COMMON-NEXT: {{  $}}
+    ; AVX-COMMON-NEXT: $ymm0 = VPERMQYri $ymm0, 68
+    ; AVX-COMMON-NEXT: $ymm0 = VPERMPDYri $ymm0, 68
+    ; AVX-COMMON-NEXT: RET64 implicit $ymm0
+    $ymm0 = VPERMQYri $ymm0, 68
+    $ymm0 = VPERMPDYri $ymm0, 68
+    RET64 implicit $ymm0
+...
+---
+name:            unpckpd_test
+tracksRegLiveness: true
+body:             |
+  bb.0:
+    liveins: $xmm0, $xmm1, $rdi
+    ; AVX-COMMON-LABEL: name: unpckpd_test
+    ; AVX-COMMON: liveins: $xmm0, $xmm1, $rdi
+    ; AVX-COMMON-NEXT: {{  $}}
+    ; AVX-COMMON-NEXT: $xmm0 = MOVLHPSrr $xmm0, $xmm1
+    ; AVX-COMMON-NEXT: $xmm0 = UNPCKLPDrr $xmm0, $xmm1
+    ; AVX-COMMON-NEXT: $xmm0 = UNPCKHPDrr $xmm0, $xmm1
+    ; AVX-COMMON-NEXT: $xmm0 = VUNPCKLPDrr $xmm0, $xmm1
+    ; AVX-COMMON-NEXT: $xmm0 = VUNPCKHPDrr $xmm0, $xmm1
+    ; AVX-COMMON-NEXT: $xmm0 = VUNPCKLPDrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    ; AVX-COMMON-NEXT: $xmm0 = VUNPCKHPDrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    ; AVX-COMMON-NEXT: RET64 implicit $xmm0
+    $xmm0 = MOVLHPSrr $xmm0, $xmm1
+    $xmm0 = UNPCKLPDrr $xmm0, $xmm1
+    $xmm0 = UNPCKHPDrr $xmm0, $xmm1
+    $xmm0 = VUNPCKLPDrr $xmm0, $xmm1
+    $xmm0 = VUNPCKHPDrr $xmm0, $xmm1
+    $xmm0 = VUNPCKLPDrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    $xmm0 = VUNPCKHPDrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    RET64 implicit $xmm0
+...
+---
+name:            unpckps_test
+tracksRegLiveness: true
+body:             |
+  bb.0:
+    liveins: $xmm0, $xmm1, $rdi
+    ; AVX-COMMON-LABEL: name: unpckps_test
+    ; AVX-COMMON: liveins: $xmm0, $xmm1, $rdi
+    ; AVX-COMMON-NEXT: {{  $}}
+    ; AVX-COMMON-NEXT: $xmm0 = UNPCKLPSrr $xmm0, $xmm1
+    ; AVX-COMMON-NEXT: $xmm0 = UNPCKHPSrr $xmm0, $xmm1
+    ; AVX-COMMON-NEXT: $xmm0 = VUNPCKLPSrr $xmm0, $xmm1
+    ; AVX-COMMON-NEXT: $xmm0 = VUNPCKHPSrr $xmm0, $xmm1
+    ; AVX-COMMON-NEXT: $xmm0 = VUNPCKLPSrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    ; AVX-COMMON-NEXT: $xmm0 = VUNPCKHPSrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    ; AVX-COMMON-NEXT: RET64 implicit $xmm0
+    $xmm0 = UNPCKLPSrr $xmm0, $xmm1
+    $xmm0 = UNPCKHPSrr $xmm0, $xmm1
+    $xmm0 = VUNPCKLPSrr $xmm0, $xmm1
+    $xmm0 = VUNPCKHPSrr $xmm0, $xmm1
+    $xmm0 = VUNPCKLPSrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    $xmm0 = VUNPCKHPSrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    RET64 implicit $xmm0
+...
+---
+name:            shift_to_add_test
+tracksRegLiveness: true
+body:             |
+  bb.0:
+    liveins: $xmm0, $ymm0
+    ; AVX-COMMON-LABEL: name: shift_to_add_test
+    ; AVX-COMMON: liveins: $xmm0, $ymm0
+    ; AVX-COMMON-NEXT: {{  $}}
+    ; AVX-COMMON-NEXT: $xmm0 = PADDWrr $xmm0, $xmm0
+    ; AVX-COMMON-NEXT: $xmm0 = PADDDrr $xmm0, $xmm0
+    ; AVX-COMMON-NEXT: $xmm0 = PADDQrr $xmm0, $xmm0
+    ; AVX-COMMON-NEXT: $xmm0 = VPADDWrr $xmm0, $xmm0
+    ; AVX-COMMON-NEXT: $xmm0 = VPADDDrr $xmm0, $xmm0
+    ; AVX-COMMON-NEXT: $xmm0 = VPADDQrr $xmm0, $xmm0
+    ; AVX-COMMON-NEXT: $ymm0 = VPADDWYrr $ymm0, $ymm0
+    ; AVX-COMMON-NEXT: $ymm0 = VPADDDYrr $ymm0, $ymm0
+    ; AVX-COMMON-NEXT: $ymm0 = VPADDQYrr $ymm0, $ymm0
+    ; AVX-COMMON-NEXT: RET64 implicit $xmm0
+    $xmm0 = PSLLWri $xmm0, 1
+    $xmm0 = PSLLDri $xmm0, 1
+    $xmm0 = PSLLQri $xmm0, 1
+    $xmm0 = VPSLLWri $xmm0, 1
+    $xmm0 = VPSLLDri $xmm0, 1
+    $xmm0 = VPSLLQri $xmm0, 1
+    $ymm0 = VPSLLWYri $ymm0, 1
+    $ymm0 = VPSLLDYri $ymm0, 1
+    $ymm0 = VPSLLQYri $ymm0, 1
+    RET64 implicit $xmm0

>From 9630cd46e50261eae5c5755299f835478d45b972 Mon Sep 17 00:00:00 2001
From: mattarde <mattarde at intel.com>
Date: Mon, 6 Jul 2026 00:41:37 -0700
Subject: [PATCH 3/3] address review comments

---
 llvm/test/CodeGen/X86/x86-inst-tuning.mir | 640 +++++++++++++++-------
 1 file changed, 448 insertions(+), 192 deletions(-)

diff --git a/llvm/test/CodeGen/X86/x86-inst-tuning.mir b/llvm/test/CodeGen/X86/x86-inst-tuning.mir
index c339eee5fc06b..e902d1f6ef704 100644
--- a/llvm/test/CodeGen/X86/x86-inst-tuning.mir
+++ b/llvm/test/CodeGen/X86/x86-inst-tuning.mir
@@ -1,20 +1,16 @@
 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6
-# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avxvnni -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVXVNNI
-# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vnni -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX512VNNI
-# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vnni -mattr=+avx512vl -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX512VNNI
-# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx  -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX
-# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx2  -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX2
-# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle -run-pass=x86-fixup-inst-tuning  -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX2VCLS
-# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-perlane-shuffle -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX2FVS
-# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f  -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX512F
-# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle -run-pass=x86-fixup-inst-tuning  -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX512FVCS
-# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+fast-variable-perlane-shuffle -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX512FVS
-# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle -run-pass=x86-fixup-inst-tuning  -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX512BWFCS
-# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+fast-variable-perlane-shuffle -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX512BWFVS
-# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle -run-pass=x86-fixup-inst-tuning  -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX512BWVL
-# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+fast-variable-perlane-shuffle  -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX512BWVL
-# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vbmi,+avx512vl,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle -run-pass=x86-fixup-inst-tuning  -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX512VBMIVL
-# RUN: llc %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vbmi,+avx512vl,+fast-variable-perlane-shuffle  -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefixes=AVX-COMMON,AVX512VBMIVL
+# RUN: llc %s -mtriple=x86_64-- -mcpu=sandybridge -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefix=SNB
+# RUN: llc %s -mtriple=x86_64-- -mcpu=haswell -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefix=HSW
+# RUN: llc %s -mtriple=x86_64-- -mcpu=broadwell -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefix=HSW
+# RUN: llc %s -mtriple=x86_64-- -mcpu=skylake -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefix=HSW
+# RUN: llc %s -mtriple=x86_64-- -mcpu=skylake-avx512 -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefix=HSW
+# RUN: llc %s -mtriple=x86_64-- -mcpu=cascadelake -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefix=HSW
+# RUN: llc %s -mtriple=x86_64-- -mcpu=icelake-server -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefix=ADL
+# RUN: llc %s -mtriple=x86_64-- -mcpu=alderlake -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefix=ADL
+# RUN: llc %s -mtriple=x86_64-- -mcpu=znver1 -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefix=ZN1
+# RUN: llc %s -mtriple=x86_64-- -mcpu=znver2 -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefix=ZN1
+# RUN: llc %s -mtriple=x86_64-- -mcpu=znver3 -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefix=ZN3
+# RUN: llc %s -mtriple=x86_64-- -mcpu=znver4 -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefix=ZN3
 
 ---
 name:            vblendw_test
@@ -22,109 +18,45 @@ tracksRegLiveness: true
 body:             |
   bb.0:
     liveins: $xmm0, $xmm1
-    ; AVXVNNI-LABEL: name: vblendw_test
-    ; AVXVNNI: liveins: $xmm0, $xmm1
-    ; AVXVNNI-NEXT: {{  $}}
-    ; AVXVNNI-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
-    ; AVXVNNI-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
-    ; AVXVNNI-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
-    ; AVXVNNI-NEXT: RET64 implicit $xmm0
-    ;
-    ; AVX512VNNI-LABEL: name: vblendw_test
-    ; AVX512VNNI: liveins: $xmm0, $xmm1
-    ; AVX512VNNI-NEXT: {{  $}}
-    ; AVX512VNNI-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
-    ; AVX512VNNI-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
-    ; AVX512VNNI-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
-    ; AVX512VNNI-NEXT: RET64 implicit $xmm0
-    ;
-    ; AVX-LABEL: name: vblendw_test
-    ; AVX: liveins: $xmm0, $xmm1
-    ; AVX-NEXT: {{  $}}
-    ; AVX-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, renamable $xmm1, -205
-    ; AVX-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, renamable $xmm1, 204
-    ; AVX-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
-    ; AVX-NEXT: RET64 implicit $xmm0
-    ;
-    ; AVX2-LABEL: name: vblendw_test
-    ; AVX2: liveins: $xmm0, $xmm1
-    ; AVX2-NEXT: {{  $}}
-    ; AVX2-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
-    ; AVX2-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
-    ; AVX2-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
-    ; AVX2-NEXT: RET64 implicit $xmm0
-    ;
-    ; AVX2VCLS-LABEL: name: vblendw_test
-    ; AVX2VCLS: liveins: $xmm0, $xmm1
-    ; AVX2VCLS-NEXT: {{  $}}
-    ; AVX2VCLS-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
-    ; AVX2VCLS-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
-    ; AVX2VCLS-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
-    ; AVX2VCLS-NEXT: RET64 implicit $xmm0
-    ;
-    ; AVX2FVS-LABEL: name: vblendw_test
-    ; AVX2FVS: liveins: $xmm0, $xmm1
-    ; AVX2FVS-NEXT: {{  $}}
-    ; AVX2FVS-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
-    ; AVX2FVS-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
-    ; AVX2FVS-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
-    ; AVX2FVS-NEXT: RET64 implicit $xmm0
-    ;
-    ; AVX512F-LABEL: name: vblendw_test
-    ; AVX512F: liveins: $xmm0, $xmm1
-    ; AVX512F-NEXT: {{  $}}
-    ; AVX512F-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
-    ; AVX512F-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
-    ; AVX512F-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
-    ; AVX512F-NEXT: RET64 implicit $xmm0
-    ;
-    ; AVX512FVCS-LABEL: name: vblendw_test
-    ; AVX512FVCS: liveins: $xmm0, $xmm1
-    ; AVX512FVCS-NEXT: {{  $}}
-    ; AVX512FVCS-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
-    ; AVX512FVCS-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
-    ; AVX512FVCS-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
-    ; AVX512FVCS-NEXT: RET64 implicit $xmm0
-    ;
-    ; AVX512FVS-LABEL: name: vblendw_test
-    ; AVX512FVS: liveins: $xmm0, $xmm1
-    ; AVX512FVS-NEXT: {{  $}}
-    ; AVX512FVS-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
-    ; AVX512FVS-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
-    ; AVX512FVS-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
-    ; AVX512FVS-NEXT: RET64 implicit $xmm0
-    ;
-    ; AVX512BWFCS-LABEL: name: vblendw_test
-    ; AVX512BWFCS: liveins: $xmm0, $xmm1
-    ; AVX512BWFCS-NEXT: {{  $}}
-    ; AVX512BWFCS-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
-    ; AVX512BWFCS-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
-    ; AVX512BWFCS-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
-    ; AVX512BWFCS-NEXT: RET64 implicit $xmm0
-    ;
-    ; AVX512BWFVS-LABEL: name: vblendw_test
-    ; AVX512BWFVS: liveins: $xmm0, $xmm1
-    ; AVX512BWFVS-NEXT: {{  $}}
-    ; AVX512BWFVS-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
-    ; AVX512BWFVS-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
-    ; AVX512BWFVS-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
-    ; AVX512BWFVS-NEXT: RET64 implicit $xmm0
-    ;
-    ; AVX512BWVL-LABEL: name: vblendw_test
-    ; AVX512BWVL: liveins: $xmm0, $xmm1
-    ; AVX512BWVL-NEXT: {{  $}}
-    ; AVX512BWVL-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
-    ; AVX512BWVL-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
-    ; AVX512BWVL-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
-    ; AVX512BWVL-NEXT: RET64 implicit $xmm0
-    ;
-    ; AVX512VBMIVL-LABEL: name: vblendw_test
-    ; AVX512VBMIVL: liveins: $xmm0, $xmm1
-    ; AVX512VBMIVL-NEXT: {{  $}}
-    ; AVX512VBMIVL-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
-    ; AVX512VBMIVL-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
-    ; AVX512VBMIVL-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
-    ; AVX512VBMIVL-NEXT: RET64 implicit $xmm0
+    ; SNB-LABEL: name: vblendw_test
+    ; SNB: liveins: $xmm0, $xmm1
+    ; SNB-NEXT: {{  $}}
+    ; SNB-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, renamable $xmm1, -205
+    ; SNB-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, renamable $xmm1, 204
+    ; SNB-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
+    ; SNB-NEXT: RET64 implicit $xmm0
+    ;
+    ; HSW-LABEL: name: vblendw_test
+    ; HSW: liveins: $xmm0, $xmm1
+    ; HSW-NEXT: {{  $}}
+    ; HSW-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
+    ; HSW-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
+    ; HSW-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
+    ; HSW-NEXT: RET64 implicit $xmm0
+    ;
+    ; ADL-LABEL: name: vblendw_test
+    ; ADL: liveins: $xmm0, $xmm1
+    ; ADL-NEXT: {{  $}}
+    ; ADL-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
+    ; ADL-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
+    ; ADL-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
+    ; ADL-NEXT: RET64 implicit $xmm0
+    ;
+    ; ZN1-LABEL: name: vblendw_test
+    ; ZN1: liveins: $xmm0, $xmm1
+    ; ZN1-NEXT: {{  $}}
+    ; ZN1-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, renamable $xmm1, -205
+    ; ZN1-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, renamable $xmm1, 204
+    ; ZN1-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
+    ; ZN1-NEXT: RET64 implicit $xmm0
+    ;
+    ; ZN3-LABEL: name: vblendw_test
+    ; ZN3: liveins: $xmm0, $xmm1
+    ; ZN3-NEXT: {{  $}}
+    ; ZN3-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 5
+    ; ZN3-NEXT: renamable $xmm0 = VPBLENDDrri killed renamable $xmm0, renamable $xmm1, 10
+    ; ZN3-NEXT: renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
+    ; ZN3-NEXT: RET64 implicit $xmm0
     renamable $xmm0 = VPBLENDWrri killed renamable $xmm0,  renamable $xmm1, -205
     renamable $xmm0 = VPBLENDWrri killed renamable $xmm0,  renamable $xmm1, 204
     renamable $xmm0 = VPBLENDWrri killed renamable $xmm0, killed renamable $xmm1, -86
@@ -136,14 +68,50 @@ tracksRegLiveness: true
 body:             |
   bb.0:
     liveins: $xmm0, $xmm1
-    ; AVX-COMMON-LABEL: name: blend_to_mov_test
-    ; AVX-COMMON: liveins: $xmm0, $xmm1
-    ; AVX-COMMON-NEXT: {{  $}}
-    ; AVX-COMMON-NEXT: $xmm0 = MOVSDrr $xmm0, $xmm1
-    ; AVX-COMMON-NEXT: $xmm0 = VMOVSDrr $xmm0, $xmm1
-    ; AVX-COMMON-NEXT: $xmm0 = MOVSDrr $xmm0, $xmm1
-    ; AVX-COMMON-NEXT: $xmm0 = VMOVSDrr $xmm0, $xmm1
-    ; AVX-COMMON-NEXT: RET64 implicit $xmm0
+    ; SNB-LABEL: name: blend_to_mov_test
+    ; SNB: liveins: $xmm0, $xmm1
+    ; SNB-NEXT: {{  $}}
+    ; SNB-NEXT: $xmm0 = BLENDPDrri $xmm0, $xmm1, 1
+    ; SNB-NEXT: $xmm0 = VBLENDPDrri $xmm0, $xmm1, 1
+    ; SNB-NEXT: $xmm0 = BLENDPSrri $xmm0, $xmm1, 3
+    ; SNB-NEXT: $xmm0 = VBLENDPSrri $xmm0, $xmm1, 3
+    ; SNB-NEXT: RET64 implicit $xmm0
+    ;
+    ; HSW-LABEL: name: blend_to_mov_test
+    ; HSW: liveins: $xmm0, $xmm1
+    ; HSW-NEXT: {{  $}}
+    ; HSW-NEXT: $xmm0 = BLENDPDrri $xmm0, $xmm1, 1
+    ; HSW-NEXT: $xmm0 = VBLENDPDrri $xmm0, $xmm1, 1
+    ; HSW-NEXT: $xmm0 = BLENDPSrri $xmm0, $xmm1, 3
+    ; HSW-NEXT: $xmm0 = VBLENDPSrri $xmm0, $xmm1, 3
+    ; HSW-NEXT: RET64 implicit $xmm0
+    ;
+    ; ADL-LABEL: name: blend_to_mov_test
+    ; ADL: liveins: $xmm0, $xmm1
+    ; ADL-NEXT: {{  $}}
+    ; ADL-NEXT: $xmm0 = MOVSDrr $xmm0, $xmm1
+    ; ADL-NEXT: $xmm0 = VMOVSDrr $xmm0, $xmm1
+    ; ADL-NEXT: $xmm0 = MOVSDrr $xmm0, $xmm1
+    ; ADL-NEXT: $xmm0 = VMOVSDrr $xmm0, $xmm1
+    ; ADL-NEXT: RET64 implicit $xmm0
+    ;
+    ; ZN1-LABEL: name: blend_to_mov_test
+    ; ZN1: liveins: $xmm0, $xmm1
+    ; ZN1-NEXT: {{  $}}
+    ; ZN1-NEXT: $xmm0 = MOVSDrr $xmm0, $xmm1
+    ; ZN1-NEXT: $xmm0 = VMOVSDrr $xmm0, $xmm1
+    ; ZN1-NEXT: $xmm0 = MOVSDrr $xmm0, $xmm1
+    ; ZN1-NEXT: $xmm0 = VMOVSDrr $xmm0, $xmm1
+    ; ZN1-NEXT: RET64 implicit $xmm0
+    ;
+    ; ZN3-LABEL: name: blend_to_mov_test
+    ; ZN3: liveins: $xmm0, $xmm1
+    ; ZN3-NEXT: {{  $}}
+    ; ZN3-NEXT: $xmm0 = MOVSDrr $xmm0, $xmm1
+    ; ZN3-NEXT: $xmm0 = VMOVSDrr $xmm0, $xmm1
+    ; ZN3-NEXT: $xmm0 = MOVSDrr $xmm0, $xmm1
+    ; ZN3-NEXT: $xmm0 = VMOVSDrr $xmm0, $xmm1
+    ; ZN3-NEXT: RET64 implicit $xmm0
     $xmm0 = BLENDPDrri $xmm0, $xmm1, 1
     $xmm0 = VBLENDPDrri $xmm0, $xmm1, 1
     $xmm0 = BLENDPSrri $xmm0, $xmm1, 3
@@ -156,14 +124,50 @@ tracksRegLiveness: true
 body:             |
   bb.0:
     liveins: $xmm0, $ymm0, $zmm0
-    ; AVX-COMMON-LABEL: name: vpermilpd_test
-    ; AVX-COMMON: liveins: $xmm0, $ymm0, $zmm0
-    ; AVX-COMMON-NEXT: {{  $}}
-    ; AVX-COMMON-NEXT: $xmm0 = VSHUFPDrri $xmm0, $xmm0, 1
-    ; AVX-COMMON-NEXT: $ymm0 = VSHUFPDYrri $ymm0, $ymm0, 2
-    ; AVX-COMMON-NEXT: $xmm0 = VSHUFPDZ128rri $xmm0, $xmm0, 3
-    ; AVX-COMMON-NEXT: $zmm0 = VSHUFPDZrri $zmm0, $zmm0, 4
-    ; AVX-COMMON-NEXT: RET64 implicit $xmm0
+    ; SNB-LABEL: name: vpermilpd_test
+    ; SNB: liveins: $xmm0, $ymm0, $zmm0
+    ; SNB-NEXT: {{  $}}
+    ; SNB-NEXT: $xmm0 = VSHUFPDrri $xmm0, $xmm0, 1
+    ; SNB-NEXT: $ymm0 = VSHUFPDYrri $ymm0, $ymm0, 2
+    ; SNB-NEXT: $xmm0 = VSHUFPDZ128rri $xmm0, $xmm0, 3
+    ; SNB-NEXT: $zmm0 = VSHUFPDZrri $zmm0, $zmm0, 4
+    ; SNB-NEXT: RET64 implicit $xmm0
+    ;
+    ; HSW-LABEL: name: vpermilpd_test
+    ; HSW: liveins: $xmm0, $ymm0, $zmm0
+    ; HSW-NEXT: {{  $}}
+    ; HSW-NEXT: $xmm0 = VSHUFPDrri $xmm0, $xmm0, 1
+    ; HSW-NEXT: $ymm0 = VSHUFPDYrri $ymm0, $ymm0, 2
+    ; HSW-NEXT: $xmm0 = VSHUFPDZ128rri $xmm0, $xmm0, 3
+    ; HSW-NEXT: $zmm0 = VSHUFPDZrri $zmm0, $zmm0, 4
+    ; HSW-NEXT: RET64 implicit $xmm0
+    ;
+    ; ADL-LABEL: name: vpermilpd_test
+    ; ADL: liveins: $xmm0, $ymm0, $zmm0
+    ; ADL-NEXT: {{  $}}
+    ; ADL-NEXT: $xmm0 = VSHUFPDrri $xmm0, $xmm0, 1
+    ; ADL-NEXT: $ymm0 = VSHUFPDYrri $ymm0, $ymm0, 2
+    ; ADL-NEXT: $xmm0 = VSHUFPDZ128rri $xmm0, $xmm0, 3
+    ; ADL-NEXT: $zmm0 = VSHUFPDZrri $zmm0, $zmm0, 4
+    ; ADL-NEXT: RET64 implicit $xmm0
+    ;
+    ; ZN1-LABEL: name: vpermilpd_test
+    ; ZN1: liveins: $xmm0, $ymm0, $zmm0
+    ; ZN1-NEXT: {{  $}}
+    ; ZN1-NEXT: $xmm0 = VSHUFPDrri $xmm0, $xmm0, 1
+    ; ZN1-NEXT: $ymm0 = VSHUFPDYrri $ymm0, $ymm0, 2
+    ; ZN1-NEXT: $xmm0 = VSHUFPDZ128rri $xmm0, $xmm0, 3
+    ; ZN1-NEXT: $zmm0 = VSHUFPDZrri $zmm0, $zmm0, 4
+    ; ZN1-NEXT: RET64 implicit $xmm0
+    ;
+    ; ZN3-LABEL: name: vpermilpd_test
+    ; ZN3: liveins: $xmm0, $ymm0, $zmm0
+    ; ZN3-NEXT: {{  $}}
+    ; ZN3-NEXT: $xmm0 = VSHUFPDrri $xmm0, $xmm0, 1
+    ; ZN3-NEXT: $ymm0 = VSHUFPDYrri $ymm0, $ymm0, 2
+    ; ZN3-NEXT: $xmm0 = VSHUFPDZ128rri $xmm0, $xmm0, 3
+    ; ZN3-NEXT: $zmm0 = VSHUFPDZrri $zmm0, $zmm0, 4
+    ; ZN3-NEXT: RET64 implicit $xmm0
     $xmm0 = VPERMILPDri $xmm0, 1
     $ymm0 = VPERMILPDYri $ymm0, 2
     $xmm0 = VPERMILPDZ128ri $xmm0, 3
@@ -176,14 +180,50 @@ tracksRegLiveness: true
 body:             |
   bb.0:
     liveins: $xmm0, $ymm0, $zmm0
-    ; AVX-COMMON-LABEL: name: vpermilps_test
-    ; AVX-COMMON: liveins: $xmm0, $ymm0, $zmm0
-    ; AVX-COMMON-NEXT: {{  $}}
-    ; AVX-COMMON-NEXT: $xmm0 = VSHUFPSrri $xmm0, $xmm0, 1
-    ; AVX-COMMON-NEXT: $ymm0 = VSHUFPSYrri $ymm0, $ymm0, 2
-    ; AVX-COMMON-NEXT: $xmm0 = VSHUFPSZ128rri $xmm0, $xmm0, 3
-    ; AVX-COMMON-NEXT: $zmm0 = VSHUFPSZrri $zmm0, $zmm0, 4
-    ; AVX-COMMON-NEXT: RET64 implicit $xmm0
+    ; SNB-LABEL: name: vpermilps_test
+    ; SNB: liveins: $xmm0, $ymm0, $zmm0
+    ; SNB-NEXT: {{  $}}
+    ; SNB-NEXT: $xmm0 = VSHUFPSrri $xmm0, $xmm0, 1
+    ; SNB-NEXT: $ymm0 = VSHUFPSYrri $ymm0, $ymm0, 2
+    ; SNB-NEXT: $xmm0 = VSHUFPSZ128rri $xmm0, $xmm0, 3
+    ; SNB-NEXT: $zmm0 = VSHUFPSZrri $zmm0, $zmm0, 4
+    ; SNB-NEXT: RET64 implicit $xmm0
+    ;
+    ; HSW-LABEL: name: vpermilps_test
+    ; HSW: liveins: $xmm0, $ymm0, $zmm0
+    ; HSW-NEXT: {{  $}}
+    ; HSW-NEXT: $xmm0 = VSHUFPSrri $xmm0, $xmm0, 1
+    ; HSW-NEXT: $ymm0 = VSHUFPSYrri $ymm0, $ymm0, 2
+    ; HSW-NEXT: $xmm0 = VSHUFPSZ128rri $xmm0, $xmm0, 3
+    ; HSW-NEXT: $zmm0 = VSHUFPSZrri $zmm0, $zmm0, 4
+    ; HSW-NEXT: RET64 implicit $xmm0
+    ;
+    ; ADL-LABEL: name: vpermilps_test
+    ; ADL: liveins: $xmm0, $ymm0, $zmm0
+    ; ADL-NEXT: {{  $}}
+    ; ADL-NEXT: $xmm0 = VSHUFPSrri $xmm0, $xmm0, 1
+    ; ADL-NEXT: $ymm0 = VSHUFPSYrri $ymm0, $ymm0, 2
+    ; ADL-NEXT: $xmm0 = VSHUFPSZ128rri $xmm0, $xmm0, 3
+    ; ADL-NEXT: $zmm0 = VSHUFPSZrri $zmm0, $zmm0, 4
+    ; ADL-NEXT: RET64 implicit $xmm0
+    ;
+    ; ZN1-LABEL: name: vpermilps_test
+    ; ZN1: liveins: $xmm0, $ymm0, $zmm0
+    ; ZN1-NEXT: {{  $}}
+    ; ZN1-NEXT: $xmm0 = VSHUFPSrri $xmm0, $xmm0, 1
+    ; ZN1-NEXT: $ymm0 = VSHUFPSYrri $ymm0, $ymm0, 2
+    ; ZN1-NEXT: $xmm0 = VSHUFPSZ128rri $xmm0, $xmm0, 3
+    ; ZN1-NEXT: $zmm0 = VSHUFPSZrri $zmm0, $zmm0, 4
+    ; ZN1-NEXT: RET64 implicit $xmm0
+    ;
+    ; ZN3-LABEL: name: vpermilps_test
+    ; ZN3: liveins: $xmm0, $ymm0, $zmm0
+    ; ZN3-NEXT: {{  $}}
+    ; ZN3-NEXT: $xmm0 = VSHUFPSrri $xmm0, $xmm0, 1
+    ; ZN3-NEXT: $ymm0 = VSHUFPSYrri $ymm0, $ymm0, 2
+    ; ZN3-NEXT: $xmm0 = VSHUFPSZ128rri $xmm0, $xmm0, 3
+    ; ZN3-NEXT: $zmm0 = VSHUFPSZrri $zmm0, $zmm0, 4
+    ; ZN3-NEXT: RET64 implicit $xmm0
     $xmm0 = VPERMILPSri $xmm0, 1
     $ymm0 = VPERMILPSYri $ymm0, 2
     $xmm0 = VPERMILPSZ128ri $xmm0, 3
@@ -196,15 +236,55 @@ tracksRegLiveness: true
 body:             |
   bb.0:
     liveins: $rdi
-    ; AVX-COMMON-LABEL: name: vpermilps_mem_test
-    ; AVX-COMMON: liveins: $rdi
-    ; AVX-COMMON-NEXT: {{  $}}
-    ; AVX-COMMON-NEXT: $xmm0 = VPERMILPSmi $rdi, 1, $noreg, 0, $noreg, 9
-    ; AVX-COMMON-NEXT: $ymm0 = VPERMILPSYmi $rdi, 1, $noreg, 0, $noreg, 9
-    ; AVX-COMMON-NEXT: $xmm0 = VPERMILPSZ128mi $rdi, 1, $noreg, 0, $noreg, 9
-    ; AVX-COMMON-NEXT: $ymm0 = VPERMILPSZ256mi $rdi, 1, $noreg, 0, $noreg, 9
-    ; AVX-COMMON-NEXT: $zmm0 = VPERMILPSZmi $rdi, 1, $noreg, 0, $noreg, 9
-    ; AVX-COMMON-NEXT: RET64 implicit $xmm0
+    ; SNB-LABEL: name: vpermilps_mem_test
+    ; SNB: liveins: $rdi
+    ; SNB-NEXT: {{  $}}
+    ; SNB-NEXT: $xmm0 = VPERMILPSmi $rdi, 1, $noreg, 0, $noreg, 9
+    ; SNB-NEXT: $ymm0 = VPERMILPSYmi $rdi, 1, $noreg, 0, $noreg, 9
+    ; SNB-NEXT: $xmm0 = VPERMILPSZ128mi $rdi, 1, $noreg, 0, $noreg, 9
+    ; SNB-NEXT: $ymm0 = VPERMILPSZ256mi $rdi, 1, $noreg, 0, $noreg, 9
+    ; SNB-NEXT: $zmm0 = VPERMILPSZmi $rdi, 1, $noreg, 0, $noreg, 9
+    ; SNB-NEXT: RET64 implicit $xmm0
+    ;
+    ; HSW-LABEL: name: vpermilps_mem_test
+    ; HSW: liveins: $rdi
+    ; HSW-NEXT: {{  $}}
+    ; HSW-NEXT: $xmm0 = VPERMILPSmi $rdi, 1, $noreg, 0, $noreg, 9
+    ; HSW-NEXT: $ymm0 = VPERMILPSYmi $rdi, 1, $noreg, 0, $noreg, 9
+    ; HSW-NEXT: $xmm0 = VPERMILPSZ128mi $rdi, 1, $noreg, 0, $noreg, 9
+    ; HSW-NEXT: $ymm0 = VPERMILPSZ256mi $rdi, 1, $noreg, 0, $noreg, 9
+    ; HSW-NEXT: $zmm0 = VPERMILPSZmi $rdi, 1, $noreg, 0, $noreg, 9
+    ; HSW-NEXT: RET64 implicit $xmm0
+    ;
+    ; ADL-LABEL: name: vpermilps_mem_test
+    ; ADL: liveins: $rdi
+    ; ADL-NEXT: {{  $}}
+    ; ADL-NEXT: $xmm0 = VPSHUFDmi $rdi, 1, $noreg, 0, $noreg, 9
+    ; ADL-NEXT: $ymm0 = VPSHUFDYmi $rdi, 1, $noreg, 0, $noreg, 9
+    ; ADL-NEXT: $xmm0 = VPSHUFDZ128mi $rdi, 1, $noreg, 0, $noreg, 9
+    ; ADL-NEXT: $ymm0 = VPSHUFDZ256mi $rdi, 1, $noreg, 0, $noreg, 9
+    ; ADL-NEXT: $zmm0 = VPERMILPSZmi $rdi, 1, $noreg, 0, $noreg, 9
+    ; ADL-NEXT: RET64 implicit $xmm0
+    ;
+    ; ZN1-LABEL: name: vpermilps_mem_test
+    ; ZN1: liveins: $rdi
+    ; ZN1-NEXT: {{  $}}
+    ; ZN1-NEXT: $xmm0 = VPERMILPSmi $rdi, 1, $noreg, 0, $noreg, 9
+    ; ZN1-NEXT: $ymm0 = VPERMILPSYmi $rdi, 1, $noreg, 0, $noreg, 9
+    ; ZN1-NEXT: $xmm0 = VPERMILPSZ128mi $rdi, 1, $noreg, 0, $noreg, 9
+    ; ZN1-NEXT: $ymm0 = VPERMILPSZ256mi $rdi, 1, $noreg, 0, $noreg, 9
+    ; ZN1-NEXT: $zmm0 = VPERMILPSZmi $rdi, 1, $noreg, 0, $noreg, 9
+    ; ZN1-NEXT: RET64 implicit $xmm0
+    ;
+    ; ZN3-LABEL: name: vpermilps_mem_test
+    ; ZN3: liveins: $rdi
+    ; ZN3-NEXT: {{  $}}
+    ; ZN3-NEXT: $xmm0 = VPERMILPSmi $rdi, 1, $noreg, 0, $noreg, 9
+    ; ZN3-NEXT: $ymm0 = VPERMILPSYmi $rdi, 1, $noreg, 0, $noreg, 9
+    ; ZN3-NEXT: $xmm0 = VPERMILPSZ128mi $rdi, 1, $noreg, 0, $noreg, 9
+    ; ZN3-NEXT: $ymm0 = VPERMILPSZ256mi $rdi, 1, $noreg, 0, $noreg, 9
+    ; ZN3-NEXT: $zmm0 = VPERMILPSZmi $rdi, 1, $noreg, 0, $noreg, 9
+    ; ZN3-NEXT: RET64 implicit $xmm0
     $xmm0 = VPERMILPSmi $rdi, 1, $noreg, 0, $noreg, 9
     $ymm0 = VPERMILPSYmi $rdi, 1, $noreg, 0, $noreg, 9
     $xmm0 = VPERMILPSZ128mi $rdi, 1, $noreg, 0, $noreg, 9
@@ -218,12 +298,40 @@ tracksRegLiveness: true
 body:             |
   bb.0:
     liveins: $ymm0
-    ; AVX-COMMON-LABEL: name: vpermq_insert_test
-    ; AVX-COMMON: liveins: $ymm0
-    ; AVX-COMMON-NEXT: {{  $}}
-    ; AVX-COMMON-NEXT: $ymm0 = VPERMQYri $ymm0, 68
-    ; AVX-COMMON-NEXT: $ymm0 = VPERMPDYri $ymm0, 68
-    ; AVX-COMMON-NEXT: RET64 implicit $ymm0
+    ; SNB-LABEL: name: vpermq_insert_test
+    ; SNB: liveins: $ymm0
+    ; SNB-NEXT: {{  $}}
+    ; SNB-NEXT: $ymm0 = VPERMQYri $ymm0, 68
+    ; SNB-NEXT: $ymm0 = VPERMPDYri $ymm0, 68
+    ; SNB-NEXT: RET64 implicit $ymm0
+    ;
+    ; HSW-LABEL: name: vpermq_insert_test
+    ; HSW: liveins: $ymm0
+    ; HSW-NEXT: {{  $}}
+    ; HSW-NEXT: $ymm0 = VPERMQYri $ymm0, 68
+    ; HSW-NEXT: $ymm0 = VPERMPDYri $ymm0, 68
+    ; HSW-NEXT: RET64 implicit $ymm0
+    ;
+    ; ADL-LABEL: name: vpermq_insert_test
+    ; ADL: liveins: $ymm0
+    ; ADL-NEXT: {{  $}}
+    ; ADL-NEXT: $ymm0 = VPERMQYri $ymm0, 68
+    ; ADL-NEXT: $ymm0 = VPERMPDYri $ymm0, 68
+    ; ADL-NEXT: RET64 implicit $ymm0
+    ;
+    ; ZN1-LABEL: name: vpermq_insert_test
+    ; ZN1: liveins: $ymm0
+    ; ZN1-NEXT: {{  $}}
+    ; ZN1-NEXT: $ymm0 = VINSERTI128rri $ymm0, $xmm0, 1
+    ; ZN1-NEXT: $ymm0 = VINSERTF128rri $ymm0, $xmm0, 1
+    ; ZN1-NEXT: RET64 implicit $ymm0
+    ;
+    ; ZN3-LABEL: name: vpermq_insert_test
+    ; ZN3: liveins: $ymm0
+    ; ZN3-NEXT: {{  $}}
+    ; ZN3-NEXT: $ymm0 = VINSERTI128rri $ymm0, $xmm0, 1
+    ; ZN3-NEXT: $ymm0 = VINSERTF128rri $ymm0, $xmm0, 1
+    ; ZN3-NEXT: RET64 implicit $ymm0
     $ymm0 = VPERMQYri $ymm0, 68
     $ymm0 = VPERMPDYri $ymm0, 68
     RET64 implicit $ymm0
@@ -234,17 +342,65 @@ tracksRegLiveness: true
 body:             |
   bb.0:
     liveins: $xmm0, $xmm1, $rdi
-    ; AVX-COMMON-LABEL: name: unpckpd_test
-    ; AVX-COMMON: liveins: $xmm0, $xmm1, $rdi
-    ; AVX-COMMON-NEXT: {{  $}}
-    ; AVX-COMMON-NEXT: $xmm0 = MOVLHPSrr $xmm0, $xmm1
-    ; AVX-COMMON-NEXT: $xmm0 = UNPCKLPDrr $xmm0, $xmm1
-    ; AVX-COMMON-NEXT: $xmm0 = UNPCKHPDrr $xmm0, $xmm1
-    ; AVX-COMMON-NEXT: $xmm0 = VUNPCKLPDrr $xmm0, $xmm1
-    ; AVX-COMMON-NEXT: $xmm0 = VUNPCKHPDrr $xmm0, $xmm1
-    ; AVX-COMMON-NEXT: $xmm0 = VUNPCKLPDrm $xmm0, $rdi, 1, $noreg, 0, $noreg
-    ; AVX-COMMON-NEXT: $xmm0 = VUNPCKHPDrm $xmm0, $rdi, 1, $noreg, 0, $noreg
-    ; AVX-COMMON-NEXT: RET64 implicit $xmm0
+    ; SNB-LABEL: name: unpckpd_test
+    ; SNB: liveins: $xmm0, $xmm1, $rdi
+    ; SNB-NEXT: {{  $}}
+    ; SNB-NEXT: $xmm0 = MOVLHPSrr $xmm0, $xmm1
+    ; SNB-NEXT: $xmm0 = UNPCKLPDrr $xmm0, $xmm1
+    ; SNB-NEXT: $xmm0 = UNPCKHPDrr $xmm0, $xmm1
+    ; SNB-NEXT: $xmm0 = VUNPCKLPDrr $xmm0, $xmm1
+    ; SNB-NEXT: $xmm0 = VUNPCKHPDrr $xmm0, $xmm1
+    ; SNB-NEXT: $xmm0 = VUNPCKLPDrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    ; SNB-NEXT: $xmm0 = VUNPCKHPDrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    ; SNB-NEXT: RET64 implicit $xmm0
+    ;
+    ; HSW-LABEL: name: unpckpd_test
+    ; HSW: liveins: $xmm0, $xmm1, $rdi
+    ; HSW-NEXT: {{  $}}
+    ; HSW-NEXT: $xmm0 = MOVLHPSrr $xmm0, $xmm1
+    ; HSW-NEXT: $xmm0 = UNPCKLPDrr $xmm0, $xmm1
+    ; HSW-NEXT: $xmm0 = UNPCKHPDrr $xmm0, $xmm1
+    ; HSW-NEXT: $xmm0 = VUNPCKLPDrr $xmm0, $xmm1
+    ; HSW-NEXT: $xmm0 = VUNPCKHPDrr $xmm0, $xmm1
+    ; HSW-NEXT: $xmm0 = VUNPCKLPDrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    ; HSW-NEXT: $xmm0 = VUNPCKHPDrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    ; HSW-NEXT: RET64 implicit $xmm0
+    ;
+    ; ADL-LABEL: name: unpckpd_test
+    ; ADL: liveins: $xmm0, $xmm1, $rdi
+    ; ADL-NEXT: {{  $}}
+    ; ADL-NEXT: $xmm0 = PUNPCKLQDQrr $xmm0, $xmm1
+    ; ADL-NEXT: $xmm0 = PUNPCKLQDQrr $xmm0, $xmm1
+    ; ADL-NEXT: $xmm0 = PUNPCKHQDQrr $xmm0, $xmm1
+    ; ADL-NEXT: $xmm0 = VPUNPCKLQDQrr $xmm0, $xmm1
+    ; ADL-NEXT: $xmm0 = VPUNPCKHQDQrr $xmm0, $xmm1
+    ; ADL-NEXT: $xmm0 = VPUNPCKLQDQrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    ; ADL-NEXT: $xmm0 = VPUNPCKHQDQrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    ; ADL-NEXT: RET64 implicit $xmm0
+    ;
+    ; ZN1-LABEL: name: unpckpd_test
+    ; ZN1: liveins: $xmm0, $xmm1, $rdi
+    ; ZN1-NEXT: {{  $}}
+    ; ZN1-NEXT: $xmm0 = MOVLHPSrr $xmm0, $xmm1
+    ; ZN1-NEXT: $xmm0 = UNPCKLPDrr $xmm0, $xmm1
+    ; ZN1-NEXT: $xmm0 = UNPCKHPDrr $xmm0, $xmm1
+    ; ZN1-NEXT: $xmm0 = VUNPCKLPDrr $xmm0, $xmm1
+    ; ZN1-NEXT: $xmm0 = VUNPCKHPDrr $xmm0, $xmm1
+    ; ZN1-NEXT: $xmm0 = VUNPCKLPDrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    ; ZN1-NEXT: $xmm0 = VUNPCKHPDrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    ; ZN1-NEXT: RET64 implicit $xmm0
+    ;
+    ; ZN3-LABEL: name: unpckpd_test
+    ; ZN3: liveins: $xmm0, $xmm1, $rdi
+    ; ZN3-NEXT: {{  $}}
+    ; ZN3-NEXT: $xmm0 = MOVLHPSrr $xmm0, $xmm1
+    ; ZN3-NEXT: $xmm0 = UNPCKLPDrr $xmm0, $xmm1
+    ; ZN3-NEXT: $xmm0 = UNPCKHPDrr $xmm0, $xmm1
+    ; ZN3-NEXT: $xmm0 = VUNPCKLPDrr $xmm0, $xmm1
+    ; ZN3-NEXT: $xmm0 = VUNPCKHPDrr $xmm0, $xmm1
+    ; ZN3-NEXT: $xmm0 = VUNPCKLPDrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    ; ZN3-NEXT: $xmm0 = VUNPCKHPDrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    ; ZN3-NEXT: RET64 implicit $xmm0
     $xmm0 = MOVLHPSrr $xmm0, $xmm1
     $xmm0 = UNPCKLPDrr $xmm0, $xmm1
     $xmm0 = UNPCKHPDrr $xmm0, $xmm1
@@ -260,16 +416,60 @@ tracksRegLiveness: true
 body:             |
   bb.0:
     liveins: $xmm0, $xmm1, $rdi
-    ; AVX-COMMON-LABEL: name: unpckps_test
-    ; AVX-COMMON: liveins: $xmm0, $xmm1, $rdi
-    ; AVX-COMMON-NEXT: {{  $}}
-    ; AVX-COMMON-NEXT: $xmm0 = UNPCKLPSrr $xmm0, $xmm1
-    ; AVX-COMMON-NEXT: $xmm0 = UNPCKHPSrr $xmm0, $xmm1
-    ; AVX-COMMON-NEXT: $xmm0 = VUNPCKLPSrr $xmm0, $xmm1
-    ; AVX-COMMON-NEXT: $xmm0 = VUNPCKHPSrr $xmm0, $xmm1
-    ; AVX-COMMON-NEXT: $xmm0 = VUNPCKLPSrm $xmm0, $rdi, 1, $noreg, 0, $noreg
-    ; AVX-COMMON-NEXT: $xmm0 = VUNPCKHPSrm $xmm0, $rdi, 1, $noreg, 0, $noreg
-    ; AVX-COMMON-NEXT: RET64 implicit $xmm0
+    ; SNB-LABEL: name: unpckps_test
+    ; SNB: liveins: $xmm0, $xmm1, $rdi
+    ; SNB-NEXT: {{  $}}
+    ; SNB-NEXT: $xmm0 = UNPCKLPSrr $xmm0, $xmm1
+    ; SNB-NEXT: $xmm0 = UNPCKHPSrr $xmm0, $xmm1
+    ; SNB-NEXT: $xmm0 = VUNPCKLPSrr $xmm0, $xmm1
+    ; SNB-NEXT: $xmm0 = VUNPCKHPSrr $xmm0, $xmm1
+    ; SNB-NEXT: $xmm0 = VUNPCKLPSrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    ; SNB-NEXT: $xmm0 = VUNPCKHPSrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    ; SNB-NEXT: RET64 implicit $xmm0
+    ;
+    ; HSW-LABEL: name: unpckps_test
+    ; HSW: liveins: $xmm0, $xmm1, $rdi
+    ; HSW-NEXT: {{  $}}
+    ; HSW-NEXT: $xmm0 = UNPCKLPSrr $xmm0, $xmm1
+    ; HSW-NEXT: $xmm0 = UNPCKHPSrr $xmm0, $xmm1
+    ; HSW-NEXT: $xmm0 = VUNPCKLPSrr $xmm0, $xmm1
+    ; HSW-NEXT: $xmm0 = VUNPCKHPSrr $xmm0, $xmm1
+    ; HSW-NEXT: $xmm0 = VUNPCKLPSrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    ; HSW-NEXT: $xmm0 = VUNPCKHPSrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    ; HSW-NEXT: RET64 implicit $xmm0
+    ;
+    ; ADL-LABEL: name: unpckps_test
+    ; ADL: liveins: $xmm0, $xmm1, $rdi
+    ; ADL-NEXT: {{  $}}
+    ; ADL-NEXT: $xmm0 = PUNPCKLDQrr $xmm0, $xmm1
+    ; ADL-NEXT: $xmm0 = PUNPCKHDQrr $xmm0, $xmm1
+    ; ADL-NEXT: $xmm0 = VPUNPCKLDQrr $xmm0, $xmm1
+    ; ADL-NEXT: $xmm0 = VPUNPCKHDQrr $xmm0, $xmm1
+    ; ADL-NEXT: $xmm0 = VPUNPCKLDQrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    ; ADL-NEXT: $xmm0 = VPUNPCKHDQrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    ; ADL-NEXT: RET64 implicit $xmm0
+    ;
+    ; ZN1-LABEL: name: unpckps_test
+    ; ZN1: liveins: $xmm0, $xmm1, $rdi
+    ; ZN1-NEXT: {{  $}}
+    ; ZN1-NEXT: $xmm0 = UNPCKLPSrr $xmm0, $xmm1
+    ; ZN1-NEXT: $xmm0 = UNPCKHPSrr $xmm0, $xmm1
+    ; ZN1-NEXT: $xmm0 = VUNPCKLPSrr $xmm0, $xmm1
+    ; ZN1-NEXT: $xmm0 = VUNPCKHPSrr $xmm0, $xmm1
+    ; ZN1-NEXT: $xmm0 = VUNPCKLPSrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    ; ZN1-NEXT: $xmm0 = VUNPCKHPSrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    ; ZN1-NEXT: RET64 implicit $xmm0
+    ;
+    ; ZN3-LABEL: name: unpckps_test
+    ; ZN3: liveins: $xmm0, $xmm1, $rdi
+    ; ZN3-NEXT: {{  $}}
+    ; ZN3-NEXT: $xmm0 = UNPCKLPSrr $xmm0, $xmm1
+    ; ZN3-NEXT: $xmm0 = UNPCKHPSrr $xmm0, $xmm1
+    ; ZN3-NEXT: $xmm0 = VUNPCKLPSrr $xmm0, $xmm1
+    ; ZN3-NEXT: $xmm0 = VUNPCKHPSrr $xmm0, $xmm1
+    ; ZN3-NEXT: $xmm0 = VUNPCKLPSrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    ; ZN3-NEXT: $xmm0 = VUNPCKHPSrm $xmm0, $rdi, 1, $noreg, 0, $noreg
+    ; ZN3-NEXT: RET64 implicit $xmm0
     $xmm0 = UNPCKLPSrr $xmm0, $xmm1
     $xmm0 = UNPCKHPSrr $xmm0, $xmm1
     $xmm0 = VUNPCKLPSrr $xmm0, $xmm1
@@ -284,19 +484,75 @@ tracksRegLiveness: true
 body:             |
   bb.0:
     liveins: $xmm0, $ymm0
-    ; AVX-COMMON-LABEL: name: shift_to_add_test
-    ; AVX-COMMON: liveins: $xmm0, $ymm0
-    ; AVX-COMMON-NEXT: {{  $}}
-    ; AVX-COMMON-NEXT: $xmm0 = PADDWrr $xmm0, $xmm0
-    ; AVX-COMMON-NEXT: $xmm0 = PADDDrr $xmm0, $xmm0
-    ; AVX-COMMON-NEXT: $xmm0 = PADDQrr $xmm0, $xmm0
-    ; AVX-COMMON-NEXT: $xmm0 = VPADDWrr $xmm0, $xmm0
-    ; AVX-COMMON-NEXT: $xmm0 = VPADDDrr $xmm0, $xmm0
-    ; AVX-COMMON-NEXT: $xmm0 = VPADDQrr $xmm0, $xmm0
-    ; AVX-COMMON-NEXT: $ymm0 = VPADDWYrr $ymm0, $ymm0
-    ; AVX-COMMON-NEXT: $ymm0 = VPADDDYrr $ymm0, $ymm0
-    ; AVX-COMMON-NEXT: $ymm0 = VPADDQYrr $ymm0, $ymm0
-    ; AVX-COMMON-NEXT: RET64 implicit $xmm0
+    ; SNB-LABEL: name: shift_to_add_test
+    ; SNB: liveins: $xmm0, $ymm0
+    ; SNB-NEXT: {{  $}}
+    ; SNB-NEXT: $xmm0 = PADDWrr $xmm0, $xmm0
+    ; SNB-NEXT: $xmm0 = PADDDrr $xmm0, $xmm0
+    ; SNB-NEXT: $xmm0 = PADDQrr $xmm0, $xmm0
+    ; SNB-NEXT: $xmm0 = VPADDWrr $xmm0, $xmm0
+    ; SNB-NEXT: $xmm0 = VPADDDrr $xmm0, $xmm0
+    ; SNB-NEXT: $xmm0 = VPADDQrr $xmm0, $xmm0
+    ; SNB-NEXT: $ymm0 = VPADDWYrr $ymm0, $ymm0
+    ; SNB-NEXT: $ymm0 = VPADDDYrr $ymm0, $ymm0
+    ; SNB-NEXT: $ymm0 = VPADDQYrr $ymm0, $ymm0
+    ; SNB-NEXT: RET64 implicit $xmm0
+    ;
+    ; HSW-LABEL: name: shift_to_add_test
+    ; HSW: liveins: $xmm0, $ymm0
+    ; HSW-NEXT: {{  $}}
+    ; HSW-NEXT: $xmm0 = PADDWrr $xmm0, $xmm0
+    ; HSW-NEXT: $xmm0 = PADDDrr $xmm0, $xmm0
+    ; HSW-NEXT: $xmm0 = PADDQrr $xmm0, $xmm0
+    ; HSW-NEXT: $xmm0 = VPADDWrr $xmm0, $xmm0
+    ; HSW-NEXT: $xmm0 = VPADDDrr $xmm0, $xmm0
+    ; HSW-NEXT: $xmm0 = VPADDQrr $xmm0, $xmm0
+    ; HSW-NEXT: $ymm0 = VPADDWYrr $ymm0, $ymm0
+    ; HSW-NEXT: $ymm0 = VPADDDYrr $ymm0, $ymm0
+    ; HSW-NEXT: $ymm0 = VPADDQYrr $ymm0, $ymm0
+    ; HSW-NEXT: RET64 implicit $xmm0
+    ;
+    ; ADL-LABEL: name: shift_to_add_test
+    ; ADL: liveins: $xmm0, $ymm0
+    ; ADL-NEXT: {{  $}}
+    ; ADL-NEXT: $xmm0 = PADDWrr $xmm0, $xmm0
+    ; ADL-NEXT: $xmm0 = PADDDrr $xmm0, $xmm0
+    ; ADL-NEXT: $xmm0 = PADDQrr $xmm0, $xmm0
+    ; ADL-NEXT: $xmm0 = VPADDWrr $xmm0, $xmm0
+    ; ADL-NEXT: $xmm0 = VPADDDrr $xmm0, $xmm0
+    ; ADL-NEXT: $xmm0 = VPADDQrr $xmm0, $xmm0
+    ; ADL-NEXT: $ymm0 = VPADDWYrr $ymm0, $ymm0
+    ; ADL-NEXT: $ymm0 = VPADDDYrr $ymm0, $ymm0
+    ; ADL-NEXT: $ymm0 = VPADDQYrr $ymm0, $ymm0
+    ; ADL-NEXT: RET64 implicit $xmm0
+    ;
+    ; ZN1-LABEL: name: shift_to_add_test
+    ; ZN1: liveins: $xmm0, $ymm0
+    ; ZN1-NEXT: {{  $}}
+    ; ZN1-NEXT: $xmm0 = PADDWrr $xmm0, $xmm0
+    ; ZN1-NEXT: $xmm0 = PADDDrr $xmm0, $xmm0
+    ; ZN1-NEXT: $xmm0 = PADDQrr $xmm0, $xmm0
+    ; ZN1-NEXT: $xmm0 = VPADDWrr $xmm0, $xmm0
+    ; ZN1-NEXT: $xmm0 = VPADDDrr $xmm0, $xmm0
+    ; ZN1-NEXT: $xmm0 = VPADDQrr $xmm0, $xmm0
+    ; ZN1-NEXT: $ymm0 = VPADDWYrr $ymm0, $ymm0
+    ; ZN1-NEXT: $ymm0 = VPADDDYrr $ymm0, $ymm0
+    ; ZN1-NEXT: $ymm0 = VPADDQYrr $ymm0, $ymm0
+    ; ZN1-NEXT: RET64 implicit $xmm0
+    ;
+    ; ZN3-LABEL: name: shift_to_add_test
+    ; ZN3: liveins: $xmm0, $ymm0
+    ; ZN3-NEXT: {{  $}}
+    ; ZN3-NEXT: $xmm0 = PADDWrr $xmm0, $xmm0
+    ; ZN3-NEXT: $xmm0 = PADDDrr $xmm0, $xmm0
+    ; ZN3-NEXT: $xmm0 = PADDQrr $xmm0, $xmm0
+    ; ZN3-NEXT: $xmm0 = VPADDWrr $xmm0, $xmm0
+    ; ZN3-NEXT: $xmm0 = VPADDDrr $xmm0, $xmm0
+    ; ZN3-NEXT: $xmm0 = VPADDQrr $xmm0, $xmm0
+    ; ZN3-NEXT: $ymm0 = VPADDWYrr $ymm0, $ymm0
+    ; ZN3-NEXT: $ymm0 = VPADDDYrr $ymm0, $ymm0
+    ; ZN3-NEXT: $ymm0 = VPADDQYrr $ymm0, $ymm0
+    ; ZN3-NEXT: RET64 implicit $xmm0
     $xmm0 = PSLLWri $xmm0, 1
     $xmm0 = PSLLDri $xmm0, 1
     $xmm0 = PSLLQri $xmm0, 1



More information about the llvm-commits mailing list