[llvm] r350299 - [ARM] Add command-line option for SB
Diogo N. Sampaio via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 3 04:09:12 PST 2019
Author: dnsampaio
Date: Thu Jan 3 04:09:12 2019
New Revision: 350299
URL: http://llvm.org/viewvc/llvm-project?rev=350299&view=rev
Log:
[ARM] Add command-line option for SB
SB (Speculative Barrier) is only mandatory from 8.5
onwards but is optional from Armv8.0-A. This patch adds a command
line option to enable SB, as it was previously only possible to
enable by selecting -march=armv8.5-a.
This patch also renames FeatureSpecRestrict to FeatureSB.
Reviewed By: olista01, LukeCheeseman
Differential Revision: https://reviews.llvm.org/D55990
Added:
llvm/trunk/test/MC/ARM/armv8.5a-sb-error-thumb.s
llvm/trunk/test/MC/ARM/armv8.5a-sb-error.s
llvm/trunk/test/MC/ARM/armv8.5a-sb.s
llvm/trunk/test/MC/Disassembler/ARM/armv8.5a-sb-thumb.txt
Removed:
llvm/trunk/test/MC/ARM/armv8.5a-specctrl-error-thumb.s
llvm/trunk/test/MC/ARM/armv8.5a-specctrl-error.s
llvm/trunk/test/MC/ARM/armv8.5a-specctrl.s
llvm/trunk/test/MC/Disassembler/ARM/armv8.5a-specctrl-thumb.txt
Modified:
llvm/trunk/include/llvm/Support/ARMTargetParser.def
llvm/trunk/include/llvm/Support/ARMTargetParser.h
llvm/trunk/lib/Target/ARM/ARM.td
llvm/trunk/lib/Target/ARM/ARMInstrInfo.td
llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td
llvm/trunk/lib/Target/ARM/ARMSubtarget.h
llvm/trunk/unittests/Support/TargetParserTest.cpp
Modified: llvm/trunk/include/llvm/Support/ARMTargetParser.def
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/ARMTargetParser.def?rev=350299&r1=350298&r2=350299&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/ARMTargetParser.def (original)
+++ llvm/trunk/include/llvm/Support/ARMTargetParser.def Thu Jan 3 04:09:12 2019
@@ -158,6 +158,7 @@ ARM_ARCH_EXT_NAME("iwmmxt2", ARM::AEK_I
ARM_ARCH_EXT_NAME("maverick", ARM::AEK_MAVERICK, nullptr, nullptr)
ARM_ARCH_EXT_NAME("xscale", ARM::AEK_XSCALE, nullptr, nullptr)
ARM_ARCH_EXT_NAME("fp16fml", ARM::AEK_FP16FML, "+fp16fml", "-fp16fml")
+ARM_ARCH_EXT_NAME("sb", ARM::AEK_SB, "+sb", "-sb")
#undef ARM_ARCH_EXT_NAME
#ifndef ARM_HW_DIV_NAME
Modified: llvm/trunk/include/llvm/Support/ARMTargetParser.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/ARMTargetParser.h?rev=350299&r1=350298&r2=350299&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/ARMTargetParser.h (original)
+++ llvm/trunk/include/llvm/Support/ARMTargetParser.h Thu Jan 3 04:09:12 2019
@@ -45,6 +45,7 @@ enum ArchExtKind : unsigned {
AEK_SHA2 = 1 << 15,
AEK_AES = 1 << 16,
AEK_FP16FML = 1 << 17,
+ AEK_SB = 1 << 18,
// Unsupported extensions.
AEK_OS = 0x8000000,
AEK_IWMMXT = 0x10000000,
Modified: llvm/trunk/lib/Target/ARM/ARM.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARM.td?rev=350299&r1=350298&r2=350299&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARM.td (original)
+++ llvm/trunk/lib/Target/ARM/ARM.td Thu Jan 3 04:09:12 2019
@@ -365,8 +365,8 @@ def FeatureUseAA : SubtargetFeature<"use
// Armv8.5-A extensions
-def FeatureSpecCtrl : SubtargetFeature<"specctrl", "HasSpecCtrl", "true",
- "Enable speculation control barrier" >;
+def FeatureSB : SubtargetFeature<"sb", "HasSB", "true",
+ "Enable v8.5a Speculation Barrier" >;
//===----------------------------------------------------------------------===//
// ARM architecture class
@@ -459,7 +459,7 @@ def HasV8_4aOps : SubtargetFeature<"v8
def HasV8_5aOps : SubtargetFeature<"v8.5a", "HasV8_5aOps", "true",
"Support ARM v8.5a instructions",
- [HasV8_4aOps, FeatureSpecCtrl]>;
+ [HasV8_4aOps, FeatureSB]>;
//===----------------------------------------------------------------------===//
// ARM Processor subtarget features.
Modified: llvm/trunk/lib/Target/ARM/ARMInstrInfo.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrInfo.td?rev=350299&r1=350298&r2=350299&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMInstrInfo.td (original)
+++ llvm/trunk/lib/Target/ARM/ARMInstrInfo.td Thu Jan 3 04:09:12 2019
@@ -395,8 +395,8 @@ let RecomputePerFunction = 1 in {
def GenExecuteOnly : Predicate<"Subtarget->genExecuteOnly()">;
// Armv8.5-A extensions
-def HasSpecCtrl : Predicate<"Subtarget->hasSpecCtrl()">,
- AssemblerPredicate<"FeatureSpecCtrl", "specctrl">;
+def HasSB : Predicate<"Subtarget->hasSB()">,
+ AssemblerPredicate<"FeatureSB", "sb">;
//===----------------------------------------------------------------------===//
// ARM Flag Definitions.
@@ -4895,7 +4895,7 @@ def TSB : AInoP<(outs), (ins tsb_opt:$op
// Armv8.5-A speculation barrier
def SB : AInoP<(outs), (ins), MiscFrm, NoItinerary, "sb", "", []>,
- Requires<[IsARM, HasSpecCtrl]>, Sched<[]> {
+ Requires<[IsARM, HasSB]>, Sched<[]> {
let Inst{31-0} = 0xf57ff070;
let Unpredictable = 0x000fff0f;
let hasSideEffects = 1;
Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td?rev=350299&r1=350298&r2=350299&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td (original)
+++ llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Thu Jan 3 04:09:12 2019
@@ -3239,7 +3239,7 @@ def t2TSB : T2I<(outs), (ins tsb_opt:$op
// Armv8.5-A speculation barrier
def t2SB : Thumb2XI<(outs), (ins), AddrModeNone, 4, NoItinerary, "sb", "", []>,
- Requires<[IsThumb2, HasSpecCtrl]>, Sched<[]> {
+ Requires<[IsThumb2, HasSB]>, Sched<[]> {
let Inst{31-0} = 0xf3bf8f70;
let Unpredictable = 0x000f2f0f;
let hasSideEffects = 1;
Modified: llvm/trunk/lib/Target/ARM/ARMSubtarget.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMSubtarget.h?rev=350299&r1=350298&r2=350299&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMSubtarget.h (original)
+++ llvm/trunk/lib/Target/ARM/ARMSubtarget.h Thu Jan 3 04:09:12 2019
@@ -417,7 +417,7 @@ protected:
bool UseSjLjEH = false;
/// Has speculation barrier
- bool HasSpecCtrl = false;
+ bool HasSB = false;
/// Implicitly convert an instruction to a different one if its immediates
/// cannot be encoded. For example, ADD r0, r1, #FFFFFFFF -> SUB r0, r1, #1.
@@ -628,7 +628,7 @@ public:
bool hasDSP() const { return HasDSP; }
bool useNaClTrap() const { return UseNaClTrap; }
bool useSjLjEH() const { return UseSjLjEH; }
- bool hasSpecCtrl() const { return HasSpecCtrl; }
+ bool hasSB() const { return HasSB; }
bool genLongCalls() const { return GenLongCalls; }
bool genExecuteOnly() const { return GenExecuteOnly; }
Added: llvm/trunk/test/MC/ARM/armv8.5a-sb-error-thumb.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/armv8.5a-sb-error-thumb.s?rev=350299&view=auto
==============================================================================
--- llvm/trunk/test/MC/ARM/armv8.5a-sb-error-thumb.s (added)
+++ llvm/trunk/test/MC/ARM/armv8.5a-sb-error-thumb.s Thu Jan 3 04:09:12 2019
@@ -0,0 +1,6 @@
+// RUN: not llvm-mc -triple thumbv8 -show-encoding -mattr=+sb < %s 2>&1 | FileCheck %s
+
+it eq
+sbeq
+
+// CHECK: instruction 'sb' is not predicable, but condition code specified
Added: llvm/trunk/test/MC/ARM/armv8.5a-sb-error.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/armv8.5a-sb-error.s?rev=350299&view=auto
==============================================================================
--- llvm/trunk/test/MC/ARM/armv8.5a-sb-error.s (added)
+++ llvm/trunk/test/MC/ARM/armv8.5a-sb-error.s Thu Jan 3 04:09:12 2019
@@ -0,0 +1,5 @@
+// RUN: not llvm-mc -triple armv8 -show-encoding -mattr=+sb < %s 2>&1 | FileCheck %s
+
+sbeq
+
+// CHECK: instruction 'sb' is not predicable
Added: llvm/trunk/test/MC/ARM/armv8.5a-sb.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/armv8.5a-sb.s?rev=350299&view=auto
==============================================================================
--- llvm/trunk/test/MC/ARM/armv8.5a-sb.s (added)
+++ llvm/trunk/test/MC/ARM/armv8.5a-sb.s Thu Jan 3 04:09:12 2019
@@ -0,0 +1,15 @@
+// RUN: llvm-mc -triple armv8 -show-encoding -mattr=+sb < %s | FileCheck %s
+// RUN: llvm-mc -triple armv8 -show-encoding -mattr=+v8.5a < %s | FileCheck %s
+// RUN: not llvm-mc -triple armv8 -show-encoding -mattr=-sb < %s 2>&1 | FileCheck %s --check-prefix=NOSB
+// RUN: llvm-mc -triple thumbv8 -show-encoding -mattr=+sb < %s | FileCheck %s --check-prefix=THUMB
+// RUN: llvm-mc -triple thumbv8 -show-encoding -mattr=+v8.5a < %s | FileCheck %s --check-prefix=THUMB
+// RUN: not llvm-mc -triple thumbv8 -show-encoding -mattr=-sb < %s 2>&1 | FileCheck %s --check-prefix=NOSB
+
+// Flag manipulation
+sb
+
+// CHECK: sb @ encoding: [0x70,0xf0,0x7f,0xf5]
+// THUMB: sb @ encoding: [0xbf,0xf3,0x70,0x8f]
+
+// NOSB: instruction requires: sb
+// NOSB-NEXT: sb
Removed: llvm/trunk/test/MC/ARM/armv8.5a-specctrl-error-thumb.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/armv8.5a-specctrl-error-thumb.s?rev=350298&view=auto
==============================================================================
--- llvm/trunk/test/MC/ARM/armv8.5a-specctrl-error-thumb.s (original)
+++ llvm/trunk/test/MC/ARM/armv8.5a-specctrl-error-thumb.s (removed)
@@ -1,6 +0,0 @@
-// RUN: not llvm-mc -triple thumbv8 -show-encoding -mattr=+specctrl < %s 2>&1 | FileCheck %s
-
-it eq
-sbeq
-
-// CHECK: instruction 'sb' is not predicable, but condition code specified
Removed: llvm/trunk/test/MC/ARM/armv8.5a-specctrl-error.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/armv8.5a-specctrl-error.s?rev=350298&view=auto
==============================================================================
--- llvm/trunk/test/MC/ARM/armv8.5a-specctrl-error.s (original)
+++ llvm/trunk/test/MC/ARM/armv8.5a-specctrl-error.s (removed)
@@ -1,5 +0,0 @@
-// RUN: not llvm-mc -triple armv8 -show-encoding -mattr=+specctrl < %s 2>&1 | FileCheck %s
-
-sbeq
-
-// CHECK: instruction 'sb' is not predicable
Removed: llvm/trunk/test/MC/ARM/armv8.5a-specctrl.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/armv8.5a-specctrl.s?rev=350298&view=auto
==============================================================================
--- llvm/trunk/test/MC/ARM/armv8.5a-specctrl.s (original)
+++ llvm/trunk/test/MC/ARM/armv8.5a-specctrl.s (removed)
@@ -1,15 +0,0 @@
-// RUN: llvm-mc -triple armv8 -show-encoding -mattr=+specctrl < %s | FileCheck %s
-// RUN: llvm-mc -triple armv8 -show-encoding -mattr=+v8.5a < %s | FileCheck %s
-// RUN: not llvm-mc -triple armv8 -show-encoding -mattr=-specctrl < %s 2>&1 | FileCheck %s --check-prefix=NOSB
-// RUN: llvm-mc -triple thumbv8 -show-encoding -mattr=+specctrl < %s | FileCheck %s --check-prefix=THUMB
-// RUN: llvm-mc -triple thumbv8 -show-encoding -mattr=+v8.5a < %s | FileCheck %s --check-prefix=THUMB
-// RUN: not llvm-mc -triple thumbv8 -show-encoding -mattr=-specctrl < %s 2>&1 | FileCheck %s --check-prefix=NOSB
-
-// Flag manipulation
-sb
-
-// CHECK: sb @ encoding: [0x70,0xf0,0x7f,0xf5]
-// THUMB: sb @ encoding: [0xbf,0xf3,0x70,0x8f]
-
-// NOSB: instruction requires: specctrl
-// NOSB-NEXT: sb
Added: llvm/trunk/test/MC/Disassembler/ARM/armv8.5a-sb-thumb.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Disassembler/ARM/armv8.5a-sb-thumb.txt?rev=350299&view=auto
==============================================================================
--- llvm/trunk/test/MC/Disassembler/ARM/armv8.5a-sb-thumb.txt (added)
+++ llvm/trunk/test/MC/Disassembler/ARM/armv8.5a-sb-thumb.txt Thu Jan 3 04:09:12 2019
@@ -0,0 +1,9 @@
+# RUN: llvm-mc -triple=thumbv8 -mattr=+sb -disassemble < %s | FileCheck %s
+# RUN: llvm-mc -triple=thumbv8 -mattr=+v8.5a -disassemble < %s | FileCheck %s
+# RUN: llvm-mc -triple=thumbv8 -mattr=-sb -disassemble < %s 2>&1 | FileCheck %s --check-prefix=NOSB
+
+0xbf 0xf3 0x70 0x8f
+
+# CHECK: sb
+# NOSB: invalid instruction encoding
+# NOSB-NEXT: 0xbf 0xf3 0x70 0x8f
Removed: llvm/trunk/test/MC/Disassembler/ARM/armv8.5a-specctrl-thumb.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Disassembler/ARM/armv8.5a-specctrl-thumb.txt?rev=350298&view=auto
==============================================================================
--- llvm/trunk/test/MC/Disassembler/ARM/armv8.5a-specctrl-thumb.txt (original)
+++ llvm/trunk/test/MC/Disassembler/ARM/armv8.5a-specctrl-thumb.txt (removed)
@@ -1,9 +0,0 @@
-# RUN: llvm-mc -triple=thumbv8 -mattr=+specctrl -disassemble < %s | FileCheck %s
-# RUN: llvm-mc -triple=thumbv8 -mattr=+v8.5a -disassemble < %s | FileCheck %s
-# RUN: llvm-mc -triple=thumbv8 -mattr=-specctrl -disassemble < %s 2>&1 | FileCheck %s --check-prefix=NOSB
-
-0xbf 0xf3 0x70 0x8f
-
-# CHECK: sb
-# NOSB: invalid instruction encoding
-# NOSB-NEXT: 0xbf 0xf3 0x70 0x8f
Modified: llvm/trunk/unittests/Support/TargetParserTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/TargetParserTest.cpp?rev=350299&r1=350298&r2=350299&view=diff
==============================================================================
--- llvm/trunk/unittests/Support/TargetParserTest.cpp (original)
+++ llvm/trunk/unittests/Support/TargetParserTest.cpp Thu Jan 3 04:09:12 2019
@@ -584,7 +584,8 @@ TEST(TargetParserTest, ARMArchExtFeature
{"iwmmxt", "noiwmmxt", nullptr, nullptr},
{"iwmmxt2", "noiwmmxt2", nullptr, nullptr},
{"maverick", "maverick", nullptr, nullptr},
- {"xscale", "noxscale", nullptr, nullptr}};
+ {"xscale", "noxscale", nullptr, nullptr},
+ {"sb", "nosb", "+sb", "-sb"}};
for (unsigned i = 0; i < array_lengthof(ArchExt); i++) {
EXPECT_EQ(StringRef(ArchExt[i][2]), ARM::getArchExtFeature(ArchExt[i][0]));
More information about the llvm-commits
mailing list