diff options
| -rw-r--r-- | llvm/lib/Target/SystemZ/SystemZ.td | 11 | ||||
| -rw-r--r-- | llvm/lib/Target/SystemZ/SystemZFeatures.td | 153 | ||||
| -rw-r--r-- | llvm/lib/Target/SystemZ/SystemZProcessors.td | 104 | ||||
| -rw-r--r-- | llvm/lib/Target/SystemZ/SystemZScheduleZ13.td | 2 | ||||
| -rw-r--r-- | llvm/lib/Target/SystemZ/SystemZScheduleZ196.td | 2 | ||||
| -rw-r--r-- | llvm/lib/Target/SystemZ/SystemZScheduleZEC12.td | 2 | ||||
| -rw-r--r-- | llvm/test/MC/SystemZ/insn-bad-z13.s | 2 | ||||
| -rw-r--r-- | llvm/test/MC/SystemZ/insn-bad-z196.s | 2 | ||||
| -rw-r--r-- | llvm/test/MC/SystemZ/insn-bad-zEC12.s | 2 | ||||
| -rw-r--r-- | llvm/test/MC/SystemZ/insn-bad.s | 2 | ||||
| -rw-r--r-- | llvm/test/MC/SystemZ/insn-good-z13.s | 2 | ||||
| -rw-r--r-- | llvm/test/MC/SystemZ/insn-good-z196.s | 1 | ||||
| -rw-r--r-- | llvm/test/MC/SystemZ/insn-good-zEC12.s | 1 |
13 files changed, 198 insertions, 88 deletions
diff --git a/llvm/lib/Target/SystemZ/SystemZ.td b/llvm/lib/Target/SystemZ/SystemZ.td index 626ce7495d1..6bdfd4d07ed 100644 --- a/llvm/lib/Target/SystemZ/SystemZ.td +++ b/llvm/lib/Target/SystemZ/SystemZ.td @@ -14,12 +14,19 @@ include "llvm/Target/Target.td" //===----------------------------------------------------------------------===// -// SystemZ subtargets scheduling models. +// SystemZ subtarget features //===----------------------------------------------------------------------===// + +include "SystemZFeatures.td" + +//===----------------------------------------------------------------------===// +// SystemZ subtarget scheduling models +//===----------------------------------------------------------------------===// + include "SystemZSchedule.td" //===----------------------------------------------------------------------===// -// SystemZ supported processors and features +// SystemZ supported processors //===----------------------------------------------------------------------===// include "SystemZProcessors.td" diff --git a/llvm/lib/Target/SystemZ/SystemZFeatures.td b/llvm/lib/Target/SystemZ/SystemZFeatures.td new file mode 100644 index 00000000000..3aa4929881c --- /dev/null +++ b/llvm/lib/Target/SystemZ/SystemZFeatures.td @@ -0,0 +1,153 @@ +//===-- SystemZ.td - SystemZ processors and features ---------*- tblgen -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// Feature definitions. +// +//===----------------------------------------------------------------------===// + +class SystemZFeature<string extname, string intname, string desc> + : Predicate<"Subtarget->has"##intname##"()">, + AssemblerPredicate<"Feature"##intname, extname>, + SubtargetFeature<extname, "Has"##intname, "true", desc>; + +class SystemZMissingFeature<string intname> + : Predicate<"!Subtarget->has"##intname##"()">; + +class SystemZFeatureList<list<SystemZFeature> x> { + list<SystemZFeature> List = x; +} + +class SystemZFeatureAdd<list<SystemZFeature> x, list<SystemZFeature> y> + : SystemZFeatureList<!listconcat(x, y)>; + +//===----------------------------------------------------------------------===// +// +// New features added in the Ninth Edition of the z/Architecture +// +//===----------------------------------------------------------------------===// + +def FeatureDistinctOps : SystemZFeature< + "distinct-ops", "DistinctOps", + "Assume that the distinct-operands facility is installed" +>; + +def FeatureFastSerialization : SystemZFeature< + "fast-serialization", "FastSerialization", + "Assume that the fast-serialization facility is installed" +>; + +def FeatureFPExtension : SystemZFeature< + "fp-extension", "FPExtension", + "Assume that the floating-point extension facility is installed" +>; + +def FeatureHighWord : SystemZFeature< + "high-word", "HighWord", + "Assume that the high-word facility is installed" +>; + +def FeatureInterlockedAccess1 : SystemZFeature< + "interlocked-access1", "InterlockedAccess1", + "Assume that interlocked-access facility 1 is installed" +>; +def FeatureNoInterlockedAccess1 : SystemZMissingFeature<"InterlockedAccess1">; + +def FeatureLoadStoreOnCond : SystemZFeature< + "load-store-on-cond", "LoadStoreOnCond", + "Assume that the load/store-on-condition facility is installed" +>; + +def FeaturePopulationCount : SystemZFeature< + "population-count", "PopulationCount", + "Assume that the population-count facility is installed" +>; + +def Arch9NewFeatures : SystemZFeatureList<[ + FeatureDistinctOps, + FeatureFastSerialization, + FeatureFPExtension, + FeatureHighWord, + FeatureInterlockedAccess1, + FeatureLoadStoreOnCond, + FeaturePopulationCount +]>; + +//===----------------------------------------------------------------------===// +// +// New features added in the Tenth Edition of the z/Architecture +// +//===----------------------------------------------------------------------===// + +def FeatureMiscellaneousExtensions : SystemZFeature< + "miscellaneous-extensions", "MiscellaneousExtensions", + "Assume that the miscellaneous-extensions facility is installed" +>; + +def FeatureProcessorAssist : SystemZFeature< + "processor-assist", "ProcessorAssist", + "Assume that the processor-assist facility is installed" +>; + +def FeatureTransactionalExecution : SystemZFeature< + "transactional-execution", "TransactionalExecution", + "Assume that the transactional-execution facility is installed" +>; + +def Arch10NewFeatures : SystemZFeatureList<[ + FeatureMiscellaneousExtensions, + FeatureProcessorAssist, + FeatureTransactionalExecution +]>; + +//===----------------------------------------------------------------------===// +// +// New features added in the Eleventh Edition of the z/Architecture +// +//===----------------------------------------------------------------------===// + +def FeatureLoadStoreOnCond2 : SystemZFeature< + "load-store-on-cond-2", "LoadStoreOnCond2", + "Assume that the load/store-on-condition facility 2 is installed" +>; + +def FeatureVector : SystemZFeature< + "vector", "Vector", + "Assume that the vectory facility is installed" +>; +def FeatureNoVector : SystemZMissingFeature<"Vector">; + +def Arch11NewFeatures : SystemZFeatureList<[ + FeatureLoadStoreOnCond2, + FeatureVector +]>; + +//===----------------------------------------------------------------------===// +// +// Cumulative supported and unsupported feature sets +// +//===----------------------------------------------------------------------===// + +def Arch8SupportedFeatures + : SystemZFeatureList<[]>; +def Arch9SupportedFeatures + : SystemZFeatureAdd<Arch8SupportedFeatures.List, Arch9NewFeatures.List>; +def Arch10SupportedFeatures + : SystemZFeatureAdd<Arch9SupportedFeatures.List, Arch10NewFeatures.List>; +def Arch11SupportedFeatures + : SystemZFeatureAdd<Arch10SupportedFeatures.List, Arch11NewFeatures.List>; + +def Arch11UnsupportedFeatures + : SystemZFeatureList<[]>; +def Arch10UnsupportedFeatures + : SystemZFeatureAdd<Arch11UnsupportedFeatures.List, Arch11NewFeatures.List>; +def Arch9UnsupportedFeatures + : SystemZFeatureAdd<Arch10UnsupportedFeatures.List, Arch10NewFeatures.List>; +def Arch8UnsupportedFeatures + : SystemZFeatureAdd<Arch9UnsupportedFeatures.List, Arch9NewFeatures.List>; + diff --git a/llvm/lib/Target/SystemZ/SystemZProcessors.td b/llvm/lib/Target/SystemZ/SystemZProcessors.td index bae016443ce..1cdc0949ff4 100644 --- a/llvm/lib/Target/SystemZ/SystemZProcessors.td +++ b/llvm/lib/Target/SystemZ/SystemZProcessors.td @@ -7,97 +7,29 @@ // //===----------------------------------------------------------------------===// // -// Processor and feature definitions. +// Processor definitions. +// +// For compatibility with other compilers on the platform, each model can +// be identifed either by the system name (e.g. z10) or the level of the +// architecture the model supports, as identified by the edition level +// of the z/Architecture Principles of Operation document (e.g. arch8). +// +// The minimum architecture level supported by LLVM is as defined in +// the Eighth Edition of the PoP (i.e. as implemented on z10). // //===----------------------------------------------------------------------===// -class SystemZFeature<string extname, string intname, string desc> - : Predicate<"Subtarget->has"##intname##"()">, - AssemblerPredicate<"Feature"##intname, extname>, - SubtargetFeature<extname, "Has"##intname, "true", desc>; - -class SystemZMissingFeature<string intname> - : Predicate<"!Subtarget->has"##intname##"()">; - -def FeatureDistinctOps : SystemZFeature< - "distinct-ops", "DistinctOps", - "Assume that the distinct-operands facility is installed" ->; - -def FeatureLoadStoreOnCond : SystemZFeature< - "load-store-on-cond", "LoadStoreOnCond", - "Assume that the load/store-on-condition facility is installed" ->; - -def FeatureLoadStoreOnCond2 : SystemZFeature< - "load-store-on-cond-2", "LoadStoreOnCond2", - "Assume that the load/store-on-condition facility 2 is installed" ->; - -def FeatureHighWord : SystemZFeature< - "high-word", "HighWord", - "Assume that the high-word facility is installed" ->; - -def FeatureFPExtension : SystemZFeature< - "fp-extension", "FPExtension", - "Assume that the floating-point extension facility is installed" ->; - -def FeaturePopulationCount : SystemZFeature< - "population-count", "PopulationCount", - "Assume that the population-count facility is installed" ->; - -def FeatureFastSerialization : SystemZFeature< - "fast-serialization", "FastSerialization", - "Assume that the fast-serialization facility is installed" ->; - -def FeatureInterlockedAccess1 : SystemZFeature< - "interlocked-access1", "InterlockedAccess1", - "Assume that interlocked-access facility 1 is installed" ->; -def FeatureNoInterlockedAccess1 : SystemZMissingFeature<"InterlockedAccess1">; - -def FeatureMiscellaneousExtensions : SystemZFeature< - "miscellaneous-extensions", "MiscellaneousExtensions", - "Assume that the miscellaneous-extensions facility is installed" ->; +def : ProcessorModel<"generic", NoSchedModel, []>; -def FeatureTransactionalExecution : SystemZFeature< - "transactional-execution", "TransactionalExecution", - "Assume that the transactional-execution facility is installed" ->; +def : ProcessorModel<"arch8", NoSchedModel, Arch8SupportedFeatures.List>; +def : ProcessorModel<"z10", NoSchedModel, Arch8SupportedFeatures.List>; -def FeatureProcessorAssist : SystemZFeature< - "processor-assist", "ProcessorAssist", - "Assume that the processor-assist facility is installed" ->; +def : ProcessorModel<"arch9", Z196Model, Arch9SupportedFeatures.List>; +def : ProcessorModel<"z196", Z196Model, Arch9SupportedFeatures.List>; -def FeatureVector : SystemZFeature< - "vector", "Vector", - "Assume that the vectory facility is installed" ->; -def FeatureNoVector : SystemZMissingFeature<"Vector">; +def : ProcessorModel<"arch10", ZEC12Model, Arch10SupportedFeatures.List>; +def : ProcessorModel<"zEC12", ZEC12Model, Arch10SupportedFeatures.List>; -def : Processor<"generic", NoItineraries, []>; -def : Processor<"z10", NoItineraries, []>; -def : ProcessorModel<"z196", Z196Model, - [FeatureDistinctOps, FeatureLoadStoreOnCond, FeatureHighWord, - FeatureFPExtension, FeaturePopulationCount, - FeatureFastSerialization, FeatureInterlockedAccess1]>; -def : ProcessorModel<"zEC12", ZEC12Model, - [FeatureDistinctOps, FeatureLoadStoreOnCond, FeatureHighWord, - FeatureFPExtension, FeaturePopulationCount, - FeatureFastSerialization, FeatureInterlockedAccess1, - FeatureMiscellaneousExtensions, - FeatureTransactionalExecution, FeatureProcessorAssist]>; +def : ProcessorModel<"arch11", Z13Model, Arch11SupportedFeatures.List>; +def : ProcessorModel<"z13", Z13Model, Arch11SupportedFeatures.List>; -def : ProcessorModel<"z13", Z13Model, - [FeatureDistinctOps, FeatureLoadStoreOnCond, FeatureHighWord, - FeatureFPExtension, FeaturePopulationCount, - FeatureFastSerialization, FeatureInterlockedAccess1, - FeatureMiscellaneousExtensions, - FeatureTransactionalExecution, FeatureProcessorAssist, - FeatureVector, FeatureLoadStoreOnCond2]>; diff --git a/llvm/lib/Target/SystemZ/SystemZScheduleZ13.td b/llvm/lib/Target/SystemZ/SystemZScheduleZ13.td index 9ba65c7a941..6aeb87f4bc5 100644 --- a/llvm/lib/Target/SystemZ/SystemZScheduleZ13.td +++ b/llvm/lib/Target/SystemZ/SystemZScheduleZ13.td @@ -13,6 +13,8 @@ //===----------------------------------------------------------------------===// def Z13Model : SchedMachineModel { + + let UnsupportedFeatures = Arch11UnsupportedFeatures.List; let IssueWidth = 6; // 2 * 3 instructions decoded per cycle. let MicroOpBufferSize = 60; // Issue queues diff --git a/llvm/lib/Target/SystemZ/SystemZScheduleZ196.td b/llvm/lib/Target/SystemZ/SystemZScheduleZ196.td index e688ed24dfc..9d74c91e63e 100644 --- a/llvm/lib/Target/SystemZ/SystemZScheduleZ196.td +++ b/llvm/lib/Target/SystemZ/SystemZScheduleZ196.td @@ -13,6 +13,8 @@ //===----------------------------------------------------------------------===// def Z196Model : SchedMachineModel { + + let UnsupportedFeatures = Arch9UnsupportedFeatures.List; let IssueWidth = 3; // 3 instructions decoded per cycle. let MicroOpBufferSize = 40; // Issue queues diff --git a/llvm/lib/Target/SystemZ/SystemZScheduleZEC12.td b/llvm/lib/Target/SystemZ/SystemZScheduleZEC12.td index d008f4399a2..6ca6e85cd58 100644 --- a/llvm/lib/Target/SystemZ/SystemZScheduleZEC12.td +++ b/llvm/lib/Target/SystemZ/SystemZScheduleZEC12.td @@ -13,6 +13,8 @@ //===----------------------------------------------------------------------===// def ZEC12Model : SchedMachineModel { + + let UnsupportedFeatures = Arch10UnsupportedFeatures.List; let IssueWidth = 3; // 3 instructions decoded per cycle. let MicroOpBufferSize = 40; // Issue queues diff --git a/llvm/test/MC/SystemZ/insn-bad-z13.s b/llvm/test/MC/SystemZ/insn-bad-z13.s index 9407d86bd57..30681fe6b46 100644 --- a/llvm/test/MC/SystemZ/insn-bad-z13.s +++ b/llvm/test/MC/SystemZ/insn-bad-z13.s @@ -1,6 +1,8 @@ # For z13 only. # RUN: not llvm-mc -triple s390x-linux-gnu -mcpu=z13 < %s 2> %t # RUN: FileCheck < %t %s +# RUN: not llvm-mc -triple s390x-linux-gnu -mcpu=arch11 < %s 2> %t +# RUN: FileCheck < %t %s #CHECK: error: invalid operand #CHECK: lcbb %r0, 0, -1 diff --git a/llvm/test/MC/SystemZ/insn-bad-z196.s b/llvm/test/MC/SystemZ/insn-bad-z196.s index 1d705f87785..b329d84da28 100644 --- a/llvm/test/MC/SystemZ/insn-bad-z196.s +++ b/llvm/test/MC/SystemZ/insn-bad-z196.s @@ -1,6 +1,8 @@ # For z196 only. # RUN: not llvm-mc -triple s390x-linux-gnu -mcpu=z196 < %s 2> %t # RUN: FileCheck < %t %s +# RUN: not llvm-mc -triple s390x-linux-gnu -mcpu=arch9 < %s 2> %t +# RUN: FileCheck < %t %s #CHECK: error: invalid operand #CHECK: aghik %r0, %r1, -32769 diff --git a/llvm/test/MC/SystemZ/insn-bad-zEC12.s b/llvm/test/MC/SystemZ/insn-bad-zEC12.s index 8c0e2bc32ee..081cca7fbc4 100644 --- a/llvm/test/MC/SystemZ/insn-bad-zEC12.s +++ b/llvm/test/MC/SystemZ/insn-bad-zEC12.s @@ -1,6 +1,8 @@ # For zEC12 only. # RUN: not llvm-mc -triple s390x-linux-gnu -mcpu=zEC12 < %s 2> %t # RUN: FileCheck < %t %s +# RUN: not llvm-mc -triple s390x-linux-gnu -mcpu=arch10 < %s 2> %t +# RUN: FileCheck < %t %s #CHECK: error: instruction requires: vector #CHECK: lcbb %r0, 0, 0 diff --git a/llvm/test/MC/SystemZ/insn-bad.s b/llvm/test/MC/SystemZ/insn-bad.s index e152b52df32..10c73d74a58 100644 --- a/llvm/test/MC/SystemZ/insn-bad.s +++ b/llvm/test/MC/SystemZ/insn-bad.s @@ -1,6 +1,8 @@ # For z10 only. # RUN: not llvm-mc -triple s390x-linux-gnu -mcpu=z10 < %s 2> %t # RUN: FileCheck < %t %s +# RUN: not llvm-mc -triple s390x-linux-gnu -mcpu=arch8 < %s 2> %t +# RUN: FileCheck < %t %s #CHECK: error: invalid operand #CHECK: a %r0, -1 diff --git a/llvm/test/MC/SystemZ/insn-good-z13.s b/llvm/test/MC/SystemZ/insn-good-z13.s index 8946fde14e5..66fcdba9a2a 100644 --- a/llvm/test/MC/SystemZ/insn-good-z13.s +++ b/llvm/test/MC/SystemZ/insn-good-z13.s @@ -1,6 +1,8 @@ # For z13 and above. # RUN: llvm-mc -triple s390x-linux-gnu -mcpu=z13 -show-encoding %s \ # RUN: | FileCheck %s +# RUN: llvm-mc -triple s390x-linux-gnu -mcpu=arch11 -show-encoding %s \ +# RUN: | FileCheck %s #CHECK: lcbb %r0, 0, 0 # encoding: [0xe7,0x00,0x00,0x00,0x00,0x27] #CHECK: lcbb %r0, 0, 15 # encoding: [0xe7,0x00,0x00,0x00,0xf0,0x27] diff --git a/llvm/test/MC/SystemZ/insn-good-z196.s b/llvm/test/MC/SystemZ/insn-good-z196.s index fb2c2495d7a..0ba68c8d010 100644 --- a/llvm/test/MC/SystemZ/insn-good-z196.s +++ b/llvm/test/MC/SystemZ/insn-good-z196.s @@ -1,5 +1,6 @@ # For z196 and above. # RUN: llvm-mc -triple s390x-linux-gnu -mcpu=z196 -show-encoding %s | FileCheck %s +# RUN: llvm-mc -triple s390x-linux-gnu -mcpu=arch9 -show-encoding %s | FileCheck %s #CHECK: aghik %r0, %r0, -32768 # encoding: [0xec,0x00,0x80,0x00,0x00,0xd9] #CHECK: aghik %r0, %r0, -1 # encoding: [0xec,0x00,0xff,0xff,0x00,0xd9] diff --git a/llvm/test/MC/SystemZ/insn-good-zEC12.s b/llvm/test/MC/SystemZ/insn-good-zEC12.s index 0610de3020b..53b975d1f68 100644 --- a/llvm/test/MC/SystemZ/insn-good-zEC12.s +++ b/llvm/test/MC/SystemZ/insn-good-zEC12.s @@ -1,5 +1,6 @@ # For zEC12 and above. # RUN: llvm-mc -triple s390x-linux-gnu -mcpu=zEC12 -show-encoding %s | FileCheck %s +# RUN: llvm-mc -triple s390x-linux-gnu -mcpu=arch10 -show-encoding %s | FileCheck %s #CHECK: etnd %r0 # encoding: [0xb2,0xec,0x00,0x00] #CHECK: etnd %r15 # encoding: [0xb2,0xec,0x00,0xf0] |

