mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
[Hexagon] Give better error messages for solo instruction errors
Patch by Colin LeMahieu. llvm-svn: 301827
This commit is contained in:
parent
fbebda08d4
commit
5213039bde
@ -484,16 +484,16 @@ bool HexagonMCChecker::checkRegisters() {
|
||||
|
||||
// Check for legal use of solo insns.
|
||||
bool HexagonMCChecker::checkSolo() {
|
||||
if (HexagonMCInstrInfo::isBundle(MCB) &&
|
||||
HexagonMCInstrInfo::bundleSize(MCB) > 1) {
|
||||
if (HexagonMCInstrInfo::bundleSize(MCB) > 1)
|
||||
for (auto const &I : HexagonMCInstrInfo::bundleInstructions(MCB)) {
|
||||
if (llvm::HexagonMCInstrInfo::isSolo(MCII, *I.getInst())) {
|
||||
reportError(
|
||||
"instruction cannot appear in packet with other instructions");
|
||||
SMLoc Loc = I.getInst()->getLoc();
|
||||
reportError(Loc, "Instruction is marked `isSolo' and "
|
||||
"cannot have other instructions in "
|
||||
"the same packet");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -575,8 +575,12 @@ void HexagonMCChecker::reportErrorNewValue(unsigned Register) {
|
||||
}
|
||||
|
||||
void HexagonMCChecker::reportError(llvm::Twine const &Msg) {
|
||||
reportError(MCB.getLoc(), Msg);
|
||||
}
|
||||
|
||||
void HexagonMCChecker::reportError(SMLoc Loc, llvm::Twine const &Msg) {
|
||||
if (ReportErrors)
|
||||
Context.reportError(MCB.getLoc(), Msg);
|
||||
Context.reportError(Loc, Msg);
|
||||
}
|
||||
|
||||
void HexagonMCChecker::reportWarning(llvm::Twine const &Msg) {
|
||||
|
@ -118,7 +118,6 @@ class HexagonMCChecker {
|
||||
bool checkSolo();
|
||||
bool checkShuffle();
|
||||
bool checkSlots();
|
||||
bool checkSize();
|
||||
|
||||
static void compoundRegisterMap(unsigned &);
|
||||
|
||||
@ -141,6 +140,7 @@ public:
|
||||
bool check(bool FullCheck = true);
|
||||
void reportErrorRegisters(unsigned Register);
|
||||
void reportErrorNewValue(unsigned Register);
|
||||
void reportError(SMLoc Loc, llvm::Twine const &Msg);
|
||||
void reportError(llvm::Twine const &Msg);
|
||||
void reportWarning(llvm::Twine const &Msg);
|
||||
};
|
||||
|
5
test/MC/Hexagon/PacketRules/solo.s
Normal file
5
test/MC/Hexagon/PacketRules/solo.s
Normal file
@ -0,0 +1,5 @@
|
||||
# RUN: not llvm-mc -arch=hexagon -filetype=asm %s 2>%t; FileCheck %s <%t
|
||||
|
||||
{ brkpt
|
||||
r0 = r0 }
|
||||
# CHECK: 3:3: error: Instruction is marked `isSolo' and cannot have other instructions in the same packet
|
10
test/MC/Hexagon/multiple_errs.s
Normal file
10
test/MC/Hexagon/multiple_errs.s
Normal file
@ -0,0 +1,10 @@
|
||||
# RUN: not llvm-mc -arch=hexagon -filetype=asm %s 2> %t; FileCheck %s < %t
|
||||
#
|
||||
|
||||
{
|
||||
if (!p0) r0=r1;
|
||||
if (!p0) r0=r2;
|
||||
trap0(#15);
|
||||
}
|
||||
# CHECK: error: register `R0' modified more than once
|
||||
# CHECK: error: Instruction is marked `isSolo' and cannot have other instructions in the same packet
|
Loading…
Reference in New Issue
Block a user