Index: lib/Support/Triple.cpp =================================================================== --- lib/Support/Triple.cpp +++ lib/Support/Triple.cpp @@ -275,7 +275,7 @@ .Cases("v3", "v3m", isThumb ? Triple::UnknownArch : arch) .Cases("v4", "v4t", arch) .Cases("v5", "v5e", "v5t", "v5te", "v5tej", arch) - .Cases("v6", "v6j", "v6k", "v6m", arch) + .Cases("v6", "v6j", "v6k", "v6m", "v6sm", arch) .Cases("v6t2", "v6z", "v6zk", arch) .Cases("v7", "v7a", "v7em", "v7l", arch) .Cases("v7m", "v7r", "v7s", arch) @@ -412,6 +412,7 @@ .EndsWith("v7s", Triple::ARMSubArch_v7s) .EndsWith("v6", Triple::ARMSubArch_v6) .EndsWith("v6m", Triple::ARMSubArch_v6m) + .EndsWith("v6sm", Triple::ARMSubArch_v6m) .EndsWith("v6t2", Triple::ARMSubArch_v6t2) .EndsWith("v5", Triple::ARMSubArch_v5) .EndsWith("v5e", Triple::ARMSubArch_v5) @@ -1062,7 +1063,7 @@ .Case("v6j", "arm1136j-s") .Cases("v6z", "v6zk", "arm1176jzf-s") .Case("v6t2", "arm1156t2-s") - .Cases("v6m", "v6-m", "cortex-m0") + .Cases("v6m", "v6-m", "v6sm", "v6s-m", "cortex-m0") .Cases("v7", "v7a", "v7-a", "v7l", "v7-l", "cortex-a8") .Cases("v7s", "v7-s", "swift") .Cases("v7r", "v7-r", "cortex-r4") Index: test/CodeGen/ARM/build-attributes.ll =================================================================== --- test/CodeGen/ARM/build-attributes.ll +++ test/CodeGen/ARM/build-attributes.ll @@ -7,6 +7,8 @@ ; RUN: llc < %s -mtriple=armv6-linux-gnueabi -enable-sign-dependent-rounding-fp-math | FileCheck %s --check-prefix=DYN-ROUNDING ; RUN: llc < %s -mtriple=thumbv6m-linux-gnueabi | FileCheck %s --check-prefix=V6M ; RUN: llc < %s -mtriple=thumbv6m-linux-gnueabi -enable-unsafe-fp-math -disable-fp-elim -enable-no-infs-fp-math -enable-no-nans-fp-math -fp-contract=fast | FileCheck %s --check-prefix=V6M-FAST +; RUN: llc < %s -mtriple=thumbv6sm-linux-gnueabi | FileCheck %s --check-prefix=V6M +; RUN: llc < %s -mtriple=thumbv6sm-linux-gnueabi -enable-unsafe-fp-math -disable-fp-elim -enable-no-infs-fp-math -enable-no-nans-fp-math -fp-contract=fast | FileCheck %s --check-prefix=V6M-FAST ; RUN: llc < %s -mtriple=armv6-linux-gnueabi -mcpu=arm1156t2f-s | FileCheck %s --check-prefix=ARM1156T2F-S ; RUN: llc < %s -mtriple=armv6-linux-gnueabi -mcpu=arm1156t2f-s -enable-unsafe-fp-math -disable-fp-elim -enable-no-infs-fp-math -enable-no-nans-fp-math -fp-contract=fast | FileCheck %s --check-prefix=ARM1156T2F-S-FAST ; RUN: llc < %s -mtriple=armv6-linux-gnueabi -mcpu=arm1156t2f-s -enable-sign-dependent-rounding-fp-math | FileCheck %s --check-prefix=DYN-ROUNDING @@ -168,6 +170,8 @@ ; V6-FAST-NOT: .eabi_attribute 22 ; V6-FAST: .eabi_attribute 23, 1 +;; We emit 6, 12 for both v6-M and v6S-M, technically this is incorrect for +;; V6-M, however we don't model the OS extension so this is fine. ; V6M: .eabi_attribute 6, 12 ; V6M-NOT: .eabi_attribute 7 ; V6M: .eabi_attribute 8, 0 Index: test/MC/ARM/arm-thumb-cpus.s =================================================================== --- test/MC/ARM/arm-thumb-cpus.s +++ test/MC/ARM/arm-thumb-cpus.s @@ -16,6 +16,9 @@ @ RUN: not llvm-mc -show-encoding -triple=armv6m-eabi < %s 2>&1 \ @ RUN: | FileCheck %s --check-prefix=CHECK-THUMB-ONLY +@ RUN: not llvm-mc -show-encoding -triple=armv6sm-eabi < %s 2>&1 \ +@ RUN: | FileCheck %s --check-prefix=CHECK-THUMB-ONLY + @ Make sure correct diagnostics are given for CPUs without support for @ one or other of the execution states. .thumb