summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>2017-07-21 17:51:27 +0000
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>2017-07-21 17:51:27 +0000
commit3ad0d01e9e7c71a9de714380f232b45d7c8147fe (patch)
tree5e296f1c815067bbad3cc9a862245161651eacb3 /llvm/lib/Target
parent1dec57d5b0fb6b7044c9afa80e7c3b6295d36fd3 (diff)
downloadbcm5719-llvm-3ad0d01e9e7c71a9de714380f232b45d7c8147fe.tar.gz
bcm5719-llvm-3ad0d01e9e7c71a9de714380f232b45d7c8147fe.zip
[Hexagon] Add inline-asm constraint 'a' for modifier register class
For example asm ("memw(%0++%1) = %2" : : "r"(addr),"a"(mod),"r"(val) : "memory") llvm-svn: 308761
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r--llvm/lib/Target/Hexagon/HexagonISelLowering.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp b/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp
index 1291af86c7e..f02cd6d3992 100644
--- a/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp
+++ b/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp
@@ -2923,7 +2923,11 @@ HexagonTargetLowering::getConstraintType(StringRef Constraint) const {
case 'q':
case 'v':
if (Subtarget.useHVXOps())
- return C_Register;
+ return C_RegisterClass;
+ break;
+ case 'a':
+ return C_RegisterClass;
+ default:
break;
}
}
@@ -2951,6 +2955,9 @@ HexagonTargetLowering::getRegForInlineAsmConstraint(
case MVT::f64:
return std::make_pair(0U, &Hexagon::DoubleRegsRegClass);
}
+ break;
+ case 'a': // M0-M1
+ return std::make_pair(0U, &Hexagon::ModRegsRegClass);
case 'q': // q0-q3
switch (VT.getSizeInBits()) {
default:
@@ -2960,6 +2967,7 @@ HexagonTargetLowering::getRegForInlineAsmConstraint(
case 1024:
return std::make_pair(0U, &Hexagon::VecPredRegs128BRegClass);
}
+ break;
case 'v': // V0-V31
switch (VT.getSizeInBits()) {
default:
@@ -2973,7 +2981,7 @@ HexagonTargetLowering::getRegForInlineAsmConstraint(
case 2048:
return std::make_pair(0U, &Hexagon::VecDblRegs128BRegClass);
}
-
+ break;
default:
llvm_unreachable("Unknown asm register class");
}
OpenPOWER on IntegriCloud