mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-24 17:01:07 +00:00
[Hexagon] Don't form new-value jumps from floating-point instructions
Additionally, verify that the register defined by the producer is a 32-bit register. llvm-svn: 324381
This commit is contained in:
parent
9e916e5e0e
commit
be253e797b
@ -142,6 +142,22 @@ static bool canBeFeederToNewValueJump(const HexagonInstrInfo *QII,
|
||||
if (QII->isSolo(*II))
|
||||
return false;
|
||||
|
||||
if (QII->isFloat(*II))
|
||||
return false;
|
||||
|
||||
// Make sure that the (unique) def operand is a register from IntRegs.
|
||||
bool HadDef = false;
|
||||
for (const MachineOperand &Op : II->operands()) {
|
||||
if (!Op.isReg() || !Op.isDef())
|
||||
continue;
|
||||
if (HadDef)
|
||||
return false;
|
||||
HadDef = true;
|
||||
if (!Hexagon::IntRegsRegClass.contains(Op.getReg()))
|
||||
return false;
|
||||
}
|
||||
assert(HadDef);
|
||||
|
||||
// Make sure there there is no 'def' or 'use' of any of the uses of
|
||||
// feeder insn between it's definition, this MI and jump, jmpInst
|
||||
// skipping compare, cmpInst.
|
||||
|
19
llvm/test/CodeGen/Hexagon/newvaluejump-float.mir
Normal file
19
llvm/test/CodeGen/Hexagon/newvaluejump-float.mir
Normal file
@ -0,0 +1,19 @@
|
||||
# RUN: llc -march=hexagon -run-pass=hexagon-nvj %s -o - | FileCheck %s
|
||||
|
||||
# Check that we don't generate a new-value jump for a floating-point
|
||||
# instruction.
|
||||
# CHECK-NOT: J4_cmpgti_t_jumpnv_t
|
||||
|
||||
---
|
||||
name: fred
|
||||
tracksRegLiveness: true
|
||||
body: |
|
||||
bb.0:
|
||||
liveins: $d0
|
||||
$r0 = F2_conv_df2w_chop $d0, implicit $usr
|
||||
$p0 = C2_cmpgti $r0, 30
|
||||
J2_jumpt $p0, %bb.1, implicit-def $pc
|
||||
bb.1:
|
||||
J2_jumpr $r31, implicit-def $pc
|
||||
...
|
||||
|
Loading…
Reference in New Issue
Block a user