[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