Add Cortex-M0 support. It's a ARMv6m device (no ARM mode) with some 32-bit
authorEvan Cheng <evan.cheng@apple.com>
Wed, 11 Aug 2010 06:30:38 +0000 (06:30 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Wed, 11 Aug 2010 06:30:38 +0000 (06:30 +0000)
instructions: dmb, dsb, isb, msr, and mrs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110786 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARM.td
test/CodeGen/Thumb/barrier.ll

index d1e84cdd4a7051780eab84e1e79f0fbbc0146c77..b51b9d40e8e3ae7028064a765a2423f3a2c6c78c 100644 (file)
@@ -127,6 +127,9 @@ def : Processor<"arm1176jzf-s",     ARMV6Itineraries, [ArchV6, FeatureVFP2]>;
 def : Processor<"mpcorenovfp",      ARMV6Itineraries, [ArchV6]>;
 def : Processor<"mpcore",           ARMV6Itineraries, [ArchV6, FeatureVFP2]>;
 
+// V6M Processors.
+def : Processor<"cortex-m0",        ARMV6Itineraries, [ArchV6, FeatureDB]>;
+
 // V6T2 Processors.
 def : Processor<"arm1156t2-s",     ARMV6Itineraries,
                  [ArchV6T2, FeatureThumb2]>;
@@ -141,6 +144,8 @@ def : Processor<"cortex-a8",        CortexA8Itineraries,
 def : Processor<"cortex-a9",        CortexA9Itineraries,
                 [ArchV7A, FeatureThumb2, FeatureNEON, FeatureT2ExtractPack,
                  FeatureDB]>;
+
+// V7M Processors.
 def : ProcNoItin<"cortex-m3",       [ArchV7M, FeatureThumb2, FeatureHWDiv,
                                      FeatureDB]>;
 def : ProcNoItin<"cortex-m4",       [ArchV7M, FeatureThumb2, FeatureHWDiv,
index 44a3f46a1815d47d0c868997c4f6aaa3d0e8b6a5..0081837054a1383ca3061a850403c8eafceb1fab 100644 (file)
@@ -1,17 +1,24 @@
-; RUN: llc < %s -march=thumb -mattr=+v6  | FileCheck %s
+; RUN: llc < %s -march=thumb -mattr=+v6      | FileCheck %s -check-prefix=V6
+; RUN: llc < %s -march=thumb -mcpu=cortex-m0 | FileCheck %s -check-prefix=M0
 
 declare void @llvm.memory.barrier( i1 , i1 , i1 , i1 , i1 )
 
 define void @t1() {
-; CHECK: t1:
-; CHECK: blx {{_*}}sync_synchronize
+; V6: t1:
+; V6: blx {{_*}}sync_synchronize
+
+; M0: t1:
+; M0: dsb
   call void @llvm.memory.barrier( i1 false, i1 false, i1 false, i1 true, i1 true )
   ret void
 }
 
 define void @t2() {
-; CHECK: t2:
-; CHECK: blx {{_*}}sync_synchronize
+; V6: t2:
+; V6: blx {{_*}}sync_synchronize
+
+; M0: t2:
+; M0: dmb
   call void @llvm.memory.barrier( i1 false, i1 false, i1 false, i1 true, i1 false )
   ret void
 }