2012-02-18 20:03:15 +08:00
|
|
|
//===-- Sparc.td - Describe the Sparc Target Machine -------*- tablegen -*-===//
|
|
|
|
//
|
2006-02-05 13:50:24 +08:00
|
|
|
// The LLVM Compiler Infrastructure
|
|
|
|
//
|
2007-12-30 04:36:04 +08:00
|
|
|
// This file is distributed under the University of Illinois Open Source
|
|
|
|
// License. See LICENSE.TXT for details.
|
2012-02-18 20:03:15 +08:00
|
|
|
//
|
2006-02-05 13:50:24 +08:00
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// Target-independent interfaces which we are implementing
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
2008-11-24 15:34:46 +08:00
|
|
|
include "llvm/Target/Target.td"
|
2006-02-05 13:50:24 +08:00
|
|
|
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// SPARC Subtarget features.
|
|
|
|
//
|
2013-06-05 02:33:25 +08:00
|
|
|
|
2017-07-19 03:08:38 +08:00
|
|
|
def FeatureSoftMulDiv
|
|
|
|
: SubtargetFeature<"soft-mul-div", "UseSoftMulDiv", "true",
|
|
|
|
"Use software emulation for integer multiply and divide">;
|
|
|
|
|
2017-07-21 04:09:11 +08:00
|
|
|
def FeatureNoFSMULD
|
|
|
|
: SubtargetFeature<"no-fsmuld", "HasNoFSMULD", "true",
|
|
|
|
"Disable the fsmuld instruction.">;
|
|
|
|
def FeatureNoFMULS
|
|
|
|
: SubtargetFeature<"no-fmuls", "HasNoFMULS", "true",
|
|
|
|
"Disable the fmuls instruction.">;
|
|
|
|
|
2006-02-05 13:50:24 +08:00
|
|
|
def FeatureV9
|
2016-08-12 22:48:09 +08:00
|
|
|
: SubtargetFeature<"v9", "IsV9", "true",
|
|
|
|
"Enable SPARC-V9 instructions">;
|
2006-02-05 13:50:24 +08:00
|
|
|
def FeatureV8Deprecated
|
2016-08-12 22:48:09 +08:00
|
|
|
: SubtargetFeature<"deprecated-v8", "V8DeprecatedInsts", "true",
|
|
|
|
"Enable deprecated V8 instructions in V9 mode">;
|
2006-02-05 13:50:24 +08:00
|
|
|
def FeatureVIS
|
2016-08-12 22:48:09 +08:00
|
|
|
: SubtargetFeature<"vis", "IsVIS", "true",
|
|
|
|
"Enable UltraSPARC Visual Instruction Set extensions">;
|
2014-03-03 03:31:21 +08:00
|
|
|
def FeatureVIS2
|
2016-08-12 22:48:09 +08:00
|
|
|
: SubtargetFeature<"vis2", "IsVIS2", "true",
|
|
|
|
"Enable Visual Instruction Set extensions II">;
|
2014-03-03 03:31:21 +08:00
|
|
|
def FeatureVIS3
|
2016-08-12 22:48:09 +08:00
|
|
|
: SubtargetFeature<"vis3", "IsVIS3", "true",
|
|
|
|
"Enable Visual Instruction Set extensions III">;
|
[Sparc] This provides support for itineraries on Sparc.
Specifically, itineraries for LEON processors has been added, along with several LEON processor Subtargets. Although currently all these targets are pretty much identical, support for features that will differ among these processors will be added in the very near future.
The different Instruction Itinerary Classes (IICs) added are sufficient to differentiate between the instruction timings used by LEON and, quite probably, by generic Sparc processors too, but the focus of the exercise has been for LEON processors, as the requirement of my project. If the IICs are not sufficient for other Sparc processor types and you want to add a new itinerary for one of those, it should be relatively trivial to adapt this.
As none of the LEON processors has Quad Floats, or is a Version 9 processor, none of those instructions have itinerary classes defined and revert to the default "NoItinerary" instruction itinerary.
Phabricator Review: http://reviews.llvm.org/D19359
llvm-svn: 267121
2016-04-22 16:17:17 +08:00
|
|
|
def FeatureLeon
|
2016-08-12 22:48:09 +08:00
|
|
|
: SubtargetFeature<"leon", "IsLeon", "true",
|
|
|
|
"Enable LEON extensions">;
|
2006-02-05 13:50:24 +08:00
|
|
|
|
2013-08-26 02:30:06 +08:00
|
|
|
def FeatureHardQuad
|
2016-08-12 22:48:09 +08:00
|
|
|
: SubtargetFeature<"hard-quad-float", "HasHardQuad", "true",
|
|
|
|
"Enable quad-word floating point instructions">;
|
2013-08-26 02:30:06 +08:00
|
|
|
|
2014-01-26 14:09:59 +08:00
|
|
|
def UsePopc : SubtargetFeature<"popc", "UsePopc", "true",
|
|
|
|
"Use the popc (population count) instruction">;
|
|
|
|
|
2016-08-12 22:48:09 +08:00
|
|
|
def FeatureSoftFloat : SubtargetFeature<"soft-float", "UseSoftFloat", "true",
|
2017-07-21 04:09:11 +08:00
|
|
|
"Use software emulation for floating point">;
|
2016-05-18 17:14:13 +08:00
|
|
|
|
2017-07-21 04:09:11 +08:00
|
|
|
//==== Features added predmoninantly for LEON subtarget support
|
2016-05-09 19:55:15 +08:00
|
|
|
include "LeonFeatures.td"
|
|
|
|
|
2006-02-05 13:50:24 +08:00
|
|
|
//===----------------------------------------------------------------------===//
|
2008-03-17 13:41:48 +08:00
|
|
|
// Register File, Calling Conv, Instruction Descriptions
|
2006-02-05 13:50:24 +08:00
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
include "SparcRegisterInfo.td"
|
2008-03-17 13:41:48 +08:00
|
|
|
include "SparcCallingConv.td"
|
[Sparc] This provides support for itineraries on Sparc.
Specifically, itineraries for LEON processors has been added, along with several LEON processor Subtargets. Although currently all these targets are pretty much identical, support for features that will differ among these processors will be added in the very near future.
The different Instruction Itinerary Classes (IICs) added are sufficient to differentiate between the instruction timings used by LEON and, quite probably, by generic Sparc processors too, but the focus of the exercise has been for LEON processors, as the requirement of my project. If the IICs are not sufficient for other Sparc processor types and you want to add a new itinerary for one of those, it should be relatively trivial to adapt this.
As none of the LEON processors has Quad Floats, or is a Version 9 processor, none of those instructions have itinerary classes defined and revert to the default "NoItinerary" instruction itinerary.
Phabricator Review: http://reviews.llvm.org/D19359
llvm-svn: 267121
2016-04-22 16:17:17 +08:00
|
|
|
include "SparcSchedule.td"
|
2006-02-05 13:50:24 +08:00
|
|
|
include "SparcInstrInfo.td"
|
|
|
|
|
2010-04-05 11:10:20 +08:00
|
|
|
def SparcInstrInfo : InstrInfo;
|
2006-02-05 13:50:24 +08:00
|
|
|
|
2016-08-12 22:48:09 +08:00
|
|
|
def SparcAsmParser : AsmParser {
|
|
|
|
bit ShouldEmitMatchRegisterName = 0;
|
|
|
|
}
|
2014-01-04 19:30:13 +08:00
|
|
|
|
2006-02-05 13:50:24 +08:00
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// SPARC processors supported.
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
class Proc<string Name, list<SubtargetFeature> Features>
|
2016-08-12 22:48:09 +08:00
|
|
|
: Processor<Name, NoItineraries, Features>;
|
|
|
|
|
|
|
|
def : Proc<"generic", []>;
|
2017-07-21 04:09:11 +08:00
|
|
|
def : Proc<"v7", [FeatureSoftMulDiv, FeatureNoFSMULD]>;
|
2016-08-12 22:48:09 +08:00
|
|
|
def : Proc<"v8", []>;
|
|
|
|
def : Proc<"supersparc", []>;
|
|
|
|
def : Proc<"sparclite", []>;
|
|
|
|
def : Proc<"f934", []>;
|
|
|
|
def : Proc<"hypersparc", []>;
|
|
|
|
def : Proc<"sparclite86x", []>;
|
|
|
|
def : Proc<"sparclet", []>;
|
|
|
|
def : Proc<"tsc701", []>;
|
2016-09-14 01:51:41 +08:00
|
|
|
def : Proc<"myriad2", [FeatureLeon, LeonCASA]>;
|
|
|
|
def : Proc<"myriad2.1", [FeatureLeon, LeonCASA]>;
|
|
|
|
def : Proc<"myriad2.2", [FeatureLeon, LeonCASA]>;
|
2017-10-03 02:50:48 +08:00
|
|
|
def : Proc<"myriad2.3", [FeatureLeon, LeonCASA]>;
|
2016-09-14 01:51:41 +08:00
|
|
|
def : Proc<"ma2100", [FeatureLeon, LeonCASA]>;
|
|
|
|
def : Proc<"ma2150", [FeatureLeon, LeonCASA]>;
|
2017-10-03 02:50:48 +08:00
|
|
|
def : Proc<"ma2155", [FeatureLeon, LeonCASA]>;
|
2016-09-14 01:51:41 +08:00
|
|
|
def : Proc<"ma2450", [FeatureLeon, LeonCASA]>;
|
2017-10-03 02:50:48 +08:00
|
|
|
def : Proc<"ma2455", [FeatureLeon, LeonCASA]>;
|
|
|
|
def : Proc<"ma2x5x", [FeatureLeon, LeonCASA]>;
|
|
|
|
def : Proc<"ma2080", [FeatureLeon, LeonCASA]>;
|
|
|
|
def : Proc<"ma2085", [FeatureLeon, LeonCASA]>;
|
|
|
|
def : Proc<"ma2480", [FeatureLeon, LeonCASA]>;
|
|
|
|
def : Proc<"ma2485", [FeatureLeon, LeonCASA]>;
|
|
|
|
def : Proc<"ma2x8x", [FeatureLeon, LeonCASA]>;
|
2016-08-12 22:48:09 +08:00
|
|
|
def : Proc<"v9", [FeatureV9]>;
|
|
|
|
def : Proc<"ultrasparc", [FeatureV9, FeatureV8Deprecated, FeatureVIS]>;
|
|
|
|
def : Proc<"ultrasparc3", [FeatureV9, FeatureV8Deprecated, FeatureVIS,
|
|
|
|
FeatureVIS2]>;
|
|
|
|
def : Proc<"niagara", [FeatureV9, FeatureV8Deprecated, FeatureVIS,
|
|
|
|
FeatureVIS2]>;
|
|
|
|
def : Proc<"niagara2", [FeatureV9, FeatureV8Deprecated, UsePopc,
|
|
|
|
FeatureVIS, FeatureVIS2]>;
|
|
|
|
def : Proc<"niagara3", [FeatureV9, FeatureV8Deprecated, UsePopc,
|
|
|
|
FeatureVIS, FeatureVIS2]>;
|
|
|
|
def : Proc<"niagara4", [FeatureV9, FeatureV8Deprecated, UsePopc,
|
|
|
|
FeatureVIS, FeatureVIS2, FeatureVIS3]>;
|
2006-02-05 13:50:24 +08:00
|
|
|
|
[Sparc] This provides support for itineraries on Sparc.
Specifically, itineraries for LEON processors has been added, along with several LEON processor Subtargets. Although currently all these targets are pretty much identical, support for features that will differ among these processors will be added in the very near future.
The different Instruction Itinerary Classes (IICs) added are sufficient to differentiate between the instruction timings used by LEON and, quite probably, by generic Sparc processors too, but the focus of the exercise has been for LEON processors, as the requirement of my project. If the IICs are not sufficient for other Sparc processor types and you want to add a new itinerary for one of those, it should be relatively trivial to adapt this.
As none of the LEON processors has Quad Floats, or is a Version 9 processor, none of those instructions have itinerary classes defined and revert to the default "NoItinerary" instruction itinerary.
Phabricator Review: http://reviews.llvm.org/D19359
llvm-svn: 267121
2016-04-22 16:17:17 +08:00
|
|
|
// LEON 2 FT generic
|
2016-08-12 22:48:09 +08:00
|
|
|
def : Processor<"leon2", LEON2Itineraries,
|
|
|
|
[FeatureLeon]>;
|
[Sparc] This provides support for itineraries on Sparc.
Specifically, itineraries for LEON processors has been added, along with several LEON processor Subtargets. Although currently all these targets are pretty much identical, support for features that will differ among these processors will be added in the very near future.
The different Instruction Itinerary Classes (IICs) added are sufficient to differentiate between the instruction timings used by LEON and, quite probably, by generic Sparc processors too, but the focus of the exercise has been for LEON processors, as the requirement of my project. If the IICs are not sufficient for other Sparc processor types and you want to add a new itinerary for one of those, it should be relatively trivial to adapt this.
As none of the LEON processors has Quad Floats, or is a Version 9 processor, none of those instructions have itinerary classes defined and revert to the default "NoItinerary" instruction itinerary.
Phabricator Review: http://reviews.llvm.org/D19359
llvm-svn: 267121
2016-04-22 16:17:17 +08:00
|
|
|
|
|
|
|
// LEON 2 FT (AT697E)
|
2016-08-12 22:48:09 +08:00
|
|
|
// TO DO: Place-holder: Processor specific features will be added *very* soon here.
|
|
|
|
def : Processor<"at697e", LEON2Itineraries,
|
2018-04-20 15:53:27 +08:00
|
|
|
[FeatureLeon, InsertNOPLoad]>;
|
[Sparc] This provides support for itineraries on Sparc.
Specifically, itineraries for LEON processors has been added, along with several LEON processor Subtargets. Although currently all these targets are pretty much identical, support for features that will differ among these processors will be added in the very near future.
The different Instruction Itinerary Classes (IICs) added are sufficient to differentiate between the instruction timings used by LEON and, quite probably, by generic Sparc processors too, but the focus of the exercise has been for LEON processors, as the requirement of my project. If the IICs are not sufficient for other Sparc processor types and you want to add a new itinerary for one of those, it should be relatively trivial to adapt this.
As none of the LEON processors has Quad Floats, or is a Version 9 processor, none of those instructions have itinerary classes defined and revert to the default "NoItinerary" instruction itinerary.
Phabricator Review: http://reviews.llvm.org/D19359
llvm-svn: 267121
2016-04-22 16:17:17 +08:00
|
|
|
|
|
|
|
// LEON 2 FT (AT697F)
|
2016-08-12 22:48:09 +08:00
|
|
|
// TO DO: Place-holder: Processor specific features will be added *very* soon here.
|
[Sparc] This provides support for itineraries on Sparc.
Specifically, itineraries for LEON processors has been added, along with several LEON processor Subtargets. Although currently all these targets are pretty much identical, support for features that will differ among these processors will be added in the very near future.
The different Instruction Itinerary Classes (IICs) added are sufficient to differentiate between the instruction timings used by LEON and, quite probably, by generic Sparc processors too, but the focus of the exercise has been for LEON processors, as the requirement of my project. If the IICs are not sufficient for other Sparc processor types and you want to add a new itinerary for one of those, it should be relatively trivial to adapt this.
As none of the LEON processors has Quad Floats, or is a Version 9 processor, none of those instructions have itinerary classes defined and revert to the default "NoItinerary" instruction itinerary.
Phabricator Review: http://reviews.llvm.org/D19359
llvm-svn: 267121
2016-04-22 16:17:17 +08:00
|
|
|
def : Processor<"at697f", LEON2Itineraries,
|
2016-08-12 22:48:09 +08:00
|
|
|
[FeatureLeon, InsertNOPLoad]>;
|
|
|
|
|
[Sparc] This provides support for itineraries on Sparc.
Specifically, itineraries for LEON processors has been added, along with several LEON processor Subtargets. Although currently all these targets are pretty much identical, support for features that will differ among these processors will be added in the very near future.
The different Instruction Itinerary Classes (IICs) added are sufficient to differentiate between the instruction timings used by LEON and, quite probably, by generic Sparc processors too, but the focus of the exercise has been for LEON processors, as the requirement of my project. If the IICs are not sufficient for other Sparc processor types and you want to add a new itinerary for one of those, it should be relatively trivial to adapt this.
As none of the LEON processors has Quad Floats, or is a Version 9 processor, none of those instructions have itinerary classes defined and revert to the default "NoItinerary" instruction itinerary.
Phabricator Review: http://reviews.llvm.org/D19359
llvm-svn: 267121
2016-04-22 16:17:17 +08:00
|
|
|
|
|
|
|
// LEON 3 FT generic
|
2016-08-12 22:48:09 +08:00
|
|
|
def : Processor<"leon3", LEON3Itineraries,
|
|
|
|
[FeatureLeon, UMACSMACSupport]>;
|
[Sparc] This provides support for itineraries on Sparc.
Specifically, itineraries for LEON processors has been added, along with several LEON processor Subtargets. Although currently all these targets are pretty much identical, support for features that will differ among these processors will be added in the very near future.
The different Instruction Itinerary Classes (IICs) added are sufficient to differentiate between the instruction timings used by LEON and, quite probably, by generic Sparc processors too, but the focus of the exercise has been for LEON processors, as the requirement of my project. If the IICs are not sufficient for other Sparc processor types and you want to add a new itinerary for one of those, it should be relatively trivial to adapt this.
As none of the LEON processors has Quad Floats, or is a Version 9 processor, none of those instructions have itinerary classes defined and revert to the default "NoItinerary" instruction itinerary.
Phabricator Review: http://reviews.llvm.org/D19359
llvm-svn: 267121
2016-04-22 16:17:17 +08:00
|
|
|
|
2016-05-16 19:02:00 +08:00
|
|
|
// LEON 3 FT (UT699). Provides features for the UT699 processor
|
2016-08-12 22:48:09 +08:00
|
|
|
// - covers all the erratum fixes for LEON3, but does not support the CASA instruction.
|
2017-07-21 04:09:11 +08:00
|
|
|
def : Processor<"ut699", LEON3Itineraries,
|
|
|
|
[FeatureLeon, InsertNOPLoad, FeatureNoFSMULD, FeatureNoFMULS, FixAllFDIVSQRT]>;
|
[Sparc] This provides support for itineraries on Sparc.
Specifically, itineraries for LEON processors has been added, along with several LEON processor Subtargets. Although currently all these targets are pretty much identical, support for features that will differ among these processors will be added in the very near future.
The different Instruction Itinerary Classes (IICs) added are sufficient to differentiate between the instruction timings used by LEON and, quite probably, by generic Sparc processors too, but the focus of the exercise has been for LEON processors, as the requirement of my project. If the IICs are not sufficient for other Sparc processor types and you want to add a new itinerary for one of those, it should be relatively trivial to adapt this.
As none of the LEON processors has Quad Floats, or is a Version 9 processor, none of those instructions have itinerary classes defined and revert to the default "NoItinerary" instruction itinerary.
Phabricator Review: http://reviews.llvm.org/D19359
llvm-svn: 267121
2016-04-22 16:17:17 +08:00
|
|
|
|
2016-05-16 19:02:00 +08:00
|
|
|
// LEON3 FT (GR712RC). Provides features for the GR712RC processor.
|
2016-08-12 22:48:09 +08:00
|
|
|
// - covers all the erratum fixed for LEON3 and support for the CASA instruction.
|
[Sparc] This provides support for itineraries on Sparc.
Specifically, itineraries for LEON processors has been added, along with several LEON processor Subtargets. Although currently all these targets are pretty much identical, support for features that will differ among these processors will be added in the very near future.
The different Instruction Itinerary Classes (IICs) added are sufficient to differentiate between the instruction timings used by LEON and, quite probably, by generic Sparc processors too, but the focus of the exercise has been for LEON processors, as the requirement of my project. If the IICs are not sufficient for other Sparc processor types and you want to add a new itinerary for one of those, it should be relatively trivial to adapt this.
As none of the LEON processors has Quad Floats, or is a Version 9 processor, none of those instructions have itinerary classes defined and revert to the default "NoItinerary" instruction itinerary.
Phabricator Review: http://reviews.llvm.org/D19359
llvm-svn: 267121
2016-04-22 16:17:17 +08:00
|
|
|
def : Processor<"gr712rc", LEON3Itineraries,
|
2016-08-12 22:48:09 +08:00
|
|
|
[FeatureLeon, LeonCASA]>;
|
[Sparc] This provides support for itineraries on Sparc.
Specifically, itineraries for LEON processors has been added, along with several LEON processor Subtargets. Although currently all these targets are pretty much identical, support for features that will differ among these processors will be added in the very near future.
The different Instruction Itinerary Classes (IICs) added are sufficient to differentiate between the instruction timings used by LEON and, quite probably, by generic Sparc processors too, but the focus of the exercise has been for LEON processors, as the requirement of my project. If the IICs are not sufficient for other Sparc processor types and you want to add a new itinerary for one of those, it should be relatively trivial to adapt this.
As none of the LEON processors has Quad Floats, or is a Version 9 processor, none of those instructions have itinerary classes defined and revert to the default "NoItinerary" instruction itinerary.
Phabricator Review: http://reviews.llvm.org/D19359
llvm-svn: 267121
2016-04-22 16:17:17 +08:00
|
|
|
|
|
|
|
// LEON 4 FT generic
|
|
|
|
def : Processor<"leon4", LEON4Itineraries,
|
2016-08-12 22:48:09 +08:00
|
|
|
[FeatureLeon, UMACSMACSupport, LeonCASA]>;
|
[Sparc] This provides support for itineraries on Sparc.
Specifically, itineraries for LEON processors has been added, along with several LEON processor Subtargets. Although currently all these targets are pretty much identical, support for features that will differ among these processors will be added in the very near future.
The different Instruction Itinerary Classes (IICs) added are sufficient to differentiate between the instruction timings used by LEON and, quite probably, by generic Sparc processors too, but the focus of the exercise has been for LEON processors, as the requirement of my project. If the IICs are not sufficient for other Sparc processor types and you want to add a new itinerary for one of those, it should be relatively trivial to adapt this.
As none of the LEON processors has Quad Floats, or is a Version 9 processor, none of those instructions have itinerary classes defined and revert to the default "NoItinerary" instruction itinerary.
Phabricator Review: http://reviews.llvm.org/D19359
llvm-svn: 267121
2016-04-22 16:17:17 +08:00
|
|
|
|
2016-08-12 22:48:09 +08:00
|
|
|
// LEON 4 FT (GR740)
|
|
|
|
// TO DO: Place-holder: Processor specific features will be added *very* soon here.
|
|
|
|
def : Processor<"gr740", LEON4Itineraries,
|
|
|
|
[FeatureLeon, UMACSMACSupport, LeonCASA]>;
|
2006-02-05 13:50:24 +08:00
|
|
|
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// Declare the target which we are implementing
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
2015-03-28 12:03:51 +08:00
|
|
|
def SparcAsmWriter : AsmWriter {
|
2016-08-12 22:48:09 +08:00
|
|
|
string AsmWriterClassName = "InstPrinter";
|
2015-03-28 12:03:51 +08:00
|
|
|
int PassSubtarget = 1;
|
|
|
|
int Variant = 0;
|
|
|
|
}
|
|
|
|
|
2006-02-05 13:50:24 +08:00
|
|
|
def Sparc : Target {
|
|
|
|
// Pull in Instruction Info:
|
|
|
|
let InstructionSet = SparcInstrInfo;
|
2016-08-12 22:48:09 +08:00
|
|
|
let AssemblyParsers = [SparcAsmParser];
|
|
|
|
let AssemblyWriters = [SparcAsmWriter];
|
[MachineOperand][Target] MachineOperand::isRenamable semantics changes
Summary:
Add a target option AllowRegisterRenaming that is used to opt in to
post-register-allocation renaming of registers. This is set to 0 by
default, which causes the hasExtraSrcRegAllocReq/hasExtraDstRegAllocReq
fields of all opcodes to be set to 1, causing
MachineOperand::isRenamable to always return false.
Set the AllowRegisterRenaming flag to 1 for all in-tree targets that
have lit tests that were effected by enabling COPY forwarding in
MachineCopyPropagation (AArch64, AMDGPU, ARM, Hexagon, Mips, PowerPC,
RISCV, Sparc, SystemZ and X86).
Add some more comments describing the semantics of the
MachineOperand::isRenamable function and how it is set and maintained.
Change isRenamable to check the operand's opcode
hasExtraSrcRegAllocReq/hasExtraDstRegAllocReq bit directly instead of
relying on it being consistently reflected in the IsRenamable bit
setting.
Clear the IsRenamable bit when changing an operand's register value.
Remove target code that was clearing the IsRenamable bit when changing
registers/opcodes now that this is done conservatively by default.
Change setting of hasExtraSrcRegAllocReq in AMDGPU target to be done in
one place covering all opcodes that have constant pipe read limit
restrictions.
Reviewers: qcolombet, MatzeB
Subscribers: aemerson, arsenm, jyknight, mcrosier, sdardis, nhaehnle, javed.absar, tpr, arichardson, kristof.beyls, kbarton, fedor.sergeev, asb, rbar, johnrusso, simoncook, jordy.potman.lists, apazos, sabuasal, niosHD, escha, nemanjai, llvm-commits
Differential Revision: https://reviews.llvm.org/D43042
llvm-svn: 325931
2018-02-24 02:25:08 +08:00
|
|
|
let AllowRegisterRenaming = 1;
|
2006-02-05 13:50:24 +08:00
|
|
|
}
|