diff options
author | Daniel Cederman <cederman@gaisler.com> | 2018-04-20 07:53:27 +0000 |
---|---|---|
committer | Daniel Cederman <cederman@gaisler.com> | 2018-04-20 07:53:27 +0000 |
commit | 45571780617feb60784c7743d718970d2dfe8e5b (patch) | |
tree | 7874f1b085d999bf46fa387a8d0e3ae03df497fe /llvm/lib/Target/Sparc | |
parent | c67b3ffba743e8de1c46b5363bf9801e20da5744 (diff) | |
download | bcm5719-llvm-45571780617feb60784c7743d718970d2dfe8e5b.tar.gz bcm5719-llvm-45571780617feb60784c7743d718970d2dfe8e5b.zip |
Revert "This pass, fixing an erratum in some LEON 2 processors..."
Summary:
Reading Atmel's AT697E errata document this does not seem like a valid
workaround. While the text only mentions SDIV, it says that the ICC flags
can be wrong, and those are only generated by SDIVcc. Verification on
hardware shows that simply replacing SDIV with SDIVcc does not avoid
the bug with negative operands.
This reverts r283727.
Reviewers: lero_chris, jyknight
Reviewed By: jyknight
Subscribers: fedor.sergeev, jrtc27, llvm-commits
Differential Revision: https://reviews.llvm.org/D45813
llvm-svn: 330397
Diffstat (limited to 'llvm/lib/Target/Sparc')
-rw-r--r-- | llvm/lib/Target/Sparc/LeonFeatures.td | 8 | ||||
-rw-r--r-- | llvm/lib/Target/Sparc/Sparc.td | 2 | ||||
-rw-r--r-- | llvm/lib/Target/Sparc/SparcISelDAGToDAG.cpp | 6 | ||||
-rw-r--r-- | llvm/lib/Target/Sparc/SparcSubtarget.cpp | 1 | ||||
-rw-r--r-- | llvm/lib/Target/Sparc/SparcSubtarget.h | 2 |
5 files changed, 1 insertions, 18 deletions
diff --git a/llvm/lib/Target/Sparc/LeonFeatures.td b/llvm/lib/Target/Sparc/LeonFeatures.td index d9efe094d07..a7dea068cb1 100644 --- a/llvm/lib/Target/Sparc/LeonFeatures.td +++ b/llvm/lib/Target/Sparc/LeonFeatures.td @@ -37,14 +37,6 @@ def LeonCASA : SubtargetFeature< "Enable CASA instruction for LEON3 and LEON4 processors" >; - -def ReplaceSDIV : SubtargetFeature< - "replacesdiv", - "PerformSDIVReplace", - "true", - "AT697E erratum fix: Do not emit SDIV, emit SDIVCC instead" ->; - def InsertNOPLoad: SubtargetFeature< "insertnopload", "InsertNOPLoad", diff --git a/llvm/lib/Target/Sparc/Sparc.td b/llvm/lib/Target/Sparc/Sparc.td index dbe763f0844..2f9b57f7604 100644 --- a/llvm/lib/Target/Sparc/Sparc.td +++ b/llvm/lib/Target/Sparc/Sparc.td @@ -130,7 +130,7 @@ def : Processor<"leon2", LEON2Itineraries, // LEON 2 FT (AT697E) // TO DO: Place-holder: Processor specific features will be added *very* soon here. def : Processor<"at697e", LEON2Itineraries, - [FeatureLeon, ReplaceSDIV, InsertNOPLoad]>; + [FeatureLeon, InsertNOPLoad]>; // LEON 2 FT (AT697F) // TO DO: Place-holder: Processor specific features will be added *very* soon here. diff --git a/llvm/lib/Target/Sparc/SparcISelDAGToDAG.cpp b/llvm/lib/Target/Sparc/SparcISelDAGToDAG.cpp index 0932cd543f8..f845c41ede4 100644 --- a/llvm/lib/Target/Sparc/SparcISelDAGToDAG.cpp +++ b/llvm/lib/Target/Sparc/SparcISelDAGToDAG.cpp @@ -362,12 +362,6 @@ void SparcDAGToDAGISel::Select(SDNode *N) { // FIXME: Handle div by immediate. unsigned Opcode = N->getOpcode() == ISD::SDIV ? SP::SDIVrr : SP::UDIVrr; - // SDIV is a hardware erratum on some LEON2 processors. Replace it with SDIVcc here. - if (((SparcTargetMachine&)TM).getSubtargetImpl()->performSDIVReplace() - && - Opcode == SP::SDIVrr) { - Opcode = SP::SDIVCCrr; - } CurDAG->SelectNodeTo(N, Opcode, MVT::i32, DivLHS, DivRHS, TopPart); return; } diff --git a/llvm/lib/Target/Sparc/SparcSubtarget.cpp b/llvm/lib/Target/Sparc/SparcSubtarget.cpp index 01545b8d20a..40c5683f849 100644 --- a/llvm/lib/Target/Sparc/SparcSubtarget.cpp +++ b/llvm/lib/Target/Sparc/SparcSubtarget.cpp @@ -44,7 +44,6 @@ SparcSubtarget &SparcSubtarget::initializeSubtargetDependencies(StringRef CPU, // Leon features HasLeonCasa = false; HasUmacSmac = false; - PerformSDIVReplace = false; InsertNOPLoad = false; FixAllFDIVSQRT = false; DetectRoundChange = false; diff --git a/llvm/lib/Target/Sparc/SparcSubtarget.h b/llvm/lib/Target/Sparc/SparcSubtarget.h index bcdc96e6810..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 PerformSDIVReplace; SparcInstrInfo InstrInfo; SparcTargetLowering TLInfo; @@ -92,7 +91,6 @@ public: // Leon options bool hasUmacSmac() const { return HasUmacSmac; } - bool performSDIVReplace() const { return PerformSDIVReplace; } bool hasLeonCasa() const { return HasLeonCasa; } bool insertNOPLoad() const { return InsertNOPLoad; } bool fixAllFDIVSQRT() const { return FixAllFDIVSQRT; } |