[Stackmaps] Update the stackmap format to use 64-bit relocations for the function address and properly align all entries.

This commit updates the stackmap format to version 1 to indicate the
reorganizaion of several fields. This was done in order to align stackmap
entries to their natural alignment and to minimize padding.

Fixes <rdar://problem/16005902>

llvm-svn: 205254
diff --git a/llvm/test/CodeGen/X86/stackmap-liveness.ll b/llvm/test/CodeGen/X86/stackmap-liveness.ll
index 570e373..9ce5254 100644
--- a/llvm/test/CodeGen/X86/stackmap-liveness.ll
+++ b/llvm/test/CodeGen/X86/stackmap-liveness.ll
@@ -6,17 +6,23 @@
 
 ; CHECK-LABEL:  .section  __LLVM_STACKMAPS,__llvm_stackmaps
 ; CHECK-NEXT:   __LLVM_StackMaps:
-; CHECK-NEXT:   .long 0
+; Header
+; CHECK-NEXT:   .byte 1
+; CHECK-NEXT:   .byte 0
+; CHECK-NEXT:   .short 0
 ; Num Functions
 ; CHECK-NEXT:   .long 2
-; CHECK-NEXT:   .long _stackmap_liveness
-; CHECK-NEXT:   .long 8
-; CHECK-NEXT:   .long _mixed_liveness
-; CHECK-NEXT:   .long 8
 ; Num LargeConstants
 ; CHECK-NEXT:   .long   0
 ; Num Callsites
 ; CHECK-NEXT:   .long   5
+
+; Functions and stack size
+; CHECK-NEXT:   .quad _stackmap_liveness
+; CHECK-NEXT:   .quad 8
+; CHECK-NEXT:   .quad _mixed_liveness
+; CHECK-NEXT:   .quad 8
+
 define void @stackmap_liveness() {
 entry:
   %a1 = call <2 x double> asm sideeffect "", "={xmm2}"() nounwind
@@ -24,13 +30,19 @@
 ; CHECK-LABEL:  .long L{{.*}}-_stackmap_liveness
 ; CHECK-NEXT:   .short  0
 ; CHECK-NEXT:   .short  0
+; Padding
+; CHECK-NEXT:   .short  0
 ; Num LiveOut Entries: 0
 ; CHECK-NEXT:   .short  0
+; Align
+; CHECK-NEXT:   .align  3
 
 ; StackMap 1 (stackmap liveness information enabled)
 ; STACK-LABEL:  .long L{{.*}}-_stackmap_liveness
 ; STACK-NEXT:   .short  0
 ; STACK-NEXT:   .short  0
+; Padding
+; STACK-NEXT:   .short  0
 ; Num LiveOut Entries: 2
 ; STACK-NEXT:   .short  2
 ; LiveOut Entry 1: %RSP (8 bytes)
@@ -41,13 +53,19 @@
 ; STACK-NEXT:   .short  19
 ; STACK-NEXT:   .byte 0
 ; STACK-NEXT:   .byte 16
+; Align
+; STACK-NEXT:   .align  3
 
 ; StackMap 1 (patchpoint liveness information enabled)
 ; PATCH-LABEL:  .long L{{.*}}-_stackmap_liveness
 ; PATCH-NEXT:   .short  0
 ; PATCH-NEXT:   .short  0
+; Padding
+; PATCH-NEXT:   .short  0
 ; Num LiveOut Entries: 0
 ; PATCH-NEXT:   .short  0
+; Align
+; PATCH-NEXT:   .align  3
   call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 1, i32 5)
   %a2 = call i64 asm sideeffect "", "={r8}"() nounwind
   %a3 = call i8 asm sideeffect "", "={ah}"() nounwind
@@ -58,16 +76,22 @@
 ; CHECK-LABEL:  .long L{{.*}}-_stackmap_liveness
 ; CHECK-NEXT:   .short  0
 ; CHECK-NEXT:   .short  0
+; Padding
+; CHECK-NEXT:   .short  0
 ; Num LiveOut Entries: 0
 ; CHECK-NEXT:   .short  0
+; Align
+; CHECK-NEXT:   .align  3
 
 ; StackMap 2 (stackmap liveness information enabled)
 ; STACK-LABEL:  .long L{{.*}}-_stackmap_liveness
 ; STACK-NEXT:   .short  0
 ; STACK-NEXT:   .short  0
+; Padding
+; STACK-NEXT:   .short  0
 ; Num LiveOut Entries: 6
 ; STACK-NEXT:   .short  6
-; LiveOut Entry 2: %RAX (1 bytes) --> %AL or %AH
+; LiveOut Entry 1: %RAX (1 bytes) --> %AL or %AH
 ; STACK-NEXT:   .short  0
 ; STACK-NEXT:   .byte 0
 ; STACK-NEXT:   .byte 1
@@ -75,29 +99,35 @@
 ; STACK-NEXT:   .short  7
 ; STACK-NEXT:   .byte 0
 ; STACK-NEXT:   .byte 8
-; LiveOut Entry 2: %R8 (8 bytes)
+; LiveOut Entry 3: %R8 (8 bytes)
 ; STACK-NEXT:   .short  8
 ; STACK-NEXT:   .byte 0
 ; STACK-NEXT:   .byte 8
-; LiveOut Entry 2: %YMM0 (32 bytes)
+; LiveOut Entry 4: %YMM0 (32 bytes)
 ; STACK-NEXT:   .short  17
 ; STACK-NEXT:   .byte 0
 ; STACK-NEXT:   .byte 32
-; LiveOut Entry 2: %YMM1 (32 bytes)
+; LiveOut Entry 5: %YMM1 (32 bytes)
 ; STACK-NEXT:   .short  18
 ; STACK-NEXT:   .byte 0
 ; STACK-NEXT:   .byte 32
