diff options
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/lib/Target/ARM/ARMAsmPrinter.cpp | 3 | ||||
-rw-r--r-- | llvm/test/CodeGen/ARM/interwork.ll | 23 | ||||
-rw-r--r-- | llvm/test/DebugInfo/ARM/header.ll | 5 |
3 files changed, 28 insertions, 3 deletions
diff --git a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp index 2a20c4789fa..8d44a26b1db 100644 --- a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp +++ b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp @@ -74,8 +74,9 @@ void ARMAsmPrinter::EmitFunctionEntryLabel() { if (AFI->isThumbFunction()) { OutStreamer->EmitAssemblerFlag(MCAF_Code16); OutStreamer->EmitThumbFunc(CurrentFnSym); + } else { + OutStreamer->EmitAssemblerFlag(MCAF_Code32); } - OutStreamer->EmitLabel(CurrentFnSym); } diff --git a/llvm/test/CodeGen/ARM/interwork.ll b/llvm/test/CodeGen/ARM/interwork.ll new file mode 100644 index 00000000000..9a75cdea6fe --- /dev/null +++ b/llvm/test/CodeGen/ARM/interwork.ll @@ -0,0 +1,23 @@ +; One file may have multiple functions targeted at different (ARM, Thumb) +; instruction sets. Passing this information to the linker and the assembler +; is done through the ".code 16" and ".code 32" directives. +; +; RUN: llc -mtriple=arm-arm-none-eabi %s -o - | FileCheck %s + +define void @ft() #0 { +; CHECK: .code 16 +; CHECK: .thumb_func +; CHECK-LABEL: ft: +entry: + ret void +} + +define void @fz() #1 { +; CHECK: .code 32 +; CHECK-LABEL: fz: +entry: + ret void +} + +attributes #0 = { "target-features"="+thumb-mode" } +attributes #1 = { "target-features"="-thumb-mode" } diff --git a/llvm/test/DebugInfo/ARM/header.ll b/llvm/test/DebugInfo/ARM/header.ll index 96a5cff73bc..5bc3b55a4bd 100644 --- a/llvm/test/DebugInfo/ARM/header.ll +++ b/llvm/test/DebugInfo/ARM/header.ll @@ -8,7 +8,8 @@ ; CHECK-NEXT: .syntax unified ; CHECK-NEXT: .globl _f ; CHECK-NEXT: .p2align 2 -; CHECK-NEXT: _f: @ @f +; CHECK-NEXT: .code 32 @ @f +; CHECK-NEXT: _f: ; CHECK: .section __DWARF,__debug_str,regular,debug @@ -21,7 +22,7 @@ define void @f() !dbg !4 { !0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "foo", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, retainedTypes: !2, globals: !2, imports: !2) !1 = !DIFile(filename: "/foo/test.c", directory: "/foo") !2 = !{} -!4 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 1, type: !5, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !2) +!4 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 2, type: !5, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !2) !5 = !DISubroutineType(types: !6) !6 = !{null} !7 = !{i32 2, !"Dwarf Version", i32 4} |