[llvm] r295776 - [AArch64, X86] Guard against both instrs being wild cards
Evandro Menezes via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 21 14:16:11 PST 2017
Author: evandro
Date: Tue Feb 21 16:16:11 2017
New Revision: 295776
URL: http://llvm.org/viewvc/llvm-project?rev=295776&view=rev
Log:
[AArch64, X86] Guard against both instrs being wild cards
If both instrs are wild cards, the result can be a crash.
Modified:
llvm/trunk/lib/Target/AArch64/AArch64MacroFusion.cpp
llvm/trunk/lib/Target/X86/X86MacroFusion.cpp
Modified: llvm/trunk/lib/Target/AArch64/AArch64MacroFusion.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64MacroFusion.cpp?rev=295776&r1=295775&r2=295776&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AArch64/AArch64MacroFusion.cpp (original)
+++ llvm/trunk/lib/Target/AArch64/AArch64MacroFusion.cpp Tue Feb 21 16:16:11 2017
@@ -34,12 +34,13 @@ static bool shouldScheduleAdjacent(const
const AArch64Subtarget &ST,
const MachineInstr *First,
const MachineInstr *Second) {
+ assert((First || Second) && "At least one instr must be specified");
unsigned FirstOpcode =
- First ? First->getOpcode()
- : static_cast<unsigned>(AArch64::INSTRUCTION_LIST_END);
+ First ? First->getOpcode()
+ : static_cast<unsigned>(AArch64::INSTRUCTION_LIST_END);
unsigned SecondOpcode =
- Second ? Second->getOpcode()
- : static_cast<unsigned>(AArch64::INSTRUCTION_LIST_END);
+ Second ? Second->getOpcode()
+ : static_cast<unsigned>(AArch64::INSTRUCTION_LIST_END);
if (ST.hasArithmeticBccFusion())
// Fuse CMN, CMP, TST followed by Bcc.
Modified: llvm/trunk/lib/Target/X86/X86MacroFusion.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86MacroFusion.cpp?rev=295776&r1=295775&r2=295776&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86MacroFusion.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86MacroFusion.cpp Tue Feb 21 16:16:11 2017
@@ -44,12 +44,13 @@ static bool shouldScheduleAdjacent(const
FuseInc
} FuseKind;
+ assert((First || Second) && "At least one instr must be specified");
unsigned FirstOpcode = First
- ? First->getOpcode()
- : static_cast<unsigned>(X86::INSTRUCTION_LIST_END);
- unsigned SecondOpcode =
- Second ? Second->getOpcode()
- : static_cast<unsigned>(X86::INSTRUCTION_LIST_END);
+ ? First->getOpcode()
+ : static_cast<unsigned>(X86::INSTRUCTION_LIST_END);
+ unsigned SecondOpcode = Second
+ ? Second->getOpcode()
+ : static_cast<unsigned>(X86::INSTRUCTION_LIST_END);
switch (SecondOpcode) {
default:
@@ -215,7 +216,7 @@ void X86MacroFusion::apply(ScheduleDAGIn
// For now, assume targets can only fuse with the branch.
SUnit &ExitSU = DAG->ExitSU;
MachineInstr *Branch = ExitSU.getInstr();
- if (!shouldScheduleAdjacent(ST, nullptr, Branch))
+ if (!Branch || !shouldScheduleAdjacent(ST, nullptr, Branch))
return;
for (SDep &PredDep : ExitSU.Preds) {
More information about the llvm-commits
mailing list