[llvm] [X86] Rewrite MOVUPD to MOVUPS in X86FixupInstTuning (PR #217676)
Wiktor Ludwichowski via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 24 06:52:08 PDT 2026
https://github.com/AlnandoFeronso updated https://github.com/llvm/llvm-project/pull/217676
>From 11a5d309cea4e8d994e06eb77a0766c71d131c32 Mon Sep 17 00:00:00 2001
From: "Ludwichowski, Wiktor" <wiktor.ludwichowski at intel.com>
Date: Thu, 20 Aug 2026 16:20:56 +0200
Subject: [PATCH 1/2] Add pass processing movupd to movups
---
llvm/lib/Target/X86/X86FixupInstTuning.cpp | 18 ++++++
llvm/test/CodeGen/X86/inst-tuning-movupd.mir | 64 ++++++++++++++++++++
2 files changed, 82 insertions(+)
create mode 100644 llvm/test/CodeGen/X86/inst-tuning-movupd.mir
diff --git a/llvm/lib/Target/X86/X86FixupInstTuning.cpp b/llvm/lib/Target/X86/X86FixupInstTuning.cpp
index 621fd35a03cd5..b21846f5df004 100644
--- a/llvm/lib/Target/X86/X86FixupInstTuning.cpp
+++ b/llvm/lib/Target/X86/X86FixupInstTuning.cpp
@@ -255,6 +255,18 @@ bool X86FixupInstTuningImpl::processInstruction(
return ProcessUNPCKToIntDomain(NewOpc);
};
+ // MOVUPS takes 1 less byte of code size. Only replace when
+ // there is no move domain-delay penalty on the target.
+ auto ProcessMOVUPDToMOVUPS = [&](unsigned NewOpc) -> bool {
+ if (!ST->hasNoDomainDelayMov() ||
+ !NewOpcPreferable(NewOpc, /*ReplaceInTie*/ true))
+ return false;
+ LLVM_DEBUG(dbgs() << "Replacing: " << MI);
+ MI.setDesc(TII->get(NewOpc));
+ LLVM_DEBUG(dbgs() << " With: " << MI);
+ return true;
+ };
+
// If we're permuting the lower halves of the 256-bit registers, use a
// subvector insertion instead.
auto ProcessVPERM2x128ToVINSERT128 = [&](unsigned InsertOpc) -> bool {
@@ -697,6 +709,12 @@ bool X86FixupInstTuningImpl::processInstruction(
return ProcessShiftLeftToAdd(X86::VPADDQZ256rr);
case X86::VPSLLQZri:
return ProcessShiftLeftToAdd(X86::VPADDQZrr);
+ case X86::MOVUPDrr:
+ return ProcessMOVUPDToMOVUPS(X86::MOVUPSrr);
+ case X86::MOVUPDrm:
+ return ProcessMOVUPDToMOVUPS(X86::MOVUPSrm);
+ case X86::MOVUPDmr:
+ return ProcessMOVUPDToMOVUPS(X86::MOVUPSmr);
default:
return false;
diff --git a/llvm/test/CodeGen/X86/inst-tuning-movupd.mir b/llvm/test/CodeGen/X86/inst-tuning-movupd.mir
new file mode 100644
index 0000000000000..916ebb8e94a01
--- /dev/null
+++ b/llvm/test/CodeGen/X86/inst-tuning-movupd.mir
@@ -0,0 +1,64 @@
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6
+# RUN: llc %s -mtriple=x86_64-- -mattr=+no-bypass-delay-mov -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefix=MOV
+# RUN: llc %s -mtriple=x86_64-- -mattr=-no-bypass-delay-mov -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefix=NODELAY
+
+---
+name: movupd_rr
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $xmm0
+ ; MOV-LABEL: name: movupd_rr
+ ; MOV: liveins: $xmm0
+ ; MOV-NEXT: {{ $}}
+ ; MOV-NEXT: renamable $xmm1 = MOVUPSrr killed renamable $xmm0
+ ; MOV-NEXT: RET64 implicit $xmm1
+ ;
+ ; NODELAY-LABEL: name: movupd_rr
+ ; NODELAY: liveins: $xmm0
+ ; NODELAY-NEXT: {{ $}}
+ ; NODELAY-NEXT: renamable $xmm1 = MOVUPDrr killed renamable $xmm0
+ ; NODELAY-NEXT: RET64 implicit $xmm1
+ renamable $xmm1 = MOVUPDrr killed renamable $xmm0
+ RET64 implicit $xmm1
+...
+---
+name: vmovupd_rr
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $xmm0
+ ; MOV-LABEL: name: vmovupd_rr
+ ; MOV: liveins: $xmm0
+ ; MOV-NEXT: {{ $}}
+ ; MOV-NEXT: renamable $xmm1 = VMOVUPDrr killed renamable $xmm0
+ ; MOV-NEXT: RET64 implicit $xmm1
+ ;
+ ; NODELAY-LABEL: name: vmovupd_rr
+ ; NODELAY: liveins: $xmm0
+ ; NODELAY-NEXT: {{ $}}
+ ; NODELAY-NEXT: renamable $xmm1 = VMOVUPDrr killed renamable $xmm0
+ ; NODELAY-NEXT: RET64 implicit $xmm1
+ renamable $xmm1 = VMOVUPDrr killed renamable $xmm0
+ RET64 implicit $xmm1
+...
+---
+name: vmovupd_ymm
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $ymm0
+ ; MOV-LABEL: name: vmovupd_ymm
+ ; MOV: liveins: $ymm0
+ ; MOV-NEXT: {{ $}}
+ ; MOV-NEXT: renamable $ymm1 = VMOVUPDYrr killed renamable $ymm0
+ ; MOV-NEXT: RET64 implicit $ymm1
+ ;
+ ; NODELAY-LABEL: name: vmovupd_ymm
+ ; NODELAY: liveins: $ymm0
+ ; NODELAY-NEXT: {{ $}}
+ ; NODELAY-NEXT: renamable $ymm1 = VMOVUPDYrr killed renamable $ymm0
+ ; NODELAY-NEXT: RET64 implicit $ymm1
+ renamable $ymm1 = VMOVUPDYrr killed renamable $ymm0
+ RET64 implicit $ymm1
+...
>From 199d8b3f7478e93040e2937a4751b935d57b3bb2 Mon Sep 17 00:00:00 2001
From: "Ludwichowski, Wiktor" <wiktor.ludwichowski at intel.com>
Date: Mon, 24 Aug 2026 15:48:35 +0200
Subject: [PATCH 2/2] fiexed tests, added movapd case
---
llvm/lib/Target/X86/X86FixupInstTuning.cpp | 23 ++-
llvm/test/CodeGen/X86/2011-10-21-widen-cmp.ll | 6 +-
llvm/test/CodeGen/X86/break-false-dep.ll | 4 +-
llvm/test/CodeGen/X86/inst-tuning-movpd.mir | 180 ++++++++++++++++++
llvm/test/CodeGen/X86/inst-tuning-movupd.mir | 64 -------
llvm/test/CodeGen/X86/sink-hoist.ll | 4 +-
6 files changed, 202 insertions(+), 79 deletions(-)
create mode 100644 llvm/test/CodeGen/X86/inst-tuning-movpd.mir
delete mode 100644 llvm/test/CodeGen/X86/inst-tuning-movupd.mir
diff --git a/llvm/lib/Target/X86/X86FixupInstTuning.cpp b/llvm/lib/Target/X86/X86FixupInstTuning.cpp
index b21846f5df004..c8b0dbf597223 100644
--- a/llvm/lib/Target/X86/X86FixupInstTuning.cpp
+++ b/llvm/lib/Target/X86/X86FixupInstTuning.cpp
@@ -255,11 +255,12 @@ bool X86FixupInstTuningImpl::processInstruction(
return ProcessUNPCKToIntDomain(NewOpc);
};
- // MOVUPS takes 1 less byte of code size. Only replace when
- // there is no move domain-delay penalty on the target.
- auto ProcessMOVUPDToMOVUPS = [&](unsigned NewOpc) -> bool {
- if (!ST->hasNoDomainDelayMov() ||
- !NewOpcPreferable(NewOpc, /*ReplaceInTie*/ true))
+ // MOVUPS/MOVAPS takes 1 less byte of code size. Only replace when
+ // there is no move domain-delay penalty on the target, or -Oz is set.
+ auto ProcessMOVPDToMOVPS = [&](unsigned NewOpc) -> bool {
+ assert(NewOpcPreferable(NewOpc) &&
+ "MOVUPS/MOVAPS should be preferred over MOVUPD/MOVAPD");
+ if (!ST->hasNoDomainDelayMov() && !MF.getFunction().hasMinSize())
return false;
LLVM_DEBUG(dbgs() << "Replacing: " << MI);
MI.setDesc(TII->get(NewOpc));
@@ -710,11 +711,17 @@ bool X86FixupInstTuningImpl::processInstruction(
case X86::VPSLLQZri:
return ProcessShiftLeftToAdd(X86::VPADDQZrr);
case X86::MOVUPDrr:
- return ProcessMOVUPDToMOVUPS(X86::MOVUPSrr);
+ return ProcessMOVPDToMOVPS(X86::MOVUPSrr);
case X86::MOVUPDrm:
- return ProcessMOVUPDToMOVUPS(X86::MOVUPSrm);
+ return ProcessMOVPDToMOVPS(X86::MOVUPSrm);
case X86::MOVUPDmr:
- return ProcessMOVUPDToMOVUPS(X86::MOVUPSmr);
+ return ProcessMOVPDToMOVPS(X86::MOVUPSmr);
+ case X86::MOVAPDrr:
+ return ProcessMOVPDToMOVPS(X86::MOVAPSrr);
+ case X86::MOVAPDrm:
+ return ProcessMOVPDToMOVPS(X86::MOVAPSrm);
+ case X86::MOVAPDmr:
+ return ProcessMOVPDToMOVPS(X86::MOVAPSmr);
default:
return false;
diff --git a/llvm/test/CodeGen/X86/2011-10-21-widen-cmp.ll b/llvm/test/CodeGen/X86/2011-10-21-widen-cmp.ll
index f3f541af4bd13..87ef44a9408c0 100644
--- a/llvm/test/CodeGen/X86/2011-10-21-widen-cmp.ll
+++ b/llvm/test/CodeGen/X86/2011-10-21-widen-cmp.ll
@@ -23,11 +23,11 @@ entry:
define void @cmp_2_doubles(<2 x double> %a, <2 x double> %b, <2 x double> %c) {
; CHECK-LABEL: cmp_2_doubles:
; CHECK: # %bb.0: # %entry
-; CHECK-NEXT: movapd %xmm0, %xmm3
+; CHECK-NEXT: movaps %xmm0, %xmm3
; CHECK-NEXT: cmpordpd %xmm2, %xmm2
-; CHECK-NEXT: movapd %xmm2, %xmm0
+; CHECK-NEXT: movaps %xmm2, %xmm0
; CHECK-NEXT: blendvpd %xmm0, %xmm3, %xmm1
-; CHECK-NEXT: movapd %xmm1, (%rax)
+; CHECK-NEXT: movaps %xmm1, (%rax)
; CHECK-NEXT: retq
entry:
%0 = fcmp oeq <2 x double> %c, %c
diff --git a/llvm/test/CodeGen/X86/break-false-dep.ll b/llvm/test/CodeGen/X86/break-false-dep.ll
index 6943622fac7f2..38199607ca6fd 100644
--- a/llvm/test/CodeGen/X86/break-false-dep.ll
+++ b/llvm/test/CodeGen/X86/break-false-dep.ll
@@ -1318,7 +1318,7 @@ define dso_local void @loopclearance2(ptr nocapture %y, ptr %x, double %c1, doub
; SSE-LINUX-NEXT: leaq 1(%rax), %r8
; SSE-LINUX-NEXT: xorps %xmm4, %xmm4
; SSE-LINUX-NEXT: cvtsi2sd %r8, %xmm4
-; SSE-LINUX-NEXT: movapd %xmm0, %xmm5
+; SSE-LINUX-NEXT: movaps %xmm0, %xmm5
; SSE-LINUX-NEXT: subsd %xmm4, %xmm5
; SSE-LINUX-NEXT: mulsd %xmm1, %xmm5
; SSE-LINUX-NEXT: leaq -1(%rcx), %r9
@@ -1390,7 +1390,7 @@ define dso_local void @loopclearance2(ptr nocapture %y, ptr %x, double %c1, doub
; SSE-WIN-NEXT: leaq 1(%r8), %r10
; SSE-WIN-NEXT: xorps %xmm4, %xmm4
; SSE-WIN-NEXT: cvtsi2sd %r10, %xmm4
-; SSE-WIN-NEXT: movapd %xmm2, %xmm5
+; SSE-WIN-NEXT: movaps %xmm2, %xmm5
; SSE-WIN-NEXT: subsd %xmm4, %xmm5
; SSE-WIN-NEXT: mulsd %xmm3, %xmm5
; SSE-WIN-NEXT: leaq -1(%r9), %r11
diff --git a/llvm/test/CodeGen/X86/inst-tuning-movpd.mir b/llvm/test/CodeGen/X86/inst-tuning-movpd.mir
new file mode 100644
index 0000000000000..1001d7ebeae5d
--- /dev/null
+++ b/llvm/test/CodeGen/X86/inst-tuning-movpd.mir
@@ -0,0 +1,180 @@
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6
+# RUN: llc %s -mtriple=x86_64-- -mattr=+no-bypass-delay-mov -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefixes=CHECK,NODELAY
+# RUN: llc %s -mtriple=x86_64-- -mattr=-no-bypass-delay-mov -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefixes=CHECK,DELAY
+
+---
+name: movupd_rr
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $xmm0
+ ; NODELAY-LABEL: name: movupd_rr
+ ; NODELAY: liveins: $xmm0
+ ; NODELAY-NEXT: {{ $}}
+ ; NODELAY-NEXT: renamable $xmm1 = MOVUPSrr killed renamable $xmm0
+ ; NODELAY-NEXT: RET64 implicit $xmm1
+ ;
+ ; DELAY-LABEL: name: movupd_rr
+ ; DELAY: liveins: $xmm0
+ ; DELAY-NEXT: {{ $}}
+ ; DELAY-NEXT: renamable $xmm1 = MOVUPDrr killed renamable $xmm0
+ ; DELAY-NEXT: RET64 implicit $xmm1
+ renamable $xmm1 = MOVUPDrr killed renamable $xmm0
+ RET64 implicit $xmm1
+...
+---
+name: movupd_rm
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $rdi
+ ; NODELAY-LABEL: name: movupd_rm
+ ; NODELAY: liveins: $rdi
+ ; NODELAY-NEXT: {{ $}}
+ ; NODELAY-NEXT: renamable $xmm0 = MOVUPSrm killed renamable $rdi, 1, $noreg, 0, $noreg
+ ; NODELAY-NEXT: RET64 implicit $xmm0
+ ;
+ ; DELAY-LABEL: name: movupd_rm
+ ; DELAY: liveins: $rdi
+ ; DELAY-NEXT: {{ $}}
+ ; DELAY-NEXT: renamable $xmm0 = MOVUPDrm killed renamable $rdi, 1, $noreg, 0, $noreg
+ ; DELAY-NEXT: RET64 implicit $xmm0
+ renamable $xmm0 = MOVUPDrm killed renamable $rdi, 1, $noreg, 0, $noreg
+ RET64 implicit $xmm0
+...
+---
+name: movupd_mr
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $rdi, $xmm0
+ ; NODELAY-LABEL: name: movupd_mr
+ ; NODELAY: liveins: $rdi, $xmm0
+ ; NODELAY-NEXT: {{ $}}
+ ; NODELAY-NEXT: MOVUPSmr killed renamable $rdi, 1, $noreg, 0, $noreg, killed renamable $xmm0
+ ; NODELAY-NEXT: RET64
+ ;
+ ; DELAY-LABEL: name: movupd_mr
+ ; DELAY: liveins: $rdi, $xmm0
+ ; DELAY-NEXT: {{ $}}
+ ; DELAY-NEXT: MOVUPDmr killed renamable $rdi, 1, $noreg, 0, $noreg, killed renamable $xmm0
+ ; DELAY-NEXT: RET64
+ MOVUPDmr killed renamable $rdi, 1, $noreg, 0, $noreg, killed renamable $xmm0
+ RET64
+...
+---
+name: movapd_rr
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $xmm0
+ ; NODELAY-LABEL: name: movapd_rr
+ ; NODELAY: liveins: $xmm0
+ ; NODELAY-NEXT: {{ $}}
+ ; NODELAY-NEXT: renamable $xmm1 = MOVAPSrr killed renamable $xmm0
+ ; NODELAY-NEXT: RET64 implicit $xmm1
+ ;
+ ; DELAY-LABEL: name: movapd_rr
+ ; DELAY: liveins: $xmm0
+ ; DELAY-NEXT: {{ $}}
+ ; DELAY-NEXT: renamable $xmm1 = MOVAPDrr killed renamable $xmm0
+ ; DELAY-NEXT: RET64 implicit $xmm1
+ renamable $xmm1 = MOVAPDrr killed renamable $xmm0
+ RET64 implicit $xmm1
+...
+---
+name: movapd_rm
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $rdi
+ ; NODELAY-LABEL: name: movapd_rm
+ ; NODELAY: liveins: $rdi
+ ; NODELAY-NEXT: {{ $}}
+ ; NODELAY-NEXT: renamable $xmm0 = MOVAPSrm killed renamable $rdi, 1, $noreg, 0, $noreg
+ ; NODELAY-NEXT: RET64 implicit $xmm0
+ ;
+ ; DELAY-LABEL: name: movapd_rm
+ ; DELAY: liveins: $rdi
+ ; DELAY-NEXT: {{ $}}
+ ; DELAY-NEXT: renamable $xmm0 = MOVAPDrm killed renamable $rdi, 1, $noreg, 0, $noreg
+ ; DELAY-NEXT: RET64 implicit $xmm0
+ renamable $xmm0 = MOVAPDrm killed renamable $rdi, 1, $noreg, 0, $noreg
+ RET64 implicit $xmm0
+...
+---
+name: movapd_mr
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $rdi, $xmm0
+ ; NODELAY-LABEL: name: movapd_mr
+ ; NODELAY: liveins: $rdi, $xmm0
+ ; NODELAY-NEXT: {{ $}}
+ ; NODELAY-NEXT: MOVAPSmr killed renamable $rdi, 1, $noreg, 0, $noreg, killed renamable $xmm0
+ ; NODELAY-NEXT: RET64
+ ;
+ ; DELAY-LABEL: name: movapd_mr
+ ; DELAY: liveins: $rdi, $xmm0
+ ; DELAY-NEXT: {{ $}}
+ ; DELAY-NEXT: MOVAPDmr killed renamable $rdi, 1, $noreg, 0, $noreg, killed renamable $xmm0
+ ; DELAY-NEXT: RET64
+ MOVAPDmr killed renamable $rdi, 1, $noreg, 0, $noreg, killed renamable $xmm0
+ RET64
+...
+---
+name: vmovupd_rr
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $xmm0
+ ; CHECK-LABEL: name: vmovupd_rr
+ ; CHECK: liveins: $xmm0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: renamable $xmm1 = VMOVUPDrr killed renamable $xmm0
+ ; CHECK-NEXT: RET64 implicit $xmm1
+ renamable $xmm1 = VMOVUPDrr killed renamable $xmm0
+ RET64 implicit $xmm1
+...
+---
+name: vmovupd_ymm
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $ymm0
+ ; CHECK-LABEL: name: vmovupd_ymm
+ ; CHECK: liveins: $ymm0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: renamable $ymm1 = VMOVUPDYrr killed renamable $ymm0
+ ; CHECK-NEXT: RET64 implicit $ymm1
+ renamable $ymm1 = VMOVUPDYrr killed renamable $ymm0
+ RET64 implicit $ymm1
+...
+---
+name: vmovapd_rr
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $xmm0
+ ; CHECK-LABEL: name: vmovapd_rr
+ ; CHECK: liveins: $xmm0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: renamable $xmm1 = VMOVAPDrr killed renamable $xmm0
+ ; CHECK-NEXT: RET64 implicit $xmm1
+ renamable $xmm1 = VMOVAPDrr killed renamable $xmm0
+ RET64 implicit $xmm1
+...
+---
+name: vmovapd_ymm
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $ymm0
+ ; CHECK-LABEL: name: vmovapd_ymm
+ ; CHECK: liveins: $ymm0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: renamable $ymm1 = VMOVAPDYrr killed renamable $ymm0
+ ; CHECK-NEXT: RET64 implicit $ymm1
+ renamable $ymm1 = VMOVAPDYrr killed renamable $ymm0
+ RET64 implicit $ymm1
+...
diff --git a/llvm/test/CodeGen/X86/inst-tuning-movupd.mir b/llvm/test/CodeGen/X86/inst-tuning-movupd.mir
deleted file mode 100644
index 916ebb8e94a01..0000000000000
--- a/llvm/test/CodeGen/X86/inst-tuning-movupd.mir
+++ /dev/null
@@ -1,64 +0,0 @@
-# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6
-# RUN: llc %s -mtriple=x86_64-- -mattr=+no-bypass-delay-mov -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefix=MOV
-# RUN: llc %s -mtriple=x86_64-- -mattr=-no-bypass-delay-mov -run-pass=x86-fixup-inst-tuning -o - | FileCheck %s --check-prefix=NODELAY
-
----
-name: movupd_rr
-tracksRegLiveness: true
-body: |
- bb.0:
- liveins: $xmm0
- ; MOV-LABEL: name: movupd_rr
- ; MOV: liveins: $xmm0
- ; MOV-NEXT: {{ $}}
- ; MOV-NEXT: renamable $xmm1 = MOVUPSrr killed renamable $xmm0
- ; MOV-NEXT: RET64 implicit $xmm1
- ;
- ; NODELAY-LABEL: name: movupd_rr
- ; NODELAY: liveins: $xmm0
- ; NODELAY-NEXT: {{ $}}
- ; NODELAY-NEXT: renamable $xmm1 = MOVUPDrr killed renamable $xmm0
- ; NODELAY-NEXT: RET64 implicit $xmm1
- renamable $xmm1 = MOVUPDrr killed renamable $xmm0
- RET64 implicit $xmm1
-...
----
-name: vmovupd_rr
-tracksRegLiveness: true
-body: |
- bb.0:
- liveins: $xmm0
- ; MOV-LABEL: name: vmovupd_rr
- ; MOV: liveins: $xmm0
- ; MOV-NEXT: {{ $}}
- ; MOV-NEXT: renamable $xmm1 = VMOVUPDrr killed renamable $xmm0
- ; MOV-NEXT: RET64 implicit $xmm1
- ;
- ; NODELAY-LABEL: name: vmovupd_rr
- ; NODELAY: liveins: $xmm0
- ; NODELAY-NEXT: {{ $}}
- ; NODELAY-NEXT: renamable $xmm1 = VMOVUPDrr killed renamable $xmm0
- ; NODELAY-NEXT: RET64 implicit $xmm1
- renamable $xmm1 = VMOVUPDrr killed renamable $xmm0
- RET64 implicit $xmm1
-...
----
-name: vmovupd_ymm
-tracksRegLiveness: true
-body: |
- bb.0:
- liveins: $ymm0
- ; MOV-LABEL: name: vmovupd_ymm
- ; MOV: liveins: $ymm0
- ; MOV-NEXT: {{ $}}
- ; MOV-NEXT: renamable $ymm1 = VMOVUPDYrr killed renamable $ymm0
- ; MOV-NEXT: RET64 implicit $ymm1
- ;
- ; NODELAY-LABEL: name: vmovupd_ymm
- ; NODELAY: liveins: $ymm0
- ; NODELAY-NEXT: {{ $}}
- ; NODELAY-NEXT: renamable $ymm1 = VMOVUPDYrr killed renamable $ymm0
- ; NODELAY-NEXT: RET64 implicit $ymm1
- renamable $ymm1 = VMOVUPDYrr killed renamable $ymm0
- RET64 implicit $ymm1
-...
diff --git a/llvm/test/CodeGen/X86/sink-hoist.ll b/llvm/test/CodeGen/X86/sink-hoist.ll
index a5777ac4a27e8..58323e663b2cb 100644
--- a/llvm/test/CodeGen/X86/sink-hoist.ll
+++ b/llvm/test/CodeGen/X86/sink-hoist.ll
@@ -9,7 +9,7 @@
; CHECK-NEXT: testb $1, %dil
; CHECK-NEXT: jne
; CHECK-NEXT: divsd
-; CHECK-NEXT: movapd
+; CHECK-NEXT: movaps
; CHECK-NEXT: ret
; CHECK: divsd
@@ -28,7 +28,7 @@ define double @foo(double %x, double %y, i1 %c) nounwind {
; CHECK-NEXT: testb $1, %dil
; CHECK-NEXT: je
; CHECK: divsd
-; CHECK: movapd
+; CHECK: movaps
; CHECK: ret
define double @split(double %x, double %y, i1 %c) nounwind {
%a = fdiv double %x, 3.2
More information about the llvm-commits
mailing list