summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Cederman <cederman@gaisler.com>2018-07-18 09:25:33 +0000
committerDaniel Cederman <cederman@gaisler.com>2018-07-18 09:25:33 +0000
commit4e38df18ea3fce41313bae3502c66c98952eb508 (patch)
tree4edc0a1e444bc43886e3f9f879b39c5678eeed28
parent889fe81ce5e2f08bde78902e1341208e4545f591 (diff)
downloadbcm5719-llvm-4e38df18ea3fce41313bae3502c66c98952eb508.tar.gz
bcm5719-llvm-4e38df18ea3fce41313bae3502c66c98952eb508.zip
[Sparc] Use the IntPair reg class for r constraints with value type f64
Summary: This is how it appears to be handled in GCC and it prevents a "Unknown mismatch" error in the SelectionDAGBuilder. Reviewers: venkatra, jyknight, jrtc27 Reviewed By: jyknight, jrtc27 Subscribers: eraman, fedor.sergeev, jrtc27, llvm-commits Differential Revision: https://reviews.llvm.org/D49218 llvm-svn: 337370
-rw-r--r--llvm/lib/Target/Sparc/SparcISelLowering.cpp2
-rw-r--r--llvm/test/CodeGen/SPARC/inlineasm.ll9
2 files changed, 10 insertions, 1 deletions
diff --git a/llvm/lib/Target/Sparc/SparcISelLowering.cpp b/llvm/lib/Target/Sparc/SparcISelLowering.cpp
index b04c6b11268..178bb537420 100644
--- a/llvm/lib/Target/Sparc/SparcISelLowering.cpp
+++ b/llvm/lib/Target/Sparc/SparcISelLowering.cpp
@@ -3489,7 +3489,7 @@ SparcTargetLowering::getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
if (Constraint.size() == 1) {
switch (Constraint[0]) {
case 'r':
- if (VT == MVT::v2i32)
+ if (VT == MVT::v2i32 || VT == MVT::f64)
return std::make_pair(0U, &SP::IntPairRegClass);
else
return std::make_pair(0U, &SP::IntRegsRegClass);
diff --git a/llvm/test/CodeGen/SPARC/inlineasm.ll b/llvm/test/CodeGen/SPARC/inlineasm.ll
index a67a45e6b1d..12445ea9fa1 100644
--- a/llvm/test/CodeGen/SPARC/inlineasm.ll
+++ b/llvm/test/CodeGen/SPARC/inlineasm.ll
@@ -130,3 +130,12 @@ entry:
tail call void asm sideeffect "faddd $0,$1,$2", "{f20},{f20},{f20}"(double 9.0, double 10.0, double 11.0)
ret void
}
+
+; CHECK-LABEL: test_constraint_r_f64:
+; CHECK: std %o0, [%sp+96]
+; CHECK: ldd [%sp+96], %f0
+define double @test_constraint_r_f64() {
+entry:
+ %0 = call double asm sideeffect "", "=r"()
+ ret double %0
+}
OpenPOWER on IntegriCloud