summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Cederman <cederman@gaisler.com>2018-08-13 14:18:09 +0000
committerDaniel Cederman <cederman@gaisler.com>2018-08-13 14:18:09 +0000
commitdc3e4c6d9570656c7ba22f4d858941c43d6e49e6 (patch)
tree3800cbc3e40f1920ac839a5347db89e6bbb3bc11
parent4e1293b5e1b68fc2e3ca2bd85ade431350ab3c61 (diff)
downloadbcm5719-llvm-dc3e4c6d9570656c7ba22f4d858941c43d6e49e6.tar.gz
bcm5719-llvm-dc3e4c6d9570656c7ba22f4d858941c43d6e49e6.zip
Revert "[Sparc] Add support for the cycle counter available in GR740"
It breaks when using EXPENSIVE_CHECKS with the error message "Bad machine code: Using an undefined physical register". llvm-svn: 339570
-rw-r--r--llvm/lib/Target/Sparc/LeonFeatures.td4
-rw-r--r--llvm/lib/Target/Sparc/Sparc.td2
-rw-r--r--llvm/lib/Target/Sparc/SparcISelLowering.cpp14
-rw-r--r--llvm/lib/Target/Sparc/SparcSubtarget.cpp1
-rw-r--r--llvm/lib/Target/Sparc/SparcSubtarget.h2
-rw-r--r--llvm/test/CodeGen/SPARC/readcycle.ll11
6 files changed, 2 insertions, 32 deletions
diff --git a/llvm/lib/Target/Sparc/LeonFeatures.td b/llvm/lib/Target/Sparc/LeonFeatures.td
index 61e5f16e0a1..a7dea068cb1 100644
--- a/llvm/lib/Target/Sparc/LeonFeatures.td
+++ b/llvm/lib/Target/Sparc/LeonFeatures.td
@@ -58,7 +58,3 @@ def FixAllFDIVSQRT : SubtargetFeature<
"true",
"LEON erratum fix: Fix FDIVS/FDIVD/FSQRTS/FSQRTD instructions with NOPs and floating-point store"
>;
-
-def LeonCycleCounter
- : SubtargetFeature<"leoncyclecounter", "HasLeonCycleCounter", "true",
- "Use the Leon cycle counter register">;
diff --git a/llvm/lib/Target/Sparc/Sparc.td b/llvm/lib/Target/Sparc/Sparc.td
index 0c69605fd7b..2f9b57f7604 100644
--- a/llvm/lib/Target/Sparc/Sparc.td
+++ b/llvm/lib/Target/Sparc/Sparc.td
@@ -159,7 +159,7 @@ def : Processor<"leon4", LEON4Itineraries,
// LEON 4 FT (GR740)
// TO DO: Place-holder: Processor specific features will be added *very* soon here.
def : Processor<"gr740", LEON4Itineraries,
- [FeatureLeon, UMACSMACSupport, LeonCASA, LeonCycleCounter]>;
+ [FeatureLeon, UMACSMACSupport, LeonCASA]>;
//===----------------------------------------------------------------------===//
// Declare the target which we are implementing
diff --git a/llvm/lib/Target/Sparc/SparcISelLowering.cpp b/llvm/lib/Target/Sparc/SparcISelLowering.cpp
index 420eba36f96..b04c6b11268 100644
--- a/llvm/lib/Target/Sparc/SparcISelLowering.cpp
+++ b/llvm/lib/Target/Sparc/SparcISelLowering.cpp
@@ -1841,9 +1841,6 @@ SparcTargetLowering::SparcTargetLowering(const TargetMachine &TM,
setOperationAction(ISD::FMUL, MVT::f32, Promote);
}
- if (Subtarget->hasLeonCycleCounter())
- setOperationAction(ISD::READCYCLECOUNTER, MVT::i64, Custom);
-
setOperationAction(ISD::INTRINSIC_WO_CHAIN, MVT::Other, Custom);
setMinFunctionAlignment(2);
@@ -3590,16 +3587,7 @@ void SparcTargetLowering::ReplaceNodeResults(SDNode *N,
getLibcallName(libCall),
1));
return;
- case ISD::READCYCLECOUNTER: {
- assert(Subtarget->hasLeonCycleCounter());
- SDValue Lo = DAG.getCopyFromReg(N->getOperand(0), dl, SP::ASR23, MVT::i32);
- SDValue Hi = DAG.getCopyFromReg(Lo, dl, SP::G0, MVT::i32);
- SDValue Ops[] = { Lo, Hi };
- SDValue Pair = DAG.getNode(ISD::BUILD_PAIR, dl, MVT::i64, Ops);
- Results.push_back(Pair);
- Results.push_back(N->getOperand(0));
- return;
- }
+
case ISD::SINT_TO_FP:
case ISD::UINT_TO_FP:
// Custom lower only if it involves f128 or i64.
diff --git a/llvm/lib/Target/Sparc/SparcSubtarget.cpp b/llvm/lib/Target/Sparc/SparcSubtarget.cpp
index f3a2049ce38..40c5683f849 100644
--- a/llvm/lib/Target/Sparc/SparcSubtarget.cpp
+++ b/llvm/lib/Target/Sparc/SparcSubtarget.cpp
@@ -47,7 +47,6 @@ SparcSubtarget &SparcSubtarget::initializeSubtargetDependencies(StringRef CPU,
InsertNOPLoad = false;
FixAllFDIVSQRT = false;
DetectRoundChange = false;
- HasLeonCycleCounter = false;
// Determine default and user specified characteristics
std::string CPUName = CPU;
diff --git a/llvm/lib/Target/Sparc/SparcSubtarget.h b/llvm/lib/Target/Sparc/SparcSubtarget.h
index 65627f4f70f..588a6765bcd 100644
--- a/llvm/lib/Target/Sparc/SparcSubtarget.h
+++ b/llvm/lib/Target/Sparc/SparcSubtarget.h
@@ -50,7 +50,6 @@ class SparcSubtarget : public SparcGenSubtargetInfo {
bool InsertNOPLoad;
bool FixAllFDIVSQRT;
bool DetectRoundChange;
- bool HasLeonCycleCounter;
SparcInstrInfo InstrInfo;
SparcTargetLowering TLInfo;
@@ -96,7 +95,6 @@ public:
bool insertNOPLoad() const { return InsertNOPLoad; }
bool fixAllFDIVSQRT() const { return FixAllFDIVSQRT; }
bool detectRoundChange() const { return DetectRoundChange; }
- bool hasLeonCycleCounter() const { return HasLeonCycleCounter; }
/// ParseSubtargetFeatures - Parses features string setting specified
/// subtarget options. Definition of function is auto generated by tblgen.
diff --git a/llvm/test/CodeGen/SPARC/readcycle.ll b/llvm/test/CodeGen/SPARC/readcycle.ll
deleted file mode 100644
index 5c330ea1dac..00000000000
--- a/llvm/test/CodeGen/SPARC/readcycle.ll
+++ /dev/null
@@ -1,11 +0,0 @@
-; RUN: llc < %s -march=sparc -mcpu=gr740 | FileCheck %s
-; CHECK: rd %asr23, %o1
-; CHECK: mov %g0, %o0
-
-define i64 @test() {
-entry:
- %0 = call i64 @llvm.readcyclecounter()
- ret i64 %0
-}
-
-declare i64 @llvm.readcyclecounter()
OpenPOWER on IntegriCloud