[llvm] [X86][CodeGen] Fix crash when commute operands of Instruction for code size (PR #79245)
Shengchen Kan via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 23 19:09:53 PST 2024
https://github.com/KanRobert created https://github.com/llvm/llvm-project/pull/79245
Reported in 134fcc62786d31ab73439201dce2d73808d1785a
>From ad9e2f81a4e44710314ac0e2b39cdc0b4aed0db3 Mon Sep 17 00:00:00 2001
From: Shengchen Kan <shengchen.kan at intel.com>
Date: Wed, 24 Jan 2024 11:01:44 +0800
Subject: [PATCH] [X86][CodeGen] Fix crash when commute operands of Instruction
for code size
Reported in 134fcc62786d31ab73439201dce2d73808d1785a
---
llvm/lib/Target/X86/X86InstrInfo.cpp | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/llvm/lib/Target/X86/X86InstrInfo.cpp b/llvm/lib/Target/X86/X86InstrInfo.cpp
index d6f9aa6d6acec0..6cdfecf1fe4d99 100644
--- a/llvm/lib/Target/X86/X86InstrInfo.cpp
+++ b/llvm/lib/Target/X86/X86InstrInfo.cpp
@@ -2355,29 +2355,30 @@ MachineInstr *X86InstrInfo::commuteInstructionImpl(MachineInstr &MI, bool NewMI,
// If we're optimizing for size, try to use MOVSD/MOVSS.
if (MI.getParent()->getParent()->getFunction().hasOptSize()) {
unsigned Mask;
+ unsigned NewOpc;
switch (Opc) {
default:
llvm_unreachable("Unreachable!");
case X86::BLENDPDrri:
- Opc = X86::MOVSDrr;
+ NewOpc = X86::MOVSDrr;
Mask = 0x03;
break;
case X86::BLENDPSrri:
- Opc = X86::MOVSSrr;
+ NewOpc = X86::MOVSSrr;
Mask = 0x0F;
break;
case X86::VBLENDPDrri:
- Opc = X86::VMOVSDrr;
+ NewOpc = X86::VMOVSDrr;
Mask = 0x03;
break;
case X86::VBLENDPSrri:
- Opc = X86::VMOVSSrr;
+ NewOpc = X86::VMOVSSrr;
Mask = 0x0F;
break;
}
if ((MI.getOperand(3).getImm() ^ Mask) == 1) {
WorkingMI = CloneIfNew(MI);
- WorkingMI->setDesc(get(Opc));
+ WorkingMI->setDesc(get(NewOpc));
WorkingMI->removeOperand(3);
break;
}
More information about the llvm-commits
mailing list