diff --git a/llvm/lib/Object/ELFObjectFile.cpp b/llvm/lib/Object/ELFObjectFile.cpp --- a/llvm/lib/Object/ELFObjectFile.cpp +++ b/llvm/lib/Object/ELFObjectFile.cpp @@ -538,9 +538,16 @@ case ARMBuildAttrs::v6K: Triple += "v6k"; break; - case ARMBuildAttrs::v7: - Triple += "v7"; + case ARMBuildAttrs::v7: { + Optional ArchProfileAttr = + Attributes.getAttributeValue(ARMBuildAttrs::CPU_arch_profile); + if (ArchProfileAttr.hasValue() && + ArchProfileAttr.getValue() == ARMBuildAttrs::MicroControllerProfile) + Triple += "v7m"; + else + Triple += "v7"; break; + } case ARMBuildAttrs::v6_M: Triple += "v6m"; break; diff --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v5t-subarch.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v5t-subarch.s --- a/llvm/test/tools/llvm-objdump/ELF/ARM/v5t-subarch.s +++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v5t-subarch.s @@ -1,4 +1,4 @@ -@ RUN: llvm-mc < %s -triple armv5t-elf -filetype=obj | llvm-objdump --triple=arm -d - | FileCheck %s +@ RUN: llvm-mc < %s -triple armv5t-elf -filetype=obj | llvm-objdump -d - | FileCheck %s .arch armv5t diff --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v5te-subarch.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v5te-subarch.s --- a/llvm/test/tools/llvm-objdump/ELF/ARM/v5te-subarch.s +++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v5te-subarch.s @@ -1,4 +1,4 @@ -@ RUN: llvm-mc < %s -triple armv5te-elf -filetype=obj | llvm-objdump --triple=arm -d - | FileCheck %s +@ RUN: llvm-mc < %s -triple armv5te-elf -filetype=obj | llvm-objdump -d - | FileCheck %s .arch armv5te diff --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v5tej-subarch.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v5tej-subarch.s --- a/llvm/test/tools/llvm-objdump/ELF/ARM/v5tej-subarch.s +++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v5tej-subarch.s @@ -1,4 +1,4 @@ -@ RUN: llvm-mc < %s -triple armv5tej-elf -filetype=obj | llvm-objdump --triple=arm -d - | FileCheck %s +@ RUN: llvm-mc < %s -triple armv5tej-elf -filetype=obj | llvm-objdump -d - | FileCheck %s bxj: bxj r0 diff --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v6-neg-subfeatures.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v6-neg-subfeatures.s --- a/llvm/test/tools/llvm-objdump/ELF/ARM/v6-neg-subfeatures.s +++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v6-neg-subfeatures.s @@ -1,4 +1,4 @@ -@ RUN: llvm-mc < %s -triple armv6 -mattr=+vfp2 -filetype=obj | llvm-objdump --triple=arm -d - | FileCheck %s +@ RUN: llvm-mc < %s -triple armv6 -mattr=+vfp2 -filetype=obj | llvm-objdump -d - | FileCheck %s .eabi_attribute Tag_FP_arch, 1 // VFP2 diff --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v6-subarch.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v6-subarch.s --- a/llvm/test/tools/llvm-objdump/ELF/ARM/v6-subarch.s +++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v6-subarch.s @@ -1,4 +1,4 @@ -@ RUN: llvm-mc < %s -triple armv6-elf -filetype=obj | llvm-objdump --triple=arm -d - | FileCheck %s +@ RUN: llvm-mc < %s -triple armv6-elf -filetype=obj | llvm-objdump -d - | FileCheck %s .arch armv6 diff --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v6-subfeatures.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v6-subfeatures.s --- a/llvm/test/tools/llvm-objdump/ELF/ARM/v6-subfeatures.s +++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v6-subfeatures.s @@ -1,4 +1,4 @@ -@ RUN: llvm-mc < %s -triple armv6 -mattr=+vfp2 -filetype=obj | llvm-objdump --triple=arm -d - | FileCheck %s +@ RUN: llvm-mc < %s -triple armv6 -mattr=+vfp2 -filetype=obj | llvm-objdump -d - | FileCheck %s .eabi_attribute Tag_FP_arch, 2 // VFP2 diff --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v6k-subarch.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v6k-subarch.s --- a/llvm/test/tools/llvm-objdump/ELF/ARM/v6k-subarch.s +++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v6k-subarch.s @@ -1,4 +1,4 @@ -@ RUN: llvm-mc < %s -triple armv6k-elf -filetype=obj | llvm-objdump --triple=arm -d - | FileCheck %s +@ RUN: llvm-mc < %s -triple armv6k-elf -filetype=obj | llvm-objdump -d - | FileCheck %s .arch armv6k diff --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v6m-subarch.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v6m-subarch.s --- a/llvm/test/tools/llvm-objdump/ELF/ARM/v6m-subarch.s +++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v6m-subarch.s @@ -1,4 +1,4 @@ -@ RUN: llvm-mc < %s -triple armv6m-elf -filetype=obj | llvm-objdump --triple=thumb -d - | FileCheck %s +@ RUN: llvm-mc < %s -triple armv6m-elf -filetype=obj | llvm-objdump -d - | FileCheck %s .arch armv6m diff --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v6t2-subarch.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v6t2-subarch.s --- a/llvm/test/tools/llvm-objdump/ELF/ARM/v6t2-subarch.s +++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v6t2-subarch.s @@ -1,4 +1,4 @@ -@ RUN: llvm-mc < %s -triple armv6t2-elf -filetype=obj | llvm-objdump --triple=thumb -d - | FileCheck %s +@ RUN: llvm-mc < %s -triple armv6t2-elf -filetype=obj | llvm-objdump -d - | FileCheck %s .arch armv6t2 diff --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v7a-neg-subfeature.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v7a-neg-subfeature.s --- a/llvm/test/tools/llvm-objdump/ELF/ARM/v7a-neg-subfeature.s +++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v7a-neg-subfeature.s @@ -1,5 +1,4 @@ -@ RUN: llvm-mc < %s -triple armv7a -mattr=+vfp3,+neon,+fp16,+hwdiv-arm,+hwdiv -filetype=obj | llvm-objdump --triple=arm -d - | FileCheck %s -@ RUN: llvm-mc < %s -triple armv7a -mattr=+vfp3,+neon,+fp16,+hwdiv-arm,+hwdiv -filetype=obj | llvm-objdump --triple=thumb -d - | FileCheck %s --check-prefix=CHECK-THUMB +@ RUN: llvm-mc < %s -triple armv7a -mattr=+vfp3,+neon,+fp16,+hwdiv-arm,+hwdiv -filetype=obj | llvm-objdump -d - | FileCheck %s .eabi_attribute Tag_FP_arch, 0 // disallow vfp @@ -15,6 +14,7 @@ @CHECK-LABEL: vfp3 @CHECK-NOT: 00 0a b6 ee vmov.f32 s0, #5.000000e-01 +@CHECK: unknown neon: vmla.f32 d0, d1, d2 @@ -28,6 +28,7 @@ @CHECK-LABEL: fp16 @CHECK-NOT: 02 07 b6 f3 vcvt.f32.f16 q0, d2 +@CHECK: unknown div_arm: udiv r0, r1, r2 @@ -41,4 +42,5 @@ udiv r0, r1, r2 @CHECK-LABEL: div_thumb -@CHECK-THUMB-NOT: b1 fb f2 f0 udiv r0, r1, r2 +@CHECK-NOT: b1 fb f2 f0 udiv r0, r1, r2 +@CHECK: unknown diff --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v7a-subfeature.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v7a-subfeature.s --- a/llvm/test/tools/llvm-objdump/ELF/ARM/v7a-subfeature.s +++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v7a-subfeature.s @@ -1,4 +1,4 @@ -@ RUN: llvm-mc < %s -triple armv7a -mattr=+vfp3,+neon,+fp16,+hwdiv-arm -filetype=obj | llvm-objdump --triple=arm -d - | FileCheck %s +@ RUN: llvm-mc < %s -triple armv7a -mattr=+vfp3,+neon,+fp16,+hwdiv-arm -filetype=obj | llvm-objdump -d - | FileCheck %s .eabi_attribute Tag_FP_arch, 3 // VFP3 .eabi_attribute Tag_Advanced_SIMD_arch, 2 // SIMDv1 with fp16 diff --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v7m-neg-subfeatures.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v7m-neg-subfeatures.s --- a/llvm/test/tools/llvm-objdump/ELF/ARM/v7m-neg-subfeatures.s +++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v7m-neg-subfeatures.s @@ -1,4 +1,4 @@ -@ RUN: llvm-mc < %s -triple armv7m -mattr=+vfp4 -filetype=obj | llvm-objdump --triple=thumb -d - | FileCheck %s +@ RUN: llvm-mc < %s -triple armv7m -mattr=+vfp4 -filetype=obj | llvm-objdump -d - | FileCheck %s .eabi_attribute Tag_CPU_arch, 10 // v7 .eabi_attribute Tag_FP_arch, 0 // VFP4 diff --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v7m-subarch.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v7m-subarch.s --- a/llvm/test/tools/llvm-objdump/ELF/ARM/v7m-subarch.s +++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v7m-subarch.s @@ -1,4 +1,4 @@ -@ RUN: llvm-mc < %s -triple armv7m-elf -filetype=obj | llvm-objdump --triple=thumb -d - | FileCheck %s +@ RUN: llvm-mc < %s -triple armv7m-elf -filetype=obj | llvm-objdump -d - | FileCheck %s .arch armv7m diff --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v7m-subfeatures.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v7m-subfeatures.s --- a/llvm/test/tools/llvm-objdump/ELF/ARM/v7m-subfeatures.s +++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v7m-subfeatures.s @@ -1,4 +1,4 @@ -@ RUN: llvm-mc < %s -triple armv7m -mattr=+vfp4 -filetype=obj | llvm-objdump --triple=thumb -d - | FileCheck %s +@ RUN: llvm-mc < %s -triple armv7m -mattr=+vfp4 -filetype=obj | llvm-objdump -d - | FileCheck %s .eabi_attribute Tag_CPU_arch, 10 // v7 .eabi_attribute Tag_CPU_arch_profile, 0x4D // 'M' profile diff --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v8a-subarch.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v8a-subarch.s --- a/llvm/test/tools/llvm-objdump/ELF/ARM/v8a-subarch.s +++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v8a-subarch.s @@ -1,4 +1,4 @@ -@ RUN: llvm-mc < %s -triple armv8a-elf -filetype=obj | llvm-objdump --triple=arm -d - | FileCheck %s +@ RUN: llvm-mc < %s -triple armv8a-elf -filetype=obj | llvm-objdump -d - | FileCheck %s .arch armv8a diff --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v8r-subarch.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v8r-subarch.s --- a/llvm/test/tools/llvm-objdump/ELF/ARM/v8r-subarch.s +++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v8r-subarch.s @@ -1,4 +1,4 @@ -@ RUN: llvm-mc < %s -triple armv8r-elf -filetype=obj | llvm-objdump --triple=arm -d - | FileCheck %s +@ RUN: llvm-mc < %s -triple armv8r-elf -filetype=obj | llvm-objdump -d - | FileCheck %s .eabi_attribute Tag_CPU_arch, 15 // v8_R .eabi_attribute Tag_CPU_arch_profile, 0x52 // 'R' profile