Skip to content

Commit

Permalink
Revert "[AArch64] Emit FNMADD instead of FNEG(FMADD)"
Browse files Browse the repository at this point in the history
This reverts commit ea228bd.

Cuases a crash on AArch64. Testcase provided at D149260.
  • Loading branch information
m-gupta committed May 7, 2023
1 parent 4948849 commit 4157625
Show file tree
Hide file tree
Showing 3 changed files with 0 additions and 217 deletions.
3 changes: 0 additions & 3 deletions llvm/include/llvm/CodeGen/MachineCombinerPattern.h
Original file line number Diff line number Diff line change
Expand Up @@ -178,9 +178,6 @@ enum class MachineCombinerPattern {

// X86 VNNI
DPWSSD,

FNMADDS,
FNMADDD,
};

} // end namespace llvm
Expand Down
84 changes: 0 additions & 84 deletions llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5409,41 +5409,6 @@ static bool getFMULPatterns(MachineInstr &Root,
return Found;
}

static bool getFNEGPatterns(MachineInstr &Root,
SmallVectorImpl<MachineCombinerPattern> &Patterns) {
unsigned Opc = Root.getOpcode();
MachineBasicBlock &MBB = *Root.getParent();
MachineRegisterInfo &MRI = MBB.getParent()->getRegInfo();
bool Found = false;

auto Match = [&](unsigned Opcode, MachineCombinerPattern Pattern) -> bool {
MachineOperand &MO = Root.getOperand(1);
MachineInstr *MI = MRI.getUniqueVRegDef(MO.getReg());
if ((MI->getOpcode() == Opcode) &&
Root.getFlag(MachineInstr::MIFlag::FmContract) &&
Root.getFlag(MachineInstr::MIFlag::FmNsz) &&
MI->getFlag(MachineInstr::MIFlag::FmContract) &&
MI->getFlag(MachineInstr::MIFlag::FmNsz)) {
Patterns.push_back(Pattern);
return true;
}
return false;
};

switch (Opc) {
default:
return false;
case AArch64::FNEGDr:
Found |= Match(AArch64::FMADDDrrr, MachineCombinerPattern::FNMADDD);
break;
case AArch64::FNEGSr:
Found |= Match(AArch64::FMADDSrrr, MachineCombinerPattern::FNMADDS);
break;
}

return Found;
}

/// Return true when a code sequence can improve throughput. It
/// should be called only for instructions in loops.
/// \param Pattern - combiner pattern
Expand Down Expand Up @@ -5613,8 +5578,6 @@ bool AArch64InstrInfo::getMachineCombinerPatterns(
return true;
if (getFMAPatterns(Root, Patterns))
return true;
if (getFNEGPatterns(Root, Patterns))
return true;

// Other patterns
if (getMiscPatterns(Root, Patterns))
Expand Down Expand Up @@ -5705,39 +5668,6 @@ genFusedMultiply(MachineFunction &MF, MachineRegisterInfo &MRI,
return MUL;
}

static MachineInstr *
genFNegatedMAD(MachineFunction &MF, MachineRegisterInfo &MRI,
const TargetInstrInfo *TII, MachineInstr &Root,
SmallVectorImpl<MachineInstr *> &InsInstrs, unsigned Opc,
const TargetRegisterClass *RC) {
MachineInstr *MAD = MRI.getUniqueVRegDef(Root.getOperand(1).getReg());
Register ResultReg = Root.getOperand(0).getReg();
Register SrcReg0 = MAD->getOperand(1).getReg();
Register SrcReg1 = MAD->getOperand(2).getReg();
Register SrcReg2 = MAD->getOperand(3).getReg();
bool Src0IsKill = MAD->getOperand(1).isKill();
bool Src1IsKill = MAD->getOperand(2).isKill();
bool Src2IsKill = MAD->getOperand(3).isKill();

if (ResultReg.isVirtual())
MRI.constrainRegClass(ResultReg, RC);
if (SrcReg0.isVirtual())
MRI.constrainRegClass(SrcReg0, RC);
if (SrcReg1.isVirtual())
MRI.constrainRegClass(SrcReg1, RC);
if (SrcReg2.isVirtual())
MRI.constrainRegClass(SrcReg2, RC);

MachineInstrBuilder MIB =
BuildMI(MF, MIMetadata(Root), TII->get(Opc), ResultReg)
.addReg(SrcReg0, getKillRegState(Src0IsKill))
.addReg(SrcReg1, getKillRegState(Src1IsKill))
.addReg(SrcReg2, getKillRegState(Src2IsKill));
InsInstrs.push_back(MIB);

return MAD;
}

/// Fold (FMUL x (DUP y lane)) into (FMUL_indexed x y lane)
static MachineInstr *
genIndexedMultiply(MachineInstr &Root,
Expand Down Expand Up @@ -6870,20 +6800,6 @@ void AArch64InstrInfo::genAlternativeCodeSequence(
&AArch64::FPR128_loRegClass, MRI);
break;
}

case MachineCombinerPattern::FNMADDS: {
Opc = AArch64::FNMADDSrrr;
RC = &AArch64::FPR32RegClass;
MUL = genFNegatedMAD(MF, MRI, TII, Root, InsInstrs, Opc, RC);
break;
}
case MachineCombinerPattern::FNMADDD: {
Opc = AArch64::FNMADDDrrr;
RC = &AArch64::FPR64RegClass;
MUL = genFNegatedMAD(MF, MRI, TII, Root, InsInstrs, Opc, RC);
break;
}

} // end switch (Pattern)
// Record MUL and ADD/SUB for deletion
if (MUL)
Expand Down
130 changes: 0 additions & 130 deletions llvm/test/CodeGen/AArch64/aarch64_fnmadd.ll

This file was deleted.

0 comments on commit 4157625

Please sign in to comment.