aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib
diff options
context:
space:
mode:
authorXiaodong Liu <liuxiaodong@loongson.cn>2022-12-03 11:00:18 +0800
committerXiaodong Liu <liuxiaodong@loongson.cn>2022-12-03 11:01:12 +0800
commitd62480c1995b32eea8b9ed5a92829ee5615c4750 (patch)
tree07a145d7c60658350168ce854ed6120bef9ed4da /llvm/lib
parentf64d4a26cee0030e4dd70ef74683254ec23fca4c (diff)
downloadllvm-d62480c1995b32eea8b9ed5a92829ee5615c4750.zip
llvm-d62480c1995b32eea8b9ed5a92829ee5615c4750.tar.gz
llvm-d62480c1995b32eea8b9ed5a92829ee5615c4750.tar.bz2
[LoongArch] Use tablegen size for getInstSizeInBytes
Correct the pseudo atomic instruction size for branch relaxation and branch folding passes. Inspired by D118175, D118009 and D117970. Depends on D138481 Reviewed By: SixWeining, gonglingqin, xen0n Differential Revision: https://reviews.llvm.org/D138469
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/LoongArch/LoongArchInstrInfo.cpp5
-rw-r--r--llvm/lib/Target/LoongArch/LoongArchInstrInfo.td6
2 files changed, 10 insertions, 1 deletions
diff --git a/llvm/lib/Target/LoongArch/LoongArchInstrInfo.cpp b/llvm/lib/Target/LoongArch/LoongArchInstrInfo.cpp
index 58669f1..6b017c8 100644
--- a/llvm/lib/Target/LoongArch/LoongArchInstrInfo.cpp
+++ b/llvm/lib/Target/LoongArch/LoongArchInstrInfo.cpp
@@ -176,7 +176,10 @@ void LoongArchInstrInfo::movImm(MachineBasicBlock &MBB,
}
unsigned LoongArchInstrInfo::getInstSizeInBytes(const MachineInstr &MI) const {
- if (MI.getOpcode() == TargetOpcode::INLINEASM) {
+ unsigned Opcode = MI.getOpcode();
+
+ if (Opcode == TargetOpcode::INLINEASM ||
+ Opcode == TargetOpcode::INLINEASM_BR) {
const MachineFunction *MF = MI.getParent()->getParent();
const MCAsmInfo *MAI = MF->getTarget().getMCAsmInfo();
return getInlineAsmLength(MI.getOperand(0).getSymbolName(), *MAI);
diff --git a/llvm/lib/Target/LoongArch/LoongArchInstrInfo.td b/llvm/lib/Target/LoongArch/LoongArchInstrInfo.td
index 1a2fd2e..dea15f7 100644
--- a/llvm/lib/Target/LoongArch/LoongArchInstrInfo.td
+++ b/llvm/lib/Target/LoongArch/LoongArchInstrInfo.td
@@ -1302,6 +1302,7 @@ class PseudoMaskedAM
let mayLoad = 1;
let mayStore = 1;
let hasSideEffects = 0;
+ let Size = 36;
}
def PseudoMaskedAtomicSwap32 : PseudoMaskedAM;
@@ -1315,6 +1316,7 @@ class PseudoAM : Pseudo<(outs GPR:$res, GPR:$scratch),
let mayLoad = 1;
let mayStore = 1;
let hasSideEffects = 0;
+ let Size = 24;
}
def PseudoAtomicSwap32 : PseudoAM;
@@ -1347,6 +1349,7 @@ class PseudoMaskedAMUMinUMax
let mayLoad = 1;
let mayStore = 1;
let hasSideEffects = 0;
+ let Size = 48;
}
def PseudoMaskedAtomicLoadUMax32 : PseudoMaskedAMUMinUMax;
@@ -1361,6 +1364,7 @@ class PseudoMaskedAMMinMax
let mayLoad = 1;
let mayStore = 1;
let hasSideEffects = 0;
+ let Size = 56;
}
def PseudoMaskedAtomicLoadMax32 : PseudoMaskedAMMinMax;
@@ -1375,6 +1379,7 @@ class PseudoCmpXchg
let mayLoad = 1;
let mayStore = 1;
let hasSideEffects = 0;
+ let Size = 36;
}
def PseudoCmpXchg32 : PseudoCmpXchg;
@@ -1388,6 +1393,7 @@ def PseudoMaskedCmpXchg32
let mayLoad = 1;
let mayStore = 1;
let hasSideEffects = 0;
+ let Size = 44;
}
class PseudoMaskedAMMinMaxPat<Intrinsic intrin, Pseudo AMInst>