-; LiveOut Entry 2: %YMM2 (16 bytes) --> %XMM2
+; LiveOut Entry 6: %YMM2 (16 bytes) --> %XMM2
 ; STACK-NEXT:   .short  19
 ; STACK-NEXT:   .byte 0
 ; STACK-NEXT:   .byte 16
+; Align
+; STACK-NEXT:   .align  3
 
 ; StackMap 2 (patchpoint liveness information enabled)
 ; PATCH-LABEL:  .long L{{.*}}-_stackmap_liveness
 ; PATCH-NEXT:   .short  0
 ; PATCH-NEXT:   .short  0
+; Padding
+; PATCH-NEXT:   .short  0
 ; Num LiveOut Entries: 0
 ; PATCH-NEXT:   .short  0
+; Align
+; PATCH-NEXT:   .align  3
   call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 2, i32 5)
   call void asm sideeffect "", "{r8},{ah},{ymm0},{ymm1}"(i64 %a2, i8 %a3, <4 x double> %a4, <4 x double> %a5) nounwind
 
@@ -105,16 +135,22 @@
 ; CHECK-LABEL:  .long L{{.*}}-_stackmap_liveness
 ; CHECK-NEXT:   .short  0
 ; CHECK-NEXT:   .short  0
+; Padding
+; CHECK-NEXT:   .short  0
 ; Num LiveOut Entries: 0
 ; CHECK-NEXT:   .short  0
+; Align
+; CHECK-NEXT:   .align  3
 
 ; StackMap 3 (stackmap liveness information enabled)
 ; STACK-LABEL:  .long L{{.*}}-_stackmap_liveness
 ; STACK-NEXT:   .short  0
 ; STACK-NEXT:   .short  0
+; Padding
+; STACK-NEXT:   .short  0
 ; Num LiveOut Entries: 2
 ; STACK-NEXT:   .short  2
-; LiveOut Entry 2: %RSP (8 bytes)
+; LiveOut Entry 1: %RSP (8 bytes)
 ; STACK-NEXT:   .short  7
 ; STACK-NEXT:   .byte 0
 ; STACK-NEXT:   .byte 8
@@ -122,13 +158,19 @@
 ; STACK-NEXT:   .short  19
 ; STACK-NEXT:   .byte 0
 ; STACK-NEXT:   .byte 16
+; Align
+; STACK-NEXT:   .align  3
 
 ; StackMap 3 (patchpoint liveness information enabled)
 ; PATCH-LABEL:  .long L{{.*}}-_stackmap_liveness
 ; PATCH-NEXT:   .short  0
 ; PATCH-NEXT:   .short  0
+; Padding
+; PATCH-NEXT:   .short  0
 ; Num LiveOut Entries: 0
 ; PATCH-NEXT:   .short  0
+; Align
+; PATCH-NEXT:   .align  3
   call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 3, i32 5)
   call void asm sideeffect "", "{xmm2}"(<2 x double> %a1) nounwind
   ret void
@@ -141,39 +183,58 @@
 ; STACK-LABEL:  .long L{{.*}}-_mixed_liveness
 ; STACK-NEXT:   .short  0
 ; STACK-NEXT:   .short  0
+; Padding
+; STACK-NEXT:   .short  0
 ; Num LiveOut Entries: 1
 ; STACK-NEXT:   .short  1
 ; LiveOut Entry 1: %YMM2 (16 bytes) --> %XMM2
 ; STACK-NEXT:   .short  19
 ; STACK-NEXT:   .byte 0
 ; STACK-NEXT:   .byte 16
+; Align
+; STACK-NEXT:   .align  3
+
+
 ; StackMap 5 (stackmap liveness information enabled)
 ; STACK-LABEL:  .long L{{.*}}-_mixed_liveness
 ; STACK-NEXT:   .short  0
 ; STACK-NEXT:   .short  0
+; Padding
+; STACK-NEXT:   .short  0
 ; Num LiveOut Entries: 0
 ; STACK-NEXT:   .short  0
+; Align
+; STACK-NEXT:   .align  3
 
 ; StackMap 4 (patchpoint liveness information enabled)
 ; PATCH-LABEL:  .long L{{.*}}-_mixed_liveness
 ; PATCH-NEXT:   .short  0
 ; PATCH-NEXT:   .short  0
+; Padding
+; PATCH-NEXT:   .short  0
 ; Num LiveOut Entries: 0
 ; PATCH-NEXT:   .short  0
+; Align
+; PATCH-NEXT:   .align  3
+
 ; StackMap 5 (patchpoint liveness information enabled)
 ; PATCH-LABEL:  .long L{{.*}}-_mixed_liveness
 ; PATCH-NEXT:   .short  0
 ; PATCH-NEXT:   .short  0
+; Padding
+; PATCH-NEXT:   .short  0
 ; Num LiveOut Entries: 2
 ; PATCH-NEXT:   .short  2
 ; LiveOut Entry 1: %RSP (8 bytes)
 ; PATCH-NEXT:   .short  7
 ; PATCH-NEXT:   .byte 0
 ; PATCH-NEXT:   .byte 8
-; LiveOut Entry 1: %YMM2 (16 bytes) --> %XMM2
+; LiveOut Entry 2: %YMM2 (16 bytes) --> %XMM2
 ; PATCH-NEXT:   .short  19
 ; PATCH-NEXT:   .byte 0
 ; PATCH-NEXT:   .byte 16
+; Align
+; PATCH-NEXT:   .align  3
   call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 4, i32 5)
   call anyregcc void (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.void(i64 5, i32 0, i8* null, i32 0)
   call void asm sideeffect "", "{xmm2}"(<2 x double> %a1) nounwind