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

via llvm-commits llvm-commits at lists.llvm.org
Sun Feb 8 21:25:20 PST 2026


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

>From 376861c34494746f205a7c2f8b62019d36a4cbb9 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/2] [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 467ac6dee69fcf19b391f3a82a665ac00cc3972d 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/2] 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



More information about the llvm-commits mailing list