2014-05-05 07:13:15 +08:00
; RUN: llc -mtriple thumbv7--windows-itanium -filetype obj -o - %s \
2014-05-08 09:35:57 +08:00
; RUN: | llvm-readobj -r - | FileCheck %s -check-prefix CHECK-ITANIUM
2015-08-06 06:26:20 +08:00
; RUN: sed -e 's/"Dwarf Version"/"CodeView"/' %s \
; RUN: | llc -mtriple thumbv7--windows-msvc -filetype obj -o - \
2014-05-08 09:41:04 +08:00
; RUN: | llvm-readobj -r - | FileCheck %s -check-prefix CHECK-MSVC
2014-05-05 07:13:15 +08:00
; ModuleID = '/Users/compnerd/work/llvm/test/MC/ARM/reduced.c'
target datalayout = "e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:64-v128:64:128-a:0:32-n32-S64"
target triple = "thumbv7--windows-itanium"
2015-11-06 06:03:56 +08:00
define arm_aapcs_vfpcc void @function ( ) !dbg !1 {
2014-05-05 07:13:15 +08:00
entry:
ret void , !dbg !0
}
!llvm.dbg.cu = ! { !7 }
!llvm.module.flags = ! { !9 , !10 }
2015-04-30 00:38:44 +08:00
!0 = !DILocation ( line: 1 , scope: !1 )
2016-04-15 23:57:41 +08:00
!1 = distinct !DISubprogram ( name: "function" , line: 1 , isLocal: false , isDefinition: true , virtualIndex: 6 , isOptimized: false , unit: !7 , scopeLine: 1 , file: !2 , scope: !3 , type: !4 , variables: !6 )
2015-04-30 00:38:44 +08:00
!2 = !DIFile ( filename: "/Users/compnerd/work/llvm/test/MC/ARM/reduced.c" , directory: "/Users/compnerd/work/llvm" )
!3 = !DIFile ( filename: "/Users/compnerd/work/llvm/test/MC/ARM/reduced.c" , directory: "/Users/compnerd/work/llvm" )
!4 = !DISubroutineType ( types: !5 )
IR: Make metadata typeless in assembly
Now that `Metadata` is typeless, reflect that in the assembly. These
are the matching assembly changes for the metadata/value split in
r223802.
- Only use the `metadata` type when referencing metadata from a call
intrinsic -- i.e., only when it's used as a `Value`.
- Stop pretending that `ValueAsMetadata` is wrapped in an `MDNode`
when referencing it from call intrinsics.
So, assembly like this:
define @foo(i32 %v) {
call void @llvm.foo(metadata !{i32 %v}, metadata !0)
call void @llvm.foo(metadata !{i32 7}, metadata !0)
call void @llvm.foo(metadata !1, metadata !0)
call void @llvm.foo(metadata !3, metadata !0)
call void @llvm.foo(metadata !{metadata !3}, metadata !0)
ret void, !bar !2
}
!0 = metadata !{metadata !2}
!1 = metadata !{i32* @global}
!2 = metadata !{metadata !3}
!3 = metadata !{}
turns into this:
define @foo(i32 %v) {
call void @llvm.foo(metadata i32 %v, metadata !0)
call void @llvm.foo(metadata i32 7, metadata !0)
call void @llvm.foo(metadata i32* @global, metadata !0)
call void @llvm.foo(metadata !3, metadata !0)
call void @llvm.foo(metadata !{!3}, metadata !0)
ret void, !bar !2
}
!0 = !{!2}
!1 = !{i32* @global}
!2 = !{!3}
!3 = !{}
I wrote an upgrade script that handled almost all of the tests in llvm
and many of the tests in cfe (even handling many `CHECK` lines). I've
attached it (or will attach it in a moment if you're speedy) to PR21532
to help everyone update their out-of-tree testcases.
This is part of PR21532.
llvm-svn: 224257
2014-12-16 03:07:53 +08:00
!5 = ! { null }
!6 = ! { }
2016-04-15 23:57:41 +08:00
!7 = distinct !DICompileUnit ( language: D W _ L A N G _ C 99 , producer: "clang version 3.5.0" , isOptimized: false , emissionKind: F u l l D e b u g , file: !2 , enums: !6 , retainedTypes: !6 , globals: !6 , imports: !6 )
IR: Make metadata typeless in assembly
Now that `Metadata` is typeless, reflect that in the assembly. These
are the matching assembly changes for the metadata/value split in
r223802.
- Only use the `metadata` type when referencing metadata from a call
intrinsic -- i.e., only when it's used as a `Value`.
- Stop pretending that `ValueAsMetadata` is wrapped in an `MDNode`
when referencing it from call intrinsics.
So, assembly like this:
define @foo(i32 %v) {
call void @llvm.foo(metadata !{i32 %v}, metadata !0)
call void @llvm.foo(metadata !{i32 7}, metadata !0)
call void @llvm.foo(metadata !1, metadata !0)
call void @llvm.foo(metadata !3, metadata !0)
call void @llvm.foo(metadata !{metadata !3}, metadata !0)
ret void, !bar !2
}
!0 = metadata !{metadata !2}
!1 = metadata !{i32* @global}
!2 = metadata !{metadata !3}
!3 = metadata !{}
turns into this:
define @foo(i32 %v) {
call void @llvm.foo(metadata i32 %v, metadata !0)
call void @llvm.foo(metadata i32 7, metadata !0)
call void @llvm.foo(metadata i32* @global, metadata !0)
call void @llvm.foo(metadata !3, metadata !0)
call void @llvm.foo(metadata !{!3}, metadata !0)
ret void, !bar !2
}
!0 = !{!2}
!1 = !{i32* @global}
!2 = !{!3}
!3 = !{}
I wrote an upgrade script that handled almost all of the tests in llvm
and many of the tests in cfe (even handling many `CHECK` lines). I've
attached it (or will attach it in a moment if you're speedy) to PR21532
to help everyone update their out-of-tree testcases.
This is part of PR21532.
llvm-svn: 224257
2014-12-16 03:07:53 +08:00
!9 = ! { i32 2 , !"Dwarf Version" , i32 4 }
2015-03-04 01:24:31 +08:00
!10 = ! { i32 1 , !"Debug Info Version" , i32 3 }
2014-05-05 07:13:15 +08:00
2014-05-08 09:35:57 +08:00
; CHECK-ITANIUM: Relocations [
; CHECK-ITANIUM: Section {{.*}} .debug_info {
; CHECK-ITANIUM: 0x6 IMAGE_REL_ARM_SECREL .debug_abbrev
; CHECK-ITANIUM: 0xC IMAGE_REL_ARM_SECREL .debug_str
; CHECK-ITANIUM: 0x12 IMAGE_REL_ARM_SECREL .debug_str
; CHECK-ITANIUM: 0x16 IMAGE_REL_ARM_SECREL .debug_line
; CHECK-ITANIUM: }
; CHECK-ITANIUM: Section {{.*}}.debug_pubnames {
; CHECK-ITANIUM: 0x6 IMAGE_REL_ARM_SECREL .debug_info
; CHECK-ITANIUM: }
; CHECK-ITANIUM: ]
; CHECK-MSVC: Relocations [
; CHECK-MSVC: Section {{.*}} .debug$S {
2016-11-03 05:30:35 +08:00
; CHECK-MSVC: 0x64 IMAGE_REL_ARM_SECREL function
; CHECK-MSVC: 0x68 IMAGE_REL_ARM_SECTION function
; CHECK-MSVC: 0x80 IMAGE_REL_ARM_SECREL function
; CHECK-MSVC: 0x84 IMAGE_REL_ARM_SECTION function
2014-05-08 09:35:57 +08:00
; CHECK-MSVC: }
; CHECK-MSVC: ]
2014-05-05 07:13:15 +08:00